<?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>73235</bug_id>
          
          <creation_ts>2011-11-28 11:30:50 -0800</creation_ts>
          <short_desc>[Chromium] Support adding/removing page overlay to WebView</short_desc>
          <delta_ts>2011-12-02 00:56:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="xiyuan">xiyuan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>estade</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>pfeldman</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>510013</commentid>
    <comment_count>0</comment_count>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-28 11:30:50 -0800</bug_when>
    <thetext>Background dimming when a tab modal dialog shows up does not work when WebKit accelerated compositing is on (http://crbug.com/103386). The best way to fix the problem across platforms would probably be implementing the dimming as a PageOverlay (introduced in https://bugs.webkit.org/show_bug.cgi?id=62149). To do that, we need to support multiple page overlays in WebViewImpl and open an API to add/remove page overlays.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510018</commentid>
    <comment_count>1</comment_count>
      <attachid>116793</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-28 11:37:56 -0800</bug_when>
    <thetext>Created attachment 116793
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510023</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 11:42:19 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510116</commentid>
    <comment_count>3</comment_count>
      <attachid>116793</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 13:26:36 -0800</bug_when>
    <thetext>Comment on attachment 116793
Proposed patch.

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

&gt; Source/WebKit/chromium/public/WebView.h:416
&gt; +    virtual void addWebPageOverlayClient(WebPageOverlayClient*) = 0;
&gt; +    virtual void removeWebPageOverlayClient(WebPageOverlayClient*) = 0;

the function names here look like they are just manipulating clients, but these calls actually add and remove overlays which change the graphical appearance of this WebView. could you rename these be in terms of adding/removing Overlays instead of clients?

the visual appearance depends on the order in which the overlays are drawn. what should the rendered order be if multiple overlays are added? how should they interact with the inspector&apos;s overlay? should the user of this API be able to control the order of their overlays? these things need to be clearly specified and documented in this header

&gt; Source/WebKit/chromium/src/PageOverlay.cpp:110
&gt; +    explicit OverlayGraphicsLayerClientImpl(WebViewImpl* webViewImpl, WebPageOverlayClient* pageOverlayClient)

no need for explicit here, that&apos;s only needed for 1-arg constructors

&gt; Source/WebKit/chromium/src/PageOverlayList.cpp:91
&gt; +    return notFound;

where is notFound defined?

&gt; Source/WebKit/chromium/src/PageOverlayList.h:45
&gt; +    ~PageOverlayList() { }

can you define this d&apos;tor in the .cpp, please? the d&apos;tor for Vector&lt;&gt; is pretty big

&gt; Source/WebKit/chromium/src/PageOverlayList.h:58
&gt; +    PageOverlayList(WebViewImpl*);

explicit please

&gt; Source/WebKit/chromium/src/PageOverlayList.h:62
&gt; +    Vector&lt;OwnPtr&lt;PageOverlay&gt;, 2&gt; m_pageOverlays;

can you typedef this type? any iterators over this type will have to use this template string exactly (including the inline capacity)

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:286
&gt;  void WebDevToolsAgentImpl::highlight()
&gt;  {
&gt; -    m_webViewImpl-&gt;setPageOverlayClient(this);
&gt; +    m_webViewImpl-&gt;addWebPageOverlayClient(this);
&gt;  }

i suspect that this will lead to z-order fighting between the inspector highlights and any client-specified overlays. what order should they render in? how can we keep the order consistent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510117</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 13:27:23 -0800</bug_when>
    <thetext>What&apos;s the intended rendering if there is a page overlay and the inspector is attempting to draw overlays? This patch puts the two into the same list, where they&apos;ll potentially fight for draw order.  I wonder if we should keep them separate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510889</commentid>
    <comment_count>5</comment_count>
      <attachid>116793</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-29 10:23:12 -0800</bug_when>
    <thetext>Comment on attachment 116793
Proposed patch.

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

&gt;&gt; Source/WebKit/chromium/public/WebView.h:416

&gt; 
&gt; the function names here look like they are just manipulating clients, but these calls actually add and remove overlays which change the graphical appearance of this WebView. could you rename these be in terms of adding/removing Overlays instead of clients?
&gt; 
&gt; the visual appearance depends on the order in which the overlays are drawn. what should the rendered order be if multiple overlays are added? how should they interact with the inspector&apos;s overlay? should the user of this API be able to control the order of their overlays? these things need to be clearly specified and documented in this header

Renamed functions to addWebPageOverlay/removeWebPageOverlay and added comments per suggestion.

Z-order of added overlays is a problem and you are right that we should resolve that since these are in public API. I have added a new method of WebPageOverlayClient so that a client can provide a z-order number and we used to decide painting order in PageOverlayList::addClient.

&gt;&gt; Source/WebKit/chromium/src/PageOverlay.cpp:110
&gt;&gt; +    explicit OverlayGraphicsLayerClientImpl(WebViewImpl* webViewImpl, WebPageOverlayClient* pageOverlayClient)
&gt; 
&gt; no need for explicit here, that&apos;s only needed for 1-arg constructors

Done.

&gt;&gt; Source/WebKit/chromium/src/PageOverlayList.cpp:91
&gt;&gt; +    return notFound;
&gt; 
&gt; where is notFound defined?

Changed to WTF::notFound to be more clear.

&gt;&gt; Source/WebKit/chromium/src/PageOverlayList.h:45
&gt;&gt; +    ~PageOverlayList() { }
&gt; 
&gt; can you define this d&apos;tor in the .cpp, please? the d&apos;tor for Vector&lt;&gt; is pretty big

Done.

&gt;&gt; Source/WebKit/chromium/src/PageOverlayList.h:58
&gt;&gt; +    PageOverlayList(WebViewImpl*);
&gt; 
&gt; explicit please

Done

&gt;&gt; Source/WebKit/chromium/src/PageOverlayList.h:62
&gt;&gt; +    Vector&lt;OwnPtr&lt;PageOverlay&gt;, 2&gt; m_pageOverlays;
&gt; 
&gt; can you typedef this type? any iterators over this type will have to use this template string exactly (including the inline capacity)

Done.

&gt;&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:286
&gt;&gt;  }
&gt; 
&gt; i suspect that this will lead to z-order fighting between the inspector highlights and any client-specified overlays. what order should they render in? how can we keep the order consistent?

You are right. They will fight and devtools would always win since it will update its overlay contents more frequently. I have made overlay client to provide a z-order number and we could use that to have a consistent painting order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510890</commentid>
    <comment_count>6</comment_count>
      <attachid>116995</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-29 10:24:06 -0800</bug_when>
    <thetext>Created attachment 116995
Updated patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510892</commentid>
    <comment_count>7</comment_count>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-29 10:26:29 -0800</bug_when>
    <thetext>Change updated.

Acutally, I found that having multiple overlay layers seems unnecessary since we are always re-painting all the overlay clients. I am thinking maybe I should get rid of the PageOverlayList and changing PageOverlay to support multiple clients. What do you guys think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511115</commentid>
    <comment_count>8</comment_count>
      <attachid>116995</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-11-29 14:38:16 -0800</bug_when>
    <thetext>Comment on attachment 116995
Updated patch 1

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

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:2067
&gt; +            viewImpl()-&gt;pageOverlays()-&gt;paintWebFrame(gc);

I think it might worth noting that curently in non-composited case pageOverlay does not work correctly. It is possible that when paintWithContext is called only a part of page was invalidated (dirtyRect?), so pageOverlay can only paint in this part. 
E.g. if you run something like

var d = document.createElement(&quot;div&quot;); document.body.appendChild(d);  d.style.height = &quot;100px&quot;; d.style.width = &quot;500px&quot;; d.textContent = &quot;some text&quot;; d.style.position = &quot;absolute&quot;;
var left = 0; function upd() {left += 5; d.style.left = left + &quot;px&quot;; setTimeout(upd.bind(this), 1000)} 
upd();

in inspector console and try to highlight this div from inspector, it will correctly highlight moving div, but the tooltip with sizes will not be redrawn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511123</commentid>
    <comment_count>9</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-11-29 14:46:49 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Change updated.
&gt; 
&gt; Acutally, I found that having multiple overlay layers seems unnecessary since we are always re-painting all the overlay clients. I am thinking maybe I should get rid of the PageOverlayList and changing PageOverlay to support multiple clients. What do you guys think?

Maybe PageOverlay::update() should have different behavior for dimming vs. inspector.
Why do you need to invalidate your dimming in each WebViewImpl::composite call?
Inspector needs invalidating on each composite because highlighted element might have moved, but I am not sure you ever need to invalidate dimming layer at all. 

Is that performance critical? James, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511143</commentid>
    <comment_count>10</comment_count>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-29 15:09:59 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; Change updated.
&gt; &gt; 
&gt; &gt; Acutally, I found that having multiple overlay layers seems unnecessary since we are always re-painting all the overlay clients. I am thinking maybe I should get rid of the PageOverlayList and changing PageOverlay to support multiple clients. What do you guys think?
&gt; 
&gt; Maybe PageOverlay::update() should have different behavior for dimming vs. inspector.
&gt; Why do you need to invalidate your dimming in each WebViewImpl::composite call?
&gt; Inspector needs invalidating on each composite because highlighted element might have moved, but I am not sure you ever need to invalidate dimming layer at all. 
&gt; 
&gt; Is that performance critical? James, what do you think?

Dimming is static and does not change and I should not draw it on every composite. Maybe add an isDirty() method to PageOverlayClient and have PageOverlay to check that to decide whether to redraw?

Right now, dimming is used to darken web contents so that the tab-modal dialog stands out. I would think performance is not of a concern for this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511544</commentid>
    <comment_count>11</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-11-30 02:10:40 -0800</bug_when>
    <thetext>&gt; Dimming is static and does not change and I should not draw it on every composite. Maybe add an isDirty() method to PageOverlayClient and have PageOverlay to check that to decide whether to redraw?
Yes, or getDirtyRect().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512099</commentid>
    <comment_count>12</comment_count>
      <attachid>117264</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-30 13:49:50 -0800</bug_when>
    <thetext>Created attachment 117264
Use getDirtyRect to avoid unnecessary paint and fixed a webview resize issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512106</commentid>
    <comment_count>13</comment_count>
      <attachid>117264</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-30 13:55:38 -0800</bug_when>
    <thetext>Comment on attachment 117264
Use getDirtyRect to avoid unnecessary paint and fixed a webview resize issue

Change updated:
- Added a getDirtyRect to overlay client in order to avoid unnecessary painting during compositing;
- Handle webview resize in PageOverlay::update to ensure overlay layer is big enough and on top of scrollbars;

Please take another look. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512172</commentid>
    <comment_count>14</comment_count>
      <attachid>117264</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-11-30 15:12:55 -0800</bug_when>
    <thetext>Comment on attachment 117264
Use getDirtyRect to avoid unnecessary paint and fixed a webview resize issue

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

&gt; Source/WebKit/chromium/src/PageOverlay.cpp:181
&gt; +    // WebPageOverlayClient does the actual painting of the overlay.

I think getDirtyRect should be used here as well.
Please move these FIXMEs to WebDevToolsAgentImpl::getDirtyRect() as well.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2868
&gt; +                m_pageOverlays-&gt;update(true /*force*/);

I believe WebKit style is to use enums for that, not comments, e.g.:
    enum PageOverlayUpdateOption {
        ForceUpdate,
        NotForceUpdate
    };

&gt; Source/WebKit/chromium/src/WebViewImpl.h:576
&gt; +    // The DevTools agent.

This comment seems redundant.

&gt; Source/WebKit/chromium/src/WebViewImpl.h:579
&gt; +    // PageOverlays for this WebView.

This comment seems redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512196</commentid>
    <comment_count>15</comment_count>
      <attachid>117288</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-30 15:54:16 -0800</bug_when>
    <thetext>Created attachment 117288
Address comments in previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512199</commentid>
    <comment_count>16</comment_count>
      <attachid>117288</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-30 15:56:20 -0800</bug_when>
    <thetext>Comment on attachment 117288
Address comments in previous patch.

Change updated to address comments.
Please take another look. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512200</commentid>
    <comment_count>17</comment_count>
      <attachid>117264</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-30 15:57:04 -0800</bug_when>
    <thetext>Comment on attachment 117264
Use getDirtyRect to avoid unnecessary paint and fixed a webview resize issue

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

&gt;&gt; Source/WebKit/chromium/src/PageOverlay.cpp:181
&gt;&gt; +    // WebPageOverlayClient does the actual painting of the overlay.
&gt; 
&gt; I think getDirtyRect should be used here as well.
&gt; Please move these FIXMEs to WebDevToolsAgentImpl::getDirtyRect() as well.

Done

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2868
&gt;&gt; +                m_pageOverlays-&gt;update(true /*force*/);
&gt; 
&gt; I believe WebKit style is to use enums for that, not comments, e.g.:
&gt;     enum PageOverlayUpdateOption {
&gt;         ForceUpdate,
&gt;         NotForceUpdate
&gt;     };

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.h:576
&gt;&gt; +    // The DevTools agent.
&gt; 
&gt; This comment seems redundant.

Removed.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.h:579
&gt;&gt; +    // PageOverlays for this WebView.
&gt; 
&gt; This comment seems redundant.

Removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512213</commentid>
    <comment_count>18</comment_count>
      <attachid>117288</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 16:17:15 -0800</bug_when>
    <thetext>Comment on attachment 117288
Address comments in previous patch.

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

&gt; Source/WebKit/chromium/public/WebPageOverlayClient.h:48
&gt; +    virtual WebRect getDirtyRect() const = 0;

webkit style is to omit the &apos;get&apos; prefix for functions like this

&gt; Source/WebKit/chromium/public/WebPageOverlayClient.h:49
&gt; +};

can you please define a protected, virtual d&apos;tor with an empty body?

&gt; Source/WebKit/chromium/public/WebView.h:416
&gt; +    // graphcical apperance of the WebView. WebPageOverlayClient paints the

typos: graphcical -&gt; graphical, apperance -&gt; appearance

&gt; Source/WebKit/chromium/public/WebView.h:423
&gt; +    virtual void addWebPageOverlay(WebPageOverlayClient*) = 0;

it looks like the z-order value is only checked in this add call, unless I&apos;m missing something. in that case it seems like the z-order should be provided as a parameter here instead of being a client callback

&gt; Source/WebKit/chromium/src/PageOverlay.cpp:54
&gt; +    return canvas;

the way this is written is a bit odd - could you just return directly from inside the #if blocks?

&gt; Source/WebKit/chromium/src/PageOverlayList.cpp:68
&gt; +    bool zorderChanged = false;

nit: zOrderChanged, please. &quot;zorder&quot; isn&apos;t a word

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:285
&gt; +    return 99;

could you add a comment explaining this value (it looks like it&apos;s just picked to be bigger than any normal overlays, correct?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512244</commentid>
    <comment_count>19</comment_count>
      <attachid>117288</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-30 16:55:00 -0800</bug_when>
    <thetext>Comment on attachment 117288
Address comments in previous patch.

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

All done. I will upload updated patch shortly.

&gt;&gt; Source/WebKit/chromium/public/WebPageOverlayClient.h:48
&gt;&gt; +    virtual WebRect getDirtyRect() const = 0;
&gt; 
&gt; webkit style is to omit the &apos;get&apos; prefix for functions like this

Done.

&gt;&gt; Source/WebKit/chromium/public/WebPageOverlayClient.h:49
&gt;&gt; +};
&gt; 
&gt; can you please define a protected, virtual d&apos;tor with an empty body?

Done.

&gt;&gt; Source/WebKit/chromium/public/WebView.h:416
&gt;&gt; +    // graphcical apperance of the WebView. WebPageOverlayClient paints the
&gt; 
&gt; typos: graphcical -&gt; graphical, apperance -&gt; appearance

oops, Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebView.h:423
&gt;&gt; +    virtual void addWebPageOverlay(WebPageOverlayClient*) = 0;
&gt; 
&gt; it looks like the z-order value is only checked in this add call, unless I&apos;m missing something. in that case it seems like the z-order should be provided as a parameter here instead of being a client callback

Removed zorder client callback and passing it in the add call. The zorder is now stored as part of PageOverlay so that we could add an overlay to proper position.

&gt;&gt; Source/WebKit/chromium/src/PageOverlay.cpp:54
&gt;&gt; +    return canvas;
&gt; 
&gt; the way this is written is a bit odd - could you just return directly from inside the #if blocks?

Done.

&gt;&gt; Source/WebKit/chromium/src/PageOverlayList.cpp:68
&gt;&gt; +    bool zorderChanged = false;
&gt; 
&gt; nit: zOrderChanged, please. &quot;zorder&quot; isn&apos;t a word

Renamed to zOrderChanged

&gt;&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:285
&gt;&gt; +    return 99;
&gt; 
&gt; could you add a comment explaining this value (it looks like it&apos;s just picked to be bigger than any normal overlays, correct?)

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512246</commentid>
    <comment_count>20</comment_count>
      <attachid>117299</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-11-30 16:56:52 -0800</bug_when>
    <thetext>Created attachment 117299
Address comments from jamesr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512341</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 19:01:03 -0800</bug_when>
    <thetext>From my point of view I think this looks good.  Vsevolod, would you mind looking over the dev tools stuff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512596</commentid>
    <comment_count>22</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-12-01 00:59:14 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; From my point of view I think this looks good.  Vsevolod, would you mind looking over the dev tools stuff?

All my comments are already addressed, this looks good to me now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512749</commentid>
    <comment_count>23</comment_count>
      <attachid>117299</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 07:21:30 -0800</bug_when>
    <thetext>Comment on attachment 117299
Address comments from jamesr

Thanks for reviewing.

I am not a committer. Could any of you help to turn on CQ flag? Hopefully CQ could land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513144</commentid>
    <comment_count>24</comment_count>
      <attachid>117299</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 14:46:16 -0800</bug_when>
    <thetext>Comment on attachment 117299
Address comments from jamesr

Found a compilation error on mac in PageOverlay.h where I forward declared WebRect as &quot;class&quot;, it should be struct.

Will upload a fix shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513185</commentid>
    <comment_count>25</comment_count>
      <attachid>117299</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 15:16:50 -0800</bug_when>
    <thetext>Comment on attachment 117299
Address comments from jamesr

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

&gt; Source/WebKit/chromium/public/WebPageOverlayClient.h:37
&gt; +class WebPageOverlayClient {

Darin pointed out that this interface should actually be called WebPageOverlay, not Client

&gt; Source/WebKit/chromium/public/WebPageOverlayClient.h:43
&gt; +    // Returns dirty rect that needs repaint.
&gt; +    virtual WebRect dirtyRect() const = 0;

I don&apos;t think this is quite accurate - what this is really returning is the rectangle that this overlay is interested in painting. There doesn&apos;t seem to be any mechanism to deal with changing the dirty rect.

I think this would be clearer if the addPageOverlay() function specified the bounds of the overlay, just as it specified the z-order, and the rule for changing it was that if you wanted to change the bounds of an overlay you needed to remove it and add it back. That would be consistent with the way you can change the z-order.

Although looking in detail we aren&apos;t using this functionality - every overlay covers the full viewport. So let&apos;s punt on this functionality for now and add it when we have a need.

&gt; Source/WebKit/chromium/public/WebView.h:424
&gt; +    virtual void addWebPageOverlay(WebPageOverlayClient*, int /*z-order*/) = 0;
&gt; +    virtual void removeWebPageOverlay(WebPageOverlayClient*) = 0;

Darin let me know that we don&apos;t use the &quot;web&quot; prefix in the function names. So these should be called:
addPageOverlay(...)
removePageOverlay(...)

see the setVisibilityState() above as an example. We all apologize deeply for the inconsistencies :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513240</commentid>
    <comment_count>26</comment_count>
      <attachid>117299</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 16:20:22 -0800</bug_when>
    <thetext>Comment on attachment 117299
Address comments from jamesr

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

Will update updated patch shortly.

&gt;&gt; Source/WebKit/chromium/public/WebPageOverlayClient.h:37
&gt;&gt; +class WebPageOverlayClient {
&gt; 
&gt; Darin pointed out that this interface should actually be called WebPageOverlay, not Client

Done.

&gt;&gt; Source/WebKit/chromium/public/WebPageOverlayClient.h:43
&gt;&gt; +    virtual WebRect dirtyRect() const = 0;
&gt; 
&gt; I don&apos;t think this is quite accurate - what this is really returning is the rectangle that this overlay is interested in painting. There doesn&apos;t seem to be any mechanism to deal with changing the dirty rect.
&gt; 
&gt; I think this would be clearer if the addPageOverlay() function specified the bounds of the overlay, just as it specified the z-order, and the rule for changing it was that if you wanted to change the bounds of an overlay you needed to remove it and add it back. That would be consistent with the way you can change the z-order.
&gt; 
&gt; Although looking in detail we aren&apos;t using this functionality - every overlay covers the full viewport. So let&apos;s punt on this functionality for now and add it when we have a need.

Agree with your assessments.

&gt;&gt; Source/WebKit/chromium/public/WebView.h:424
&gt;&gt; +    virtual void removeWebPageOverlay(WebPageOverlayClient*) = 0;
&gt; 
&gt; Darin let me know that we don&apos;t use the &quot;web&quot; prefix in the function names. So these should be called:
&gt; addPageOverlay(...)
&gt; removePageOverlay(...)
&gt; 
&gt; see the setVisibilityState() above as an example. We all apologize deeply for the inconsistencies :/

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513245</commentid>
    <comment_count>27</comment_count>
      <attachid>117515</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 16:22:59 -0800</bug_when>
    <thetext>Created attachment 117515
Updated patch.

Please take another look.
Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513250</commentid>
    <comment_count>28</comment_count>
      <attachid>117515</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 16:25:42 -0800</bug_when>
    <thetext>Comment on attachment 117515
Updated patch.

Found a missed renaming in PageOverlay.h. Sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513255</commentid>
    <comment_count>29</comment_count>
      <attachid>117519</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 16:32:06 -0800</bug_when>
    <thetext>Created attachment 117519
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513256</commentid>
    <comment_count>30</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 16:32:39 -0800</bug_when>
    <thetext>Tip for the future: Tools/Scripts/do-webcore-rename can be used for renames pretty much anywhere in the WebKit repo, despite the name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513262</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-01 16:38:20 -0800</bug_when>
    <thetext>Attachment 117519 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1

LayoutTests/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513334</commentid>
    <comment_count>32</comment_count>
      <attachid>117519</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 17:37:35 -0800</bug_when>
    <thetext>Comment on attachment 117519
Updated patch.

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

I thought I left some feedback on this earlier but I don&apos;t see it on the bug now. My apologies if you end up getting some comments twice. This is very close!

&gt; Source/WebKit/chromium/WebKit.gyp:263
&gt; +                &apos;public/WebPageOverlayClient.h&apos;,

should be WebPageOverlay.h

&gt; Source/WebKit/chromium/public/WebPageOverlay.h:43
&gt; +    // Returns dirty rect that needs repaint.
&gt; +    virtual WebRect dirtyRect() const = 0;

I think we should remove dirtyRect() completely from this patch and always consider the full viewport to be covered by every overlay.

&gt; Source/WebKit/chromium/src/PageOverlay.cpp:150
&gt; +    FloatSize size(m_viewImpl-&gt;size().width, m_viewImpl-&gt;size().height);

m_viewImpl-&gt;size() is a WebSize, which (within WebKit code) can be implicitly converted to an IntSize, which in turn can be implicitly converted to a FloatSize

so this should just be &quot;FloatSize size = m_viewImpl-&gt;size();&quot; or &quot;FloatSize size(m_viewImpl-&gt;size());&quot; if you prefer that initialization style

&gt; Source/WebKit/chromium/src/PageOverlay.cpp:167
&gt; +    if (updateOption == ForceUpdate)
&gt; +        m_layer-&gt;setNeedsDisplay();
&gt; +    else {
&gt; +        const WebRect&amp; dirtyRect = m_overlay-&gt;dirtyRect();
&gt; +        if (!dirtyRect.isEmpty())
&gt; +            m_layer-&gt;setNeedsDisplayInRect(WebCore::FloatRect(dirtyRect.x, dirtyRect.y, dirtyRect.width, dirtyRect.height));
&gt; +    }

i think this can go back to what it previously did</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513335</commentid>
    <comment_count>33</comment_count>
      <attachid>117519</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 17:38:45 -0800</bug_when>
    <thetext>Comment on attachment 117519
Updated patch.

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

&gt; Source/WebKit/chromium/public/WebView.h:416
&gt; +    // graphical appearance of the WebView. WebPageOverlayClient paints the

WebPageOverlayClient -&gt; WebPageOverlay

&gt; Source/WebKit/chromium/src/PageOverlay.cpp:182
&gt; +    // WebPageOverlayClient does the actual painting of the overlay.

WebPageOverlayClient -&gt; WebPageOverlay

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:275
&gt; +// WebPageOverlayClient

WebPageOverlayClient -&gt; WebPageOverlay

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.h:100
&gt; +    // WebPageOverlayClient

WebPageOverlayClient -&gt; WebPageOverlay

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.h:102
&gt; +    virtual WebRect dirtyRect() const;

remove please

&gt; Source/WebKit/chromium/src/WebViewImpl.h:96
&gt; +class WebPageOverlayClient;

WebPageOverlayClient -&gt; WebPageOverlay, or remove this forward declaration if it isn&apos;t needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513414</commentid>
    <comment_count>34</comment_count>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 19:47:40 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebKit/chromium/public/WebPageOverlay.h:43
&gt; &gt; +    // Returns dirty rect that needs repaint.
&gt; &gt; +    virtual WebRect dirtyRect() const = 0;
&gt; 
&gt; I think we should remove dirtyRect() completely from this patch and always consider the full viewport to be covered by every overlay.
&gt; 

dirtyRect (or at least a needsRepaint flag) is needed for compositing mode so that we don&apos;t always repaint all overlays. This avoids unnecessary paintPageOverlay calls. For background dimming, it&apos;s static and does not change so we should only paint it once in composting mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513447</commentid>
    <comment_count>35</comment_count>
      <attachid>117519</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 20:43:24 -0800</bug_when>
    <thetext>Comment on attachment 117519
Updated patch.

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

All done except removing dirtyRect, which I think needs a bit more discussion.

&gt;&gt; Source/WebKit/chromium/WebKit.gyp:263
&gt;&gt; +                &apos;public/WebPageOverlayClient.h&apos;,
&gt; 
&gt; should be WebPageOverlay.h

Done.

Strange, gyp_webkit does not buff on this. :(

&gt;&gt; Source/WebKit/chromium/public/WebView.h:416
&gt;&gt; +    // graphical appearance of the WebView. WebPageOverlayClient paints the
&gt; 
&gt; WebPageOverlayClient -&gt; WebPageOverlay

Done.

&gt;&gt; Source/WebKit/chromium/src/PageOverlay.cpp:150
&gt;&gt; +    FloatSize size(m_viewImpl-&gt;size().width, m_viewImpl-&gt;size().height);
&gt; 
&gt; m_viewImpl-&gt;size() is a WebSize, which (within WebKit code) can be implicitly converted to an IntSize, which in turn can be implicitly converted to a FloatSize
&gt; 
&gt; so this should just be &quot;FloatSize size = m_viewImpl-&gt;size();&quot; or &quot;FloatSize size(m_viewImpl-&gt;size());&quot; if you prefer that initialization style

Done.

&gt;&gt; Source/WebKit/chromium/src/PageOverlay.cpp:167

&gt; 
&gt; i think this can go back to what it previously did

Using dirtyRect could save unnecessary paints in composite code path.

&gt;&gt; Source/WebKit/chromium/src/PageOverlay.cpp:182
&gt;&gt; +    // WebPageOverlayClient does the actual painting of the overlay.
&gt; 
&gt; WebPageOverlayClient -&gt; WebPageOverlay

Done.

&gt;&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:275
&gt;&gt; +// WebPageOverlayClient
&gt; 
&gt; WebPageOverlayClient -&gt; WebPageOverlay

Done.

&gt;&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.h:100
&gt;&gt; +    // WebPageOverlayClient
&gt; 
&gt; WebPageOverlayClient -&gt; WebPageOverlay

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.h:96
&gt;&gt; +class WebPageOverlayClient;
&gt; 
&gt; WebPageOverlayClient -&gt; WebPageOverlay, or remove this forward declaration if it isn&apos;t needed

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513449</commentid>
    <comment_count>36</comment_count>
      <attachid>117558</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 20:46:24 -0800</bug_when>
    <thetext>Created attachment 117558
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513451</commentid>
    <comment_count>37</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 20:52:57 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; &gt; &gt; Source/WebKit/chromium/public/WebPageOverlay.h:43
&gt; &gt; &gt; +    // Returns dirty rect that needs repaint.
&gt; &gt; &gt; +    virtual WebRect dirtyRect() const = 0;
&gt; &gt; 
&gt; &gt; I think we should remove dirtyRect() completely from this patch and always consider the full viewport to be covered by every overlay.
&gt; &gt; 
&gt; 
&gt; dirtyRect (or at least a needsRepaint flag) is needed for compositing mode so that we don&apos;t always repaint all overlays. This avoids unnecessary paintPageOverlay calls. For background dimming, it&apos;s static and does not change so we should only paint it once in composting mode.

I don&apos;t understand - wouldn&apos;t a page dimming overlay simply call addPageOverlay() once, get one paint call, and be done with it? The devtools overlay code calls removePageOverlay()/addPageOverlay() every time the highlight changes, which triggers a repaint (fullscreen, currently).

If we do want to support overlays that are persistent and have partial repaints (although I can&apos;t imagine why) a better way to do that is to have the overlay inform the implementation that some rectangle inside the overlay is invalid and then have the implementation request all overlays paint the portion marked invalid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513460</commentid>
    <comment_count>38</comment_count>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 21:13:33 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #34)
&gt; &gt; &gt; &gt; Source/WebKit/chromium/public/WebPageOverlay.h:43
&gt; &gt; &gt; &gt; +    // Returns dirty rect that needs repaint.
&gt; &gt; &gt; &gt; +    virtual WebRect dirtyRect() const = 0;
&gt; &gt; &gt; 
&gt; &gt; &gt; I think we should remove dirtyRect() completely from this patch and always consider the full viewport to be covered by every overlay.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; dirtyRect (or at least a needsRepaint flag) is needed for compositing mode so that we don&apos;t always repaint all overlays. This avoids unnecessary paintPageOverlay calls. For background dimming, it&apos;s static and does not change so we should only paint it once in composting mode.
&gt; 
&gt; I don&apos;t understand - wouldn&apos;t a page dimming overlay simply call addPageOverlay() once, get one paint call, and be done with it? The devtools overlay code calls removePageOverlay()/addPageOverlay() every time the highlight changes, which triggers a repaint (fullscreen, currently).
&gt; 
&gt; If we do want to support overlays that are persistent and have partial repaints (although I can&apos;t imagine why) a better way to do that is to have the overlay inform the implementation that some rectangle inside the overlay is invalid and then have the implementation request all overlays paint the portion marked invalid.

directRect is useful in composting code path. e.g. WebViewImpl::composite is called when devtools changes highlight and right now, we call PageOverlay::update on all overlays. And if we don&apos;t have dirtyRect, dimming overlay will setNeedsDispaly on its layer and paints the dimming again even though nothing changed. With dirtyRect, we could save this unnecessary paint.

On the non-composting code path, dirtyRect is not used and we always repaint all overlays when webview is repainted.

Also see  Vsevolod&apos;s comments @ 9.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513466</commentid>
    <comment_count>39</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 21:26:50 -0800</bug_when>
    <thetext>(In reply to comment #38)

&gt; 
&gt; directRect is useful in composting code path. e.g. WebViewImpl::composite is called when devtools changes highlight and right now, we call PageOverlay::update on all overlays. And if we don&apos;t have dirtyRect, dimming overlay will setNeedsDispaly on its layer and paints the dimming again even though nothing changed. With dirtyRect, we could save this unnecessary paint.

Hmm...but whenever the devtools overlay changes its dirtyRect is the entire viewport, so I&apos;m not sure what we are saving.

It is possible to optimize this case. However, it doesn&apos;t seem that the code today is getting any benefit, and if we do want to get this benefit we need to do it in a different way. I&apos;d rather not worry about it. This is not a performance-critical codepath.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513479</commentid>
    <comment_count>40</comment_count>
      <attachid>117564</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 22:10:24 -0800</bug_when>
    <thetext>Created attachment 117564
Remove dirtyRect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513482</commentid>
    <comment_count>41</comment_count>
      <attachid>117564</attachid>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 22:12:36 -0800</bug_when>
    <thetext>Comment on attachment 117564
Remove dirtyRect.

Please take another look. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513489</commentid>
    <comment_count>42</comment_count>
      <attachid>117564</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 22:21:23 -0800</bug_when>
    <thetext>Comment on attachment 117564
Remove dirtyRect.

thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513493</commentid>
    <comment_count>43</comment_count>
    <who name="xiyuan">xiyuan</who>
    <bug_when>2011-12-01 22:23:42 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; (From update of attachment 117564 [details])
&gt; thanks

Thank you and Vsevolod for reviewing this, educating me and being patient with me. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513594</commentid>
    <comment_count>44</comment_count>
      <attachid>117564</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 00:56:04 -0800</bug_when>
    <thetext>Comment on attachment 117564
Remove dirtyRect.

Clearing flags on attachment: 117564

Committed r101758: &lt;http://trac.webkit.org/changeset/101758&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513595</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 00:56:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116793</attachid>
            <date>2011-11-28 11:37:56 -0800</date>
            <delta_ts>2011-11-29 10:24:06 -0800</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>webkit_73235.patch</filename>
            <type>text/plain</type>
            <size>25300</size>
            <attacher name="xiyuan">xiyuan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDEyNjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUx
IEBACisyMDExLTExLTI4ICBYaXl1YW4gWGlhICA8eGl5dWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFN1cHBvcnQgYWRkaW5nL3JlbW92aW5nIHBhZ2Ugb3ZlcmxheSB0byBX
ZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaDogQWRk
ZWQuCisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJs
YXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6T3Zl
cmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpP
dmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6OnBhaW50Q29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6Ok92ZXJsYXlHcmFwaGljc0xh
eWVyQ2xpZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5OjpwYWludFdlYkZy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OmludmFsaWRhdGVXZWJGcmFtZSk6
CisgICAgICAgICogc3JjL1BhZ2VPdmVybGF5Lmg6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVy
bGF5OjpjbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6c2V0Q2xpZW50KToK
KyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXlMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OlBhZ2VPdmVybGF5TGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJs
YXlMaXN0OjpQYWdlT3ZlcmxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxp
c3Q6OmFkZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6cmVtb3Zl
Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0Ojp1cGRhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OnBhaW50V2ViRnJhbWUpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OmZpbmRDbGllbnQpOgorICAgICAgICAqIHNyYy9QYWdl
T3ZlcmxheUxpc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6
flBhZ2VPdmVybGF5TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6ZW1w
dHkpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWludFBhZ2VPdmVybGF5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKiBzcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpwYWludFdpdGhDb250ZXh0KToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFkZFdlYlBhZ2VPdmVy
bGF5Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVdlYlBhZ2VP
dmVybGF5Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpk
aWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWdlT3ZlcmxheXMpOgorCiAyMDExLTEx
LTI4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0Nocm9taXVt
XSBNb3ZlICJmaW5hbCIgYmF0Y2ggb2YgaGVhZGVycyBpbnRvIHB1YmxpYy9wbGF0Zm9ybQpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gMTAxMjY0KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNiArMjU4
LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5vdGlmaWNhdGlvblByZXNlbnRlci5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxs
YmFjay5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk9wdGlvbkVsZW1lbnQuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQYWdlT3ZlcmxheUNsaWVudC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQYWdlVmlzaWJpbGl0eVN0YXRlLmgnLApAQCAtNDM0LDYgKzQzNSw4IEBACiAgICAgICAg
ICAgICAgICAgJ3NyYy9wYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1Bh
Z2VPdmVybGF5LmgnLAorICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXlMaXN0LmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheUxpc3QuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9QbGF0Zm9ybVN1cHBvcnQuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlBhZ2VPdmVybGF5Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VPdmVybGF5Q2xpZW50LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KKyAqIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdl
T3ZlcmxheUNsaWVudF9oCisjZGVmaW5lIFdlYlBhZ2VPdmVybGF5Q2xpZW50X2gKKworI2luY2x1
ZGUgIldlYkNhbnZhcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZU92
ZXJsYXlDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5
KFdlYkNhbnZhcyopID0gMDsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJQYWdlT3ZlcmxheUNsaWVudF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlT3ZlcmxheUNsaWVudC5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJWaWV3LmgJKHJldmlzaW9uIDEwMTI2NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBj
bGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYkZyYW1lQ2xpZW50OwogY2xhc3MgV2ViR3JhcGhpY3ND
b250ZXh0M0Q7CiBjbGFzcyBXZWJOb2RlOworY2xhc3MgV2ViUGFnZU92ZXJsYXlDbGllbnQ7CiBj
bGFzcyBXZWJQZXJtaXNzaW9uQ2xpZW50OwogY2xhc3MgV2ViU2V0dGluZ3M7CiBjbGFzcyBXZWJT
cGVsbENoZWNrQ2xpZW50OwpAQCAtNDA5LDYgKzQxMCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxp
dHlTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNJbml0
aWFsU3RhdGUpIHsgfQogCisgICAgLy8gUGFnZU92ZXJsYXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmlydHVhbCB2b2lk
IGFkZFdlYlBhZ2VPdmVybGF5Q2xpZW50KFdlYlBhZ2VPdmVybGF5Q2xpZW50KikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVXZWJQYWdlT3ZlcmxheUNsaWVudChXZWJQYWdlT3ZlcmxheUNs
aWVudCopID0gMDsKIAogICAgIC8vIFRlc3RpbmcgZnVuY3Rpb25hbGl0eSBmb3IgTGF5b3V0VGVz
dENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcAkocmV2aXNpb24gMTAxMjY0KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZU92ZXJsYXlDbGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAi
V2ViVmlld0ltcGwuaCIKIApAQCAtNDAsMTIgKzQyLDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFzc093blB0cjxQYWdlT3ZlcmxheT4gUGFn
ZU92ZXJsYXk6OmNyZWF0ZShXZWJWaWV3SW1wbCogdmlld0ltcGwsIFBhZ2VPdmVybGF5Q2xpZW50
KiBjbGllbnQpCituYW1lc3BhY2UgeworCitXZWJDYW52YXMqIFRvV2ViQ2FudmFzKEdyYXBoaWNz
Q29udGV4dCogZ2MpCit7CisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAgICBXZWJDYW52YXMqIGNh
bnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisjZWxpZiBXRUJLSVRfVVNJ
TkdfQ0cKKyAgICBXZWJDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNl
bmRpZgorICAgIHJldHVybiBjYW52YXM7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK1Bhc3NPd25Q
dHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5OjpjcmVhdGUoV2ViVmlld0ltcGwqIHZpZXdJbXBs
LCBXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KQogewogICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUGFnZU92ZXJsYXkodmlld0ltcGwsIGNsaWVudCkpOwogfQogCi1QYWdlT3ZlcmxheTo6UGFn
ZU92ZXJsYXkoV2ViVmlld0ltcGwqIHZpZXdJbXBsLCBQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50
KQorUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUGFn
ZU92ZXJsYXlDbGllbnQqIGNsaWVudCkKICAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCiAgICAg
LCBtX2NsaWVudChjbGllbnQpCiB7CkBAIC01NCw3ICs3MCw3IEBAIFBhZ2VPdmVybGF5OjpQYWdl
T3ZlcmxheShXZWJWaWV3SW1wbCogdmkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiBjbGFzcyBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwgOiBwdWJsaWMgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8T3Zl
cmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKj4gY3JlYXRlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3
SW1wbCwgUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkK
KyAgICBzdGF0aWMgUGFzc093blB0cjxPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwqPiBj
cmVhdGUoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJQYWdlT3ZlcmxheUNsaWVudCogcGFn
ZU92ZXJsYXlDbGllbnQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE92ZXJs
YXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCh3ZWJWaWV3SW1wbCwgcGFnZU92ZXJsYXlDbGllbnQp
KTsKICAgICB9CkBAIC02NSw5ICs4MSw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIHsgfQogCi0gICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGlu
Q2xpcCkKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVy
KiwgR3JhcGhpY3NDb250ZXh0JiBnYywgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0
IEludFJlY3QmIGluQ2xpcCkKICAgICB7Ci0gICAgICAgIG1fcGFnZU92ZXJsYXlDbGllbnQtPnBh
aW50UGFnZU92ZXJsYXkoY29udGV4dCk7CisgICAgICAgIG1fcGFnZU92ZXJsYXlDbGllbnQtPnBh
aW50UGFnZU92ZXJsYXkoVG9XZWJDYW52YXMoJmdjKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CkBAIC05MSwxMyArMTA3LDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgT3ZlcmxheUdyYXBoaWNzTGF5ZXJD
bGllbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgUGFnZU92ZXJsYXk6OlBhZ2VPdmVy
bGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKKyAgICBleHBsaWNpdCBPdmVybGF5R3JhcGhp
Y3NMYXllckNsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJQYWdlT3Zlcmxh
eUNsaWVudCogcGFnZU92ZXJsYXlDbGllbnQpCiAgICAgICAgIDogbV9wYWdlT3ZlcmxheUNsaWVu
dChwYWdlT3ZlcmxheUNsaWVudCkKICAgICAgICAgLCBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBs
KQogICAgIHsKICAgICB9CiAKLSAgICBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIG1f
cGFnZU92ZXJsYXlDbGllbnQ7CisgICAgV2ViUGFnZU92ZXJsYXlDbGllbnQqIG1fcGFnZU92ZXJs
YXlDbGllbnQ7CiAgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CiB9OwogI2VuZGlmCkBA
IC0xMzYsMTIgKzE1MiwxMiBAQCB2b2lkIFBhZ2VPdmVybGF5Ojp1cGRhdGUoKQogdm9pZCBQYWdl
T3ZlcmxheTo6cGFpbnRXZWJGcmFtZShHcmFwaGljc0NvbnRleHQmIGdjKQogewogICAgIGlmICgh
bV92aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCi0gICAgICAgIG1f
Y2xpZW50LT5wYWludFBhZ2VPdmVybGF5KGdjKTsKKyAgICAgICAgbV9jbGllbnQtPnBhaW50UGFn
ZU92ZXJsYXkoVG9XZWJDYW52YXMoJmdjKSk7CiB9CiAKIHZvaWQgUGFnZU92ZXJsYXk6OmludmFs
aWRhdGVXZWJGcmFtZSgpCiB7Ci0gICAgLy8gUGFnZU92ZXJsYXlDbGllbnQgZG9lcyB0aGUgYWN0
dWFsIHBhaW50aW5nIG9mIHRoZSBvdmVybGF5LgorICAgIC8vIFdlYlBhZ2VPdmVybGF5Q2xpZW50
IGRvZXMgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUgb3ZlcmxheS4KICAgICAvLyBIZXJlIHdl
IGp1c3QgbWFrZSBzdXJlIHRvIGludmFsaWRhdGUuCiAgICAgaWYgKCFtX3ZpZXdJbXBsLT5pc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogICAgICAgICAvLyBGSVhNRTogYWJsZSB0
byBpbnZhbGlkYXRlIGEgc21hbGxlciByZWN0LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGFnZU92ZXJsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9QYWdlT3ZlcmxheS5oCShyZXZpc2lvbiAxMDEyNjQpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9QYWdlT3ZlcmxheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwzMSArMzksMjgg
QEAgY2xhc3MgR3JhcGhpY3NMYXllckNsaWVudDsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7Citj
bGFzcyBXZWJQYWdlT3ZlcmxheUNsaWVudDsKIGNsYXNzIFdlYlZpZXdJbXBsOwogCiBjbGFzcyBQ
YWdlT3ZlcmxheSB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgUGFnZU92ZXJsYXlDbGllbnQgewotICAg
IHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JikgPSAwOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxQ
YWdlT3ZlcmxheT4gY3JlYXRlKFdlYlZpZXdJbXBsKiwgUGFnZU92ZXJsYXlDbGllbnQqKTsKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxQYWdlT3ZlcmxheT4gY3JlYXRlKFdlYlZpZXdJbXBsKiwgV2Vi
UGFnZU92ZXJsYXlDbGllbnQqKTsKIAogICAgIH5QYWdlT3ZlcmxheSgpIHsgfQogCi0gICAgdm9p
ZCBzZXRDbGllbnQoUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVu
dDsgfQorICAgIFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBt
X2NsaWVudDsgfQorICAgIHZvaWQgc2V0Q2xpZW50KFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KIAogICAgIHZvaWQgY2xlYXIoKTsKICAgICB2b2lk
IHVwZGF0ZSgpOwogICAgIHZvaWQgcGFpbnRXZWJGcmFtZShXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmKTsKIAogcHJpdmF0ZToKLSAgICBQYWdlT3ZlcmxheShXZWJWaWV3SW1wbCosIFBhZ2VPdmVy
bGF5Q2xpZW50Kik7CisgICAgUGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqLCBXZWJQYWdlT3Zlcmxh
eUNsaWVudCopOwogICAgIHZvaWQgaW52YWxpZGF0ZVdlYkZyYW1lKCk7CiAKICAgICBXZWJWaWV3
SW1wbCogbV92aWV3SW1wbDsKLSAgICBQYWdlT3ZlcmxheUNsaWVudCogbV9jbGllbnQ7CisgICAg
V2ViUGFnZU92ZXJsYXlDbGllbnQqIG1fY2xpZW50OwogICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX2xheWVyOwogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50PiBtX2xheWVyQ2xpZW50OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1BhZ2VPdmVybGF5TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgR09PR0xFIElOQy4KKyAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBh
Z2VPdmVybGF5TGlzdC5oIgorCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlT3ZlcmxheUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFBhZ2VPdmVybGF5TGlzdD4gUGFnZU92ZXJsYXlM
aXN0OjpjcmVhdGUoV2ViVmlld0ltcGwqIHZpZXdJbXBsKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgUGFnZU92ZXJsYXlMaXN0KHZpZXdJbXBsKSk7Cit9CisKK1BhZ2VPdmVybGF5TGlzdDo6
UGFnZU92ZXJsYXlMaXN0KFdlYlZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwo
dmlld0ltcGwpCit7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlMaXN0OjphZGRDbGllbnQoV2ViUGFn
ZU92ZXJsYXlDbGllbnQqIGNsaWVudCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBmaW5kQ2xpZW50
KGNsaWVudCk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CisgICAgICBtX3BhZ2VPdmVy
bGF5c1tpbmRleF0tPnVwZGF0ZSgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IE93blB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKG1f
dmlld0ltcGwsIGNsaWVudCk7CisgICAgcGFnZU92ZXJsYXktPnVwZGF0ZSgpOworICAgIG1fcGFn
ZU92ZXJsYXlzLmFwcGVuZChwYWdlT3ZlcmxheS5yZWxlYXNlKCkpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFBhZ2VPdmVybGF5TGlzdDo6cmVtb3ZlQ2xpZW50KFdlYlBhZ2VPdmVybGF5
Q2xpZW50KiBjbGllbnQpCit7CisgICAgc2l6ZV90IGluZGV4ID0gZmluZENsaWVudChjbGllbnQp
OworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbV9wYWdlT3ZlcmxheXNbaW5kZXhdLT5jbGVhcigpOworICAgIG1fcGFnZU92ZXJsYXlzLnJl
bW92ZShpbmRleCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlMaXN0
Ojp1cGRhdGUoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdlT3ZlcmxheXMu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fcGFnZU92ZXJsYXlzW2ldLT51cGRhdGUoKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUxpc3Q6OnBhaW50V2ViRnJhbWUoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiBnYykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92ZXJsYXlzLnNp
emUoKTsgKytpKQorICAgICAgICBtX3BhZ2VPdmVybGF5c1tpXS0+cGFpbnRXZWJGcmFtZShnYyk7
Cit9CisKK3NpemVfdCBQYWdlT3ZlcmxheUxpc3Q6OmZpbmRDbGllbnQoV2ViUGFnZU92ZXJsYXlD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92ZXJs
YXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5c1tpXS0+Y2xpZW50
KCkgPT0gY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiBu
b3RGb3VuZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuY3BwCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgR09PR0xFIElOQy4KKyAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheUxpc3RfaAorI2Rl
ZmluZSBQYWdlT3ZlcmxheUxpc3RfaAorCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZU92ZXJs
YXlDbGllbnQ7CitjbGFzcyBXZWJWaWV3SW1wbDsKKworY2xhc3MgUGFnZU92ZXJsYXlMaXN0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlT3ZlcmxheUxpc3Q+IGNyZWF0ZShX
ZWJWaWV3SW1wbCopOworCisgICAgflBhZ2VPdmVybGF5TGlzdCgpIHsgfQorCisgICAgYm9vbCBl
bXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3BhZ2VPdmVybGF5cy5zaXplKCk7IH0KKworICAgIC8v
IEFkZHMvcmVtb3ZlcyBhIFBhZ2VPdmVybGF5IGZvciBnaXZlbiBjbGllbnQuCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIGEgUGFnZU92ZXJsYXkgaXMgYWRkZWQvcmVtb3ZlZC4KKyAgICBib29sIGFk
ZENsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCopOworICAgIGJvb2wgcmVtb3ZlQ2xpZW50KFdl
YlBhZ2VPdmVybGF5Q2xpZW50Kik7CisKKyAgICB2b2lkIHVwZGF0ZSgpOworICAgIHZvaWQgcGFp
bnRXZWJGcmFtZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKworcHJpdmF0ZToKKyAgICBQ
YWdlT3ZlcmxheUxpc3QoV2ViVmlld0ltcGwqKTsKKyAgICBzaXplX3QgZmluZENsaWVudChXZWJQ
YWdlT3ZlcmxheUNsaWVudCopOworCisgICAgV2ViVmlld0ltcGwqIG1fdmlld0ltcGw7CisgICAg
VmVjdG9yPE93blB0cjxQYWdlT3ZlcmxheT4sIDI+IG1fcGFnZU92ZXJsYXlzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlT3ZlcmxheUxpc3RfaAoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAko
cmV2aXNpb24gMTAxMjY0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBACiAjaW5jbHVk
ZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3Vw
LmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJQYWdlU2NyaXB0RGVidWdT
ZXJ2ZXIuaCIKKyNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC0yNzIsMjIgKzI3MiwyMiBAQCB2b2lkIFdl
YkRldlRvb2xzQWdlbnRJbXBsOjpicmluZ0Zyb250ZW5kCiB7CiB9CiAKLS8vIFBhZ2VPdmVybGF5
Q2xpZW50Ci12b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWludFBhZ2VPdmVybGF5KEdyYXBo
aWNzQ29udGV4dCYgZ2MpCisvLyBXZWJQYWdlT3ZlcmxheUNsaWVudAordm9pZCBXZWJEZXZUb29s
c0FnZW50SW1wbDo6cGFpbnRQYWdlT3ZlcmxheShXZWJDYW52YXMqIGNhbnZhcykKIHsKICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBpZiAo
aWMpCi0gICAgICAgIGljLT5kcmF3SGlnaGxpZ2h0KGdjKTsKKyAgICAgICAgaWMtPmRyYXdIaWdo
bGlnaHQoR3JhcGhpY3NDb250ZXh0QnVpbGRlcihjYW52YXMpLmNvbnRleHQoKSk7CiB9CiAKIHZv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZ2hsaWdodCgpCiB7Ci0gICAgbV93ZWJWaWV3SW1w
bC0+c2V0UGFnZU92ZXJsYXlDbGllbnQodGhpcyk7CisgICAgbV93ZWJWaWV3SW1wbC0+YWRkV2Vi
UGFnZU92ZXJsYXlDbGllbnQodGhpcyk7CiB9CiAKIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6
OmhpZGVIaWdobGlnaHQoKQogewotICAgIG1fd2ViVmlld0ltcGwtPnNldFBhZ2VPdmVybGF5Q2xp
ZW50KDApOworICAgIG1fd2ViVmlld0ltcGwtPnJlbW92ZVdlYlBhZ2VPdmVybGF5Q2xpZW50KHRo
aXMpOwogfQogCiBib29sIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZW5kTWVzc2FnZVRvRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCShyZXZpc2lvbiAxMDEyNjQpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIK
IAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3ZlcmxheUNsaWVudC5oIgogCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC02Miw3ICs2Miw3IEBA
IHN0cnVjdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhOwogCiBjbGFzcyBXZWJEZXZUb29sc0FnZW50
SW1wbCA6IHB1YmxpYyBXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJQYWdlT3ZlcmxheUNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgV2ViRGV2VG9vbHNBZ2VudEltcGwoV2ViVmlld0ltcGwqIHdlYlZp
ZXdJbXBsLCBXZWJEZXZUb29sc0FnZW50Q2xpZW50KiBjbGllbnQpOwogICAgIHZpcnR1YWwgfldl
YkRldlRvb2xzQWdlbnRJbXBsKCk7CkBAIC05Nyw4ICs5Nyw4IEBAIHB1YmxpYzoKIAogICAgIGlu
dCBob3N0SWQoKSB7IHJldHVybiBtX2hvc3RJZDsgfQogCi0gICAgLy8gUGFnZU92ZXJsYXlDbGll
bnQKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdlT3ZlcmxheShXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmKTsKKyAgICAvLyBXZWJQYWdlT3ZlcmxheUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBw
YWludFBhZ2VPdmVybGF5KFdlYkNhbnZhcyopOwogCiBwcml2YXRlOgogICAgIFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gMTAxMjY0KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2Myw4ICsyMDYzLDggQEAgdm9pZCBXZWJGcmFtZUltcGw6OnBhaW50V2l0aENv
bnRleHQoR3JhcAogICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lVmlldygpKSB7
CiAgICAgICAgIGdjLmNsaXAoZGlydHlSZWN0KTsKICAgICAgICAgZnJhbWVWaWV3KCktPnBhaW50
KCZnYywgZGlydHlSZWN0KTsKLSAgICAgICAgaWYgKHZpZXdJbXBsKCktPnBhZ2VPdmVybGF5KCkp
Ci0gICAgICAgICAgICB2aWV3SW1wbCgpLT5wYWdlT3ZlcmxheSgpLT5wYWludFdlYkZyYW1lKGdj
KTsKKyAgICAgICAgaWYgKHZpZXdJbXBsKCktPnBhZ2VPdmVybGF5cygpKQorICAgICAgICAgICAg
dmlld0ltcGwoKS0+cGFnZU92ZXJsYXlzKCktPnBhaW50V2ViRnJhbWUoZ2MpOwogICAgIH0gZWxz
ZQogICAgICAgICBnYy5maWxsUmVjdChkaXJ0eVJlY3QsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CiAgICAgZ2MucmVzdG9yZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gMTAxMjY0KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUz
LDggKzEyNTMsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCkKICAgICAgICAg
aWYgKCFwYWdlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKG1fcGFnZU92
ZXJsYXkpCi0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKKyAgICAgICAgaWYg
KG1fcGFnZU92ZXJsYXlzKQorICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXMtPnVwZGF0ZSgpOwog
CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRlKCk7CiAgICAgfQpAQCAtMjU5OSwy
MSArMjU5OSwyMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJZ25vcmVJbnB1dEV2ZW50cyhiCiAg
ICAgbV9pZ25vcmVJbnB1dEV2ZW50cyA9IG5ld1ZhbHVlOwogfQogCi12b2lkIFdlYlZpZXdJbXBs
OjpzZXRQYWdlT3ZlcmxheUNsaWVudChQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIHBh
Z2VPdmVybGF5Q2xpZW50KQordm9pZCBXZWJWaWV3SW1wbDo6YWRkV2ViUGFnZU92ZXJsYXlDbGll
bnQoV2ViUGFnZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQogewotICAgIGlmIChw
YWdlT3ZlcmxheUNsaWVudCkgewotICAgICAgICBpZiAoIW1fcGFnZU92ZXJsYXkpCi0gICAgICAg
ICAgICBtX3BhZ2VPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzLCBwYWdlT3Zlcmxh
eUNsaWVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXktPnNldENs
aWVudChwYWdlT3ZlcmxheUNsaWVudCk7Ci0gICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgp
OworICAgIGlmICghbV9wYWdlT3ZlcmxheXMpCisgICAgICAgIG1fcGFnZU92ZXJsYXlzID0gUGFn
ZU92ZXJsYXlMaXN0OjpjcmVhdGUodGhpcyk7CisKKyAgICBtX3BhZ2VPdmVybGF5cy0+YWRkQ2xp
ZW50KHBhZ2VPdmVybGF5Q2xpZW50KTsKKyAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsK
K30KKwordm9pZCBXZWJWaWV3SW1wbDo6cmVtb3ZlV2ViUGFnZU92ZXJsYXlDbGllbnQoV2ViUGFn
ZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQoreworICAgIGlmIChtX3BhZ2VPdmVy
bGF5cyAmJiBtX3BhZ2VPdmVybGF5cy0+cmVtb3ZlQ2xpZW50KHBhZ2VPdmVybGF5Q2xpZW50KSkg
ewogICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAobV9wYWdlT3ZlcmxheSkgewotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+Y2xl
YXIoKTsKLSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXkgPSBudWxscHRyOwotICAgICAgICAgICAg
c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIH0KKworICAgICAgICBpZiAobV9w
YWdlT3ZlcmxheXMtPmVtcHR5KCkpCisgICAgICAgICAgICBtX3BhZ2VPdmVybGF5cyA9IG51bGxw
dHI7CiAgICAgfQogfQogCkBAIC0yODYwLDggKzI4NjEsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpz
ZXRJc0FjY2VsZXJhdGVkQ29tcG9zCiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVD
b21wb3NpdG9yKG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRvcklkZW50aWZpZXIoKSk7CiAgICAg
ICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7CiAgICAgICAg
ICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYg
KG1fcGFnZU92ZXJsYXkpCi0gICAgICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7
CisgICAgICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXMpCisgICAgICAgICAgICAgICAgbV9wYWdl
T3ZlcmxheXMtPnVwZGF0ZSgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9sYXll
clRyZWVIb3N0LmNsZWFyKCk7CiAgICAgICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC5jbGVhcigpOwpAQCAtMjk0Miw4ICsyOTQzLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZGlkUmVj
cmVhdGVHcmFwaGljc0NvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fcGFn
ZU92ZXJsYXkpCi0gICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOworICAgIGlmIChtX3Bh
Z2VPdmVybGF5cykKKyAgICAgICAgbV9wYWdlT3ZlcmxheXMtPnVwZGF0ZSgpOwogfQogCiB2b2lk
IFdlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHJldmlzaW9uIDEwMTI2NCkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCIKLSNpbmNsdWRlICJQ
YWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5TGlzdC5oIgogI2luY2x1ZGUgIlVz
ZXJNZWRpYUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC05Myw2ICs5Myw3IEBAIGNsYXNzIFdlYkltYWdlOwog
Y2xhc3MgV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFdlYk1vdXNlRXZlbnQ7CiBjbGFzcyBXZWJN
b3VzZVdoZWVsRXZlbnQ7CitjbGFzcyBXZWJQYWdlT3ZlcmxheUNsaWVudDsKIGNsYXNzIFdlYlNl
dHRpbmdzSW1wbDsKIGNsYXNzIFdlYlRvdWNoRXZlbnQ7CiAKQEAgLTIyNyw2ICsyMjgsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmFj
dGl2ZUJhY2tncm91bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGluYWN0aXZlRm9yZWdyb3VuZENvbG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9uKHVuc2lnbmVkIGFjdGlvbik7CisgICAgdmlydHVh
bCB2b2lkIGFkZFdlYlBhZ2VPdmVybGF5Q2xpZW50KFdlYlBhZ2VPdmVybGF5Q2xpZW50Kik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVdlYlBhZ2VPdmVybGF5Q2xpZW50KFdlYlBhZ2VPdmVybGF5
Q2xpZW50Kik7CiAKICAgICAvLyBDQ0xheWVyVHJlZUhvc3RDbGllbnQKICAgICB2aXJ0dWFsIHZv
aWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwpAQCAtMjQyLDggKzI0
NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFs
dWUpOwogICAgIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlKiBkZXZUb29sc0FnZW50UHJpdmF0ZSgp
IHsgcmV0dXJuIG1fZGV2VG9vbHNBZ2VudC5nZXQoKTsgfQogCi0gICAgUGFnZU92ZXJsYXkqIHBh
Z2VPdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheS5nZXQoKTsgfQotICAgIHZv
aWQgc2V0UGFnZU92ZXJsYXlDbGllbnQoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50Kik7
CisgICAgUGFnZU92ZXJsYXlMaXN0KiBwYWdlT3ZlcmxheXMoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2VPdmVybGF5cy5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRPdmVybGF5TGF5ZXIoV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopOwogCkBAIC01NzEsOCArNTczLDExIEBAIHByaXZhdGU6CiAgICAgLy8g
VGhlIHBvcHVwIGFzc29jaWF0ZWQgd2l0aCBhIHNlbGVjdCBlbGVtZW50LgogICAgIFJlZlB0cjxX
ZWJDb3JlOjpQb3B1cENvbnRhaW5lcj4gbV9zZWxlY3RQb3B1cDsKIAorICAgIC8vIFRoZSBEZXZU
b29scyBhZ2VudC4KICAgICBPd25QdHI8V2ViRGV2VG9vbHNBZ2VudFByaXZhdGU+IG1fZGV2VG9v
bHNBZ2VudDsKLSAgICBPd25QdHI8UGFnZU92ZXJsYXk+IG1fcGFnZU92ZXJsYXk7CisKKyAgICAv
LyBQYWdlT3ZlcmxheXMgZm9yIHRoaXMgV2ViVmlldy4KKyAgICBPd25QdHI8UGFnZU92ZXJsYXlM
aXN0PiBtX3BhZ2VPdmVybGF5czsKIAogICAgIC8vIFdoZXRoZXIgdGhlIHdlYnZpZXcgaXMgcmVu
ZGVyaW5nIHRyYW5zcGFyZW50bHkuCiAgICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116995</attachid>
            <date>2011-11-29 10:24:06 -0800</date>
            <delta_ts>2011-11-30 13:49:50 -0800</delta_ts>
            <desc>Updated patch 1</desc>
            <filename>webkit_73235.1.patch</filename>
            <type>text/plain</type>
            <size>27962</size>
            <attacher name="xiyuan">xiyuan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDEzOTQpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUy
IEBACisyMDExLTExLTI5ICBYaXl1YW4gWGlhICA8eGl5dWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFN1cHBvcnQgYWRkaW5nL3JlbW92aW5nIHBhZ2Ugb3ZlcmxheSB0byBX
ZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaDogQWRk
ZWQuCisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJs
YXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6T3Zl
cmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpP
dmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6OnBhaW50Q29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6Ok92ZXJsYXlHcmFwaGljc0xh
eWVyQ2xpZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5OjpwYWludFdlYkZy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OmludmFsaWRhdGVXZWJGcmFtZSk6
CisgICAgICAgICogc3JjL1BhZ2VPdmVybGF5Lmg6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVy
bGF5OjpjbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6c2V0Q2xpZW50KToK
KyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXlMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OlBhZ2VPdmVybGF5TGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJs
YXlMaXN0OjpQYWdlT3ZlcmxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxp
c3Q6On5QYWdlT3ZlcmxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6
OmFkZENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6cmVtb3ZlQ2xp
ZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0Ojp1cGRhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OnBhaW50V2ViRnJhbWUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlT3ZlcmxheUxpc3Q6OmZpbmRDbGllbnQpOgorICAgICAgICAqIHNyYy9QYWdlT3Zl
cmxheUxpc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6ZW1w
dHkpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWludFBhZ2VPdmVybGF5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnBhZ2VPdmVybGF5Wk9yZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZ2hsaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKiBz
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpwYWludFdpdGhDb250ZXh0KToKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFkZFdlYlBhZ2VP
dmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVdlYlBhZ2VPdmVy
bGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkaWRSZWNyZWF0
ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWdlT3ZlcmxheXMpOgorCiAyMDExLTExLTI5ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBzcGxpdCBQcmVmZXJlbmNlcyBpbnRvIFByZWZlcmVuY2VzIGFuZCBDYXBhYmlsaXRpZXMuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiAxMDEyNjQpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw2ICsy
NTgsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUHJlc2VudGVy
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbkNh
bGxiYWNrLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViT3B0aW9uRWxlbWVudC5oJywK
KyAgICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VPdmVybGF5Q2xpZW50LmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCcsCkBAIC00MzQsNiArNDM1LDggQEAKICAgICAg
ICAgICAgICAgICAnc3JjL3BhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
UGFnZU92ZXJsYXkuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheUxpc3QuY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5TGlzdC5oJywKICAgICAgICAgICAg
ICAgICAnc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oJywKICAgICAgICAgICAgICAgICAn
c3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlT3ZlcmxheUNsaWVudC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLgorICogT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBh
Z2VPdmVybGF5Q2xpZW50X2gKKyNkZWZpbmUgV2ViUGFnZU92ZXJsYXlDbGllbnRfaAorCisjaW5j
bHVkZSAiV2ViQ2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdl
T3ZlcmxheUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gUGFpbnRzIHBhZ2Ugb3ZlcmxheSBjb250
ZW50cy4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdlT3ZlcmxheShXZWJDYW52YXMqKSA9IDA7
CisKKyAgICAvLyBSZXR1cm5zIHotb3JkZXIgb2YgdGhpcyBwYWdlIG92ZXJsYXkuIFBhZ2Ugb3Zl
cmxheSB3aXRoIGxhcmdlciB6LW9yZGVyCisgICAgLy8gbnVtYmVyIGlzIHBhaW50ZWQgbGF0ZXIu
IFRoYXQgaXMsIGl0IHNob3dzIGFib3ZlIHBhZ2Ugb3ZlcmxheXMgd2l0aAorICAgIC8vIHNtYWxs
ZXIgei1vcmRlciBudW1iZXIuCisgICAgdmlydHVhbCBpbnQgcGFnZU92ZXJsYXlaT3JkZXIoKSBj
b25zdCA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlBh
Z2VPdmVybGF5Q2xpZW50X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlBhZ2VPdmVybGF5Q2xpZW50LmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXcuaAkocmV2aXNpb24gMTAxMjY0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFdlYkZy
YW1lOwogY2xhc3MgV2ViRnJhbWVDbGllbnQ7CiBjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsK
IGNsYXNzIFdlYk5vZGU7CitjbGFzcyBXZWJQYWdlT3ZlcmxheUNsaWVudDsKIGNsYXNzIFdlYlBl
cm1pc3Npb25DbGllbnQ7CiBjbGFzcyBXZWJTZXR0aW5nczsKIGNsYXNzIFdlYlNwZWxsQ2hlY2tD
bGllbnQ7CkBAIC00MDksNiArNDEwLDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0luaXRpYWxTdGF0ZSkg
eyB9CiAKKyAgICAvLyBQYWdlT3ZlcmxheSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBBZGRzL3JlbW92ZXMgcGFnZSBv
dmVybGF5IHRvIHRoaXMgV2ViVmlldy4gVGhlc2UgZnVuY3Rpb25zIGNoYW5nZSB0aGUKKyAgICAv
LyBncmFwaGNpY2FsIGFwcGVyYW5jZSBvZiB0aGUgV2ViVmlldy4gV2ViUGFnZU92ZXJsYXlDbGll
bnQgcGFpbnRzIHRoZQorICAgIC8vIGNvbnRlbnRzIG9mIHRoZSBwYWdlIG92ZXJsYXkuIEl0IGFs
c28gcHJvdmlkZXMgYW4gei1vcmRlciBudW1iZXIgZm9yCisgICAgLy8gdGhlIHBhZ2Ugb3Zlcmxh
eS4gVGhlIHotb3JkZXIgbnVtYmVyIGRlZmluZXMgdGhlIHBhaW50IG9yZGVyIHRoZSBwYWdlCisg
ICAgLy8gb3ZlcmxheXMuIFBhZ2Ugb3ZlcmxheXMgd2l0aCBsYXJnZXIgei1vcmRlciBudW1iZXIg
d2lsbCBiZSBwYWludGVkIGFmdGVyCisgICAgLy8gcGFnZSBvdmVybGF5cyB3aXRoIHNtYWxsZXIg
ei1vcmRlciBudW1iZXIuIFRoYXQgaXMsIHRoZXkgYXBwZWFyIGFib3ZlCisgICAgLy8gdGhlIHBh
Z2Ugb3ZlcmxheXMgd2l0aCBzbWFsbGVyIHotb3JkZXIgbnVtYmVyLiBJZiB0d28gcGFnZSBvdmVy
bGF5cyBoYXZlCisgICAgLy8gdGhlIHNhbWUgei1vcmRlciBudW1iZXIsIHRoZSBsYXRlciBhZGRl
ZCBvbmUgd2lsbCBiZSBvbiB0b3AuCisgICAgdmlydHVhbCB2b2lkIGFkZFdlYlBhZ2VPdmVybGF5
KFdlYlBhZ2VPdmVybGF5Q2xpZW50KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVXZWJQ
YWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheUNsaWVudCopID0gMDsKIAogICAgIC8vIFRlc3Rpbmcg
ZnVuY3Rpb25hbGl0eSBmb3IgTGF5b3V0VGVzdENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNw
cAkocmV2aXNpb24gMTAxMjY0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92
ZXJsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXlDbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKIApAQCAtNDAsMTIgKzQy
LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
UGFzc093blB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShXZWJWaWV3SW1wbCog
dmlld0ltcGwsIFBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQpCituYW1lc3BhY2UgeworCitXZWJD
YW52YXMqIFRvV2ViQ2FudmFzKEdyYXBoaWNzQ29udGV4dCogZ2MpCit7CisjaWYgV0VCS0lUX1VT
SU5HX1NLSUEKKyAgICBXZWJDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCk7CisjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKKyAgICBXZWJDYW52YXMqIGNhbnZhcyA9
IGdjLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgorICAgIHJldHVybiBjYW52YXM7Cit9CisK
K30gLy8gbmFtZXNwYWNlCisKK1Bhc3NPd25QdHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5Ojpj
cmVhdGUoV2ViVmlld0ltcGwqIHZpZXdJbXBsLCBXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50
KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZU92ZXJsYXkodmlld0ltcGwsIGNsaWVu
dCkpOwogfQogCi1QYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqIHZpZXdJbXBs
LCBQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KQorUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KFdl
YlZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkKICAgICA6
IG1fdmlld0ltcGwodmlld0ltcGwpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiB7CkBAIC01NCw3
ICs3MCw3IEBAIFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShXZWJWaWV3SW1wbCogdmkKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBPdmVybGF5R3JhcGhpY3NMYXllckNs
aWVudEltcGwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8T3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKj4g
Y3JlYXRlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5
Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxPdmVybGF5
R3JhcGhpY3NMYXllckNsaWVudEltcGwqPiBjcmVhdGUoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBs
LCBXZWJQYWdlT3ZlcmxheUNsaWVudCogcGFnZU92ZXJsYXlDbGllbnQpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCh3ZWJW
aWV3SW1wbCwgcGFnZU92ZXJsYXlDbGllbnQpKTsKICAgICB9CkBAIC02NSw5ICs4MSwxMSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBo
aWNzTGF5ZXIqKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWlu
dGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApCisgICAgdmlydHVhbCB2b2lkIHBhaW50
Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgZ2MsIEdyYXBo
aWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApCiAgICAgewotICAg
ICAgICBtX3BhZ2VPdmVybGF5Q2xpZW50LT5wYWludFBhZ2VPdmVybGF5KGNvbnRleHQpOworICAg
ICAgICBnYy5zYXZlKCk7CisgICAgICAgIG1fcGFnZU92ZXJsYXlDbGllbnQtPnBhaW50UGFnZU92
ZXJsYXkoVG9XZWJDYW52YXMoJmdjKSk7CisgICAgICAgIGdjLnJlc3RvcmUoKTsKICAgICB9CiAK
ICAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKQEAgLTkxLDEzICsx
MDksMTMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBPdmVybGF5
R3JhcGhpY3NMYXllckNsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBQYWdlT3Zl
cmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQorICAgIE92ZXJsYXlH
cmFwaGljc0xheWVyQ2xpZW50SW1wbChXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsIFdlYlBhZ2VP
dmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKICAgICAgICAgOiBtX3BhZ2VPdmVybGF5
Q2xpZW50KHBhZ2VPdmVybGF5Q2xpZW50KQogICAgICAgICAsIG1fd2ViVmlld0ltcGwod2ViVmll
d0ltcGwpCiAgICAgewogICAgIH0KIAotICAgIFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVu
dCogbV9wYWdlT3ZlcmxheUNsaWVudDsKKyAgICBXZWJQYWdlT3ZlcmxheUNsaWVudCogbV9wYWdl
T3ZlcmxheUNsaWVudDsKICAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKIH07CiAjZW5k
aWYKQEAgLTEzNSwxMyArMTUzLDE2IEBAIHZvaWQgUGFnZU92ZXJsYXk6OnVwZGF0ZSgpCiAKIHZv
aWQgUGFnZU92ZXJsYXk6OnBhaW50V2ViRnJhbWUoR3JhcGhpY3NDb250ZXh0JiBnYykKIHsKLSAg
ICBpZiAoIW1fdmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQotICAg
ICAgICBtX2NsaWVudC0+cGFpbnRQYWdlT3ZlcmxheShnYyk7CisgICAgaWYgKCFtX3ZpZXdJbXBs
LT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworICAgICAgICBnYy5zYXZlKCk7
CisgICAgICAgIG1fY2xpZW50LT5wYWludFBhZ2VPdmVybGF5KFRvV2ViQ2FudmFzKCZnYykpOwor
ICAgICAgICBnYy5yZXN0b3JlKCk7CisgICAgfQogfQogCiB2b2lkIFBhZ2VPdmVybGF5OjppbnZh
bGlkYXRlV2ViRnJhbWUoKQogewotICAgIC8vIFBhZ2VPdmVybGF5Q2xpZW50IGRvZXMgdGhlIGFj
dHVhbCBwYWludGluZyBvZiB0aGUgb3ZlcmxheS4KKyAgICAvLyBXZWJQYWdlT3ZlcmxheUNsaWVu
dCBkb2VzIHRoZSBhY3R1YWwgcGFpbnRpbmcgb2YgdGhlIG92ZXJsYXkuCiAgICAgLy8gSGVyZSB3
ZSBqdXN0IG1ha2Ugc3VyZSB0byBpbnZhbGlkYXRlLgogICAgIGlmICghbV92aWV3SW1wbC0+aXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKICAgICAgICAgLy8gRklYTUU6IGFibGUg
dG8gaW52YWxpZGF0ZSBhIHNtYWxsZXIgcmVjdC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1BhZ2VPdmVybGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGFnZU92ZXJsYXkuaAkocmV2aXNpb24gMTAxMjY0KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMzEgKzM5LDI4
IEBAIGNsYXNzIEdyYXBoaWNzTGF5ZXJDbGllbnQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViUGFnZU92ZXJsYXlDbGllbnQ7CiBjbGFzcyBXZWJWaWV3SW1wbDsKIAogY2xhc3Mg
UGFnZU92ZXJsYXkgewogcHVibGljOgotICAgIGNsYXNzIFBhZ2VPdmVybGF5Q2xpZW50IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYpID0gMDsKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8
UGFnZU92ZXJsYXk+IGNyZWF0ZShXZWJWaWV3SW1wbCosIFBhZ2VPdmVybGF5Q2xpZW50Kik7Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShXZWJWaWV3SW1wbCosIFdl
YlBhZ2VPdmVybGF5Q2xpZW50Kik7CiAKICAgICB+UGFnZU92ZXJsYXkoKSB7IH0KIAotICAgIHZv
aWQgc2V0Q2xpZW50KFBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGll
bnQ7IH0KKyAgICBXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xp
ZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CiAKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgdm9p
ZCB1cGRhdGUoKTsKICAgICB2b2lkIHBhaW50V2ViRnJhbWUoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAgUGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqLCBQYWdlT3Zl
cmxheUNsaWVudCopOworICAgIFBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiwgV2ViUGFnZU92ZXJs
YXlDbGllbnQqKTsKICAgICB2b2lkIGludmFsaWRhdGVXZWJGcmFtZSgpOwogCiAgICAgV2ViVmll
d0ltcGwqIG1fdmlld0ltcGw7Ci0gICAgUGFnZU92ZXJsYXlDbGllbnQqIG1fY2xpZW50OworICAg
IFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBtX2NsaWVudDsKICAgICBPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gbV9sYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNs
aWVudD4gbV9sYXllckNsaWVudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9QYWdlT3ZlcmxheUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBHT09HTEUgSU5DLgorICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UGFnZU92ZXJsYXlMaXN0LmgiCisKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUg
IldlYlBhZ2VPdmVybGF5Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NPd25QdHI8UGFnZU92ZXJsYXlMaXN0PiBQYWdlT3Zlcmxh
eUxpc3Q6OmNyZWF0ZShXZWJWaWV3SW1wbCogdmlld0ltcGwpCit7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBQYWdlT3ZlcmxheUxpc3Qodmlld0ltcGwpKTsKK30KKworUGFnZU92ZXJsYXlMaXN0
OjpQYWdlT3ZlcmxheUxpc3QoV2ViVmlld0ltcGwqIHZpZXdJbXBsKQorICAgIDogbV92aWV3SW1w
bCh2aWV3SW1wbCkKK3sKK30KKworUGFnZU92ZXJsYXlMaXN0Ojp+UGFnZU92ZXJsYXlMaXN0KCkK
K3sKK30KKworYm9vbCBQYWdlT3ZlcmxheUxpc3Q6OmFkZENsaWVudChXZWJQYWdlT3ZlcmxheUNs
aWVudCogY2xpZW50KQoreworICAgIGJvb2wgYWRkZWQgPSBmYWxzZTsKKyAgICBzaXplX3QgaW5k
ZXggPSBmaW5kQ2xpZW50KGNsaWVudCk7CisgICAgaWYgKGluZGV4ID09IFdURjo6bm90Rm91bmQp
IHsKKyAgICAgICAgT3duUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3ZlcmxheSA9IFBhZ2VPdmVybGF5
OjpjcmVhdGUobV92aWV3SW1wbCwgY2xpZW50KTsKKyAgICAgICAgbV9wYWdlT3ZlcmxheXMuYXBw
ZW5kKHBhZ2VPdmVybGF5LnJlbGVhc2UoKSk7CisgICAgICAgIGluZGV4ID0gbV9wYWdlT3Zlcmxh
eXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgYWRkZWQgPSB0cnVlOworICAgIH0KKworICAgIFBhZ2VP
dmVybGF5KiBwYWdlT3ZlcmxheSA9IG1fcGFnZU92ZXJsYXlzW2luZGV4XS5nZXQoKTsKKworICAg
IC8vIEFkanVzdCBwYWdlIG92ZXJsYXkgbGlzdCBvcmRlciBiYXNlZCBvbiB0aGVpciB6LW9yZGVy
IG51bWJlcnMuIFdlIGZpcnN0CisgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBtb3ZlIHRoZSBv
dmVybGF5IHVwIGFuZCBkbyBzbyBpZiBuZWVkZWQuIE90aGVyd2lzZSwKKyAgICAvLyBjaGVjayBp
ZiB3ZSBuZWVkIHRvIG1vdmUgaXQgZG93bi4KKyAgICBib29sIHpvcmRlckNoYW5nZWQgPSBmYWxz
ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkgKyAxIDwgbV9wYWdlT3ZlcmxheXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzW2ldLT5jbGllbnQoKS0+cGFn
ZU92ZXJsYXlaT3JkZXIoKSA+PSBtX3BhZ2VPdmVybGF5c1tpICsgMV0tPmNsaWVudCgpLT5wYWdl
T3ZlcmxheVpPcmRlcigpKSB7CisgICAgICAgICAgICBtX3BhZ2VPdmVybGF5c1tpXS5zd2FwKG1f
cGFnZU92ZXJsYXlzW2kgKyAxXSk7CisgICAgICAgICAgICB6b3JkZXJDaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghem9yZGVyQ2hhbmdlZCkgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gaW5kZXg7IGkgPj0gMTsgLS1pKSB7CisgICAgICAgICAgICBpZiAobV9w
YWdlT3ZlcmxheXNbaV0tPmNsaWVudCgpLT5wYWdlT3ZlcmxheVpPcmRlcigpIDwgbV9wYWdlT3Zl
cmxheXNbaSAtIDFdLT5jbGllbnQoKS0+cGFnZU92ZXJsYXlaT3JkZXIoKSkgeworICAgICAgICAg
ICAgICAgIG1fcGFnZU92ZXJsYXlzW2ldLnN3YXAobV9wYWdlT3ZlcmxheXNbaSAtIDFdKTsKKyAg
ICAgICAgICAgICAgICB6b3JkZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIGRpZCBtb3ZlIHRoZSBvdmVybGF5LCB0aGF0IG1l
YW5zIHotb3JkZXIgaXMgY2hhbmdlZCBhbmQgd2UgbmVlZCB0bworICAgIC8vIHVwZGF0ZSBvdmVy
bGF5IGxheWVycycgei1vcmRlci4gT3RoZXJ3aXNlLCBqdXN0IHVwZGF0ZSBjdXJyZW50IG92ZXJs
YXkuCisgICAgaWYgKHpvcmRlckNoYW5nZWQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3BhZ2VPdmVybGF5cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcGFnZU92ZXJs
YXlzW2ldLT5jbGVhcigpOworICAgICAgICB1cGRhdGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
cGFnZU92ZXJsYXktPnVwZGF0ZSgpOworCisgICAgcmV0dXJuIGFkZGVkOworfQorCitib29sIFBh
Z2VPdmVybGF5TGlzdDo6cmVtb3ZlQ2xpZW50KFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQp
Cit7CisgICAgc2l6ZV90IGluZGV4ID0gZmluZENsaWVudChjbGllbnQpOworICAgIGlmIChpbmRl
eCA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3BhZ2VP
dmVybGF5c1tpbmRleF0tPmNsZWFyKCk7CisgICAgbV9wYWdlT3ZlcmxheXMucmVtb3ZlKGluZGV4
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUxpc3Q6OnVwZGF0ZSgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VPdmVybGF5cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPnVwZGF0ZSgpOworfQorCit2b2lkIFBhZ2VP
dmVybGF5TGlzdDo6cGFpbnRXZWJGcmFtZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdjKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyArK2kp
CisgICAgICAgIG1fcGFnZU92ZXJsYXlzW2ldLT5wYWludFdlYkZyYW1lKGdjKTsKK30KKworc2l6
ZV90IFBhZ2VPdmVybGF5TGlzdDo6ZmluZENsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xp
ZW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdlT3ZlcmxheXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzW2ldLT5jbGllbnQoKSA9PSBjbGll
bnQpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bm90Rm91
bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9QYWdlT3ZlcmxheUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBH
T09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEdPT0dMRSBJTkMuCisgKiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJsYXlMaXN0X2gKKyNkZWZpbmUg
UGFnZU92ZXJsYXlMaXN0X2gKKworI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VPdmVybGF5Q2xp
ZW50OworY2xhc3MgV2ViVmlld0ltcGw7CisKK2NsYXNzIFBhZ2VPdmVybGF5TGlzdCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZU92ZXJsYXlMaXN0PiBjcmVhdGUoV2ViVmll
d0ltcGwqKTsKKworICAgIH5QYWdlT3ZlcmxheUxpc3QoKTsKKworICAgIGJvb2wgZW1wdHkoKSBj
b25zdCB7IHJldHVybiAhbV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyB9CisKKyAgICAvLyBBZGRzL3Jl
bW92ZXMgYSBQYWdlT3ZlcmxheSBmb3IgZ2l2ZW4gY2xpZW50LgorICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiBhIFBhZ2VPdmVybGF5IGlzIGFkZGVkL3JlbW92ZWQuCisgICAgYm9vbCBhZGRDbGllbnQo
V2ViUGFnZU92ZXJsYXlDbGllbnQqKTsKKyAgICBib29sIHJlbW92ZUNsaWVudChXZWJQYWdlT3Zl
cmxheUNsaWVudCopOworCisgICAgdm9pZCB1cGRhdGUoKTsKKyAgICB2b2lkIHBhaW50V2ViRnJh
bWUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBW
ZWN0b3I8T3duUHRyPFBhZ2VPdmVybGF5PiwgMj4gUGFnZU92ZXJsYXlzOworCisgICAgZXhwbGlj
aXQgUGFnZU92ZXJsYXlMaXN0KFdlYlZpZXdJbXBsKik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBp
bmRleCBvZiB0aGUgY2xpZW50IGZvdW5kLiBPdGhlcndpc2UsIHJldHVybnMgV1RGOjpub3RGb3Vu
ZC4KKyAgICBzaXplX3QgZmluZENsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCopOworCisgICAg
V2ViVmlld0ltcGwqIG1fdmlld0ltcGw7CisgICAgUGFnZU92ZXJsYXlzIG1fcGFnZU92ZXJsYXlz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlT3ZlcmxheUxp
c3RfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFn
ZU92ZXJsYXlMaXN0LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcAkocmV2aXNpb24gMTAxMjY0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4
IEBACiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJQYWdl
U2NyaXB0RGVidWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRleHRC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC0yNzIsMjIgKzI3Miwy
NyBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpicmluZ0Zyb250ZW5kCiB7CiB9CiAKLS8v
IFBhZ2VPdmVybGF5Q2xpZW50Ci12b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWludFBhZ2VP
dmVybGF5KEdyYXBoaWNzQ29udGV4dCYgZ2MpCisvLyBXZWJQYWdlT3ZlcmxheUNsaWVudAordm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cGFpbnRQYWdlT3ZlcmxheShXZWJDYW52YXMqIGNhbnZh
cykKIHsKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIo
KTsKICAgICBpZiAoaWMpCi0gICAgICAgIGljLT5kcmF3SGlnaGxpZ2h0KGdjKTsKKyAgICAgICAg
aWMtPmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0QnVpbGRlcihjYW52YXMpLmNvbnRleHQo
KSk7Cit9CisKK2ludCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cGFnZU92ZXJsYXlaT3JkZXIoKSBj
b25zdAoreworICAgIHJldHVybiA5OTsKIH0KIAogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6
aGlnaGxpZ2h0KCkKIHsKLSAgICBtX3dlYlZpZXdJbXBsLT5zZXRQYWdlT3ZlcmxheUNsaWVudCh0
aGlzKTsKKyAgICBtX3dlYlZpZXdJbXBsLT5hZGRXZWJQYWdlT3ZlcmxheSh0aGlzKTsKIH0KIAog
dm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aGlkZUhpZ2hsaWdodCgpCiB7Ci0gICAgbV93ZWJW
aWV3SW1wbC0+c2V0UGFnZU92ZXJsYXlDbGllbnQoMCk7CisgICAgbV93ZWJWaWV3SW1wbC0+cmVt
b3ZlV2ViUGFnZU92ZXJsYXkodGhpcyk7CiB9CiAKIGJvb2wgV2ViRGV2VG9vbHNBZ2VudEltcGw6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgJKHJl
dmlzaW9uIDEwMTI2NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKIAogI2luY2x1ZGUg
Ikluc3BlY3RvckNsaWVudC5oIgogCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRl
ICJXZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VPdmVybGF5Q2xp
ZW50LmgiCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGE7CiAKIGNs
YXNzIFdlYkRldlRvb2xzQWdlbnRJbXBsIDogcHVibGljIFdlYkRldlRvb2xzQWdlbnRQcml2YXRl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9y
Q2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgUGFnZU92ZXJsYXk6
OlBhZ2VPdmVybGF5Q2xpZW50IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFdlYlBhZ2VPdmVybGF5Q2xpZW50IHsKIHB1YmxpYzoKICAgICBXZWJEZXZUb29sc0FnZW50SW1w
bChXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGNsaWVu
dCk7CiAgICAgdmlydHVhbCB+V2ViRGV2VG9vbHNBZ2VudEltcGwoKTsKQEAgLTk3LDggKzk3LDkg
QEAgcHVibGljOgogCiAgICAgaW50IGhvc3RJZCgpIHsgcmV0dXJuIG1faG9zdElkOyB9CiAKLSAg
ICAvLyBQYWdlT3ZlcmxheUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIC8vIFdlYlBhZ2VPdmVybGF5Q2xpZW50
CisgICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ2FudmFzKik7CisgICAgdmly
dHVhbCBpbnQgcGFnZU92ZXJsYXlaT3JkZXIoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDEw
MTI2NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwNjMsOCArMjA2Myw4IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpwYWlu
dFdpdGhDb250ZXh0KEdyYXAKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZVZp
ZXcoKSkgewogICAgICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7CiAgICAgICAgIGZyYW1lVmlldygp
LT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7Ci0gICAgICAgIGlmICh2aWV3SW1wbCgpLT5wYWdlT3Zl
cmxheSgpKQotICAgICAgICAgICAgdmlld0ltcGwoKS0+cGFnZU92ZXJsYXkoKS0+cGFpbnRXZWJG
cmFtZShnYyk7CisgICAgICAgIGlmICh2aWV3SW1wbCgpLT5wYWdlT3ZlcmxheXMoKSkKKyAgICAg
ICAgICAgIHZpZXdJbXBsKCktPnBhZ2VPdmVybGF5cygpLT5wYWludFdlYkZyYW1lKGdjKTsKICAg
ICB9IGVsc2UKICAgICAgICAgZ2MuZmlsbFJlY3QoZGlydHlSZWN0LCBDb2xvcjo6d2hpdGUsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIGdjLnJlc3RvcmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDEwMTI2NCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI1Myw4ICsxMjUzLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wpCiAg
ICAgICAgIGlmICghcGFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICht
X3BhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CisgICAg
ICAgIGlmIChtX3BhZ2VPdmVybGF5cykKKyAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlzLT51cGRh
dGUoKTsKIAogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0ZSgpOwogICAgIH0KQEAg
LTI1OTksMjEgKzI1OTksMjIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SWdub3JlSW5wdXRFdmVu
dHMoYgogICAgIG1faWdub3JlSW5wdXRFdmVudHMgPSBuZXdWYWx1ZTsKIH0KIAotdm9pZCBXZWJW
aWV3SW1wbDo6c2V0UGFnZU92ZXJsYXlDbGllbnQoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5Q2xp
ZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKK3ZvaWQgV2ViVmlld0ltcGw6OmFkZFdlYlBhZ2VPdmVy
bGF5KFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKIHsKLSAgICBpZiAo
cGFnZU92ZXJsYXlDbGllbnQpIHsKLSAgICAgICAgaWYgKCFtX3BhZ2VPdmVybGF5KQotICAgICAg
ICAgICAgbV9wYWdlT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgcGFnZU92ZXJs
YXlDbGllbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5LT5zZXRD
bGllbnQocGFnZU92ZXJsYXlDbGllbnQpOwotICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUo
KTsKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzKQorICAgICAgICBtX3BhZ2VPdmVybGF5cyA9IFBh
Z2VPdmVybGF5TGlzdDo6Y3JlYXRlKHRoaXMpOworCisgICAgbV9wYWdlT3ZlcmxheXMtPmFkZENs
aWVudChwYWdlT3ZlcmxheUNsaWVudCk7CisgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7
Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVdlYlBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVy
bGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKK3sKKyAgICBpZiAobV9wYWdlT3ZlcmxheXMg
JiYgbV9wYWdlT3ZlcmxheXMtPnJlbW92ZUNsaWVudChwYWdlT3ZlcmxheUNsaWVudCkpIHsKICAg
ICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKG1fcGFnZU92ZXJsYXkpIHsKLSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXktPmNsZWFyKCk7
Ci0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHNldFJv
b3RMYXllck5lZWRzRGlzcGxheSgpOwotICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fcGFnZU92
ZXJsYXlzLT5lbXB0eSgpKQorICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBudWxscHRyOwog
ICAgIH0KIH0KIApAQCAtMjg2MCw4ICsyODYxLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNB
Y2NlbGVyYXRlZENvbXBvcwogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQ29tcG9z
aXRvcihtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOwogICAgICAgICAg
ICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAg
bV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtX3Bh
Z2VPdmVybGF5KQotICAgICAgICAgICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOworICAg
ICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQorICAgICAgICAgICAgICAgIG1fcGFnZU92ZXJs
YXlzLT51cGRhdGUoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC5jbGVhcigpOwogICAgICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QuY2xl
YXIoKTsKQEAgLTI5NDIsOCArMjk0Myw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRpZFJlY3JlYXRl
R3JhcGhpY3NDb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3BhZ2VPdmVy
bGF5KQotICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKKyAgICBpZiAobV9wYWdlT3Zl
cmxheXMpCisgICAgICAgIG1fcGFnZU92ZXJsYXlzLT51cGRhdGUoKTsKIH0KIAogdm9pZCBXZWJW
aWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAxMDEyNjQpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCi0jaW5jbHVkZSAiUGFnZU92
ZXJsYXkuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUxpc3QuaCIKICNpbmNsdWRlICJVc2VyTWVk
aWFDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgpAQCAtOTMsNiArOTMsNyBAQCBjbGFzcyBXZWJJbWFnZTsKIGNsYXNz
IFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwogY2xhc3MgV2ViTW91c2VX
aGVlbEV2ZW50OworY2xhc3MgV2ViUGFnZU92ZXJsYXlDbGllbnQ7CiBjbGFzcyBXZWJTZXR0aW5n
c0ltcGw7CiBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCkBAIC0yMjcsNiArMjI4LDggQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5hY3RpdmVC
YWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbmFjdGl2ZUZvcmVncm91bmRDb2xvcik7CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1D
dXN0b21Db250ZXh0TWVudUFjdGlvbih1bnNpZ25lZCBhY3Rpb24pOworICAgIHZpcnR1YWwgdm9p
ZCBhZGRXZWJQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheUNsaWVudCopOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVXZWJQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheUNsaWVudCopOwogCiAgICAg
Ly8gQ0NMYXllclRyZWVIb3N0Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlv
dXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKQEAgLTI0Miw4ICsyNDUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRJZ25vcmVJbnB1dEV2ZW50cyhib29sIG5ld1ZhbHVlKTsKICAgICBXZWJEZXZU
b29sc0FnZW50UHJpdmF0ZSogZGV2VG9vbHNBZ2VudFByaXZhdGUoKSB7IHJldHVybiBtX2RldlRv
b2xzQWdlbnQuZ2V0KCk7IH0KIAotICAgIFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSgpIGNvbnN0
IHsgcmV0dXJuIG1fcGFnZU92ZXJsYXkuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFBhZ2VPdmVybGF5
Q2xpZW50KFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCopOworICAgIFBhZ2VPdmVybGF5
TGlzdCogcGFnZU92ZXJsYXlzKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheXMuZ2V0KCk7
IH0KIAogICAgIHZvaWQgc2V0T3ZlcmxheUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsK
IApAQCAtNTcxLDggKzU3MywxMSBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBwb3B1cCBhc3NvY2lh
dGVkIHdpdGggYSBzZWxlY3QgZWxlbWVudC4KICAgICBSZWZQdHI8V2ViQ29yZTo6UG9wdXBDb250
YWluZXI+IG1fc2VsZWN0UG9wdXA7CiAKKyAgICAvLyBUaGUgRGV2VG9vbHMgYWdlbnQuCiAgICAg
T3duUHRyPFdlYkRldlRvb2xzQWdlbnRQcml2YXRlPiBtX2RldlRvb2xzQWdlbnQ7Ci0gICAgT3du
UHRyPFBhZ2VPdmVybGF5PiBtX3BhZ2VPdmVybGF5OworCisgICAgLy8gUGFnZU92ZXJsYXlzIGZv
ciB0aGlzIFdlYlZpZXcuCisgICAgT3duUHRyPFBhZ2VPdmVybGF5TGlzdD4gbV9wYWdlT3Zlcmxh
eXM7CiAKICAgICAvLyBXaGV0aGVyIHRoZSB3ZWJ2aWV3IGlzIHJlbmRlcmluZyB0cmFuc3BhcmVu
dGx5LgogICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117264</attachid>
            <date>2011-11-30 13:49:50 -0800</date>
            <delta_ts>2011-11-30 15:57:04 -0800</delta_ts>
            <desc>Use getDirtyRect to avoid unnecessary paint and fixed a webview resize issue</desc>
            <filename>webkit_73235.2.patch</filename>
            <type>text/plain</type>
            <size>29709</size>
            <attacher name="xiyuan">xiyuan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDE1NTApCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0
IEBACisyMDExLTExLTMwICBYaXl1YW4gWGlhICA8eGl5dWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFN1cHBvcnQgYWRkaW5nL3JlbW92aW5nIHBhZ2Ugb3ZlcmxheSB0byBX
ZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaDogQWRk
ZWQuCisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJs
YXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6T3Zl
cmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpP
dmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6OnBhaW50Q29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6Ok92ZXJsYXlHcmFwaGljc0xh
eWVyQ2xpZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5Ojp1cGRhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6cGFpbnRXZWJGcmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VPdmVybGF5OjppbnZhbGlkYXRlV2ViRnJhbWUpOgorICAgICAgICAqIHNyYy9Q
YWdlT3ZlcmxheS5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xpZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OnNldENsaWVudCk6CisgICAgICAgICogc3JjL1Bh
Z2VPdmVybGF5TGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxp
c3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6UGFnZU92ZXJs
YXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0Ojp+UGFnZU92ZXJsYXlM
aXN0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0OjphZGRDbGllbnQpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92
ZXJsYXlMaXN0OjpwYWludFdlYkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlM
aXN0OjpmaW5kQ2xpZW50KToKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXlMaXN0Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OmVtcHR5KToKKyAgICAgICAgKiBz
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29s
c0FnZW50SW1wbDo6cGFpbnRQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRv
b2xzQWdlbnRJbXBsOjpwYWdlT3ZlcmxheVpPcmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dlRvb2xzQWdlbnRJbXBsOjpnZXREaXJ0eVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZU
b29sc0FnZW50SW1wbDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNB
Z2VudEltcGw6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUltcGw6OnBhaW50V2l0aENvbnRleHQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YWRkV2ViUGFnZU92ZXJsYXkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlV2ViUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnBhZ2VPdmVybGF5cyk6CisKIDIwMTEtMTEtMzAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1h
bkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGdldCByaWQgb2YgZGVmZXJy
ZWQgYmFja2VuZC0+ZnJvbnQtZW5kIGNvbW1hbmRzIHByb2Nlc3NpbmcuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiAxMDE1NDgpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw2ICsyNTgsNyBAQAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViT3B0aW9uRWxlbWVudC5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlBhZ2VPdmVybGF5Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQ
YWdlU2VyaWFsaXplckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VW
aXNpYmlsaXR5U3RhdGUuaCcsCkBAIC00MzUsNiArNDM2LDggQEAKICAgICAgICAgICAgICAgICAn
c3JjL3BhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9QYWdlT3ZlcmxheS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXku
aCcsCisgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheUxpc3QuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1BhZ2VPdmVybGF5TGlzdC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1BsYXRmb3Jt
U3VwcG9ydC5jcHAnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFn
ZU92ZXJsYXlDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJQYWdlT3ZlcmxheUNsaWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLgorICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhZ2VPdmVybGF5Q2xp
ZW50X2gKKyNkZWZpbmUgV2ViUGFnZU92ZXJsYXlDbGllbnRfaAorCisjaW5jbHVkZSAiV2ViQ2Fu
dmFzLmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViUGFnZU92ZXJsYXlDbGllbnQgeworcHVibGljOgorICAgIC8vIFBhaW50cyBwYWdlIG92
ZXJsYXkgY29udGVudHMuCisgICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ2Fu
dmFzKikgPSAwOworCisgICAgLy8gUmV0dXJucyB6LW9yZGVyIG9mIHRoaXMgcGFnZSBvdmVybGF5
LiBQYWdlIG92ZXJsYXkgd2l0aCBsYXJnZXIgei1vcmRlcgorICAgIC8vIG51bWJlciBpcyBwYWlu
dGVkIGxhdGVyLiBUaGF0IGlzLCBpdCBzaG93cyBhYm92ZSBwYWdlIG92ZXJsYXlzIHdpdGgKKyAg
ICAvLyBzbWFsbGVyIHotb3JkZXIgbnVtYmVyLgorICAgIHZpcnR1YWwgaW50IHBhZ2VPdmVybGF5
Wk9yZGVyKCkgY29uc3QgPSAwOworCisgICAgLy8gUmV0dXJucyBkaXJ0eSByZWN0IHRoYXQgbmVl
ZHMgcmVwYWludC4KKyAgICB2aXJ0dWFsIFdlYlJlY3QgZ2V0RGlydHlSZWN0KCkgY29uc3QgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQYWdlT3Zlcmxh
eUNsaWVudF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJQYWdlT3ZlcmxheUNsaWVudC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgJ
KHJldmlzaW9uIDEwMTU0OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBXZWJGcmFtZTsKIGNs
YXNzIFdlYkZyYW1lQ2xpZW50OwogY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBX
ZWJOb2RlOworY2xhc3MgV2ViUGFnZU92ZXJsYXlDbGllbnQ7CiBjbGFzcyBXZWJQZXJtaXNzaW9u
Q2xpZW50OwogY2xhc3MgV2ViU2V0dGluZ3M7CiBjbGFzcyBXZWJTcGVsbENoZWNrQ2xpZW50OwpA
QCAtNDA5LDYgKzQxMCwxOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2liaWxp
dHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNJbml0aWFsU3RhdGUpIHsgfQogCisg
ICAgLy8gUGFnZU92ZXJsYXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gQWRkcy9yZW1vdmVzIHBhZ2Ugb3ZlcmxheSB0
byB0aGlzIFdlYlZpZXcuIFRoZXNlIGZ1bmN0aW9ucyBjaGFuZ2UgdGhlCisgICAgLy8gZ3JhcGhj
aWNhbCBhcHBlcmFuY2Ugb2YgdGhlIFdlYlZpZXcuIFdlYlBhZ2VPdmVybGF5Q2xpZW50IHBhaW50
cyB0aGUKKyAgICAvLyBjb250ZW50cyBvZiB0aGUgcGFnZSBvdmVybGF5LiBJdCBhbHNvIHByb3Zp
ZGVzIGFuIHotb3JkZXIgbnVtYmVyIGZvcgorICAgIC8vIHRoZSBwYWdlIG92ZXJsYXkuIFRoZSB6
LW9yZGVyIG51bWJlciBkZWZpbmVzIHRoZSBwYWludCBvcmRlciB0aGUgcGFnZQorICAgIC8vIG92
ZXJsYXlzLiBQYWdlIG92ZXJsYXlzIHdpdGggbGFyZ2VyIHotb3JkZXIgbnVtYmVyIHdpbGwgYmUg
cGFpbnRlZCBhZnRlcgorICAgIC8vIHBhZ2Ugb3ZlcmxheXMgd2l0aCBzbWFsbGVyIHotb3JkZXIg
bnVtYmVyLiBUaGF0IGlzLCB0aGV5IGFwcGVhciBhYm92ZQorICAgIC8vIHRoZSBwYWdlIG92ZXJs
YXlzIHdpdGggc21hbGxlciB6LW9yZGVyIG51bWJlci4gSWYgdHdvIHBhZ2Ugb3ZlcmxheXMgaGF2
ZQorICAgIC8vIHRoZSBzYW1lIHotb3JkZXIgbnVtYmVyLCB0aGUgbGF0ZXIgYWRkZWQgb25lIHdp
bGwgYmUgb24gdG9wLgorICAgIHZpcnR1YWwgdm9pZCBhZGRXZWJQYWdlT3ZlcmxheShXZWJQYWdl
T3ZlcmxheUNsaWVudCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlV2ViUGFnZU92ZXJs
YXkoV2ViUGFnZU92ZXJsYXlDbGllbnQqKSA9IDA7CiAKICAgICAvLyBUZXN0aW5nIGZ1bmN0aW9u
YWxpdHkgZm9yIExheW91dFRlc3RDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAJKHJldmlz
aW9uIDEwMTU0OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIldlYlBhZ2VPdmVybGF5Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVmlld0Ns
aWVudC5oIgogI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCiAKQEAgLTQwLDEyICs0MiwyNiBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NPd25Q
dHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5OjpjcmVhdGUoV2ViVmlld0ltcGwqIHZpZXdJbXBs
LCBQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KQorbmFtZXNwYWNlIHsKKworV2ViQ2FudmFzKiBU
b1dlYkNhbnZhcyhHcmFwaGljc0NvbnRleHQqIGdjKQoreworI2lmIFdFQktJVF9VU0lOR19TS0lB
CisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
OworI2VsaWYgV0VCS0lUX1VTSU5HX0NHCisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxh
dGZvcm1Db250ZXh0KCk7CisjZW5kaWYKKyAgICByZXR1cm4gY2FudmFzOworfQorCit9IC8vIG5h
bWVzcGFjZQorCitQYXNzT3duUHRyPFBhZ2VPdmVybGF5PiBQYWdlT3ZlcmxheTo6Y3JlYXRlKFdl
YlZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkKIHsKICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VPdmVybGF5KHZpZXdJbXBsLCBjbGllbnQpKTsKIH0K
IAotUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiB2aWV3SW1wbCwgUGFnZU92
ZXJsYXlDbGllbnQqIGNsaWVudCkKK1BhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShXZWJWaWV3SW1w
bCogdmlld0ltcGwsIFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQpCiAgICAgOiBtX3ZpZXdJ
bXBsKHZpZXdJbXBsKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogewpAQCAtNTQsNyArNzAsNyBA
QCBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqIHZpCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogY2xhc3MgT3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBs
IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCo+IGNyZWF0ZShX
ZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsIFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCog
cGFnZU92ZXJsYXlDbGllbnQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8T3ZlcmxheUdyYXBoaWNz
TGF5ZXJDbGllbnRJbXBsKj4gY3JlYXRlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgV2ViUGFn
ZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwod2ViVmlld0ltcGws
IHBhZ2VPdmVybGF5Q2xpZW50KSk7CiAgICAgfQpAQCAtNjUsOSArODEsMTEgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVy
KikgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xh
eWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFz
ZSwgY29uc3QgSW50UmVjdCYgaW5DbGlwKQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGdjLCBHcmFwaGljc0xheWVy
UGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgaW5DbGlwKQogICAgIHsKLSAgICAgICAgbV9w
YWdlT3ZlcmxheUNsaWVudC0+cGFpbnRQYWdlT3ZlcmxheShjb250ZXh0KTsKKyAgICAgICAgZ2Mu
c2F2ZSgpOworICAgICAgICBtX3BhZ2VPdmVybGF5Q2xpZW50LT5wYWludFBhZ2VPdmVybGF5KFRv
V2ViQ2FudmFzKCZnYykpOworICAgICAgICBnYy5yZXN0b3JlKCk7CiAgICAgfQogCiAgICAgdmly
dHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CkBAIC05MSwxMyArMTA5LDEzIEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgT3ZlcmxheUdyYXBoaWNz
TGF5ZXJDbGllbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgUGFnZU92ZXJsYXk6OlBh
Z2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKKyAgICBPdmVybGF5R3JhcGhpY3NM
YXllckNsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJQYWdlT3ZlcmxheUNs
aWVudCogcGFnZU92ZXJsYXlDbGllbnQpCiAgICAgICAgIDogbV9wYWdlT3ZlcmxheUNsaWVudChw
YWdlT3ZlcmxheUNsaWVudCkKICAgICAgICAgLCBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKQog
ICAgIHsKICAgICB9CiAKLSAgICBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIG1fcGFn
ZU92ZXJsYXlDbGllbnQ7CisgICAgV2ViUGFnZU92ZXJsYXlDbGllbnQqIG1fcGFnZU92ZXJsYXlD
bGllbnQ7CiAgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CiB9OwogI2VuZGlmCkBAIC0x
MTUsNyArMTMzLDcgQEAgdm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIoKQogI2VuZGlmCiB9CiAKLXZv
aWQgUGFnZU92ZXJsYXk6OnVwZGF0ZSgpCit2b2lkIFBhZ2VPdmVybGF5Ojp1cGRhdGUoYm9vbCBm
b3JjZSkKIHsKICAgICBpbnZhbGlkYXRlV2ViRnJhbWUoKTsKIApAQCAtMTI1LDIzICsxNDMsNDIg
QEAgdm9pZCBQYWdlT3ZlcmxheTo6dXBkYXRlKCkKICAgICAgICAgbV9sYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZShtX2xheWVyQ2xpZW50LmdldCgpKTsKICAgICAgICAgbV9sYXllci0+c2V0
TmFtZSgiV2ViVmlld0ltcGwgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKICAgICAgICAgbV9sYXll
ci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgICAgICBjb25zdCBXZWJTaXplJiBzaXplID0g
bV92aWV3SW1wbC0+c2l6ZSgpOwotICAgICAgICBtX2xheWVyLT5zZXRTaXplKEludFNpemUoc2l6
ZS53aWR0aCwgc2l6ZS5oZWlnaHQpKTsKKyAgICAgICAgZm9yY2UgPSB0cnVlOwogICAgIH0KKwor
ICAgIEZsb2F0U2l6ZSBzaXplKG1fdmlld0ltcGwtPnNpemUoKS53aWR0aCwgbV92aWV3SW1wbC0+
c2l6ZSgpLmhlaWdodCk7CisgICAgaWYgKHNpemUgIT0gbV9sYXllci0+c2l6ZSgpKSB7CisgICAg
ICAgIC8vIFRyaWdnZXJzIHJlLWFkZGluZyB0byByb290IGxheWVyIHRvIGVuc3VyZSB0aGF0IHdl
IGFyZSBvbiB0b3Agb2YKKyAgICAgICAgLy8gc2Nyb2xsYmFycy4KKyAgICAgICAgbV9sYXllci0+
cmVtb3ZlRnJvbVBhcmVudCgpOworICAgICAgICBtX2xheWVyLT5zZXRTaXplKHNpemUpOworICAg
ICAgICBmb3JjZSA9IHRydWU7CisgICAgfQorCiAgICAgbV92aWV3SW1wbC0+c2V0T3ZlcmxheUxh
eWVyKG1fbGF5ZXIuZ2V0KCkpOwotICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworCisg
ICAgaWYgKGZvcmNlKQorICAgICAgICBtX2xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgY29uc3QgV2ViUmVjdCYgZGlydHlSZWN0ID0gbV9jbGllbnQtPmdldERp
cnR5UmVjdCgpOworICAgICAgICBpZiAoIWRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBtX2xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0KGRpcnR5
UmVjdC54LCBkaXJ0eVJlY3QueSwgZGlydHlSZWN0LndpZHRoLCBkaXJ0eVJlY3QuaGVpZ2h0KSk7
CisgICAgfQogI2VuZGlmCiB9CiAKIHZvaWQgUGFnZU92ZXJsYXk6OnBhaW50V2ViRnJhbWUoR3Jh
cGhpY3NDb250ZXh0JiBnYykKIHsKLSAgICBpZiAoIW1fdmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZSgpKQotICAgICAgICBtX2NsaWVudC0+cGFpbnRQYWdlT3ZlcmxheShn
Yyk7CisgICAgaWYgKCFtX3ZpZXdJbXBsLT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
KSkgeworICAgICAgICBnYy5zYXZlKCk7CisgICAgICAgIG1fY2xpZW50LT5wYWludFBhZ2VPdmVy
bGF5KFRvV2ViQ2FudmFzKCZnYykpOworICAgICAgICBnYy5yZXN0b3JlKCk7CisgICAgfQogfQog
CiB2b2lkIFBhZ2VPdmVybGF5OjppbnZhbGlkYXRlV2ViRnJhbWUoKQogewotICAgIC8vIFBhZ2VP
dmVybGF5Q2xpZW50IGRvZXMgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUgb3ZlcmxheS4KKyAg
ICAvLyBXZWJQYWdlT3ZlcmxheUNsaWVudCBkb2VzIHRoZSBhY3R1YWwgcGFpbnRpbmcgb2YgdGhl
IG92ZXJsYXkuCiAgICAgLy8gSGVyZSB3ZSBqdXN0IG1ha2Ugc3VyZSB0byBpbnZhbGlkYXRlLgog
ICAgIGlmICghbV92aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IGFibGUgdG8gaW52YWxpZGF0ZSBhIHNtYWxsZXIgcmVjdC4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuaAkocmV2aXNpb24gMTAx
NTQ4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMzEgKzM5LDI4IEBAIGNsYXNzIEdyYXBoaWNzTGF5ZXJDbGllbnQ7CiB9
CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZU92ZXJsYXlDbGllbnQ7CiBjbGFz
cyBXZWJWaWV3SW1wbDsKIAogY2xhc3MgUGFnZU92ZXJsYXkgewogcHVibGljOgotICAgIGNsYXNz
IFBhZ2VPdmVybGF5Q2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBw
YWludFBhZ2VPdmVybGF5KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpID0gMDsKLSAgICB9Owot
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShXZWJWaWV3SW1wbCos
IFBhZ2VPdmVybGF5Q2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZU92ZXJsYXk+
IGNyZWF0ZShXZWJWaWV3SW1wbCosIFdlYlBhZ2VPdmVybGF5Q2xpZW50Kik7CiAKICAgICB+UGFn
ZU92ZXJsYXkoKSB7IH0KIAotICAgIHZvaWQgc2V0Q2xpZW50KFBhZ2VPdmVybGF5Q2xpZW50KiBj
bGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKyAgICBXZWJQYWdlT3ZlcmxheUNsaWVudCog
Y2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChX
ZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CiAKICAg
ICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCB1cGRhdGUoKTsKKyAgICB2b2lkIHVwZGF0ZShib29s
IGZvcmNlKTsKICAgICB2b2lkIHBhaW50V2ViRnJhbWUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Jik7CiAKIHByaXZhdGU6Ci0gICAgUGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqLCBQYWdlT3Zlcmxh
eUNsaWVudCopOworICAgIFBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiwgV2ViUGFnZU92ZXJsYXlD
bGllbnQqKTsKICAgICB2b2lkIGludmFsaWRhdGVXZWJGcmFtZSgpOwogCiAgICAgV2ViVmlld0lt
cGwqIG1fdmlld0ltcGw7Ci0gICAgUGFnZU92ZXJsYXlDbGllbnQqIG1fY2xpZW50OworICAgIFdl
YlBhZ2VPdmVybGF5Q2xpZW50KiBtX2NsaWVudDsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9sYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVu
dD4gbV9sYXllckNsaWVudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Q
YWdlT3ZlcmxheUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEy
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
R09PR0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBHT09HTEUgSU5DLgorICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFn
ZU92ZXJsYXlMaXN0LmgiCisKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgIldl
YlBhZ2VPdmVybGF5Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1Bhc3NPd25QdHI8UGFnZU92ZXJsYXlMaXN0PiBQYWdlT3ZlcmxheUxp
c3Q6OmNyZWF0ZShXZWJWaWV3SW1wbCogdmlld0ltcGwpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBQYWdlT3ZlcmxheUxpc3Qodmlld0ltcGwpKTsKK30KKworUGFnZU92ZXJsYXlMaXN0OjpQ
YWdlT3ZlcmxheUxpc3QoV2ViVmlld0ltcGwqIHZpZXdJbXBsKQorICAgIDogbV92aWV3SW1wbCh2
aWV3SW1wbCkKK3sKK30KKworUGFnZU92ZXJsYXlMaXN0Ojp+UGFnZU92ZXJsYXlMaXN0KCkKK3sK
K30KKworYm9vbCBQYWdlT3ZlcmxheUxpc3Q6OmFkZENsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVu
dCogY2xpZW50KQoreworICAgIGJvb2wgYWRkZWQgPSBmYWxzZTsKKyAgICBzaXplX3QgaW5kZXgg
PSBmaW5kQ2xpZW50KGNsaWVudCk7CisgICAgaWYgKGluZGV4ID09IFdURjo6bm90Rm91bmQpIHsK
KyAgICAgICAgT3duUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3ZlcmxheSA9IFBhZ2VPdmVybGF5Ojpj
cmVhdGUobV92aWV3SW1wbCwgY2xpZW50KTsKKyAgICAgICAgbV9wYWdlT3ZlcmxheXMuYXBwZW5k
KHBhZ2VPdmVybGF5LnJlbGVhc2UoKSk7CisgICAgICAgIGluZGV4ID0gbV9wYWdlT3ZlcmxheXMu
c2l6ZSgpIC0gMTsKKyAgICAgICAgYWRkZWQgPSB0cnVlOworICAgIH0KKworICAgIFBhZ2VPdmVy
bGF5KiBwYWdlT3ZlcmxheSA9IG1fcGFnZU92ZXJsYXlzW2luZGV4XS5nZXQoKTsKKworICAgIC8v
IEFkanVzdCBwYWdlIG92ZXJsYXkgbGlzdCBvcmRlciBiYXNlZCBvbiB0aGVpciB6LW9yZGVyIG51
bWJlcnMuIFdlIGZpcnN0CisgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBtb3ZlIHRoZSBvdmVy
bGF5IHVwIGFuZCBkbyBzbyBpZiBuZWVkZWQuIE90aGVyd2lzZSwKKyAgICAvLyBjaGVjayBpZiB3
ZSBuZWVkIHRvIG1vdmUgaXQgZG93bi4KKyAgICBib29sIHpvcmRlckNoYW5nZWQgPSBmYWxzZTsK
KyAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkgKyAxIDwgbV9wYWdlT3ZlcmxheXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzW2ldLT5jbGllbnQoKS0+cGFnZU92
ZXJsYXlaT3JkZXIoKSA+PSBtX3BhZ2VPdmVybGF5c1tpICsgMV0tPmNsaWVudCgpLT5wYWdlT3Zl
cmxheVpPcmRlcigpKSB7CisgICAgICAgICAgICBtX3BhZ2VPdmVybGF5c1tpXS5zd2FwKG1fcGFn
ZU92ZXJsYXlzW2kgKyAxXSk7CisgICAgICAgICAgICB6b3JkZXJDaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICghem9yZGVyQ2hhbmdlZCkgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gaW5kZXg7IGkgPj0gMTsgLS1pKSB7CisgICAgICAgICAgICBpZiAobV9wYWdl
T3ZlcmxheXNbaV0tPmNsaWVudCgpLT5wYWdlT3ZlcmxheVpPcmRlcigpIDwgbV9wYWdlT3Zlcmxh
eXNbaSAtIDFdLT5jbGllbnQoKS0+cGFnZU92ZXJsYXlaT3JkZXIoKSkgeworICAgICAgICAgICAg
ICAgIG1fcGFnZU92ZXJsYXlzW2ldLnN3YXAobV9wYWdlT3ZlcmxheXNbaSAtIDFdKTsKKyAgICAg
ICAgICAgICAgICB6b3JkZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIElmIHdlIGRpZCBtb3ZlIHRoZSBvdmVybGF5LCB0aGF0IG1lYW5z
IHotb3JkZXIgaXMgY2hhbmdlZCBhbmQgd2UgbmVlZCB0bworICAgIC8vIHVwZGF0ZSBvdmVybGF5
IGxheWVycycgei1vcmRlci4gT3RoZXJ3aXNlLCBqdXN0IHVwZGF0ZSBjdXJyZW50IG92ZXJsYXku
CisgICAgaWYgKHpvcmRlckNoYW5nZWQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3BhZ2VPdmVybGF5cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlz
W2ldLT5jbGVhcigpOworICAgICAgICB1cGRhdGUoZmFsc2UpOworICAgIH0gZWxzZQorICAgICAg
ICBwYWdlT3ZlcmxheS0+dXBkYXRlKGZhbHNlKTsKKworICAgIHJldHVybiBhZGRlZDsKK30KKwor
Ym9vbCBQYWdlT3ZlcmxheUxpc3Q6OnJlbW92ZUNsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCog
Y2xpZW50KQoreworICAgIHNpemVfdCBpbmRleCA9IGZpbmRDbGllbnQoY2xpZW50KTsKKyAgICBp
ZiAoaW5kZXggPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
bV9wYWdlT3ZlcmxheXNbaW5kZXhdLT5jbGVhcigpOworICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92
ZShpbmRleCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlMaXN0Ojp1
cGRhdGUoYm9vbCBmb3JjZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92
ZXJsYXlzLnNpemUoKTsgKytpKQorICAgICAgICBtX3BhZ2VPdmVybGF5c1tpXS0+dXBkYXRlKGZv
cmNlKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUxpc3Q6OnBhaW50V2ViRnJhbWUoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBnYykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFn
ZU92ZXJsYXlzLnNpemUoKTsgKytpKQorICAgICAgICBtX3BhZ2VPdmVybGF5c1tpXS0+cGFpbnRX
ZWJGcmFtZShnYyk7Cit9CisKK3NpemVfdCBQYWdlT3ZlcmxheUxpc3Q6OmZpbmRDbGllbnQoV2Vi
UGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fcGFnZU92ZXJsYXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5
c1tpXS0+Y2xpZW50KCkgPT0gY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQor
ICAgIHJldHVybiBXVEY6Om5vdEZvdW5kOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5
TGlzdC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLgorICogT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VP
dmVybGF5TGlzdF9oCisjZGVmaW5lIFBhZ2VPdmVybGF5TGlzdF9oCisKKyNpbmNsdWRlICJQYWdl
T3ZlcmxheS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Citj
bGFzcyBXZWJQYWdlT3ZlcmxheUNsaWVudDsKK2NsYXNzIFdlYlZpZXdJbXBsOworCitjbGFzcyBQ
YWdlT3ZlcmxheUxpc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VPdmVy
bGF5TGlzdD4gY3JlYXRlKFdlYlZpZXdJbXBsKik7CisKKyAgICB+UGFnZU92ZXJsYXlMaXN0KCk7
CisKKyAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fcGFnZU92ZXJsYXlzLnNpemUo
KTsgfQorCisgICAgLy8gQWRkcy9yZW1vdmVzIGEgUGFnZU92ZXJsYXkgZm9yIGdpdmVuIGNsaWVu
dC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBQYWdlT3ZlcmxheSBpcyBhZGRlZC9yZW1vdmVk
LgorICAgIGJvb2wgYWRkQ2xpZW50KFdlYlBhZ2VPdmVybGF5Q2xpZW50Kik7CisgICAgYm9vbCBy
ZW1vdmVDbGllbnQoV2ViUGFnZU92ZXJsYXlDbGllbnQqKTsKKworICAgIHZvaWQgdXBkYXRlKGJv
b2wgZm9yY2UpOworICAgIHZvaWQgcGFpbnRXZWJGcmFtZShXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8UGFnZU92ZXJsYXk+
LCAyPiBQYWdlT3ZlcmxheXM7CisKKyAgICBleHBsaWNpdCBQYWdlT3ZlcmxheUxpc3QoV2ViVmll
d0ltcGwqKTsKKworICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbGllbnQgZm91bmQu
IE90aGVyd2lzZSwgcmV0dXJucyBXVEY6Om5vdEZvdW5kLgorICAgIHNpemVfdCBmaW5kQ2xpZW50
KFdlYlBhZ2VPdmVybGF5Q2xpZW50Kik7CisKKyAgICBXZWJWaWV3SW1wbCogbV92aWV3SW1wbDsK
KyAgICBQYWdlT3ZlcmxheXMgbV9wYWdlT3ZlcmxheXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFBhZ2VPdmVybGF5TGlzdF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCShyZXZpc2lvbiAxMDE1
NDgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAKICNpbmNsdWRlICJNZW1vcnlDYWNo
ZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRl
ICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlBhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oIgorI2lu
Y2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNv
dXJjZVJlcXVlc3QuaCIKQEAgLTI3MiwyMiArMjcyLDM0IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmJyaW5nRnJvbnRlbmQKIHsKIH0KIAotLy8gUGFnZU92ZXJsYXlDbGllbnQKLXZvaWQg
V2ViRGV2VG9vbHNBZ2VudEltcGw6OnBhaW50UGFnZU92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBn
YykKKy8vIFdlYlBhZ2VPdmVybGF5Q2xpZW50Cit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpw
YWludFBhZ2VPdmVybGF5KFdlYkNhbnZhcyogY2FudmFzKQogewogICAgIEluc3BlY3RvckNvbnRy
b2xsZXIqIGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIGlmIChpYykKLSAgICAgICAg
aWMtPmRyYXdIaWdobGlnaHQoZ2MpOworICAgICAgICBpYy0+ZHJhd0hpZ2hsaWdodChHcmFwaGlj
c0NvbnRleHRCdWlsZGVyKGNhbnZhcykuY29udGV4dCgpKTsKK30KKworaW50IFdlYkRldlRvb2xz
QWdlbnRJbXBsOjpwYWdlT3ZlcmxheVpPcmRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDk5Owor
fQorCitXZWJSZWN0IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpnZXREaXJ0eVJlY3QoKSBjb25zdAor
eworICAgIC8vIEZJWE1FOiBSZXR1cm4gYSByZWFsIGRpcnR5IHJlY3QuCisgICAgY29uc3QgV2Vi
U2l6ZSYgc2l6ZSA9IG1fd2ViVmlld0ltcGwtPnNpemUoKTsKKyAgICByZXR1cm4gV2ViUmVjdCgw
LCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7CiB9CiAKIHZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmhpZ2hsaWdodCgpCiB7Ci0gICAgbV93ZWJWaWV3SW1wbC0+c2V0UGFnZU92ZXJsYXlD
bGllbnQodGhpcyk7CisgICAgbV93ZWJWaWV3SW1wbC0+YWRkV2ViUGFnZU92ZXJsYXkodGhpcyk7
CiB9CiAKIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZGVIaWdobGlnaHQoKQogewotICAg
IG1fd2ViVmlld0ltcGwtPnNldFBhZ2VPdmVybGF5Q2xpZW50KDApOworICAgIG1fd2ViVmlld0lt
cGwtPnJlbW92ZVdlYlBhZ2VPdmVybGF5KHRoaXMpOwogfQogCiBib29sIFdlYkRldlRvb2xzQWdl
bnRJbXBsOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1w
bC5oCShyZXZpc2lvbiAxMDE1NDgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAKICNp
bmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKIAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAj
aW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3Zl
cmxheUNsaWVudC5oIgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CkBAIC02Miw3ICs2Miw3IEBAIHN0cnVjdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRh
OwogCiBjbGFzcyBXZWJEZXZUb29sc0FnZW50SW1wbCA6IHB1YmxpYyBXZWJEZXZUb29sc0FnZW50
UHJpdmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYkNvcmU6Oklu
c3BlY3RvckNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFBhZ2VP
dmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBXZWJQYWdlT3ZlcmxheUNsaWVudCB7CiBwdWJsaWM6CiAgICAgV2ViRGV2VG9vbHNB
Z2VudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJEZXZUb29sc0FnZW50Q2xpZW50
KiBjbGllbnQpOwogICAgIHZpcnR1YWwgfldlYkRldlRvb2xzQWdlbnRJbXBsKCk7CkBAIC05Nyw4
ICs5NywxMCBAQCBwdWJsaWM6CiAKICAgICBpbnQgaG9zdElkKCkgeyByZXR1cm4gbV9ob3N0SWQ7
IH0KIAotICAgIC8vIFBhZ2VPdmVybGF5Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50UGFn
ZU92ZXJsYXkoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgLy8gV2ViUGFnZU92ZXJs
YXlDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdlT3ZlcmxheShXZWJDYW52YXMqKTsK
KyAgICB2aXJ0dWFsIGludCBwYWdlT3ZlcmxheVpPcmRlcigpIGNvbnN0OworICAgIHZpcnR1YWwg
V2ViUmVjdCBnZXREaXJ0eVJlY3QoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDEwMTU0OCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNjMsOCArMjA2Myw4IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpwYWludFdpdGhD
b250ZXh0KEdyYXAKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZVZpZXcoKSkg
ewogICAgICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7CiAgICAgICAgIGZyYW1lVmlldygpLT5wYWlu
dCgmZ2MsIGRpcnR5UmVjdCk7Ci0gICAgICAgIGlmICh2aWV3SW1wbCgpLT5wYWdlT3ZlcmxheSgp
KQotICAgICAgICAgICAgdmlld0ltcGwoKS0+cGFnZU92ZXJsYXkoKS0+cGFpbnRXZWJGcmFtZShn
Yyk7CisgICAgICAgIGlmICh2aWV3SW1wbCgpLT5wYWdlT3ZlcmxheXMoKSkKKyAgICAgICAgICAg
IHZpZXdJbXBsKCktPnBhZ2VPdmVybGF5cygpLT5wYWludFdlYkZyYW1lKGdjKTsKICAgICB9IGVs
c2UKICAgICAgICAgZ2MuZmlsbFJlY3QoZGlydHlSZWN0LCBDb2xvcjo6d2hpdGUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwogICAgIGdjLnJlc3RvcmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDEwMTU0OCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1
Niw4ICsxMjU2LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wpCiAgICAgICAg
IGlmICghcGFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChtX3BhZ2VP
dmVybGF5KQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CisgICAgICAgIGlm
IChtX3BhZ2VPdmVybGF5cykKKyAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlzLT51cGRhdGUoZmFs
c2UgLypmb3JjZSovKTsKIAogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0ZSgpOwog
ICAgIH0KQEAgLTI2MDIsMjEgKzI2MDIsMjIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SWdub3Jl
SW5wdXRFdmVudHMoYgogICAgIG1faWdub3JlSW5wdXRFdmVudHMgPSBuZXdWYWx1ZTsKIH0KIAot
dm9pZCBXZWJWaWV3SW1wbDo6c2V0UGFnZU92ZXJsYXlDbGllbnQoUGFnZU92ZXJsYXk6OlBhZ2VP
dmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKK3ZvaWQgV2ViVmlld0ltcGw6OmFkZFdl
YlBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKIHsK
LSAgICBpZiAocGFnZU92ZXJsYXlDbGllbnQpIHsKLSAgICAgICAgaWYgKCFtX3BhZ2VPdmVybGF5
KQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywg
cGFnZU92ZXJsYXlDbGllbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BhZ2VPdmVy
bGF5LT5zZXRDbGllbnQocGFnZU92ZXJsYXlDbGllbnQpOwotICAgICAgICBtX3BhZ2VPdmVybGF5
LT51cGRhdGUoKTsKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzKQorICAgICAgICBtX3BhZ2VPdmVy
bGF5cyA9IFBhZ2VPdmVybGF5TGlzdDo6Y3JlYXRlKHRoaXMpOworCisgICAgbV9wYWdlT3Zlcmxh
eXMtPmFkZENsaWVudChwYWdlT3ZlcmxheUNsaWVudCk7CisgICAgc2V0Um9vdExheWVyTmVlZHNE
aXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVdlYlBhZ2VPdmVybGF5KFdl
YlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKK3sKKyAgICBpZiAobV9wYWdl
T3ZlcmxheXMgJiYgbV9wYWdlT3ZlcmxheXMtPnJlbW92ZUNsaWVudChwYWdlT3ZlcmxheUNsaWVu
dCkpIHsKICAgICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXkpIHsKLSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXkt
PmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5ID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwotICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1fcGFnZU92ZXJsYXlzLT5lbXB0eSgpKQorICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBu
dWxscHRyOwogICAgIH0KIH0KIApAQCAtMjg2Myw4ICsyODY0LDggQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvcwogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2
YXRlQ29tcG9zaXRvcihtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOwog
ICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwogICAg
ICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAgICAgICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0
ZSgpOworICAgICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQorICAgICAgICAgICAgICAgIG1f
cGFnZU92ZXJsYXlzLT51cGRhdGUodHJ1ZSAvKmZvcmNlKi8pOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CiAgICAgICAgICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdC5jbGVhcigpOwpAQCAtMjk0NSw4ICsyOTQ2LDggQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKG1fcGFnZU92ZXJsYXkpCi0gICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0
ZSgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5cykKKyAgICAgICAgbV9wYWdlT3ZlcmxheXMtPnVw
ZGF0ZSh0cnVlIC8qZm9yY2UqLyk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQ29t
cG9zaXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAko
cmV2aXNpb24gMTAxNTQ4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbC5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAi
UGFnZU92ZXJsYXlMaXN0LmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhQ2xpZW50SW1wbC5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAg
LTkzLDYgKzkzLDcgQEAgY2xhc3MgV2ViSW1hZ2U7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50Owog
Y2xhc3MgV2ViTW91c2VFdmVudDsKIGNsYXNzIFdlYk1vdXNlV2hlZWxFdmVudDsKK2NsYXNzIFdl
YlBhZ2VPdmVybGF5Q2xpZW50OwogY2xhc3MgV2ViU2V0dGluZ3NJbXBsOwogY2xhc3MgV2ViVG91
Y2hFdmVudDsKIApAQCAtMjI3LDYgKzIyOCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlQmFja2dyb3VuZENvbG9yLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5hY3RpdmVGb3JlZ3Jv
dW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rp
b24odW5zaWduZWQgYWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkV2ViUGFnZU92ZXJsYXko
V2ViUGFnZU92ZXJsYXlDbGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlV2ViUGFnZU92
ZXJsYXkoV2ViUGFnZU92ZXJsYXlDbGllbnQqKTsKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdENs
aWVudAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7CkBAIC0yNDIsOCArMjQ1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SWdub3JlSW5w
dXRFdmVudHMoYm9vbCBuZXdWYWx1ZSk7CiAgICAgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUqIGRl
dlRvb2xzQWdlbnRQcml2YXRlKCkgeyByZXR1cm4gbV9kZXZUb29sc0FnZW50LmdldCgpOyB9CiAK
LSAgICBQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VPdmVy
bGF5LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQYWdlT3ZlcmxheUNsaWVudChQYWdlT3ZlcmxheTo6
UGFnZU92ZXJsYXlDbGllbnQqKTsKKyAgICBQYWdlT3ZlcmxheUxpc3QqIHBhZ2VPdmVybGF5cygp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlzLmdldCgpOyB9CiAKICAgICB2b2lkIHNldE92
ZXJsYXlMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAKQEAgLTU3MSw4ICs1NzMsMTEg
QEAgcHJpdmF0ZToKICAgICAvLyBUaGUgcG9wdXAgYXNzb2NpYXRlZCB3aXRoIGEgc2VsZWN0IGVs
ZW1lbnQuCiAgICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyPiBtX3NlbGVjdFBvcHVw
OwogCisgICAgLy8gVGhlIERldlRvb2xzIGFnZW50LgogICAgIE93blB0cjxXZWJEZXZUb29sc0Fn
ZW50UHJpdmF0ZT4gbV9kZXZUb29sc0FnZW50OwotICAgIE93blB0cjxQYWdlT3ZlcmxheT4gbV9w
YWdlT3ZlcmxheTsKKworICAgIC8vIFBhZ2VPdmVybGF5cyBmb3IgdGhpcyBXZWJWaWV3LgorICAg
IE93blB0cjxQYWdlT3ZlcmxheUxpc3Q+IG1fcGFnZU92ZXJsYXlzOwogCiAgICAgLy8gV2hldGhl
ciB0aGUgd2VidmlldyBpcyByZW5kZXJpbmcgdHJhbnNwYXJlbnRseS4KICAgICBib29sIG1faXNU
cmFuc3BhcmVudDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117288</attachid>
            <date>2011-11-30 15:54:16 -0800</date>
            <delta_ts>2011-11-30 16:56:52 -0800</delta_ts>
            <desc>Address comments in previous patch.</desc>
            <filename>webkit_73235.3.patch</filename>
            <type>text/plain</type>
            <size>31102</size>
            <attacher name="xiyuan">xiyuan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDE1NjIpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1
IEBACisyMDExLTExLTMwICBYaXl1YW4gWGlhICA8eGl5dWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFN1cHBvcnQgYWRkaW5nL3JlbW92aW5nIHBhZ2Ugb3ZlcmxheSB0byBX
ZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaDogQWRk
ZWQuCisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJs
YXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6T3Zl
cmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpP
dmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6OnBhaW50Q29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6Ok92ZXJsYXlHcmFwaGljc0xh
eWVyQ2xpZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5OjpjbGVhcik6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5Ojp1cGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlT3ZlcmxheTo6cGFpbnRXZWJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5
OjppbnZhbGlkYXRlV2ViRnJhbWUpOgorICAgICAgICAqIHNyYy9QYWdlT3ZlcmxheS5oOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZU92ZXJsYXk6OnNldENsaWVudCk6CisgICAgICAgICogc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6UGFnZU92ZXJsYXlMaXN0KToKKyAgICAgICAg
KFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0Ojp+UGFnZU92ZXJsYXlMaXN0KToKKyAgICAgICAgKFdl
YktpdDo6UGFnZU92ZXJsYXlMaXN0OjphZGRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
T3ZlcmxheUxpc3Q6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5
TGlzdDo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0OjpwYWludFdl
YkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0OjpmaW5kQ2xpZW50KToK
KyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXlMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlT3ZlcmxheUxpc3Q6OmVtcHR5KToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2Vu
dEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6cGFpbnRQ
YWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWdl
T3ZlcmxheVpPcmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpn
ZXREaXJ0eVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aGln
aGxpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZGVIaWdo
bGlnaHQpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oOgorICAgICAgICAq
IHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnBh
aW50V2l0aENvbnRleHQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6YWRkV2ViUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6cmVtb3ZlV2ViUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBhZ2VPdmVybGF5cyk6
CisKIDIwMTEtMTEtMzAgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gTW92ZSBkaWRVcGRhdGVMYXlvdXQgZnJvbSBXZWJGcmFtZUNsaWVudCB0
byBXZWJWaWV3Q2xpZW50LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNp
b24gMTAxNTYyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTgsNiArMjU4LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5v
dGlmaWNhdGlvblByZXNlbnRlci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk5vdGlm
aWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
Yk9wdGlvbkVsZW1lbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQYWdlT3Zlcmxh
eUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQYWdlVmlzaWJpbGl0eVN0YXRlLmgnLApAQCAtNDM1
LDYgKzQzNiw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9wYWludGluZy9HcmFwaGljc0NvbnRl
eHRCdWlsZGVyLmgnLAogICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXkuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5LmgnLAorICAgICAgICAgICAgICAgICdzcmMv
UGFnZU92ZXJsYXlMaXN0LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheUxp
c3QuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwJywKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VPdmVybGF5Q2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VP
dmVybGF5Q2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElO
Qy4KKyAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJQYWdlT3ZlcmxheUNsaWVudF9oCisjZGVmaW5lIFdlYlBhZ2VPdmVy
bGF5Q2xpZW50X2gKKworI2luY2x1ZGUgIldlYkNhbnZhcy5oIgorI2luY2x1ZGUgIldlYlJlY3Qu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VPdmVybGF5Q2xpZW50IHsK
K3B1YmxpYzoKKyAgICAvLyBQYWludHMgcGFnZSBvdmVybGF5IGNvbnRlbnRzLgorICAgIHZpcnR1
YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNhbnZhcyopID0gMDsKKworICAgIC8vIFJldHVy
bnMgei1vcmRlciBvZiB0aGlzIHBhZ2Ugb3ZlcmxheS4gUGFnZSBvdmVybGF5IHdpdGggbGFyZ2Vy
IHotb3JkZXIKKyAgICAvLyBudW1iZXIgaXMgcGFpbnRlZCBsYXRlci4gVGhhdCBpcywgaXQgc2hv
d3MgYWJvdmUgcGFnZSBvdmVybGF5cyB3aXRoCisgICAgLy8gc21hbGxlciB6LW9yZGVyIG51bWJl
ci4KKyAgICB2aXJ0dWFsIGludCBwYWdlT3ZlcmxheVpPcmRlcigpIGNvbnN0ID0gMDsKKworICAg
IC8vIFJldHVybnMgZGlydHkgcmVjdCB0aGF0IG5lZWRzIHJlcGFpbnQuCisgICAgdmlydHVhbCBX
ZWJSZWN0IGdldERpcnR5UmVjdCgpIGNvbnN0ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViUGFnZU92ZXJsYXlDbGllbnRfaAoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCShyZXZpc2lvbiAxMDE1NjIpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDcgQEAgY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJGcmFtZUNsaWVudDsKIGNsYXNz
IFdlYkdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgV2ViTm9kZTsKK2NsYXNzIFdlYlBhZ2VPdmVy
bGF5Q2xpZW50OwogY2xhc3MgV2ViUGVybWlzc2lvbkNsaWVudDsKIGNsYXNzIFdlYlNldHRpbmdz
OwogY2xhc3MgV2ViU3BlbGxDaGVja0NsaWVudDsKQEAgLTQwOSw2ICs0MTAsMTggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlT
dGF0ZSB2aXNpYmlsaXR5U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzSW5pdGlhbFN0YXRlKSB7IH0KIAorICAgIC8vIFBhZ2VPdmVybGF5IC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAg
IC8vIEFkZHMvcmVtb3ZlcyBwYWdlIG92ZXJsYXkgdG8gdGhpcyBXZWJWaWV3LiBUaGVzZSBmdW5j
dGlvbnMgY2hhbmdlIHRoZQorICAgIC8vIGdyYXBoY2ljYWwgYXBwZXJhbmNlIG9mIHRoZSBXZWJW
aWV3LiBXZWJQYWdlT3ZlcmxheUNsaWVudCBwYWludHMgdGhlCisgICAgLy8gY29udGVudHMgb2Yg
dGhlIHBhZ2Ugb3ZlcmxheS4gSXQgYWxzbyBwcm92aWRlcyBhbiB6LW9yZGVyIG51bWJlciBmb3IK
KyAgICAvLyB0aGUgcGFnZSBvdmVybGF5LiBUaGUgei1vcmRlciBudW1iZXIgZGVmaW5lcyB0aGUg
cGFpbnQgb3JkZXIgdGhlIHBhZ2UKKyAgICAvLyBvdmVybGF5cy4gUGFnZSBvdmVybGF5cyB3aXRo
IGxhcmdlciB6LW9yZGVyIG51bWJlciB3aWxsIGJlIHBhaW50ZWQgYWZ0ZXIKKyAgICAvLyBwYWdl
IG92ZXJsYXlzIHdpdGggc21hbGxlciB6LW9yZGVyIG51bWJlci4gVGhhdCBpcywgdGhleSBhcHBl
YXIgYWJvdmUKKyAgICAvLyB0aGUgcGFnZSBvdmVybGF5cyB3aXRoIHNtYWxsZXIgei1vcmRlciBu
dW1iZXIuIElmIHR3byBwYWdlIG92ZXJsYXlzIGhhdmUKKyAgICAvLyB0aGUgc2FtZSB6LW9yZGVy
IG51bWJlciwgdGhlIGxhdGVyIGFkZGVkIG9uZSB3aWxsIGJlIG9uIHRvcC4KKyAgICB2aXJ0dWFs
IHZvaWQgYWRkV2ViUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXlDbGllbnQqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZVdlYlBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5Q2xpZW50Kikg
PSAwOwogCiAgICAgLy8gVGVzdGluZyBmdW5jdGlvbmFsaXR5IGZvciBMYXlvdXRUZXN0Q29udHJv
bGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCShyZXZpc2lvbiAxMDE1NjIpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDkgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NM
YXllckNsaWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRTa2lhLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3Zlcmxh
eUNsaWVudC5oIgogI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3
SW1wbC5oIgogCkBAIC00MCwxMiArNDIsMjYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1QYXNzT3duUHRyPFBhZ2VPdmVybGF5PiBQYWdlT3Zlcmxh
eTo6Y3JlYXRlKFdlYlZpZXdJbXBsKiB2aWV3SW1wbCwgUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVu
dCkKK25hbWVzcGFjZSB7CisKK1dlYkNhbnZhcyogVG9XZWJDYW52YXMoR3JhcGhpY3NDb250ZXh0
KiBnYykKK3sKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIFdlYkNhbnZhcyogY2FudmFzID0g
Z2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyNlbGlmIFdFQktJVF9VU0lOR19DRwor
ICAgIFdlYkNhbnZhcyogY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCisg
ICAgcmV0dXJuIGNhbnZhczsKK30KKworfSAvLyBuYW1lc3BhY2UKKworUGFzc093blB0cjxQYWdl
T3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShXZWJWaWV3SW1wbCogdmlld0ltcGwsIFdlYlBh
Z2VPdmVybGF5Q2xpZW50KiBjbGllbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdl
T3ZlcmxheSh2aWV3SW1wbCwgY2xpZW50KSk7CiB9CiAKLVBhZ2VPdmVybGF5OjpQYWdlT3Zlcmxh
eShXZWJWaWV3SW1wbCogdmlld0ltcGwsIFBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQpCitQYWdl
T3ZlcmxheTo6UGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqIHZpZXdJbXBsLCBXZWJQYWdlT3Zlcmxh
eUNsaWVudCogY2xpZW50KQogICAgIDogbV92aWV3SW1wbCh2aWV3SW1wbCkKICAgICAsIG1fY2xp
ZW50KGNsaWVudCkKIHsKQEAgLTU0LDcgKzcwLDcgQEAgUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5
KFdlYlZpZXdJbXBsKiB2aQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIGNsYXNz
IE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxPdmVybGF5R3Jh
cGhpY3NMYXllckNsaWVudEltcGwqPiBjcmVhdGUoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBQ
YWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQorICAgIHN0
YXRpYyBQYXNzT3duUHRyPE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCo+IGNyZWF0ZShX
ZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsIFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3Zlcmxh
eUNsaWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3ZlcmxheUdyYXBo
aWNzTGF5ZXJDbGllbnRJbXBsKHdlYlZpZXdJbXBsLCBwYWdlT3ZlcmxheUNsaWVudCkpOwogICAg
IH0KQEAgLTY1LDkgKzgxLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlT
eW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIHsgfQogCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3Jh
cGhpY3NDb250ZXh0JiBnYywgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJl
Y3QmIGluQ2xpcCkKICAgICB7Ci0gICAgICAgIG1fcGFnZU92ZXJsYXlDbGllbnQtPnBhaW50UGFn
ZU92ZXJsYXkoY29udGV4dCk7CisgICAgICAgIGdjLnNhdmUoKTsKKyAgICAgICAgbV9wYWdlT3Zl
cmxheUNsaWVudC0+cGFpbnRQYWdlT3ZlcmxheShUb1dlYkNhbnZhcygmZ2MpKTsKKyAgICAgICAg
Z2MucmVzdG9yZSgpOwogICAgIH0KIAogICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdApAQCAtOTEsMjAgKzEwOSwyMSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIGV4cGxpY2l0IE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbChXZWJWaWV3SW1w
bCogd2ViVmlld0ltcGwsIFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCogcGFnZU92ZXJs
YXlDbGllbnQpCisgICAgT3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKFdlYlZpZXdJbXBs
KiB3ZWJWaWV3SW1wbCwgV2ViUGFnZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQog
ICAgICAgICA6IG1fcGFnZU92ZXJsYXlDbGllbnQocGFnZU92ZXJsYXlDbGllbnQpCiAgICAgICAg
ICwgbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKICAgICB7CiAgICAgfQogCi0gICAgUGFnZU92
ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50KiBtX3BhZ2VPdmVybGF5Q2xpZW50OworICAgIFdlYlBh
Z2VPdmVybGF5Q2xpZW50KiBtX3BhZ2VPdmVybGF5Q2xpZW50OwogICAgIFdlYlZpZXdJbXBsKiBt
X3dlYlZpZXdJbXBsOwogfTsKICNlbmRpZgogCiB2b2lkIFBhZ2VPdmVybGF5OjpjbGVhcigpCiB7
Ci0gICAgaW52YWxpZGF0ZVdlYkZyYW1lKCk7CisgICAgY29uc3QgV2ViU2l6ZSYgc2l6ZSA9IG1f
dmlld0ltcGwtPnNpemUoKTsKKyAgICBpbnZhbGlkYXRlV2ViRnJhbWUoV2ViUmVjdCgwLCAwLCBz
aXplLndpZHRoLCBzaXplLmhlaWdodCkpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIGlmIChtX2xheWVyKSB7CkBAIC0xMTUsOSArMTM0LDkgQEAgdm9pZCBQYWdlT3Zl
cmxheTo6Y2xlYXIoKQogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZU92ZXJsYXk6OnVwZGF0ZSgpCit2
b2lkIFBhZ2VPdmVybGF5Ojp1cGRhdGUoUGFnZU92ZXJsYXlVcGRhdGVPcHRpb24gdXBkYXRlT3B0
aW9uKQogewotICAgIGludmFsaWRhdGVXZWJGcmFtZSgpOworICAgIGludmFsaWRhdGVXZWJGcmFt
ZShtX2NsaWVudC0+Z2V0RGlydHlSZWN0KCkpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIGlmICghbV9sYXllcikgewpAQCAtMTI1LDMxICsxNDQsNDQgQEAgdm9pZCBQ
YWdlT3ZlcmxheTo6dXBkYXRlKCkKICAgICAgICAgbV9sYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZShtX2xheWVyQ2xpZW50LmdldCgpKTsKICAgICAgICAgbV9sYXllci0+c2V0TmFtZSgiV2Vi
Vmlld0ltcGwgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKICAgICAgICAgbV9sYXllci0+c2V0RHJh
d3NDb250ZW50KHRydWUpOwotICAgICAgICBjb25zdCBXZWJTaXplJiBzaXplID0gbV92aWV3SW1w
bC0+c2l6ZSgpOwotICAgICAgICBtX2xheWVyLT5zZXRTaXplKEludFNpemUoc2l6ZS53aWR0aCwg
c2l6ZS5oZWlnaHQpKTsKKyAgICAgICAgdXBkYXRlT3B0aW9uID0gRm9yY2VVcGRhdGU7CiAgICAg
fQorCisgICAgRmxvYXRTaXplIHNpemUobV92aWV3SW1wbC0+c2l6ZSgpLndpZHRoLCBtX3ZpZXdJ
bXBsLT5zaXplKCkuaGVpZ2h0KTsKKyAgICBpZiAoc2l6ZSAhPSBtX2xheWVyLT5zaXplKCkpIHsK
KyAgICAgICAgLy8gVHJpZ2dlcnMgcmUtYWRkaW5nIHRvIHJvb3QgbGF5ZXIgdG8gZW5zdXJlIHRo
YXQgd2UgYXJlIG9uIHRvcCBvZgorICAgICAgICAvLyBzY3JvbGxiYXJzLgorICAgICAgICBtX2xh
eWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgICAgIG1fbGF5ZXItPnNldFNpemUoc2l6ZSk7
CisgICAgICAgIHVwZGF0ZU9wdGlvbiA9IEZvcmNlVXBkYXRlOworICAgIH0KKwogICAgIG1fdmll
d0ltcGwtPnNldE92ZXJsYXlMYXllcihtX2xheWVyLmdldCgpKTsKLSAgICBtX2xheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkoKTsKKworICAgIGlmICh1cGRhdGVPcHRpb24gPT0gRm9yY2VVcGRhdGUpCisg
ICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIGVsc2UgeworICAgICAgICBj
b25zdCBXZWJSZWN0JiBkaXJ0eVJlY3QgPSBtX2NsaWVudC0+Z2V0RGlydHlSZWN0KCk7CisgICAg
ICAgIGlmICghZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fbGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QoZGlydHlSZWN0LngsIGRpcnR5UmVj
dC55LCBkaXJ0eVJlY3Qud2lkdGgsIGRpcnR5UmVjdC5oZWlnaHQpKTsKKyAgICB9CiAjZW5kaWYK
IH0KIAogdm9pZCBQYWdlT3ZlcmxheTo6cGFpbnRXZWJGcmFtZShHcmFwaGljc0NvbnRleHQmIGdj
KQogewotICAgIGlmICghbV92aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpCi0gICAgICAgIG1fY2xpZW50LT5wYWludFBhZ2VPdmVybGF5KGdjKTsKKyAgICBpZiAoIW1f
dmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisgICAgICAgIGdj
LnNhdmUoKTsKKyAgICAgICAgbV9jbGllbnQtPnBhaW50UGFnZU92ZXJsYXkoVG9XZWJDYW52YXMo
JmdjKSk7CisgICAgICAgIGdjLnJlc3RvcmUoKTsKKyAgICB9CiB9CiAKLXZvaWQgUGFnZU92ZXJs
YXk6OmludmFsaWRhdGVXZWJGcmFtZSgpCit2b2lkIFBhZ2VPdmVybGF5OjppbnZhbGlkYXRlV2Vi
RnJhbWUoY29uc3QgV2ViUmVjdCYgZGFtYWdlZFJlY3QpCiB7Ci0gICAgLy8gUGFnZU92ZXJsYXlD
bGllbnQgZG9lcyB0aGUgYWN0dWFsIHBhaW50aW5nIG9mIHRoZSBvdmVybGF5LgorICAgIC8vIFdl
YlBhZ2VPdmVybGF5Q2xpZW50IGRvZXMgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUgb3Zlcmxh
eS4KICAgICAvLyBIZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHRvIGludmFsaWRhdGUuCi0gICAgaWYg
KCFtX3ZpZXdJbXBsLT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewotICAgICAg
ICAvLyBGSVhNRTogYWJsZSB0byBpbnZhbGlkYXRlIGEgc21hbGxlciByZWN0LgotICAgICAgICAv
LyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IHRvIGp1c3QgaW52YWxpZGF0ZSBhIHNtYWxsZXIgcmVj
dCBnaXZlbiB0aGF0Ci0gICAgICAgIC8vIHRoaXMgaXMgbm90IG9uIGEgY3JpdGljYWwgY29kZXBh
dGg/IEluIG9yZGVyIHRvIGRvIHNvLCB3ZSdkCi0gICAgICAgIC8vIGhhdmUgdG8gdGFrZSBzY3Jv
bGxpbmcgaW50byBhY2NvdW50LgotICAgICAgICBjb25zdCBXZWJTaXplJiBzaXplID0gbV92aWV3
SW1wbC0+c2l6ZSgpOwotICAgICAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIHNpemUud2lk
dGgsIHNpemUuaGVpZ2h0KTsKKyAgICBpZiAoIW1fdmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSgpICYmICFkYW1hZ2VkUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYg
KG1fdmlld0ltcGwtPmNsaWVudCgpKQogICAgICAgICAgICAgbV92aWV3SW1wbC0+Y2xpZW50KCkt
PmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmgJKHJldmlzaW9uIDEwMTU2MikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDMxICszOSwzNCBAQCBjbGFzcyBHcmFwaGljc0xheWVyQ2xpZW50OwogfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VPdmVybGF5Q2xpZW50OworY2xhc3MgV2ViUmVjdDsKIGNs
YXNzIFdlYlZpZXdJbXBsOwogCiBjbGFzcyBQYWdlT3ZlcmxheSB7CiBwdWJsaWM6Ci0gICAgY2xh
c3MgUGFnZU92ZXJsYXlDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lk
IHBhaW50UGFnZU92ZXJsYXkoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JikgPSAwOworICAgIGVu
dW0gUGFnZU92ZXJsYXlVcGRhdGVPcHRpb24geworICAgICAgICBGb3JjZVVwZGF0ZSwKKyAgICAg
ICAgTm90Rm9yY2VVcGRhdGUKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZU92
ZXJsYXk+IGNyZWF0ZShXZWJWaWV3SW1wbCosIFBhZ2VPdmVybGF5Q2xpZW50Kik7CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShXZWJWaWV3SW1wbCosIFdlYlBhZ2VP
dmVybGF5Q2xpZW50Kik7CiAKICAgICB+UGFnZU92ZXJsYXkoKSB7IH0KIAotICAgIHZvaWQgc2V0
Q2xpZW50KFBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0K
KyAgICBXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KSB7
IG1fY2xpZW50ID0gY2xpZW50OyB9CiAKICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCB1cGRh
dGUoKTsKKyAgICB2b2lkIHVwZGF0ZShQYWdlT3ZlcmxheVVwZGF0ZU9wdGlvbik7CiAgICAgdm9p
ZCBwYWludFdlYkZyYW1lKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOwogCiBwcml2YXRlOgot
ICAgIFBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiwgUGFnZU92ZXJsYXlDbGllbnQqKTsKLSAgICB2
b2lkIGludmFsaWRhdGVXZWJGcmFtZSgpOworICAgIFBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiwg
V2ViUGFnZU92ZXJsYXlDbGllbnQqKTsKKyAgICB2b2lkIGludmFsaWRhdGVXZWJGcmFtZShjb25z
dCBXZWJSZWN0Jik7CiAKICAgICBXZWJWaWV3SW1wbCogbV92aWV3SW1wbDsKLSAgICBQYWdlT3Zl
cmxheUNsaWVudCogbV9jbGllbnQ7CisgICAgV2ViUGFnZU92ZXJsYXlDbGllbnQqIG1fY2xpZW50
OwogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX2xheWVyOwogICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50PiBtX2xheWVyQ2xpZW50OwogfTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCisgKiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUxpc3QuaCIKKworI2luY2x1ZGUg
IlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXlDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJWaWV3SW1wbC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc093blB0cjxQ
YWdlT3ZlcmxheUxpc3Q+IFBhZ2VPdmVybGF5TGlzdDo6Y3JlYXRlKFdlYlZpZXdJbXBsKiB2aWV3
SW1wbCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VPdmVybGF5TGlzdCh2aWV3SW1w
bCkpOworfQorCitQYWdlT3ZlcmxheUxpc3Q6OlBhZ2VPdmVybGF5TGlzdChXZWJWaWV3SW1wbCog
dmlld0ltcGwpCisgICAgOiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQoreworfQorCitQYWdlT3Zlcmxh
eUxpc3Q6On5QYWdlT3ZlcmxheUxpc3QoKQoreworfQorCitib29sIFBhZ2VPdmVybGF5TGlzdDo6
YWRkQ2xpZW50KFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQpCit7CisgICAgYm9vbCBhZGRl
ZCA9IGZhbHNlOworICAgIHNpemVfdCBpbmRleCA9IGZpbmRDbGllbnQoY2xpZW50KTsKKyAgICBp
ZiAoaW5kZXggPT0gV1RGOjpub3RGb3VuZCkgeworICAgICAgICBPd25QdHI8UGFnZU92ZXJsYXk+
IHBhZ2VPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZShtX3ZpZXdJbXBsLCBjbGllbnQpOwor
ICAgICAgICBtX3BhZ2VPdmVybGF5cy5hcHBlbmQocGFnZU92ZXJsYXkucmVsZWFzZSgpKTsKKyAg
ICAgICAgaW5kZXggPSBtX3BhZ2VPdmVybGF5cy5zaXplKCkgLSAxOworICAgICAgICBhZGRlZCA9
IHRydWU7CisgICAgfQorCisgICAgUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5ID0gbV9wYWdlT3Zl
cmxheXNbaW5kZXhdLmdldCgpOworCisgICAgLy8gQWRqdXN0IHBhZ2Ugb3ZlcmxheSBsaXN0IG9y
ZGVyIGJhc2VkIG9uIHRoZWlyIHotb3JkZXIgbnVtYmVycy4gV2UgZmlyc3QKKyAgICAvLyBjaGVj
ayBpZiB3ZSBuZWVkIHRvIG1vdmUgdGhlIG92ZXJsYXkgdXAgYW5kIGRvIHNvIGlmIG5lZWRlZC4g
T3RoZXJ3aXNlLAorICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gbW92ZSBpdCBkb3duLgorICAg
IGJvb2wgem9yZGVyQ2hhbmdlZCA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsg
aSArIDEgPCBtX3BhZ2VPdmVybGF5cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9wYWdl
T3ZlcmxheXNbaV0tPmNsaWVudCgpLT5wYWdlT3ZlcmxheVpPcmRlcigpID49IG1fcGFnZU92ZXJs
YXlzW2kgKyAxXS0+Y2xpZW50KCktPnBhZ2VPdmVybGF5Wk9yZGVyKCkpIHsKKyAgICAgICAgICAg
IG1fcGFnZU92ZXJsYXlzW2ldLnN3YXAobV9wYWdlT3ZlcmxheXNbaSArIDFdKTsKKyAgICAgICAg
ICAgIHpvcmRlckNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF6
b3JkZXJDaGFuZ2VkKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA+PSAxOyAt
LWkpIHsKKyAgICAgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5c1tpXS0+Y2xpZW50KCktPnBhZ2VP
dmVybGF5Wk9yZGVyKCkgPCBtX3BhZ2VPdmVybGF5c1tpIC0gMV0tPmNsaWVudCgpLT5wYWdlT3Zl
cmxheVpPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0uc3dhcCht
X3BhZ2VPdmVybGF5c1tpIC0gMV0pOworICAgICAgICAgICAgICAgIHpvcmRlckNoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgd2UgZGlk
IG1vdmUgdGhlIG92ZXJsYXksIHRoYXQgbWVhbnMgei1vcmRlciBpcyBjaGFuZ2VkIGFuZCB3ZSBu
ZWVkIHRvCisgICAgLy8gdXBkYXRlIG92ZXJsYXkgbGF5ZXJzJyB6LW9yZGVyLiBPdGhlcndpc2Us
IGp1c3QgdXBkYXRlIGN1cnJlbnQgb3ZlcmxheS4KKyAgICBpZiAoem9yZGVyQ2hhbmdlZCkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92ZXJsYXlzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPmNsZWFyKCk7CisgICAgICAgIHVwZGF0
ZShQYWdlT3ZlcmxheTo6Tm90Rm9yY2VVcGRhdGUpOworICAgIH0gZWxzZQorICAgICAgICBwYWdl
T3ZlcmxheS0+dXBkYXRlKFBhZ2VPdmVybGF5OjpOb3RGb3JjZVVwZGF0ZSk7CisKKyAgICByZXR1
cm4gYWRkZWQ7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlMaXN0OjpyZW1vdmVDbGllbnQoV2ViUGFn
ZU92ZXJsYXlDbGllbnQqIGNsaWVudCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBmaW5kQ2xpZW50
KGNsaWVudCk7CisgICAgaWYgKGluZGV4ID09IFdURjo6bm90Rm91bmQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fcGFnZU92ZXJsYXlzW2luZGV4XS0+Y2xlYXIoKTsKKyAgICBtX3Bh
Z2VPdmVybGF5cy5yZW1vdmUoaW5kZXgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBh
Z2VPdmVybGF5TGlzdDo6dXBkYXRlKFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheVVwZGF0ZU9wdGlv
biB1cGRhdGVPcHRpb24pCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VPdmVy
bGF5cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPnVwZGF0ZSh1cGRh
dGVPcHRpb24pOworfQorCit2b2lkIFBhZ2VPdmVybGF5TGlzdDo6cGFpbnRXZWJGcmFtZShXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmIGdjKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcGFnZU92ZXJsYXlzW2ldLT5w
YWludFdlYkZyYW1lKGdjKTsKK30KKworc2l6ZV90IFBhZ2VPdmVybGF5TGlzdDo6ZmluZENsaWVu
dChXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZU92
ZXJsYXlzW2ldLT5jbGllbnQoKSA9PSBjbGllbnQpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAg
ICB9CisgICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92
ZXJsYXlMaXN0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCisgKiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UGFnZU92ZXJsYXlMaXN0X2gKKyNkZWZpbmUgUGFnZU92ZXJsYXlMaXN0X2gKKworI2luY2x1ZGUg
IlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK2NsYXNzIFdlYlBhZ2VPdmVybGF5Q2xpZW50OworY2xhc3MgV2ViVmlld0ltcGw7CisKK2Ns
YXNzIFBhZ2VPdmVybGF5TGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFn
ZU92ZXJsYXlMaXN0PiBjcmVhdGUoV2ViVmlld0ltcGwqKTsKKworICAgIH5QYWdlT3ZlcmxheUxp
c3QoKTsKKworICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9wYWdlT3ZlcmxheXMu
c2l6ZSgpOyB9CisKKyAgICAvLyBBZGRzL3JlbW92ZXMgYSBQYWdlT3ZlcmxheSBmb3IgZ2l2ZW4g
Y2xpZW50LgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIFBhZ2VPdmVybGF5IGlzIGFkZGVkL3Jl
bW92ZWQuCisgICAgYm9vbCBhZGRDbGllbnQoV2ViUGFnZU92ZXJsYXlDbGllbnQqKTsKKyAgICBi
b29sIHJlbW92ZUNsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCopOworCisgICAgdm9pZCB1cGRh
dGUoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5VXBkYXRlT3B0aW9uKTsKKyAgICB2b2lkIHBhaW50
V2ViRnJhbWUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdHlw
ZWRlZiBWZWN0b3I8T3duUHRyPFBhZ2VPdmVybGF5PiwgMj4gUGFnZU92ZXJsYXlzOworCisgICAg
ZXhwbGljaXQgUGFnZU92ZXJsYXlMaXN0KFdlYlZpZXdJbXBsKik7CisKKyAgICAvLyBSZXR1cm5z
IHRoZSBpbmRleCBvZiB0aGUgY2xpZW50IGZvdW5kLiBPdGhlcndpc2UsIHJldHVybnMgV1RGOjpu
b3RGb3VuZC4KKyAgICBzaXplX3QgZmluZENsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCopOwor
CisgICAgV2ViVmlld0ltcGwqIG1fdmlld0ltcGw7CisgICAgUGFnZU92ZXJsYXlzIG1fcGFnZU92
ZXJsYXlzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlT3Zl
cmxheUxpc3RfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGFnZU92ZXJsYXlMaXN0LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IExGCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzQWdlbnRJbXBsLmNwcAkocmV2aXNpb24gMTAxNTYyKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4
ICs0Miw4IEBACiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRl
ICJQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0Nv
bnRleHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC0yNzIsMjIg
KzI3MiwzNyBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpicmluZ0Zyb250ZW5kCiB7CiB9
CiAKLS8vIFBhZ2VPdmVybGF5Q2xpZW50Ci12b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWlu
dFBhZ2VPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgZ2MpCisvLyBXZWJQYWdlT3ZlcmxheUNsaWVu
dAordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cGFpbnRQYWdlT3ZlcmxheShXZWJDYW52YXMq
IGNhbnZhcykKIHsKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRy
b2xsZXIoKTsKICAgICBpZiAoaWMpCi0gICAgICAgIGljLT5kcmF3SGlnaGxpZ2h0KGdjKTsKKyAg
ICAgICAgaWMtPmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0QnVpbGRlcihjYW52YXMpLmNv
bnRleHQoKSk7Cit9CisKK2ludCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cGFnZU92ZXJsYXlaT3Jk
ZXIoKSBjb25zdAoreworICAgIHJldHVybiA5OTsKK30KKworV2ViUmVjdCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6Z2V0RGlydHlSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogYWJsZSB0byBp
bnZhbGlkYXRlIGEgc21hbGxlciByZWN0LgorICAgIC8vIEZJWE1FOiBJcyBpdCBpbXBvcnRhbnQg
dG8ganVzdCBpbnZhbGlkYXRlIGEgc21hbGxlciByZWN0IGdpdmVuIHRoYXQKKyAgICAvLyB0aGlz
IGlzIG5vdCBvbiBhIGNyaXRpY2FsIGNvZGVwYXRoPyBJbiBvcmRlciB0byBkbyBzbywgd2UnZAor
ICAgIC8vIGhhdmUgdG8gdGFrZSBzY3JvbGxpbmcgaW50byBhY2NvdW50LgorICAgIGNvbnN0IFdl
YlNpemUmIHNpemUgPSBtX3dlYlZpZXdJbXBsLT5zaXplKCk7CisgICAgcmV0dXJuIFdlYlJlY3Qo
MCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdl
bnRJbXBsOjpoaWdobGlnaHQoKQogewotICAgIG1fd2ViVmlld0ltcGwtPnNldFBhZ2VPdmVybGF5
Q2xpZW50KHRoaXMpOworICAgIG1fd2ViVmlld0ltcGwtPmFkZFdlYlBhZ2VPdmVybGF5KHRoaXMp
OwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KCkKIHsKLSAg
ICBtX3dlYlZpZXdJbXBsLT5zZXRQYWdlT3ZlcmxheUNsaWVudCgwKTsKKyAgICBtX3dlYlZpZXdJ
bXBsLT5yZW1vdmVXZWJQYWdlT3ZlcmxheSh0aGlzKTsKIH0KIAogYm9vbCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuaAkocmV2aXNpb24gMTAxNTYyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNBZ2VudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgog
I2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZU92
ZXJsYXlDbGllbnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgpAQCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0
YTsKIAogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudEltcGwgOiBwdWJsaWMgV2ViRGV2VG9vbHNBZ2Vu
dFByaXZhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJDb3JlOjpJ
bnNwZWN0b3JDbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBQYWdl
T3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgV2ViUGFnZU92ZXJsYXlDbGllbnQgewogcHVibGljOgogICAgIFdlYkRldlRvb2xz
QWdlbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgV2ViRGV2VG9vbHNBZ2VudENsaWVu
dCogY2xpZW50KTsKICAgICB2aXJ0dWFsIH5XZWJEZXZUb29sc0FnZW50SW1wbCgpOwpAQCAtOTcs
OCArOTcsMTAgQEAgcHVibGljOgogCiAgICAgaW50IGhvc3RJZCgpIHsgcmV0dXJuIG1faG9zdElk
OyB9CiAKLSAgICAvLyBQYWdlT3ZlcmxheUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBwYWludFBh
Z2VPdmVybGF5KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIC8vIFdlYlBhZ2VPdmVy
bGF5Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ2FudmFzKik7
CisgICAgdmlydHVhbCBpbnQgcGFnZU92ZXJsYXlaT3JkZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFdlYlJlY3QgZ2V0RGlydHlSZWN0KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcigpOwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiAxMDE1NjIp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDYzLDggKzIwNjMsOCBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6cGFpbnRXaXRo
Q29udGV4dChHcmFwCiAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWVWaWV3KCkp
IHsKICAgICAgICAgZ2MuY2xpcChkaXJ0eVJlY3QpOwogICAgICAgICBmcmFtZVZpZXcoKS0+cGFp
bnQoJmdjLCBkaXJ0eVJlY3QpOwotICAgICAgICBpZiAodmlld0ltcGwoKS0+cGFnZU92ZXJsYXko
KSkKLSAgICAgICAgICAgIHZpZXdJbXBsKCktPnBhZ2VPdmVybGF5KCktPnBhaW50V2ViRnJhbWUo
Z2MpOworICAgICAgICBpZiAodmlld0ltcGwoKS0+cGFnZU92ZXJsYXlzKCkpCisgICAgICAgICAg
ICB2aWV3SW1wbCgpLT5wYWdlT3ZlcmxheXMoKS0+cGFpbnRXZWJGcmFtZShnYyk7CiAgICAgfSBl
bHNlCiAgICAgICAgIGdjLmZpbGxSZWN0KGRpcnR5UmVjdCwgQ29sb3I6OndoaXRlLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKICAgICBnYy5yZXN0b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiAxMDE1NjIpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NTYsOCArMTI1Niw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sKQogICAgICAg
ICBpZiAoIXBhZ2UoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAobV9wYWdl
T3ZlcmxheSkKLSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOworICAgICAgICBp
ZiAobV9wYWdlT3ZlcmxheXMpCisgICAgICAgICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKFBh
Z2VPdmVybGF5OjpOb3RGb3JjZVVwZGF0ZSk7CiAKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5j
b21wb3NpdGUoKTsKICAgICB9CkBAIC0yNjEwLDIxICsyNjEwLDIyIEBAIHZvaWQgV2ViVmlld0lt
cGw6OnNldElnbm9yZUlucHV0RXZlbnRzKGIKICAgICBtX2lnbm9yZUlucHV0RXZlbnRzID0gbmV3
VmFsdWU7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnNldFBhZ2VPdmVybGF5Q2xpZW50KFBhZ2VP
dmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCogcGFnZU92ZXJsYXlDbGllbnQpCit2b2lkIFdlYlZp
ZXdJbXBsOjphZGRXZWJQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheUNsaWVudCogcGFnZU92ZXJs
YXlDbGllbnQpCiB7Ci0gICAgaWYgKHBhZ2VPdmVybGF5Q2xpZW50KSB7Ci0gICAgICAgIGlmICgh
bV9wYWdlT3ZlcmxheSkKLSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6
Y3JlYXRlKHRoaXMsIHBhZ2VPdmVybGF5Q2xpZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9wYWdlT3ZlcmxheS0+c2V0Q2xpZW50KHBhZ2VPdmVybGF5Q2xpZW50KTsKLSAgICAgICAg
bV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cykKKyAgICAg
ICAgbV9wYWdlT3ZlcmxheXMgPSBQYWdlT3ZlcmxheUxpc3Q6OmNyZWF0ZSh0aGlzKTsKKworICAg
IG1fcGFnZU92ZXJsYXlzLT5hZGRDbGllbnQocGFnZU92ZXJsYXlDbGllbnQpOworICAgIHNldFJv
b3RMYXllck5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVXZWJQ
YWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheUNsaWVudCogcGFnZU92ZXJsYXlDbGllbnQpCit7Cisg
ICAgaWYgKG1fcGFnZU92ZXJsYXlzICYmIG1fcGFnZU92ZXJsYXlzLT5yZW1vdmVDbGllbnQocGFn
ZU92ZXJsYXlDbGllbnQpKSB7CiAgICAgICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3BhZ2VPdmVybGF5KSB7Ci0gICAgICAgICAgICBt
X3BhZ2VPdmVybGF5LT5jbGVhcigpOwotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheSA9IG51bGxw
dHI7Ci0gICAgICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKLSAgICAgICAgfQor
CisgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5cy0+ZW1wdHkoKSkKKyAgICAgICAgICAgIG1fcGFn
ZU92ZXJsYXlzID0gbnVsbHB0cjsKICAgICB9CiB9CiAKQEAgLTI4NzEsOCArMjg3Miw4IEBAIHZv
aWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3MKICAgICAgICAgICAgIG1fY2xp
ZW50LT5kaWRBY3RpdmF0ZUNvbXBvc2l0b3IobV9sYXllclRyZWVIb3N0LT5jb21wb3NpdG9ySWRl
bnRpZmllcigpKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
ID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAobV9wYWdlT3ZlcmxheSkKLSAgICAgICAgICAgICAgICBtX3BhZ2VP
dmVybGF5LT51cGRhdGUoKTsKKyAgICAgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5cykKKyAgICAg
ICAgICAgICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKFBhZ2VPdmVybGF5OjpGb3JjZVVwZGF0
ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIo
KTsKICAgICAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNsZWFyKCk7CkBAIC0y
OTUzLDggKzI5NTQsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29u
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9wYWdlT3ZlcmxheSkKLSAgICAg
ICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQorICAg
ICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKFBhZ2VPdmVybGF5OjpGb3JjZVVwZGF0ZSk7CiB9
CiAKIHZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gMTAxNTYyKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEltcGwuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oIgotI2lu
Y2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXlMaXN0LmgiCiAjaW5j
bHVkZSAiVXNlck1lZGlhQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTkzLDYgKzkzLDcgQEAgY2xhc3MgV2Vi
SW1hZ2U7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViTW91c2VFdmVudDsKIGNs
YXNzIFdlYk1vdXNlV2hlZWxFdmVudDsKK2NsYXNzIFdlYlBhZ2VPdmVybGF5Q2xpZW50OwogY2xh
c3MgV2ViU2V0dGluZ3NJbXBsOwogY2xhc3MgV2ViVG91Y2hFdmVudDsKIApAQCAtMjI3LDYgKzIy
OCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluYWN0aXZlQmFja2dyb3VuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5hY3RpdmVGb3JlZ3JvdW5kQ29sb3IpOwogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkV2ViUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXlDbGllbnQqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlV2ViUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXlDbGll
bnQqKTsKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBh
bmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CkBAIC0yNDIsOCArMjQ1LDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0SWdub3JlSW5wdXRFdmVudHMoYm9vbCBuZXdWYWx1ZSk7
CiAgICAgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUqIGRldlRvb2xzQWdlbnRQcml2YXRlKCkgeyBy
ZXR1cm4gbV9kZXZUb29sc0FnZW50LmdldCgpOyB9CiAKLSAgICBQYWdlT3ZlcmxheSogcGFnZU92
ZXJsYXkoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VPdmVybGF5LmdldCgpOyB9Ci0gICAgdm9pZCBz
ZXRQYWdlT3ZlcmxheUNsaWVudChQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqKTsKKyAg
ICBQYWdlT3ZlcmxheUxpc3QqIHBhZ2VPdmVybGF5cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZU92
ZXJsYXlzLmdldCgpOyB9CiAKICAgICB2b2lkIHNldE92ZXJsYXlMYXllcihXZWJDb3JlOjpHcmFw
aGljc0xheWVyKik7CiAKQEAgLTU3OSw3ICs1ODEsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxX
ZWJDb3JlOjpQb3B1cENvbnRhaW5lcj4gbV9zZWxlY3RQb3B1cDsKIAogICAgIE93blB0cjxXZWJE
ZXZUb29sc0FnZW50UHJpdmF0ZT4gbV9kZXZUb29sc0FnZW50OwotICAgIE93blB0cjxQYWdlT3Zl
cmxheT4gbV9wYWdlT3ZlcmxheTsKKyAgICBPd25QdHI8UGFnZU92ZXJsYXlMaXN0PiBtX3BhZ2VP
dmVybGF5czsKIAogICAgIC8vIFdoZXRoZXIgdGhlIHdlYnZpZXcgaXMgcmVuZGVyaW5nIHRyYW5z
cGFyZW50bHkuCiAgICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117299</attachid>
            <date>2011-11-30 16:56:52 -0800</date>
            <delta_ts>2011-12-01 16:22:59 -0800</delta_ts>
            <desc>Address comments from jamesr</desc>
            <filename>webkit_73235.4.patch</filename>
            <type>text/plain</type>
            <size>31056</size>
            <attacher name="xiyuan">xiyuan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDE1NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3
IEBACisyMDExLTExLTMwICBYaXl1YW4gWGlhICA8eGl5dWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFN1cHBvcnQgYWRkaW5nL3JlbW92aW5nIHBhZ2Ugb3ZlcmxheSB0byBX
ZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Q2xpZW50Ojp+V2ViUGFnZU92ZXJs
YXlDbGllbnQpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL1Bh
Z2VPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJL
aXQ6Ok92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6T3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpwYWludENvbnRlbnRzKToKKyAg
ICAgICAgKFdlYktpdDo6T3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpPdmVybGF5R3Jh
cGhpY3NMYXllckNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xl
YXIpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZU92ZXJsYXk6OnBhaW50V2ViRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
T3ZlcmxheTo6aW52YWxpZGF0ZVdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXku
aDoKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OmNsaWVudCk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VPdmVybGF5OjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3Zlcmxh
eTo6ek9yZGVyKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OnNldFpPcmRlcik6Cisg
ICAgICAgICogc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlT3ZlcmxheUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5
TGlzdDo6UGFnZU92ZXJsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0
Ojp+UGFnZU92ZXJsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0Ojph
ZGRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OnJlbW92ZUNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6dXBkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0OjpwYWludFdlYkZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZU92ZXJsYXlMaXN0OjpmaW5kQ2xpZW50KToKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJs
YXlMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OmVtcHR5
KToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6cGFpbnRQYWdlT3ZlcmxheSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaXJ0eVJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGV2VG9vbHNBZ2VudEltcGw6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAqIHNyYy9XZWJEZXZU
b29sc0FnZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnBhaW50V2l0aENvbnRleHQpOgorICAgICAgICAqIHNy
Yy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3Np
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YWRkV2ViUGFnZU92ZXJsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVtb3ZlV2ViUGFnZU92ZXJsYXkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3ND
b250ZXh0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnBhZ2VPdmVybGF5cyk6CisKIDIwMTEtMTEtMzAgIERhdmlkIExldmluICA8
bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBkaWRVcGRhdGVM
YXlvdXQgZnJvbSBXZWJGcmFtZUNsaWVudCB0byBXZWJWaWV3Q2xpZW50LgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gMTAxNTY5KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNiArMjU4LDcgQEAKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYk5vdGlmaWNhdGlvblByZXNlbnRlci5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYk9wdGlvbkVsZW1lbnQuaCcsCisgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJQYWdlT3ZlcmxheUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
UGFnZVNlcmlhbGl6ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQYWdl
VmlzaWJpbGl0eVN0YXRlLmgnLApAQCAtNDM1LDYgKzQzNiw4IEBACiAgICAgICAgICAgICAgICAg
J3NyYy9wYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgnLAogICAgICAgICAgICAgICAg
ICdzcmMvUGFnZU92ZXJsYXkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5
LmgnLAorICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXlMaXN0LmNwcCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheUxpc3QuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Q
bGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxh
dGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9y
bVN1cHBvcnQuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBh
Z2VPdmVybGF5Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VPdmVybGF5Q2xpZW50LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KKyAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdlT3ZlcmxheUNs
aWVudF9oCisjZGVmaW5lIFdlYlBhZ2VPdmVybGF5Q2xpZW50X2gKKworI2luY2x1ZGUgIldlYkNh
bnZhcy5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYlBhZ2VPdmVybGF5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBQYWludHMgcGFnZSBv
dmVybGF5IGNvbnRlbnRzLgorICAgIHZpcnR1YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNh
bnZhcyopID0gMDsKKworICAgIC8vIFJldHVybnMgZGlydHkgcmVjdCB0aGF0IG5lZWRzIHJlcGFp
bnQuCisgICAgdmlydHVhbCBXZWJSZWN0IGRpcnR5UmVjdCgpIGNvbnN0ID0gMDsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgfldlYlBhZ2VPdmVybGF5Q2xpZW50KCkgeyB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlBhZ2VPdmVybGF5Q2xpZW50X2gKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VP
dmVybGF5Q2xpZW50LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAkocmV2aXNpb24gMTAx
NTY5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViRnJhbWVD
bGllbnQ7CiBjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYk5vZGU7CitjbGFz
cyBXZWJQYWdlT3ZlcmxheUNsaWVudDsKIGNsYXNzIFdlYlBlcm1pc3Npb25DbGllbnQ7CiBjbGFz
cyBXZWJTZXR0aW5nczsKIGNsYXNzIFdlYlNwZWxsQ2hlY2tDbGllbnQ7CkBAIC00MDksNiArNDEw
LDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBh
Z2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc0luaXRpYWxTdGF0ZSkgeyB9CiAKKyAgICAvLyBQYWdlT3Zl
cmxheSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICAvLyBBZGRzL3JlbW92ZXMgcGFnZSBvdmVybGF5IHRvIHRoaXMgV2ViVmll
dy4gVGhlc2UgZnVuY3Rpb25zIGNoYW5nZSB0aGUKKyAgICAvLyBncmFwaGljYWwgYXBwZWFyYW5j
ZSBvZiB0aGUgV2ViVmlldy4gV2ViUGFnZU92ZXJsYXlDbGllbnQgcGFpbnRzIHRoZQorICAgIC8v
IGNvbnRlbnRzIG9mIHRoZSBwYWdlIG92ZXJsYXkuIEl0IGFsc28gcHJvdmlkZXMgYW4gei1vcmRl
ciBudW1iZXIgZm9yCisgICAgLy8gdGhlIHBhZ2Ugb3ZlcmxheS4gVGhlIHotb3JkZXIgbnVtYmVy
IGRlZmluZXMgdGhlIHBhaW50IG9yZGVyIHRoZSBwYWdlCisgICAgLy8gb3ZlcmxheXMuIFBhZ2Ug
b3ZlcmxheXMgd2l0aCBsYXJnZXIgei1vcmRlciBudW1iZXIgd2lsbCBiZSBwYWludGVkIGFmdGVy
CisgICAgLy8gcGFnZSBvdmVybGF5cyB3aXRoIHNtYWxsZXIgei1vcmRlciBudW1iZXIuIFRoYXQg
aXMsIHRoZXkgYXBwZWFyIGFib3ZlCisgICAgLy8gdGhlIHBhZ2Ugb3ZlcmxheXMgd2l0aCBzbWFs
bGVyIHotb3JkZXIgbnVtYmVyLiBJZiB0d28gcGFnZSBvdmVybGF5cyBoYXZlCisgICAgLy8gdGhl
IHNhbWUgei1vcmRlciBudW1iZXIsIHRoZSBsYXRlciBhZGRlZCBvbmUgd2lsbCBiZSBvbiB0b3Au
CisgICAgdmlydHVhbCB2b2lkIGFkZFdlYlBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5Q2xpZW50
KiwgaW50IC8qei1vcmRlciovKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVdlYlBhZ2VP
dmVybGF5KFdlYlBhZ2VPdmVybGF5Q2xpZW50KikgPSAwOwogCiAgICAgLy8gVGVzdGluZyBmdW5j
dGlvbmFsaXR5IGZvciBMYXlvdXRUZXN0Q29udHJvbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCShy
ZXZpc2lvbiAxMDE1NjkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3Zlcmxh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3ZlcmxheUNsaWVudC5oIgogI2luY2x1ZGUgIldlYlZp
ZXdDbGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCkBAIC00MCwyMSArNDIsMzUg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1QYXNz
T3duUHRyPFBhZ2VPdmVybGF5PiBQYWdlT3ZlcmxheTo6Y3JlYXRlKFdlYlZpZXdJbXBsKiB2aWV3
SW1wbCwgUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkKK25hbWVzcGFjZSB7CisKK1dlYkNhbnZh
cyogVG9XZWJDYW52YXMoR3JhcGhpY3NDb250ZXh0KiBnYykKK3sKKyNpZiBXRUJLSVRfVVNJTkdf
U0tJQQorICAgIHJldHVybiBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworI2VsaWYg
V0VCS0lUX1VTSU5HX0NHCisgICAgcmV0dXJuIGdjLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRp
ZgorfQorCit9IC8vIG5hbWVzcGFjZQorCitQYXNzT3duUHRyPFBhZ2VPdmVybGF5PiBQYWdlT3Zl
cmxheTo6Y3JlYXRlKFdlYlZpZXdJbXBsKiB2aWV3SW1wbCwgV2ViUGFnZU92ZXJsYXlDbGllbnQq
IGNsaWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VPdmVybGF5KHZpZXdJbXBs
LCBjbGllbnQpKTsKIH0KIAotUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiB2
aWV3SW1wbCwgUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkKK1BhZ2VPdmVybGF5OjpQYWdlT3Zl
cmxheShXZWJWaWV3SW1wbCogdmlld0ltcGwsIFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQp
CiAgICAgOiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQogICAgICwgbV9jbGllbnQoY2xpZW50KQorICAg
ICwgbV96T3JkZXIoMCkKIHsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
IGNsYXNzIE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxPdmVy
bGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwqPiBjcmVhdGUoV2ViVmlld0ltcGwqIHdlYlZpZXdJ
bXBsLCBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCo+IGNy
ZWF0ZShXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsIFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdl
T3ZlcmxheUNsaWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3Zlcmxh
eUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKHdlYlZpZXdJbXBsLCBwYWdlT3ZlcmxheUNsaWVudCkp
OwogICAgIH0KQEAgLTY1LDkgKzgxLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIHsgfQogCi0gICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGlu
Q2xpcCkKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVy
KiwgR3JhcGhpY3NDb250ZXh0JiBnYywgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0
IEludFJlY3QmIGluQ2xpcCkKICAgICB7Ci0gICAgICAgIG1fcGFnZU92ZXJsYXlDbGllbnQtPnBh
aW50UGFnZU92ZXJsYXkoY29udGV4dCk7CisgICAgICAgIGdjLnNhdmUoKTsKKyAgICAgICAgbV9w
YWdlT3ZlcmxheUNsaWVudC0+cGFpbnRQYWdlT3ZlcmxheShUb1dlYkNhbnZhcygmZ2MpKTsKKyAg
ICAgICAgZ2MucmVzdG9yZSgpOwogICAgIH0KIAogICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IoKSBjb25zdApAQCAtOTEsMjAgKzEwOSwyMSBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIGV4cGxpY2l0IE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbChXZWJW
aWV3SW1wbCogd2ViVmlld0ltcGwsIFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCogcGFn
ZU92ZXJsYXlDbGllbnQpCisgICAgT3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKFdlYlZp
ZXdJbXBsKiB3ZWJWaWV3SW1wbCwgV2ViUGFnZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xp
ZW50KQogICAgICAgICA6IG1fcGFnZU92ZXJsYXlDbGllbnQocGFnZU92ZXJsYXlDbGllbnQpCiAg
ICAgICAgICwgbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKICAgICB7CiAgICAgfQogCi0gICAg
UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50KiBtX3BhZ2VPdmVybGF5Q2xpZW50OworICAg
IFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBtX3BhZ2VPdmVybGF5Q2xpZW50OwogICAgIFdlYlZpZXdJ
bXBsKiBtX3dlYlZpZXdJbXBsOwogfTsKICNlbmRpZgogCiB2b2lkIFBhZ2VPdmVybGF5OjpjbGVh
cigpCiB7Ci0gICAgaW52YWxpZGF0ZVdlYkZyYW1lKCk7CisgICAgY29uc3QgV2ViU2l6ZSYgc2l6
ZSA9IG1fdmlld0ltcGwtPnNpemUoKTsKKyAgICBpbnZhbGlkYXRlV2ViRnJhbWUoV2ViUmVjdCgw
LCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCkpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIGlmIChtX2xheWVyKSB7CkBAIC0xMTUsOSArMTM0LDkgQEAgdm9pZCBQ
YWdlT3ZlcmxheTo6Y2xlYXIoKQogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZU92ZXJsYXk6OnVwZGF0
ZSgpCit2b2lkIFBhZ2VPdmVybGF5Ojp1cGRhdGUoUGFnZU92ZXJsYXlVcGRhdGVPcHRpb24gdXBk
YXRlT3B0aW9uKQogewotICAgIGludmFsaWRhdGVXZWJGcmFtZSgpOworICAgIGludmFsaWRhdGVX
ZWJGcmFtZShtX2NsaWVudC0+ZGlydHlSZWN0KCkpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIGlmICghbV9sYXllcikgewpAQCAtMTI1LDMxICsxNDQsNDQgQEAgdm9p
ZCBQYWdlT3ZlcmxheTo6dXBkYXRlKCkKICAgICAgICAgbV9sYXllciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZShtX2xheWVyQ2xpZW50LmdldCgpKTsKICAgICAgICAgbV9sYXllci0+c2V0TmFtZSgi
V2ViVmlld0ltcGwgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKICAgICAgICAgbV9sYXllci0+c2V0
RHJhd3NDb250ZW50KHRydWUpOwotICAgICAgICBjb25zdCBXZWJTaXplJiBzaXplID0gbV92aWV3
SW1wbC0+c2l6ZSgpOwotICAgICAgICBtX2xheWVyLT5zZXRTaXplKEludFNpemUoc2l6ZS53aWR0
aCwgc2l6ZS5oZWlnaHQpKTsKKyAgICAgICAgdXBkYXRlT3B0aW9uID0gRm9yY2VVcGRhdGU7CiAg
ICAgfQorCisgICAgRmxvYXRTaXplIHNpemUobV92aWV3SW1wbC0+c2l6ZSgpLndpZHRoLCBtX3Zp
ZXdJbXBsLT5zaXplKCkuaGVpZ2h0KTsKKyAgICBpZiAoc2l6ZSAhPSBtX2xheWVyLT5zaXplKCkp
IHsKKyAgICAgICAgLy8gVHJpZ2dlcnMgcmUtYWRkaW5nIHRvIHJvb3QgbGF5ZXIgdG8gZW5zdXJl
IHRoYXQgd2UgYXJlIG9uIHRvcCBvZgorICAgICAgICAvLyBzY3JvbGxiYXJzLgorICAgICAgICBt
X2xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgICAgIG1fbGF5ZXItPnNldFNpemUoc2l6
ZSk7CisgICAgICAgIHVwZGF0ZU9wdGlvbiA9IEZvcmNlVXBkYXRlOworICAgIH0KKwogICAgIG1f
dmlld0ltcGwtPnNldE92ZXJsYXlMYXllcihtX2xheWVyLmdldCgpKTsKLSAgICBtX2xheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIGlmICh1cGRhdGVPcHRpb24gPT0gRm9yY2VVcGRhdGUp
CisgICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIGVsc2UgeworICAgICAg
ICBjb25zdCBXZWJSZWN0JiBkaXJ0eVJlY3QgPSBtX2NsaWVudC0+ZGlydHlSZWN0KCk7CisgICAg
ICAgIGlmICghZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fbGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QoZGlydHlSZWN0LngsIGRpcnR5UmVj
dC55LCBkaXJ0eVJlY3Qud2lkdGgsIGRpcnR5UmVjdC5oZWlnaHQpKTsKKyAgICB9CiAjZW5kaWYK
IH0KIAogdm9pZCBQYWdlT3ZlcmxheTo6cGFpbnRXZWJGcmFtZShHcmFwaGljc0NvbnRleHQmIGdj
KQogewotICAgIGlmICghbV92aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpCi0gICAgICAgIG1fY2xpZW50LT5wYWludFBhZ2VPdmVybGF5KGdjKTsKKyAgICBpZiAoIW1f
dmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisgICAgICAgIGdj
LnNhdmUoKTsKKyAgICAgICAgbV9jbGllbnQtPnBhaW50UGFnZU92ZXJsYXkoVG9XZWJDYW52YXMo
JmdjKSk7CisgICAgICAgIGdjLnJlc3RvcmUoKTsKKyAgICB9CiB9CiAKLXZvaWQgUGFnZU92ZXJs
YXk6OmludmFsaWRhdGVXZWJGcmFtZSgpCit2b2lkIFBhZ2VPdmVybGF5OjppbnZhbGlkYXRlV2Vi
RnJhbWUoY29uc3QgV2ViUmVjdCYgZGFtYWdlZFJlY3QpCiB7Ci0gICAgLy8gUGFnZU92ZXJsYXlD
bGllbnQgZG9lcyB0aGUgYWN0dWFsIHBhaW50aW5nIG9mIHRoZSBvdmVybGF5LgorICAgIC8vIFdl
YlBhZ2VPdmVybGF5Q2xpZW50IGRvZXMgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUgb3Zlcmxh
eS4KICAgICAvLyBIZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHRvIGludmFsaWRhdGUuCi0gICAgaWYg
KCFtX3ZpZXdJbXBsLT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewotICAgICAg
ICAvLyBGSVhNRTogYWJsZSB0byBpbnZhbGlkYXRlIGEgc21hbGxlciByZWN0LgotICAgICAgICAv
LyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IHRvIGp1c3QgaW52YWxpZGF0ZSBhIHNtYWxsZXIgcmVj
dCBnaXZlbiB0aGF0Ci0gICAgICAgIC8vIHRoaXMgaXMgbm90IG9uIGEgY3JpdGljYWwgY29kZXBh
dGg/IEluIG9yZGVyIHRvIGRvIHNvLCB3ZSdkCi0gICAgICAgIC8vIGhhdmUgdG8gdGFrZSBzY3Jv
bGxpbmcgaW50byBhY2NvdW50LgotICAgICAgICBjb25zdCBXZWJTaXplJiBzaXplID0gbV92aWV3
SW1wbC0+c2l6ZSgpOwotICAgICAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIHNpemUud2lk
dGgsIHNpemUuaGVpZ2h0KTsKKyAgICBpZiAoIW1fdmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSgpICYmICFkYW1hZ2VkUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYg
KG1fdmlld0ltcGwtPmNsaWVudCgpKQogICAgICAgICAgICAgbV92aWV3SW1wbC0+Y2xpZW50KCkt
PmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmgJKHJldmlzaW9uIDEwMTU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDMzICszOSw0MCBAQCBjbGFzcyBHcmFwaGljc0xheWVyQ2xpZW50OwogfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VPdmVybGF5Q2xpZW50OworY2xhc3MgV2ViUmVjdDsKIGNs
YXNzIFdlYlZpZXdJbXBsOwogCiBjbGFzcyBQYWdlT3ZlcmxheSB7CiBwdWJsaWM6Ci0gICAgY2xh
c3MgUGFnZU92ZXJsYXlDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lk
IHBhaW50UGFnZU92ZXJsYXkoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JikgPSAwOworICAgIGVu
dW0gUGFnZU92ZXJsYXlVcGRhdGVPcHRpb24geworICAgICAgICBGb3JjZVVwZGF0ZSwKKyAgICAg
ICAgTm90Rm9yY2VVcGRhdGUKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZU92
ZXJsYXk+IGNyZWF0ZShXZWJWaWV3SW1wbCosIFBhZ2VPdmVybGF5Q2xpZW50Kik7CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShXZWJWaWV3SW1wbCosIFdlYlBhZ2VP
dmVybGF5Q2xpZW50Kik7CiAKICAgICB+UGFnZU92ZXJsYXkoKSB7IH0KIAotICAgIHZvaWQgc2V0
Q2xpZW50KFBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0K
KyAgICBXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KSB7
IG1fY2xpZW50ID0gY2xpZW50OyB9CisKKyAgICBpbnQgek9yZGVyKCkgY29uc3QgeyByZXR1cm4g
bV96T3JkZXI7IH0KKyAgICB2b2lkIHNldFpPcmRlcihpbnQgek9yZGVyKSB7IG1fek9yZGVyID0g
ek9yZGVyOyB9CiAKICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCB1cGRhdGUoKTsKKyAgICB2
b2lkIHVwZGF0ZShQYWdlT3ZlcmxheVVwZGF0ZU9wdGlvbik7CiAgICAgdm9pZCBwYWludFdlYkZy
YW1lKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOwogCiBwcml2YXRlOgotICAgIFBhZ2VPdmVy
bGF5KFdlYlZpZXdJbXBsKiwgUGFnZU92ZXJsYXlDbGllbnQqKTsKLSAgICB2b2lkIGludmFsaWRh
dGVXZWJGcmFtZSgpOworICAgIFBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiwgV2ViUGFnZU92ZXJs
YXlDbGllbnQqKTsKKyAgICB2b2lkIGludmFsaWRhdGVXZWJGcmFtZShjb25zdCBXZWJSZWN0Jik7
CiAKICAgICBXZWJWaWV3SW1wbCogbV92aWV3SW1wbDsKLSAgICBQYWdlT3ZlcmxheUNsaWVudCog
bV9jbGllbnQ7CisgICAgV2ViUGFnZU92ZXJsYXlDbGllbnQqIG1fY2xpZW50OwogICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX2xheWVyOwogICAgIE93blB0cjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2xpZW50PiBtX2xheWVyQ2xpZW50OworICAgIGludCBtX3pPcmRlcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGFnZU92ZXJsYXlMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgR09PR0xFIElOQy4KKyAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBhZ2VPdmVybGF5TGlzdC5oIgorCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlT3ZlcmxheUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFBhZ2VPdmVybGF5TGlzdD4gUGFnZU92ZXJs
YXlMaXN0OjpjcmVhdGUoV2ViVmlld0ltcGwqIHZpZXdJbXBsKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgUGFnZU92ZXJsYXlMaXN0KHZpZXdJbXBsKSk7Cit9CisKK1BhZ2VPdmVybGF5TGlz
dDo6UGFnZU92ZXJsYXlMaXN0KFdlYlZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0lt
cGwodmlld0ltcGwpCit7Cit9CisKK1BhZ2VPdmVybGF5TGlzdDo6flBhZ2VPdmVybGF5TGlzdCgp
Cit7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlMaXN0OjphZGRDbGllbnQoV2ViUGFnZU92ZXJsYXlD
bGllbnQqIGNsaWVudCwgaW50IHpPcmRlcikKK3sKKyAgICBib29sIGFkZGVkID0gZmFsc2U7Cisg
ICAgc2l6ZV90IGluZGV4ID0gZmluZENsaWVudChjbGllbnQpOworICAgIGlmIChpbmRleCA9PSBX
VEY6Om5vdEZvdW5kKSB7CisgICAgICAgIE93blB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXkg
PSBQYWdlT3ZlcmxheTo6Y3JlYXRlKG1fdmlld0ltcGwsIGNsaWVudCk7CisgICAgICAgIG1fcGFn
ZU92ZXJsYXlzLmFwcGVuZChwYWdlT3ZlcmxheS5yZWxlYXNlKCkpOworICAgICAgICBpbmRleCA9
IG1fcGFnZU92ZXJsYXlzLnNpemUoKSAtIDE7CisgICAgICAgIGFkZGVkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkgPSBtX3BhZ2VPdmVybGF5c1tpbmRleF0u
Z2V0KCk7CisgICAgcGFnZU92ZXJsYXktPnNldFpPcmRlcih6T3JkZXIpOworCisgICAgLy8gQWRq
dXN0IHBhZ2Ugb3ZlcmxheSBsaXN0IG9yZGVyIGJhc2VkIG9uIHRoZWlyIHotb3JkZXIgbnVtYmVy
cy4gV2UgZmlyc3QKKyAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIG1vdmUgdGhlIG92ZXJsYXkg
dXAgYW5kIGRvIHNvIGlmIG5lZWRlZC4gT3RoZXJ3aXNlLAorICAgIC8vIGNoZWNrIGlmIHdlIG5l
ZWQgdG8gbW92ZSBpdCBkb3duLgorICAgIGJvb2wgek9yZGVyQ2hhbmdlZCA9IGZhbHNlOworICAg
IGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSArIDEgPCBtX3BhZ2VPdmVybGF5cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXNbaV0tPnpPcmRlcigpID49IG1fcGFnZU92
ZXJsYXlzW2kgKyAxXS0+ek9yZGVyKCkpIHsKKyAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlzW2ld
LnN3YXAobV9wYWdlT3ZlcmxheXNbaSArIDFdKTsKKyAgICAgICAgICAgIHpPcmRlckNoYW5nZWQg
PSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF6T3JkZXJDaGFuZ2VkKSB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA+PSAxOyAtLWkpIHsKKyAgICAgICAgICAg
IGlmIChtX3BhZ2VPdmVybGF5c1tpXS0+ek9yZGVyKCkgPCBtX3BhZ2VPdmVybGF5c1tpIC0gMV0t
PnpPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0uc3dhcChtX3Bh
Z2VPdmVybGF5c1tpIC0gMV0pOworICAgICAgICAgICAgICAgIHpPcmRlckNoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgd2UgZGlkIG1v
dmUgdGhlIG92ZXJsYXksIHRoYXQgbWVhbnMgei1vcmRlciBpcyBjaGFuZ2VkIGFuZCB3ZSBuZWVk
IHRvCisgICAgLy8gdXBkYXRlIG92ZXJsYXkgbGF5ZXJzJyB6LW9yZGVyLiBPdGhlcndpc2UsIGp1
c3QgdXBkYXRlIGN1cnJlbnQgb3ZlcmxheS4KKyAgICBpZiAoek9yZGVyQ2hhbmdlZCkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92ZXJsYXlzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPmNsZWFyKCk7CisgICAgICAgIHVwZGF0ZShQ
YWdlT3ZlcmxheTo6Tm90Rm9yY2VVcGRhdGUpOworICAgIH0gZWxzZQorICAgICAgICBwYWdlT3Zl
cmxheS0+dXBkYXRlKFBhZ2VPdmVybGF5OjpOb3RGb3JjZVVwZGF0ZSk7CisKKyAgICByZXR1cm4g
YWRkZWQ7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlMaXN0OjpyZW1vdmVDbGllbnQoV2ViUGFnZU92
ZXJsYXlDbGllbnQqIGNsaWVudCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBmaW5kQ2xpZW50KGNs
aWVudCk7CisgICAgaWYgKGluZGV4ID09IFdURjo6bm90Rm91bmQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1fcGFnZU92ZXJsYXlzW2luZGV4XS0+Y2xlYXIoKTsKKyAgICBtX3BhZ2VP
dmVybGF5cy5yZW1vdmUoaW5kZXgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBhZ2VP
dmVybGF5TGlzdDo6dXBkYXRlKFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheVVwZGF0ZU9wdGlvbiB1
cGRhdGVPcHRpb24pCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VPdmVybGF5
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPnVwZGF0ZSh1cGRhdGVP
cHRpb24pOworfQorCit2b2lkIFBhZ2VPdmVybGF5TGlzdDo6cGFpbnRXZWJGcmFtZShXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmIGdjKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
YWdlT3ZlcmxheXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcGFnZU92ZXJsYXlzW2ldLT5wYWlu
dFdlYkZyYW1lKGdjKTsKK30KKworc2l6ZV90IFBhZ2VPdmVybGF5TGlzdDo6ZmluZENsaWVudChX
ZWJQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZU92ZXJs
YXlzW2ldLT5jbGllbnQoKSA9PSBjbGllbnQpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9
CisgICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJs
YXlMaXN0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCisgKiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFn
ZU92ZXJsYXlMaXN0X2gKKyNkZWZpbmUgUGFnZU92ZXJsYXlMaXN0X2gKKworI2luY2x1ZGUgIlBh
Z2VPdmVybGF5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFdlYlBhZ2VPdmVybGF5Q2xpZW50OworY2xhc3MgV2ViVmlld0ltcGw7CisKK2NsYXNz
IFBhZ2VPdmVybGF5TGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZU92
ZXJsYXlMaXN0PiBjcmVhdGUoV2ViVmlld0ltcGwqKTsKKworICAgIH5QYWdlT3ZlcmxheUxpc3Qo
KTsKKworICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9wYWdlT3ZlcmxheXMuc2l6
ZSgpOyB9CisKKyAgICAvLyBBZGRzL3JlbW92ZXMgYSBQYWdlT3ZlcmxheSBmb3IgZ2l2ZW4gY2xp
ZW50LgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIFBhZ2VPdmVybGF5IGlzIGFkZGVkL3JlbW92
ZWQuCisgICAgYm9vbCBhZGRDbGllbnQoV2ViUGFnZU92ZXJsYXlDbGllbnQqLCBpbnQgLyogek9y
ZGVyICovKTsKKyAgICBib29sIHJlbW92ZUNsaWVudChXZWJQYWdlT3ZlcmxheUNsaWVudCopOwor
CisgICAgdm9pZCB1cGRhdGUoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5VXBkYXRlT3B0aW9uKTsK
KyAgICB2b2lkIHBhaW50V2ViRnJhbWUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisKK3By
aXZhdGU6CisgICAgdHlwZWRlZiBWZWN0b3I8T3duUHRyPFBhZ2VPdmVybGF5PiwgMj4gUGFnZU92
ZXJsYXlzOworCisgICAgZXhwbGljaXQgUGFnZU92ZXJsYXlMaXN0KFdlYlZpZXdJbXBsKik7CisK
KyAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2xpZW50IGZvdW5kLiBPdGhlcndpc2Us
IHJldHVybnMgV1RGOjpub3RGb3VuZC4KKyAgICBzaXplX3QgZmluZENsaWVudChXZWJQYWdlT3Zl
cmxheUNsaWVudCopOworCisgICAgV2ViVmlld0ltcGwqIG1fdmlld0ltcGw7CisgICAgUGFnZU92
ZXJsYXlzIG1fcGFnZU92ZXJsYXlzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBQYWdlT3ZlcmxheUxpc3RfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNBZ2VudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAkocmV2aXNpb24gMTAxNTY5KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw4ICs0Miw4IEBACiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJs
YXkuaCIKICNpbmNsdWRlICJQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJwYWlu
dGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCkBAIC0yNzIsMjIgKzI3MiwzMyBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpicmlu
Z0Zyb250ZW5kCiB7CiB9CiAKLS8vIFBhZ2VPdmVybGF5Q2xpZW50Ci12b2lkIFdlYkRldlRvb2xz
QWdlbnRJbXBsOjpwYWludFBhZ2VPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgZ2MpCisvLyBXZWJQ
YWdlT3ZlcmxheUNsaWVudAordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cGFpbnRQYWdlT3Zl
cmxheShXZWJDYW52YXMqIGNhbnZhcykKIHsKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9
IGluc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBpZiAoaWMpCi0gICAgICAgIGljLT5kcmF3SGln
aGxpZ2h0KGdjKTsKKyAgICAgICAgaWMtPmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0QnVp
bGRlcihjYW52YXMpLmNvbnRleHQoKSk7Cit9CisKK1dlYlJlY3QgV2ViRGV2VG9vbHNBZ2VudElt
cGw6OmRpcnR5UmVjdCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGFibGUgdG8gaW52YWxpZGF0
ZSBhIHNtYWxsZXIgcmVjdC4KKyAgICAvLyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IHRvIGp1c3Qg
aW52YWxpZGF0ZSBhIHNtYWxsZXIgcmVjdCBnaXZlbiB0aGF0CisgICAgLy8gdGhpcyBpcyBub3Qg
b24gYSBjcml0aWNhbCBjb2RlcGF0aD8gSW4gb3JkZXIgdG8gZG8gc28sIHdlJ2QKKyAgICAvLyBo
YXZlIHRvIHRha2Ugc2Nyb2xsaW5nIGludG8gYWNjb3VudC4KKyAgICBjb25zdCBXZWJTaXplJiBz
aXplID0gbV93ZWJWaWV3SW1wbC0+c2l6ZSgpOworICAgIHJldHVybiBXZWJSZWN0KDAsIDAsIHNp
emUud2lkdGgsIHNpemUuaGVpZ2h0KTsKIH0KIAogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6
aGlnaGxpZ2h0KCkKIHsKLSAgICBtX3dlYlZpZXdJbXBsLT5zZXRQYWdlT3ZlcmxheUNsaWVudCh0
aGlzKTsKKyAgICAvLyBVc2UgOTkgYXMgYSBiaWcgei1vcmRlciBudW1iZXIgc28gdGhhdCBoaWdo
bGlnaHQgaXMgYWJvdmUgb3RoZXIgb3ZlcmxheXMuCisgICAgbV93ZWJWaWV3SW1wbC0+YWRkV2Vi
UGFnZU92ZXJsYXkodGhpcywgOTkpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpo
aWRlSGlnaGxpZ2h0KCkKIHsKLSAgICBtX3dlYlZpZXdJbXBsLT5zZXRQYWdlT3ZlcmxheUNsaWVu
dCgwKTsKKyAgICBtX3dlYlZpZXdJbXBsLT5yZW1vdmVXZWJQYWdlT3ZlcmxheSh0aGlzKTsKIH0K
IAogYm9vbCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRl
dlRvb2xzQWdlbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAkocmV2aXNpb24gMTAxNTY5KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsOCArMzMsOCBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAKLSNpbmNs
dWRlICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXlDbGllbnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3Qg
V2ViRGV2VG9vbHNNZXNzYWdlRGF0YTsKIAogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudEltcGwgOiBw
dWJsaWMgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2ViUGFnZU92ZXJsYXlDbGllbnQgewogcHVi
bGljOgogICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwg
V2ViRGV2VG9vbHNBZ2VudENsaWVudCogY2xpZW50KTsKICAgICB2aXJ0dWFsIH5XZWJEZXZUb29s
c0FnZW50SW1wbCgpOwpAQCAtOTcsOCArOTcsOSBAQCBwdWJsaWM6CiAKICAgICBpbnQgaG9zdElk
KCkgeyByZXR1cm4gbV9ob3N0SWQ7IH0KIAotICAgIC8vIFBhZ2VPdmVybGF5Q2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7
CisgICAgLy8gV2ViUGFnZU92ZXJsYXlDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdl
T3ZlcmxheShXZWJDYW52YXMqKTsKKyAgICB2aXJ0dWFsIFdlYlJlY3QgZGlydHlSZWN0KCkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlcigpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCShyZXZpc2lvbiAxMDE1NjkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYzLDggKzIwNjMsOCBA
QCB2b2lkIFdlYkZyYW1lSW1wbDo6cGFpbnRXaXRoQ29udGV4dChHcmFwCiAgICAgaWYgKG1fZnJh
bWUtPmRvY3VtZW50KCkgJiYgZnJhbWVWaWV3KCkpIHsKICAgICAgICAgZ2MuY2xpcChkaXJ0eVJl
Y3QpOwogICAgICAgICBmcmFtZVZpZXcoKS0+cGFpbnQoJmdjLCBkaXJ0eVJlY3QpOwotICAgICAg
ICBpZiAodmlld0ltcGwoKS0+cGFnZU92ZXJsYXkoKSkKLSAgICAgICAgICAgIHZpZXdJbXBsKCkt
PnBhZ2VPdmVybGF5KCktPnBhaW50V2ViRnJhbWUoZ2MpOworICAgICAgICBpZiAodmlld0ltcGwo
KS0+cGFnZU92ZXJsYXlzKCkpCisgICAgICAgICAgICB2aWV3SW1wbCgpLT5wYWdlT3ZlcmxheXMo
KS0+cGFpbnRXZWJGcmFtZShnYyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGdjLmZpbGxSZWN0KGRp
cnR5UmVjdCwgQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBnYy5yZXN0
b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CShyZXZpc2lvbiAxMDE1NjkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNTYsOCArMTI1Niw4IEBAIHZvaWQgV2ViVmll
d0ltcGw6OmNvbXBvc2l0ZShib29sKQogICAgICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBpZiAobV9wYWdlT3ZlcmxheSkKLSAgICAgICAgICAgIG1fcGFn
ZU92ZXJsYXktPnVwZGF0ZSgpOworICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXMpCisgICAgICAg
ICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKFBhZ2VPdmVybGF5OjpOb3RGb3JjZVVwZGF0ZSk7
CiAKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21wb3NpdGUoKTsKICAgICB9CkBAIC0yNjEw
LDIxICsyNjEwLDIyIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElnbm9yZUlucHV0RXZlbnRzKGIK
ICAgICBtX2lnbm9yZUlucHV0RXZlbnRzID0gbmV3VmFsdWU7CiB9CiAKLXZvaWQgV2ViVmlld0lt
cGw6OnNldFBhZ2VPdmVybGF5Q2xpZW50KFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCog
cGFnZU92ZXJsYXlDbGllbnQpCit2b2lkIFdlYlZpZXdJbXBsOjphZGRXZWJQYWdlT3ZlcmxheShX
ZWJQYWdlT3ZlcmxheUNsaWVudCogcGFnZU92ZXJsYXlDbGllbnQsIGludCB6T3JkZXIpCiB7Ci0g
ICAgaWYgKHBhZ2VPdmVybGF5Q2xpZW50KSB7Ci0gICAgICAgIGlmICghbV9wYWdlT3ZlcmxheSkK
LSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMsIHBh
Z2VPdmVybGF5Q2xpZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYWdlT3Zlcmxh
eS0+c2V0Q2xpZW50KHBhZ2VPdmVybGF5Q2xpZW50KTsKLSAgICAgICAgbV9wYWdlT3ZlcmxheS0+
dXBkYXRlKCk7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cykKKyAgICAgICAgbV9wYWdlT3Zlcmxh
eXMgPSBQYWdlT3ZlcmxheUxpc3Q6OmNyZWF0ZSh0aGlzKTsKKworICAgIG1fcGFnZU92ZXJsYXlz
LT5hZGRDbGllbnQocGFnZU92ZXJsYXlDbGllbnQsIHpPcmRlcik7CisgICAgc2V0Um9vdExheWVy
TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVdlYlBhZ2VPdmVy
bGF5KFdlYlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKK3sKKyAgICBpZiAo
bV9wYWdlT3ZlcmxheXMgJiYgbV9wYWdlT3ZlcmxheXMtPnJlbW92ZUNsaWVudChwYWdlT3Zlcmxh
eUNsaWVudCkpIHsKICAgICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXkpIHsKLSAgICAgICAgICAgIG1fcGFnZU92
ZXJsYXktPmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5ID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwotICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1fcGFnZU92ZXJsYXlzLT5lbXB0eSgpKQorICAgICAgICAgICAgbV9wYWdlT3Zlcmxh
eXMgPSBudWxscHRyOwogICAgIH0KIH0KIApAQCAtMjg3MSw4ICsyODcyLDggQEAgdm9pZCBXZWJW
aWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvcwogICAgICAgICAgICAgbV9jbGllbnQtPmRp
ZEFjdGl2YXRlQ29tcG9zaXRvcihtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0b3JJZGVudGlmaWVy
KCkpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVl
OwogICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAgICAgICAgICAgIG1fcGFnZU92ZXJsYXkt
PnVwZGF0ZSgpOworICAgICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQorICAgICAgICAgICAg
ICAgIG1fcGFnZU92ZXJsYXlzLT51cGRhdGUoUGFnZU92ZXJsYXk6OkZvcmNlVXBkYXRlKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwogICAg
ICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QuY2xlYXIoKTsKQEAgLTI5NTMsOCAr
Mjk1NCw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb24KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAgICBtX3Bh
Z2VPdmVybGF5LT51cGRhdGUoKTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheXMpCisgICAgICAgIG1f
cGFnZU92ZXJsYXlzLT51cGRhdGUoUGFnZU92ZXJsYXk6OkZvcmNlVXBkYXRlKTsKIH0KIAogdm9p
ZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAxMDE1NjkpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0
Nyw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCi0jaW5jbHVkZSAi
UGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUxpc3QuaCIKICNpbmNsdWRlICJV
c2VyTWVkaWFDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtOTMsNiArOTMsNyBAQCBjbGFzcyBXZWJJbWFnZTsK
IGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwogY2xhc3MgV2Vi
TW91c2VXaGVlbEV2ZW50OworY2xhc3MgV2ViUGFnZU92ZXJsYXlDbGllbnQ7CiBjbGFzcyBXZWJT
ZXR0aW5nc0ltcGw7CiBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCkBAIC0yMjcsNiArMjI4LDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5h
Y3RpdmVCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbmFjdGl2ZUZvcmVncm91bmRDb2xvcik7CiAgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm1DdXN0b21Db250ZXh0TWVudUFjdGlvbih1bnNpZ25lZCBhY3Rpb24pOworICAgIHZpcnR1
YWwgdm9pZCBhZGRXZWJQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheUNsaWVudCosIGludCAvKiB6
T3JkZXIgKi8pOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVXZWJQYWdlT3ZlcmxheShXZWJQYWdl
T3ZlcmxheUNsaWVudCopOwogCiAgICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xpZW50CiAgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKQEAgLTI0
Miw4ICsyNDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJZ25vcmVJbnB1dEV2ZW50cyhib29s
IG5ld1ZhbHVlKTsKICAgICBXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSogZGV2VG9vbHNBZ2VudFBy
aXZhdGUoKSB7IHJldHVybiBtX2RldlRvb2xzQWdlbnQuZ2V0KCk7IH0KIAotICAgIFBhZ2VPdmVy
bGF5KiBwYWdlT3ZlcmxheSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZU92ZXJsYXkuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldFBhZ2VPdmVybGF5Q2xpZW50KFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNs
aWVudCopOworICAgIFBhZ2VPdmVybGF5TGlzdCogcGFnZU92ZXJsYXlzKCkgY29uc3QgeyByZXR1
cm4gbV9wYWdlT3ZlcmxheXMuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0T3ZlcmxheUxheWVyKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKIApAQCAtNTc5LDcgKzU4MSw3IEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyPiBtX3NlbGVjdFBvcHVwOwogCiAgICAg
T3duUHRyPFdlYkRldlRvb2xzQWdlbnRQcml2YXRlPiBtX2RldlRvb2xzQWdlbnQ7Ci0gICAgT3du
UHRyPFBhZ2VPdmVybGF5PiBtX3BhZ2VPdmVybGF5OworICAgIE93blB0cjxQYWdlT3ZlcmxheUxp
c3Q+IG1fcGFnZU92ZXJsYXlzOwogCiAgICAgLy8gV2hldGhlciB0aGUgd2VidmlldyBpcyByZW5k
ZXJpbmcgdHJhbnNwYXJlbnRseS4KICAgICBib29sIG1faXNUcmFuc3BhcmVudDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117515</attachid>
            <date>2011-12-01 16:22:59 -0800</date>
            <delta_ts>2011-12-01 16:32:06 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>webkit_73235.5.patch</filename>
            <type>text/plain</type>
            <size>31010</size>
            <attacher name="xiyuan">xiyuan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDE3MTkpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3
IEBACisyMDExLTEyLTAxICBYaXl1YW4gWGlhICA8eGl5dWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFN1cHBvcnQgYWRkaW5nL3JlbW92aW5nIHBhZ2Ugb3ZlcmxheSB0byBX
ZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZU92ZXJsYXkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojp+V2ViUGFnZU92ZXJsYXkpOgorICAgICAg
ICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL1BhZ2VPdmVybGF5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VPdmVybGF5OjpQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6Ok92ZXJsYXlHcmFwaGlj
c0xheWVyQ2xpZW50SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6T3ZlcmxheUdyYXBo
aWNzTGF5ZXJDbGllbnRJbXBsOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6T3Zl
cmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudElt
cGwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6
OnBhaW50V2ViRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6aW52YWxpZGF0
ZVdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXkuaDoKKyAgICAgICAgKFdlYktp
dDo6UGFnZU92ZXJsYXk6Om92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6
c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OnpPcmRlcik6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5OjpzZXRaT3JkZXIpOgorICAgICAgICAqIHNyYy9QYWdl
T3ZlcmxheUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OlBhZ2VPdmVybGF5
TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6flBhZ2VPdmVybGF5TGlz
dCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6YWRkKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZU92ZXJsYXlMaXN0OjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3Zl
cmxheUxpc3Q6OnVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6cGFp
bnRXZWJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6ZmluZCk6Cisg
ICAgICAgICogc3JjL1BhZ2VPdmVybGF5TGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UGFnZU92ZXJsYXlMaXN0OjplbXB0eSk6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnBhaW50UGFn
ZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlydHlS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZ2hsaWdodCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KToK
KyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2Vi
RnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpwYWludFdpdGhD
b250ZXh0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmFkZFBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlbW92ZVBh
Z2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkaWRS
ZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWdlT3ZlcmxheXMpOgorCiAyMDExLTEyLTAx
ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJv
bWl1bV0gYWRkIHJlZmVycmVyIHBvbGljeSB0byBXZWJDb250ZXh0TWVudURhdGEKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDEwMTcxOSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MCw3IEBA
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2su
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJPcHRpb25FbGVtZW50LmgnLAorICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViUGFnZU92ZXJsYXlDbGllbnQuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
UGFnZVZpc2liaWxpdHlTdGF0ZS5oJywKQEAgLTQzNyw2ICs0MzgsOCBAQAogICAgICAgICAgICAg
ICAgICdzcmMvcGFpbnRpbmcvR3JhcGhpY3NDb250ZXh0QnVpbGRlci5oJywKICAgICAgICAgICAg
ICAgICAnc3JjL1BhZ2VPdmVybGF5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3Zl
cmxheS5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAnLAorICAg
ICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXlMaXN0LmgnLAogICAgICAgICAgICAgICAgICdz
cmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvUGxh
dGZvcm1TdXBwb3J0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJQYWdlT3ZlcmxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlBhZ2VPdmVybGF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJQYWdlT3ZlcmxheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09H
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEdPT0dMRSBJTkMuCisgKiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFnZU92ZXJsYXlfaAorI2RlZmluZSBXZWJQ
YWdlT3ZlcmxheV9oCisKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIKKyNpbmNsdWRlICJXZWJSZWN0
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlT3ZlcmxheSB7CitwdWJs
aWM6CisgICAgLy8gUGFpbnRzIHBhZ2Ugb3ZlcmxheSBjb250ZW50cy4KKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRQYWdlT3ZlcmxheShXZWJDYW52YXMqKSA9IDA7CisKKyAgICAvLyBSZXR1cm5zIGRp
cnR5IHJlY3QgdGhhdCBuZWVkcyByZXBhaW50LgorICAgIHZpcnR1YWwgV2ViUmVjdCBkaXJ0eVJl
Y3QoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJQYWdlT3Zlcmxh
eSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQYWdl
T3ZlcmxheV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJQYWdlT3ZlcmxheS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgJKHJldmlz
aW9uIDEwMTcxOSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdl
YkZyYW1lQ2xpZW50OwogY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJOb2Rl
OworY2xhc3MgV2ViUGFnZU92ZXJsYXk7CiBjbGFzcyBXZWJQZXJtaXNzaW9uQ2xpZW50OwogY2xh
c3MgV2ViU2V0dGluZ3M7CiBjbGFzcyBXZWJTcGVsbENoZWNrQ2xpZW50OwpAQCAtNDA5LDYgKzQx
MCwxOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2liaWxpdHlTdGF0ZShXZWJQ
YWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNJbml0aWFsU3RhdGUpIHsgfQogCisgICAgLy8gUGFnZU92
ZXJsYXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgLy8gQWRkcy9yZW1vdmVzIHBhZ2Ugb3ZlcmxheSB0byB0aGlzIFdlYlZp
ZXcuIFRoZXNlIGZ1bmN0aW9ucyBjaGFuZ2UgdGhlCisgICAgLy8gZ3JhcGhpY2FsIGFwcGVhcmFu
Y2Ugb2YgdGhlIFdlYlZpZXcuIFdlYlBhZ2VPdmVybGF5Q2xpZW50IHBhaW50cyB0aGUKKyAgICAv
LyBjb250ZW50cyBvZiB0aGUgcGFnZSBvdmVybGF5LiBJdCBhbHNvIHByb3ZpZGVzIGFuIHotb3Jk
ZXIgbnVtYmVyIGZvcgorICAgIC8vIHRoZSBwYWdlIG92ZXJsYXkuIFRoZSB6LW9yZGVyIG51bWJl
ciBkZWZpbmVzIHRoZSBwYWludCBvcmRlciB0aGUgcGFnZQorICAgIC8vIG92ZXJsYXlzLiBQYWdl
IG92ZXJsYXlzIHdpdGggbGFyZ2VyIHotb3JkZXIgbnVtYmVyIHdpbGwgYmUgcGFpbnRlZCBhZnRl
cgorICAgIC8vIHBhZ2Ugb3ZlcmxheXMgd2l0aCBzbWFsbGVyIHotb3JkZXIgbnVtYmVyLiBUaGF0
IGlzLCB0aGV5IGFwcGVhciBhYm92ZQorICAgIC8vIHRoZSBwYWdlIG92ZXJsYXlzIHdpdGggc21h
bGxlciB6LW9yZGVyIG51bWJlci4gSWYgdHdvIHBhZ2Ugb3ZlcmxheXMgaGF2ZQorICAgIC8vIHRo
ZSBzYW1lIHotb3JkZXIgbnVtYmVyLCB0aGUgbGF0ZXIgYWRkZWQgb25lIHdpbGwgYmUgb24gdG9w
LgorICAgIHZpcnR1YWwgdm9pZCBhZGRQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSosIGludCAv
Knotb3JkZXIqLykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQYWdlT3ZlcmxheShXZWJQ
YWdlT3ZlcmxheSopID0gMDsKIAogICAgIC8vIFRlc3RpbmcgZnVuY3Rpb25hbGl0eSBmb3IgTGF5
b3V0VGVzdENvbnRyb2xsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcAkocmV2aXNpb24gMTAxNzE5KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAi
V2ViUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAi
V2ViVmlld0ltcGwuaCIKIApAQCAtNDAsMjMgKzQyLDM3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFzc093blB0cjxQYWdlT3ZlcmxheT4gUGFn
ZU92ZXJsYXk6OmNyZWF0ZShXZWJWaWV3SW1wbCogdmlld0ltcGwsIFBhZ2VPdmVybGF5Q2xpZW50
KiBjbGllbnQpCituYW1lc3BhY2UgeworCitXZWJDYW52YXMqIFRvV2ViQ2FudmFzKEdyYXBoaWNz
Q29udGV4dCogZ2MpCit7CisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAgICByZXR1cm4gZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyNlbGlmIFdFQktJVF9VU0lOR19DRworICAgIHJl
dHVybiBnYy0+cGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UK
KworUGFzc093blB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShXZWJWaWV3SW1w
bCogdmlld0ltcGwsIFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KQogewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgUGFnZU92ZXJsYXkodmlld0ltcGwsIGNsaWVudCkpOworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgUGFnZU92ZXJsYXkodmlld0ltcGwsIG92ZXJsYXkpKTsKIH0KIAotUGFnZU92ZXJs
YXk6OlBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiB2aWV3SW1wbCwgUGFnZU92ZXJsYXlDbGllbnQq
IGNsaWVudCkKK1BhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShXZWJWaWV3SW1wbCogdmlld0ltcGws
IFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KQogICAgIDogbV92aWV3SW1wbCh2aWV3SW1wbCkKLSAg
ICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fb3ZlcmxheShvdmVybGF5KQorICAgICwgbV96
T3JkZXIoMCkKIHsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIGNsYXNz
IE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxPdmVybGF5R3Jh
cGhpY3NMYXllckNsaWVudEltcGwqPiBjcmVhdGUoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBQ
YWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQorICAgIHN0
YXRpYyBQYXNzT3duUHRyPE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCo+IGNyZWF0ZShX
ZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsIFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudElt
cGwod2ViVmlld0ltcGwsIHBhZ2VPdmVybGF5Q2xpZW50KSk7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgT3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKHdlYlZpZXdJbXBsLCBvdmVy
bGF5KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+T3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJ
bXBsKCkgeyB9CkBAIC02NSw5ICs4MSwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBp
bkNsaXApCisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXll
ciosIEdyYXBoaWNzQ29udGV4dCYgZ2MsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBJbnRSZWN0JiBpbkNsaXApCiAgICAgewotICAgICAgICBtX3BhZ2VPdmVybGF5Q2xpZW50LT5w
YWludFBhZ2VPdmVybGF5KGNvbnRleHQpOworICAgICAgICBnYy5zYXZlKCk7CisgICAgICAgIG1f
b3ZlcmxheS0+cGFpbnRQYWdlT3ZlcmxheShUb1dlYkNhbnZhcygmZ2MpKTsKKyAgICAgICAgZ2Mu
cmVzdG9yZSgpOwogICAgIH0KIAogICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Io
KSBjb25zdApAQCAtOTEsMjAgKzEwOSwyMSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIGV4cGxpY2l0IE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbChXZWJWaWV3SW1wbCog
d2ViVmlld0ltcGwsIFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCogcGFnZU92ZXJsYXlD
bGllbnQpCi0gICAgICAgIDogbV9wYWdlT3ZlcmxheUNsaWVudChwYWdlT3ZlcmxheUNsaWVudCkK
KyAgICBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJ
bXBsLCBXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSkKKyAgICAgICAgOiBtX292ZXJsYXkob3Zlcmxh
eSkKICAgICAgICAgLCBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKQogICAgIHsKICAgICB9CiAK
LSAgICBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIG1fcGFnZU92ZXJsYXlDbGllbnQ7
CisgICAgV2ViUGFnZU92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBXZWJWaWV3SW1wbCogbV93ZWJW
aWV3SW1wbDsKIH07CiAjZW5kaWYKIAogdm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIoKQogewotICAg
IGludmFsaWRhdGVXZWJGcmFtZSgpOworICAgIGNvbnN0IFdlYlNpemUmIHNpemUgPSBtX3ZpZXdJ
bXBsLT5zaXplKCk7CisgICAgaW52YWxpZGF0ZVdlYkZyYW1lKFdlYlJlY3QoMCwgMCwgc2l6ZS53
aWR0aCwgc2l6ZS5oZWlnaHQpKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICBpZiAobV9sYXllcikgewpAQCAtMTE1LDQxICsxMzQsNTQgQEAgdm9pZCBQYWdlT3Zlcmxh
eTo6Y2xlYXIoKQogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZU92ZXJsYXk6OnVwZGF0ZSgpCit2b2lk
IFBhZ2VPdmVybGF5Ojp1cGRhdGUoUGFnZU92ZXJsYXlVcGRhdGVPcHRpb24gdXBkYXRlT3B0aW9u
KQogewotICAgIGludmFsaWRhdGVXZWJGcmFtZSgpOworICAgIGludmFsaWRhdGVXZWJGcmFtZSht
X292ZXJsYXktPmRpcnR5UmVjdCgpKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICBpZiAoIW1fbGF5ZXIpIHsKLSAgICAgICAgbV9sYXllckNsaWVudCA9IE92ZXJsYXlH
cmFwaGljc0xheWVyQ2xpZW50SW1wbDo6Y3JlYXRlKG1fdmlld0ltcGwsIG1fY2xpZW50KTsKKyAg
ICAgICAgbV9sYXllckNsaWVudCA9IE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbDo6Y3Jl
YXRlKG1fdmlld0ltcGwsIG1fb3ZlcmxheSk7CiAgICAgICAgIG1fbGF5ZXIgPSBHcmFwaGljc0xh
eWVyOjpjcmVhdGUobV9sYXllckNsaWVudC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXItPnNldE5h
bWUoIldlYlZpZXdJbXBsIHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CiAgICAgICAgIG1fbGF5ZXIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICAgICAgY29uc3QgV2ViU2l6ZSYgc2l6ZSA9IG1f
dmlld0ltcGwtPnNpemUoKTsKLSAgICAgICAgbV9sYXllci0+c2V0U2l6ZShJbnRTaXplKHNpemUu
d2lkdGgsIHNpemUuaGVpZ2h0KSk7CisgICAgICAgIHVwZGF0ZU9wdGlvbiA9IEZvcmNlVXBkYXRl
OwogICAgIH0KKworICAgIEZsb2F0U2l6ZSBzaXplKG1fdmlld0ltcGwtPnNpemUoKS53aWR0aCwg
bV92aWV3SW1wbC0+c2l6ZSgpLmhlaWdodCk7CisgICAgaWYgKHNpemUgIT0gbV9sYXllci0+c2l6
ZSgpKSB7CisgICAgICAgIC8vIFRyaWdnZXJzIHJlLWFkZGluZyB0byByb290IGxheWVyIHRvIGVu
c3VyZSB0aGF0IHdlIGFyZSBvbiB0b3Agb2YKKyAgICAgICAgLy8gc2Nyb2xsYmFycy4KKyAgICAg
ICAgbV9sYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgICAgICBtX2xheWVyLT5zZXRTaXpl
KHNpemUpOworICAgICAgICB1cGRhdGVPcHRpb24gPSBGb3JjZVVwZGF0ZTsKKyAgICB9CisKICAg
ICBtX3ZpZXdJbXBsLT5zZXRPdmVybGF5TGF5ZXIobV9sYXllci5nZXQoKSk7Ci0gICAgbV9sYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICBpZiAodXBkYXRlT3B0aW9uID09IEZvcmNlVXBk
YXRlKQorICAgICAgICBtX2xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgY29uc3QgV2ViUmVjdCYgZGlydHlSZWN0ID0gbV9vdmVybGF5LT5kaXJ0eVJlY3QoKTsK
KyAgICAgICAgaWYgKCFkaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9sYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KFdlYkNvcmU6OkZsb2F0UmVjdChkaXJ0eVJlY3QueCwgZGly
dHlSZWN0LnksIGRpcnR5UmVjdC53aWR0aCwgZGlydHlSZWN0LmhlaWdodCkpOworICAgIH0KICNl
bmRpZgogfQogCiB2b2lkIFBhZ2VPdmVybGF5OjpwYWludFdlYkZyYW1lKEdyYXBoaWNzQ29udGV4
dCYgZ2MpCiB7Ci0gICAgaWYgKCFtX3ZpZXdJbXBsLT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUoKSkKLSAgICAgICAgbV9jbGllbnQtPnBhaW50UGFnZU92ZXJsYXkoZ2MpOworICAgIGlm
ICghbV92aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyAgICAg
ICAgZ2Muc2F2ZSgpOworICAgICAgICBtX292ZXJsYXktPnBhaW50UGFnZU92ZXJsYXkoVG9XZWJD
YW52YXMoJmdjKSk7CisgICAgICAgIGdjLnJlc3RvcmUoKTsKKyAgICB9CiB9CiAKLXZvaWQgUGFn
ZU92ZXJsYXk6OmludmFsaWRhdGVXZWJGcmFtZSgpCit2b2lkIFBhZ2VPdmVybGF5OjppbnZhbGlk
YXRlV2ViRnJhbWUoY29uc3QgV2ViUmVjdCYgZGFtYWdlZFJlY3QpCiB7Ci0gICAgLy8gUGFnZU92
ZXJsYXlDbGllbnQgZG9lcyB0aGUgYWN0dWFsIHBhaW50aW5nIG9mIHRoZSBvdmVybGF5LgorICAg
IC8vIFdlYlBhZ2VPdmVybGF5Q2xpZW50IGRvZXMgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUg
b3ZlcmxheS4KICAgICAvLyBIZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHRvIGludmFsaWRhdGUuCi0g
ICAgaWYgKCFtX3ZpZXdJbXBsLT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewot
ICAgICAgICAvLyBGSVhNRTogYWJsZSB0byBpbnZhbGlkYXRlIGEgc21hbGxlciByZWN0LgotICAg
ICAgICAvLyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IHRvIGp1c3QgaW52YWxpZGF0ZSBhIHNtYWxs
ZXIgcmVjdCBnaXZlbiB0aGF0Ci0gICAgICAgIC8vIHRoaXMgaXMgbm90IG9uIGEgY3JpdGljYWwg
Y29kZXBhdGg/IEluIG9yZGVyIHRvIGRvIHNvLCB3ZSdkCi0gICAgICAgIC8vIGhhdmUgdG8gdGFr
ZSBzY3JvbGxpbmcgaW50byBhY2NvdW50LgotICAgICAgICBjb25zdCBXZWJTaXplJiBzaXplID0g
bV92aWV3SW1wbC0+c2l6ZSgpOwotICAgICAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIHNp
emUud2lkdGgsIHNpemUuaGVpZ2h0KTsKKyAgICBpZiAoIW1fdmlld0ltcGwtPmlzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSgpICYmICFkYW1hZ2VkUmVjdC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgaWYgKG1fdmlld0ltcGwtPmNsaWVudCgpKQogICAgICAgICAgICAgbV92aWV3SW1wbC0+Y2xp
ZW50KCktPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmgJKHJldmlzaW9uIDEwMTcxOSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDMzICszOSw0MCBAQCBjbGFzcyBHcmFwaGljc0xheWVyQ2xpZW50OwogfQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VPdmVybGF5OwogY2xhc3MgV2ViVmlld0ltcGw7
CitzdHJ1Y3QgV2ViUmVjdDsKIAogY2xhc3MgUGFnZU92ZXJsYXkgewogcHVibGljOgotICAgIGNs
YXNzIFBhZ2VPdmVybGF5Q2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBwYWludFBhZ2VPdmVybGF5KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpID0gMDsKKyAgICBl
bnVtIFBhZ2VPdmVybGF5VXBkYXRlT3B0aW9uIHsKKyAgICAgICAgRm9yY2VVcGRhdGUsCisgICAg
ICAgIE5vdEZvcmNlVXBkYXRlCiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VP
dmVybGF5PiBjcmVhdGUoV2ViVmlld0ltcGwqLCBQYWdlT3ZlcmxheUNsaWVudCopOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPFBhZ2VPdmVybGF5PiBjcmVhdGUoV2ViVmlld0ltcGwqLCBXZWJQYWdl
T3ZlcmxheSopOwogCiAgICAgflBhZ2VPdmVybGF5KCkgeyB9CiAKLSAgICB2b2lkIHNldENsaWVu
dChQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CisgICAg
V2ViUGFnZU92ZXJsYXkqIG92ZXJsYXkoKSBjb25zdCB7IHJldHVybiBtX292ZXJsYXk7IH0KKyAg
ICB2b2lkIHNldENsaWVudChXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSkgeyBtX292ZXJsYXkgPSBv
dmVybGF5OyB9CisKKyAgICBpbnQgek9yZGVyKCkgY29uc3QgeyByZXR1cm4gbV96T3JkZXI7IH0K
KyAgICB2b2lkIHNldFpPcmRlcihpbnQgek9yZGVyKSB7IG1fek9yZGVyID0gek9yZGVyOyB9CiAK
ICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCB1cGRhdGUoKTsKKyAgICB2b2lkIHVwZGF0ZShQ
YWdlT3ZlcmxheVVwZGF0ZU9wdGlvbik7CiAgICAgdm9pZCBwYWludFdlYkZyYW1lKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYpOwogCiBwcml2YXRlOgotICAgIFBhZ2VPdmVybGF5KFdlYlZpZXdJ
bXBsKiwgUGFnZU92ZXJsYXlDbGllbnQqKTsKLSAgICB2b2lkIGludmFsaWRhdGVXZWJGcmFtZSgp
OworICAgIFBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiwgV2ViUGFnZU92ZXJsYXkqKTsKKyAgICB2
b2lkIGludmFsaWRhdGVXZWJGcmFtZShjb25zdCBXZWJSZWN0Jik7CiAKICAgICBXZWJWaWV3SW1w
bCogbV92aWV3SW1wbDsKLSAgICBQYWdlT3ZlcmxheUNsaWVudCogbV9jbGllbnQ7CisgICAgV2Vi
UGFnZU92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXll
cj4gbV9sYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudD4gbV9s
YXllckNsaWVudDsKKyAgICBpbnQgbV96T3JkZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVy
bGF5TGlzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMu
CisgKiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUxpc3QuaCIKKwor
I2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKKyNp
bmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc093blB0
cjxQYWdlT3ZlcmxheUxpc3Q+IFBhZ2VPdmVybGF5TGlzdDo6Y3JlYXRlKFdlYlZpZXdJbXBsKiB2
aWV3SW1wbCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VPdmVybGF5TGlzdCh2aWV3
SW1wbCkpOworfQorCitQYWdlT3ZlcmxheUxpc3Q6OlBhZ2VPdmVybGF5TGlzdChXZWJWaWV3SW1w
bCogdmlld0ltcGwpCisgICAgOiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQoreworfQorCitQYWdlT3Zl
cmxheUxpc3Q6On5QYWdlT3ZlcmxheUxpc3QoKQoreworfQorCitib29sIFBhZ2VPdmVybGF5TGlz
dDo6YWRkKFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5LCBpbnQgek9yZGVyKQoreworICAgIGJvb2wg
YWRkZWQgPSBmYWxzZTsKKyAgICBzaXplX3QgaW5kZXggPSBmaW5kKG92ZXJsYXkpOworICAgIGlm
IChpbmRleCA9PSBXVEY6Om5vdEZvdW5kKSB7CisgICAgICAgIE93blB0cjxQYWdlT3ZlcmxheT4g
cGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKG1fdmlld0ltcGwsIG92ZXJsYXkpOwor
ICAgICAgICBtX3BhZ2VPdmVybGF5cy5hcHBlbmQocGFnZU92ZXJsYXkucmVsZWFzZSgpKTsKKyAg
ICAgICAgaW5kZXggPSBtX3BhZ2VPdmVybGF5cy5zaXplKCkgLSAxOworICAgICAgICBhZGRlZCA9
IHRydWU7CisgICAgfQorCisgICAgUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5ID0gbV9wYWdlT3Zl
cmxheXNbaW5kZXhdLmdldCgpOworICAgIHBhZ2VPdmVybGF5LT5zZXRaT3JkZXIoek9yZGVyKTsK
KworICAgIC8vIEFkanVzdCBwYWdlIG92ZXJsYXkgbGlzdCBvcmRlciBiYXNlZCBvbiB0aGVpciB6
LW9yZGVyIG51bWJlcnMuIFdlIGZpcnN0CisgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBtb3Zl
IHRoZSBvdmVybGF5IHVwIGFuZCBkbyBzbyBpZiBuZWVkZWQuIE90aGVyd2lzZSwKKyAgICAvLyBj
aGVjayBpZiB3ZSBuZWVkIHRvIG1vdmUgaXQgZG93bi4KKyAgICBib29sIHpPcmRlckNoYW5nZWQg
PSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkgKyAxIDwgbV9wYWdlT3Zlcmxh
eXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzW2ldLT56T3JkZXIo
KSA+PSBtX3BhZ2VPdmVybGF5c1tpICsgMV0tPnpPcmRlcigpKSB7CisgICAgICAgICAgICBtX3Bh
Z2VPdmVybGF5c1tpXS5zd2FwKG1fcGFnZU92ZXJsYXlzW2kgKyAxXSk7CisgICAgICAgICAgICB6
T3JkZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghek9yZGVy
Q2hhbmdlZCkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkgPj0gMTsgLS1pKSB7
CisgICAgICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXNbaV0tPnpPcmRlcigpIDwgbV9wYWdlT3Zl
cmxheXNbaSAtIDFdLT56T3JkZXIoKSkgeworICAgICAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlz
W2ldLnN3YXAobV9wYWdlT3ZlcmxheXNbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICB6T3JkZXJD
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IElmIHdlIGRpZCBtb3ZlIHRoZSBvdmVybGF5LCB0aGF0IG1lYW5zIHotb3JkZXIgaXMgY2hhbmdl
ZCBhbmQgd2UgbmVlZCB0bworICAgIC8vIHVwZGF0ZSBvdmVybGF5IGxheWVycycgei1vcmRlci4g
T3RoZXJ3aXNlLCBqdXN0IHVwZGF0ZSBjdXJyZW50IG92ZXJsYXkuCisgICAgaWYgKHpPcmRlckNo
YW5nZWQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VPdmVybGF5cy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlzW2ldLT5jbGVhcigpOworICAg
ICAgICB1cGRhdGUoUGFnZU92ZXJsYXk6Ok5vdEZvcmNlVXBkYXRlKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgcGFnZU92ZXJsYXktPnVwZGF0ZShQYWdlT3ZlcmxheTo6Tm90Rm9yY2VVcGRhdGUpOwor
CisgICAgcmV0dXJuIGFkZGVkOworfQorCitib29sIFBhZ2VPdmVybGF5TGlzdDo6cmVtb3ZlKFdl
YlBhZ2VPdmVybGF5KiBvdmVybGF5KQoreworICAgIHNpemVfdCBpbmRleCA9IGZpbmQob3Zlcmxh
eSk7CisgICAgaWYgKGluZGV4ID09IFdURjo6bm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1fcGFnZU92ZXJsYXlzW2luZGV4XS0+Y2xlYXIoKTsKKyAgICBtX3BhZ2VPdmVy
bGF5cy5yZW1vdmUoaW5kZXgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBhZ2VPdmVy
bGF5TGlzdDo6dXBkYXRlKFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheVVwZGF0ZU9wdGlvbiB1cGRh
dGVPcHRpb24pCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VPdmVybGF5cy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPnVwZGF0ZSh1cGRhdGVPcHRp
b24pOworfQorCit2b2lkIFBhZ2VPdmVybGF5TGlzdDo6cGFpbnRXZWJGcmFtZShXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGdjKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdl
T3ZlcmxheXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcGFnZU92ZXJsYXlzW2ldLT5wYWludFdl
YkZyYW1lKGdjKTsKK30KKworc2l6ZV90IFBhZ2VPdmVybGF5TGlzdDo6ZmluZChXZWJQYWdlT3Zl
cmxheSogb3ZlcmxheSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92ZXJs
YXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5c1tpXS0+b3Zlcmxh
eSgpID09IG92ZXJsYXkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJu
IFdURjo6bm90Rm91bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCisgKiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJsYXlMaXN0
X2gKKyNkZWZpbmUgUGFnZU92ZXJsYXlMaXN0X2gKKworI2luY2x1ZGUgIlBhZ2VPdmVybGF5Lmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBh
Z2VPdmVybGF5OworY2xhc3MgV2ViVmlld0ltcGw7CisKK2NsYXNzIFBhZ2VPdmVybGF5TGlzdCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZU92ZXJsYXlMaXN0PiBjcmVhdGUo
V2ViVmlld0ltcGwqKTsKKworICAgIH5QYWdlT3ZlcmxheUxpc3QoKTsKKworICAgIGJvb2wgZW1w
dHkoKSBjb25zdCB7IHJldHVybiAhbV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyB9CisKKyAgICAvLyBB
ZGRzL3JlbW92ZXMgYSBQYWdlT3ZlcmxheSBmb3IgZ2l2ZW4gY2xpZW50LgorICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBhIFBhZ2VPdmVybGF5IGlzIGFkZGVkL3JlbW92ZWQuCisgICAgYm9vbCBhZGQo
V2ViUGFnZU92ZXJsYXkqLCBpbnQgLyogek9yZGVyICovKTsKKyAgICBib29sIHJlbW92ZShXZWJQ
YWdlT3ZlcmxheSopOworCisgICAgdm9pZCB1cGRhdGUoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5
VXBkYXRlT3B0aW9uKTsKKyAgICB2b2lkIHBhaW50V2ViRnJhbWUoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBWZWN0b3I8T3duUHRyPFBhZ2VPdmVy
bGF5PiwgMj4gUGFnZU92ZXJsYXlzOworCisgICAgZXhwbGljaXQgUGFnZU92ZXJsYXlMaXN0KFdl
YlZpZXdJbXBsKik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2xpZW50IGZv
dW5kLiBPdGhlcndpc2UsIHJldHVybnMgV1RGOjpub3RGb3VuZC4KKyAgICBzaXplX3QgZmluZChX
ZWJQYWdlT3ZlcmxheSopOworCisgICAgV2ViVmlld0ltcGwqIG1fdmlld0ltcGw7CisgICAgUGFn
ZU92ZXJsYXlzIG1fcGFnZU92ZXJsYXlzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBQYWdlT3ZlcmxheUxpc3RfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAkocmV2aXNpb24gMTAxNzE5KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBACiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGFnZU92
ZXJsYXkuaCIKICNpbmNsdWRlICJQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJw
YWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCkBAIC0yNzIsMjIgKzI3MiwzMyBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpi
cmluZ0Zyb250ZW5kCiB7CiB9CiAKLS8vIFBhZ2VPdmVybGF5Q2xpZW50Ci12b2lkIFdlYkRldlRv
b2xzQWdlbnRJbXBsOjpwYWludFBhZ2VPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgZ2MpCisvLyBX
ZWJQYWdlT3ZlcmxheUNsaWVudAordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cGFpbnRQYWdl
T3ZlcmxheShXZWJDYW52YXMqIGNhbnZhcykKIHsKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBp
YyA9IGluc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBpZiAoaWMpCi0gICAgICAgIGljLT5kcmF3
SGlnaGxpZ2h0KGdjKTsKKyAgICAgICAgaWMtPmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0
QnVpbGRlcihjYW52YXMpLmNvbnRleHQoKSk7Cit9CisKK1dlYlJlY3QgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmRpcnR5UmVjdCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGFibGUgdG8gaW52YWxp
ZGF0ZSBhIHNtYWxsZXIgcmVjdC4KKyAgICAvLyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IHRvIGp1
c3QgaW52YWxpZGF0ZSBhIHNtYWxsZXIgcmVjdCBnaXZlbiB0aGF0CisgICAgLy8gdGhpcyBpcyBu
b3Qgb24gYSBjcml0aWNhbCBjb2RlcGF0aD8gSW4gb3JkZXIgdG8gZG8gc28sIHdlJ2QKKyAgICAv
LyBoYXZlIHRvIHRha2Ugc2Nyb2xsaW5nIGludG8gYWNjb3VudC4KKyAgICBjb25zdCBXZWJTaXpl
JiBzaXplID0gbV93ZWJWaWV3SW1wbC0+c2l6ZSgpOworICAgIHJldHVybiBXZWJSZWN0KDAsIDAs
IHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsKIH0KIAogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1w
bDo6aGlnaGxpZ2h0KCkKIHsKLSAgICBtX3dlYlZpZXdJbXBsLT5zZXRQYWdlT3ZlcmxheUNsaWVu
dCh0aGlzKTsKKyAgICAvLyBVc2UgOTkgYXMgYSBiaWcgei1vcmRlciBudW1iZXIgc28gdGhhdCBo
aWdobGlnaHQgaXMgYWJvdmUgb3RoZXIgb3ZlcmxheXMuCisgICAgbV93ZWJWaWV3SW1wbC0+YWRk
UGFnZU92ZXJsYXkodGhpcywgOTkpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpo
aWRlSGlnaGxpZ2h0KCkKIHsKLSAgICBtX3dlYlZpZXdJbXBsLT5zZXRQYWdlT3ZlcmxheUNsaWVu
dCgwKTsKKyAgICBtX3dlYlZpZXdJbXBsLT5yZW1vdmVQYWdlT3ZlcmxheSh0aGlzKTsKIH0KIAog
Ym9vbCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzQWdlbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuaAkocmV2aXNpb24gMTAxNzE5KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsOCArMzMsOCBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAKLSNpbmNsdWRl
ICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3QgV2ViRGV2VG9v
bHNNZXNzYWdlRGF0YTsKIAogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudEltcGwgOiBwdWJsaWMgV2Vi
RGV2VG9vbHNBZ2VudFByaXZhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgV2ViUGFnZU92ZXJsYXkgewogcHVibGljOgogICAgIFdlYkRl
dlRvb2xzQWdlbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgV2ViRGV2VG9vbHNBZ2Vu
dENsaWVudCogY2xpZW50KTsKICAgICB2aXJ0dWFsIH5XZWJEZXZUb29sc0FnZW50SW1wbCgpOwpA
QCAtOTcsOCArOTcsOSBAQCBwdWJsaWM6CiAKICAgICBpbnQgaG9zdElkKCkgeyByZXR1cm4gbV9o
b3N0SWQ7IH0KIAotICAgIC8vIFBhZ2VPdmVybGF5Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHBh
aW50UGFnZU92ZXJsYXkoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgLy8gV2ViUGFn
ZU92ZXJsYXlDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdlT3ZlcmxheShXZWJDYW52
YXMqKTsKKyAgICB2aXJ0dWFsIFdlYlJlY3QgZGlydHlSZWN0KCkgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcigp
OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShy
ZXZpc2lvbiAxMDE3MTkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYzLDggKzIwNjMsOCBAQCB2b2lkIFdlYkZyYW1l
SW1wbDo6cGFpbnRXaXRoQ29udGV4dChHcmFwCiAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkg
JiYgZnJhbWVWaWV3KCkpIHsKICAgICAgICAgZ2MuY2xpcChkaXJ0eVJlY3QpOwogICAgICAgICBm
cmFtZVZpZXcoKS0+cGFpbnQoJmdjLCBkaXJ0eVJlY3QpOwotICAgICAgICBpZiAodmlld0ltcGwo
KS0+cGFnZU92ZXJsYXkoKSkKLSAgICAgICAgICAgIHZpZXdJbXBsKCktPnBhZ2VPdmVybGF5KCkt
PnBhaW50V2ViRnJhbWUoZ2MpOworICAgICAgICBpZiAodmlld0ltcGwoKS0+cGFnZU92ZXJsYXlz
KCkpCisgICAgICAgICAgICB2aWV3SW1wbCgpLT5wYWdlT3ZlcmxheXMoKS0+cGFpbnRXZWJGcmFt
ZShnYyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGdjLmZpbGxSZWN0KGRpcnR5UmVjdCwgQ29sb3I6
OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBnYy5yZXN0b3JlKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiAxMDE3
MTkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNTYsOCArMTI1Niw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0
ZShib29sKQogICAgICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBpZiAobV9wYWdlT3ZlcmxheSkKLSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0
ZSgpOworICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXMpCisgICAgICAgICAgICBtX3BhZ2VPdmVy
bGF5cy0+dXBkYXRlKFBhZ2VPdmVybGF5OjpOb3RGb3JjZVVwZGF0ZSk7CiAKICAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5jb21wb3NpdGUoKTsKICAgICB9CkBAIC0yNjEwLDIxICsyNjEwLDIyIEBA
IHZvaWQgV2ViVmlld0ltcGw6OnNldElnbm9yZUlucHV0RXZlbnRzKGIKICAgICBtX2lnbm9yZUlu
cHV0RXZlbnRzID0gbmV3VmFsdWU7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnNldFBhZ2VPdmVy
bGF5Q2xpZW50KFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCogcGFnZU92ZXJsYXlDbGll
bnQpCit2b2lkIFdlYlZpZXdJbXBsOjphZGRQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSogb3Zl
cmxheSwgaW50IHpPcmRlcikKIHsKLSAgICBpZiAocGFnZU92ZXJsYXlDbGllbnQpIHsKLSAgICAg
ICAgaWYgKCFtX3BhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheSA9IFBhZ2VP
dmVybGF5OjpjcmVhdGUodGhpcywgcGFnZU92ZXJsYXlDbGllbnQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX3BhZ2VPdmVybGF5LT5zZXRDbGllbnQocGFnZU92ZXJsYXlDbGllbnQpOwot
ICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlz
KQorICAgICAgICBtX3BhZ2VPdmVybGF5cyA9IFBhZ2VPdmVybGF5TGlzdDo6Y3JlYXRlKHRoaXMp
OworCisgICAgbV9wYWdlT3ZlcmxheXMtPmFkZChvdmVybGF5LCB6T3JkZXIpOworICAgIHNldFJv
b3RMYXllck5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpyZW1vdmVQYWdl
T3ZlcmxheShXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSkKK3sKKyAgICBpZiAobV9wYWdlT3Zlcmxh
eXMgJiYgbV9wYWdlT3ZlcmxheXMtPnJlbW92ZShvdmVybGF5KSkgewogICAgICAgICBzZXRSb290
TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9wYWdlT3Zl
cmxheSkgewotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+Y2xlYXIoKTsKLSAgICAgICAgICAg
IG1fcGFnZU92ZXJsYXkgPSBudWxscHRyOwotICAgICAgICAgICAgc2V0Um9vdExheWVyTmVlZHNE
aXNwbGF5KCk7Ci0gICAgICAgIH0KKworICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXMtPmVtcHR5
KCkpCisgICAgICAgICAgICBtX3BhZ2VPdmVybGF5cyA9IG51bGxwdHI7CiAgICAgfQogfQogCkBA
IC0yODcwLDggKzI4NzEsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29t
cG9zCiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVDb21wb3NpdG9yKG1fbGF5ZXJU
cmVlSG9zdC0+Y29tcG9zaXRvcklkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICBtX2NvbXBvc2l0b3JD
cmVhdGlvbkZhaWxlZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXkpCi0g
ICAgICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CisgICAgICAgICAgICBpZiAo
bV9wYWdlT3ZlcmxheXMpCisgICAgICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXMtPnVwZGF0ZShQ
YWdlT3ZlcmxheTo6Rm9yY2VVcGRhdGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
bV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CiAgICAgICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdC5jbGVhcigpOwpAQCAtMjk1Miw4ICsyOTUzLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6
ZGlkUmVjcmVhdGVHcmFwaGljc0NvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KG1fcGFnZU92ZXJsYXkpCi0gICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOworICAgIGlm
IChtX3BhZ2VPdmVybGF5cykKKyAgICAgICAgbV9wYWdlT3ZlcmxheXMtPnVwZGF0ZShQYWdlT3Zl
cmxheTo6Rm9yY2VVcGRhdGUpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBv
c2l0ZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHJl
dmlzaW9uIDEwMTcxOSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlv
blByZXNlbnRlckltcGwuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgIlBh
Z2VPdmVybGF5TGlzdC5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYUNsaWVudEltcGwuaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC05
Myw2ICs5Myw3IEBAIGNsYXNzIFdlYkltYWdlOwogY2xhc3MgV2ViS2V5Ym9hcmRFdmVudDsKIGNs
YXNzIFdlYk1vdXNlRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CitjbGFzcyBXZWJQ
YWdlT3ZlcmxheUNsaWVudDsKIGNsYXNzIFdlYlNldHRpbmdzSW1wbDsKIGNsYXNzIFdlYlRvdWNo
RXZlbnQ7CiAKQEAgLTIyNyw2ICsyMjgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmFjdGl2ZUJhY2tncm91bmRDb2xvciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlRm9yZWdyb3Vu
ZENvbG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9u
KHVuc2lnbmVkIGFjdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGFkZFBhZ2VPdmVybGF5KFdlYlBh
Z2VPdmVybGF5KiwgaW50IC8qIHpPcmRlciAqLyk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVBh
Z2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5Kik7CiAKICAgICAvLyBDQ0xheWVyVHJlZUhvc3RDbGll
bnQKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRp
bWUpOwpAQCAtMjQyLDggKzI0NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElnbm9yZUlucHV0
RXZlbnRzKGJvb2wgbmV3VmFsdWUpOwogICAgIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlKiBkZXZU
b29sc0FnZW50UHJpdmF0ZSgpIHsgcmV0dXJuIG1fZGV2VG9vbHNBZ2VudC5nZXQoKTsgfQogCi0g
ICAgUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3Zlcmxh
eS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlDbGllbnQoUGFnZU92ZXJsYXk6OlBh
Z2VPdmVybGF5Q2xpZW50Kik7CisgICAgUGFnZU92ZXJsYXlMaXN0KiBwYWdlT3ZlcmxheXMoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2VPdmVybGF5cy5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRPdmVy
bGF5TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwogCkBAIC01NzksNyArNTgxLDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6UG9wdXBDb250YWluZXI+IG1fc2VsZWN0UG9w
dXA7CiAKICAgICBPd25QdHI8V2ViRGV2VG9vbHNBZ2VudFByaXZhdGU+IG1fZGV2VG9vbHNBZ2Vu
dDsKLSAgICBPd25QdHI8UGFnZU92ZXJsYXk+IG1fcGFnZU92ZXJsYXk7CisgICAgT3duUHRyPFBh
Z2VPdmVybGF5TGlzdD4gbV9wYWdlT3ZlcmxheXM7CiAKICAgICAvLyBXaGV0aGVyIHRoZSB3ZWJ2
aWV3IGlzIHJlbmRlcmluZyB0cmFuc3BhcmVudGx5LgogICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117519</attachid>
            <date>2011-12-01 16:32:06 -0800</date>
            <delta_ts>2011-12-01 20:46:24 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>webkit_73235.6.patch</filename>
            <type>text/plain</type>
            <size>31012</size>
            <attacher name="xiyuan">xiyuan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDE3MTkpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3
IEBACisyMDExLTEyLTAxICBYaXl1YW4gWGlhICA8eGl5dWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFN1cHBvcnQgYWRkaW5nL3JlbW92aW5nIHBhZ2Ugb3ZlcmxheSB0byBX
ZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZU92ZXJsYXkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojp+V2ViUGFnZU92ZXJsYXkpOgorICAgICAg
ICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL1BhZ2VPdmVybGF5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VPdmVybGF5OjpQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6Ok92ZXJsYXlHcmFwaGlj
c0xheWVyQ2xpZW50SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6T3ZlcmxheUdyYXBo
aWNzTGF5ZXJDbGllbnRJbXBsOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6T3Zl
cmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudElt
cGwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6
OnBhaW50V2ViRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6aW52YWxpZGF0
ZVdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXkuaDoKKyAgICAgICAgKFdlYktp
dDo6UGFnZU92ZXJsYXk6Om92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6
c2V0T3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5Ojp6T3JkZXIpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6c2V0Wk9yZGVyKToKKyAgICAgICAgKiBzcmMvUGFn
ZU92ZXJsYXlMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlz
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0OjpQYWdlT3Zlcmxh
eUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6On5QYWdlT3ZlcmxheUxp
c3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OmFkZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92
ZXJsYXlMaXN0Ojp1cGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OnBh
aW50V2ViRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OmZpbmQpOgor
ICAgICAgICAqIHNyYy9QYWdlT3ZlcmxheUxpc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlBhZ2VPdmVybGF5TGlzdDo6ZW1wdHkpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWludFBh
Z2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpcnR5
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWdobGlnaHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aGlkZUhpZ2hsaWdodCk6
CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dl
YkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cGFpbnRXaXRo
Q29udGV4dCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjphZGRQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQ
YWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZGlk
UmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFnZU92ZXJsYXlzKToKKwogMjAxMS0xMi0w
MSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIGFkZCByZWZlcnJlciBwb2xpY3kgdG8gV2ViQ29udGV4dE1lbnVEYXRhCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiAxMDE3MTkpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAsNyBA
QAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNr
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViT3B0aW9uRWxlbWVudC5oJywKKyAgICAg
ICAgICAgICAgICAncHVibGljL1dlYlBhZ2VPdmVybGF5Q2xpZW50LmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCcsCkBAIC00MzcsNiArNDM4LDggQEAKICAgICAgICAgICAg
ICAgICAnc3JjL3BhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9QYWdlT3ZlcmxheS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGFnZU92
ZXJsYXkuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheUxpc3QuY3BwJywKKyAg
ICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5TGlzdC5oJywKICAgICAgICAgICAgICAgICAn
c3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1Bs
YXRmb3JtU3VwcG9ydC5jcHAnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGFnZU92ZXJsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJQYWdlT3ZlcmxheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViUGFnZU92ZXJsYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09P
R0xFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBHT09HTEUgSU5DLgorICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhZ2VPdmVybGF5X2gKKyNkZWZpbmUgV2Vi
UGFnZU92ZXJsYXlfaAorCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAiV2ViUmVj
dC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZU92ZXJsYXkgeworcHVi
bGljOgorICAgIC8vIFBhaW50cyBwYWdlIG92ZXJsYXkgY29udGVudHMuCisgICAgdmlydHVhbCB2
b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ2FudmFzKikgPSAwOworCisgICAgLy8gUmV0dXJucyBk
aXJ0eSByZWN0IHRoYXQgbmVlZHMgcmVwYWludC4KKyAgICB2aXJ0dWFsIFdlYlJlY3QgZGlydHlS
ZWN0KCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViUGFnZU92ZXJs
YXkoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViUGFn
ZU92ZXJsYXlfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZU92ZXJsYXkuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAg
ICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCShyZXZp
c2lvbiAxMDE3MTkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBX
ZWJGcmFtZUNsaWVudDsKIGNsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgV2ViTm9k
ZTsKK2NsYXNzIFdlYlBhZ2VPdmVybGF5OwogY2xhc3MgV2ViUGVybWlzc2lvbkNsaWVudDsKIGNs
YXNzIFdlYlNldHRpbmdzOwogY2xhc3MgV2ViU3BlbGxDaGVja0NsaWVudDsKQEAgLTQwOSw2ICs0
MTAsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmlsaXR5U3RhdGUoV2Vi
UGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGlzSW5pdGlhbFN0YXRlKSB7IH0KIAorICAgIC8vIFBhZ2VP
dmVybGF5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIC8vIEFkZHMvcmVtb3ZlcyBwYWdlIG92ZXJsYXkgdG8gdGhpcyBXZWJW
aWV3LiBUaGVzZSBmdW5jdGlvbnMgY2hhbmdlIHRoZQorICAgIC8vIGdyYXBoaWNhbCBhcHBlYXJh
bmNlIG9mIHRoZSBXZWJWaWV3LiBXZWJQYWdlT3ZlcmxheUNsaWVudCBwYWludHMgdGhlCisgICAg
Ly8gY29udGVudHMgb2YgdGhlIHBhZ2Ugb3ZlcmxheS4gSXQgYWxzbyBwcm92aWRlcyBhbiB6LW9y
ZGVyIG51bWJlciBmb3IKKyAgICAvLyB0aGUgcGFnZSBvdmVybGF5LiBUaGUgei1vcmRlciBudW1i
ZXIgZGVmaW5lcyB0aGUgcGFpbnQgb3JkZXIgdGhlIHBhZ2UKKyAgICAvLyBvdmVybGF5cy4gUGFn
ZSBvdmVybGF5cyB3aXRoIGxhcmdlciB6LW9yZGVyIG51bWJlciB3aWxsIGJlIHBhaW50ZWQgYWZ0
ZXIKKyAgICAvLyBwYWdlIG92ZXJsYXlzIHdpdGggc21hbGxlciB6LW9yZGVyIG51bWJlci4gVGhh
dCBpcywgdGhleSBhcHBlYXIgYWJvdmUKKyAgICAvLyB0aGUgcGFnZSBvdmVybGF5cyB3aXRoIHNt
YWxsZXIgei1vcmRlciBudW1iZXIuIElmIHR3byBwYWdlIG92ZXJsYXlzIGhhdmUKKyAgICAvLyB0
aGUgc2FtZSB6LW9yZGVyIG51bWJlciwgdGhlIGxhdGVyIGFkZGVkIG9uZSB3aWxsIGJlIG9uIHRv
cC4KKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqLCBpbnQg
Lyp6LW9yZGVyKi8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUGFnZU92ZXJsYXkoV2Vi
UGFnZU92ZXJsYXkqKSA9IDA7CiAKICAgICAvLyBUZXN0aW5nIGZ1bmN0aW9uYWxpdHkgZm9yIExh
eW91dFRlc3RDb250cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAJKHJldmlzaW9uIDEwMTcxOSkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUg
IldlYlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgogI2luY2x1ZGUg
IldlYlZpZXdJbXBsLmgiCiAKQEAgLTQwLDIzICs0MiwzNyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NPd25QdHI8UGFnZU92ZXJsYXk+IFBh
Z2VPdmVybGF5OjpjcmVhdGUoV2ViVmlld0ltcGwqIHZpZXdJbXBsLCBQYWdlT3ZlcmxheUNsaWVu
dCogY2xpZW50KQorbmFtZXNwYWNlIHsKKworV2ViQ2FudmFzKiBUb1dlYkNhbnZhcyhHcmFwaGlj
c0NvbnRleHQqIGdjKQoreworI2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgcmV0dXJuIGdjLT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKKyAgICBy
ZXR1cm4gZ2MtPnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNl
CisKK1Bhc3NPd25QdHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5OjpjcmVhdGUoV2ViVmlld0lt
cGwqIHZpZXdJbXBsLCBXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSkKIHsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFBhZ2VPdmVybGF5KHZpZXdJbXBsLCBjbGllbnQpKTsKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFBhZ2VPdmVybGF5KHZpZXdJbXBsLCBvdmVybGF5KSk7CiB9CiAKLVBhZ2VPdmVy
bGF5OjpQYWdlT3ZlcmxheShXZWJWaWV3SW1wbCogdmlld0ltcGwsIFBhZ2VPdmVybGF5Q2xpZW50
KiBjbGllbnQpCitQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqIHZpZXdJbXBs
LCBXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCi0g
ICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKKyAgICAsIG1f
ek9yZGVyKDApCiB7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFz
cyBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8T3ZlcmxheUdy
YXBoaWNzTGF5ZXJDbGllbnRJbXBsKj4gY3JlYXRlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwg
UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKKyAgICBz
dGF0aWMgUGFzc093blB0cjxPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwqPiBjcmVhdGUo
V2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJ
bXBsKHdlYlZpZXdJbXBsLCBwYWdlT3ZlcmxheUNsaWVudCkpOworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCh3ZWJWaWV3SW1wbCwgb3Zl
cmxheSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfk92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50
SW1wbCgpIHsgfQpAQCAtNjUsOSArODEsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYg
aW5DbGlwKQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqLCBHcmFwaGljc0NvbnRleHQmIGdjLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29u
c3QgSW50UmVjdCYgaW5DbGlwKQogICAgIHsKLSAgICAgICAgbV9wYWdlT3ZlcmxheUNsaWVudC0+
cGFpbnRQYWdlT3ZlcmxheShjb250ZXh0KTsKKyAgICAgICAgZ2Muc2F2ZSgpOworICAgICAgICBt
X292ZXJsYXktPnBhaW50UGFnZU92ZXJsYXkoVG9XZWJDYW52YXMoJmdjKSk7CisgICAgICAgIGdj
LnJlc3RvcmUoKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KCkgY29uc3QKQEAgLTkxLDIwICsxMDksMjEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwoV2ViVmlld0ltcGwq
IHdlYlZpZXdJbXBsLCBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5
Q2xpZW50KQotICAgICAgICA6IG1fcGFnZU92ZXJsYXlDbGllbnQocGFnZU92ZXJsYXlDbGllbnQp
CisgICAgT3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3
SW1wbCwgV2ViUGFnZU92ZXJsYXkqIG92ZXJsYXkpCisgICAgICAgIDogbV9vdmVybGF5KG92ZXJs
YXkpCiAgICAgICAgICwgbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKICAgICB7CiAgICAgfQog
Ci0gICAgUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50KiBtX3BhZ2VPdmVybGF5Q2xpZW50
OworICAgIFdlYlBhZ2VPdmVybGF5KiBtX292ZXJsYXk7CiAgICAgV2ViVmlld0ltcGwqIG1fd2Vi
Vmlld0ltcGw7CiB9OwogI2VuZGlmCiAKIHZvaWQgUGFnZU92ZXJsYXk6OmNsZWFyKCkKIHsKLSAg
ICBpbnZhbGlkYXRlV2ViRnJhbWUoKTsKKyAgICBjb25zdCBXZWJTaXplJiBzaXplID0gbV92aWV3
SW1wbC0+c2l6ZSgpOworICAgIGludmFsaWRhdGVXZWJGcmFtZShXZWJSZWN0KDAsIDAsIHNpemUu
d2lkdGgsIHNpemUuaGVpZ2h0KSk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgaWYgKG1fbGF5ZXIpIHsKQEAgLTExNSw0MSArMTM0LDU0IEBAIHZvaWQgUGFnZU92ZXJs
YXk6OmNsZWFyKCkKICNlbmRpZgogfQogCi12b2lkIFBhZ2VPdmVybGF5Ojp1cGRhdGUoKQordm9p
ZCBQYWdlT3ZlcmxheTo6dXBkYXRlKFBhZ2VPdmVybGF5VXBkYXRlT3B0aW9uIHVwZGF0ZU9wdGlv
bikKIHsKLSAgICBpbnZhbGlkYXRlV2ViRnJhbWUoKTsKKyAgICBpbnZhbGlkYXRlV2ViRnJhbWUo
bV9vdmVybGF5LT5kaXJ0eVJlY3QoKSk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgaWYgKCFtX2xheWVyKSB7Ci0gICAgICAgIG1fbGF5ZXJDbGllbnQgPSBPdmVybGF5
R3JhcGhpY3NMYXllckNsaWVudEltcGw6OmNyZWF0ZShtX3ZpZXdJbXBsLCBtX2NsaWVudCk7Cisg
ICAgICAgIG1fbGF5ZXJDbGllbnQgPSBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6OmNy
ZWF0ZShtX3ZpZXdJbXBsLCBtX292ZXJsYXkpOwogICAgICAgICBtX2xheWVyID0gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKG1fbGF5ZXJDbGllbnQuZ2V0KCkpOwogICAgICAgICBtX2xheWVyLT5zZXRO
YW1lKCJXZWJWaWV3SW1wbCBwYWdlIG92ZXJsYXkgY29udGVudCIpOwogICAgICAgICBtX2xheWVy
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgICAgIGNvbnN0IFdlYlNpemUmIHNpemUgPSBt
X3ZpZXdJbXBsLT5zaXplKCk7Ci0gICAgICAgIG1fbGF5ZXItPnNldFNpemUoSW50U2l6ZShzaXpl
LndpZHRoLCBzaXplLmhlaWdodCkpOworICAgICAgICB1cGRhdGVPcHRpb24gPSBGb3JjZVVwZGF0
ZTsKICAgICB9CisKKyAgICBGbG9hdFNpemUgc2l6ZShtX3ZpZXdJbXBsLT5zaXplKCkud2lkdGgs
IG1fdmlld0ltcGwtPnNpemUoKS5oZWlnaHQpOworICAgIGlmIChzaXplICE9IG1fbGF5ZXItPnNp
emUoKSkgeworICAgICAgICAvLyBUcmlnZ2VycyByZS1hZGRpbmcgdG8gcm9vdCBsYXllciB0byBl
bnN1cmUgdGhhdCB3ZSBhcmUgb24gdG9wIG9mCisgICAgICAgIC8vIHNjcm9sbGJhcnMuCisgICAg
ICAgIG1fbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgbV9sYXllci0+c2V0U2l6
ZShzaXplKTsKKyAgICAgICAgdXBkYXRlT3B0aW9uID0gRm9yY2VVcGRhdGU7CisgICAgfQorCiAg
ICAgbV92aWV3SW1wbC0+c2V0T3ZlcmxheUxheWVyKG1fbGF5ZXIuZ2V0KCkpOwotICAgIG1fbGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOworCisgICAgaWYgKHVwZGF0ZU9wdGlvbiA9PSBGb3JjZVVw
ZGF0ZSkKKyAgICAgICAgbV9sYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGNvbnN0IFdlYlJlY3QmIGRpcnR5UmVjdCA9IG1fb3ZlcmxheS0+ZGlydHlSZWN0KCk7
CisgICAgICAgIGlmICghZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fbGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QoZGlydHlSZWN0LngsIGRp
cnR5UmVjdC55LCBkaXJ0eVJlY3Qud2lkdGgsIGRpcnR5UmVjdC5oZWlnaHQpKTsKKyAgICB9CiAj
ZW5kaWYKIH0KIAogdm9pZCBQYWdlT3ZlcmxheTo6cGFpbnRXZWJGcmFtZShHcmFwaGljc0NvbnRl
eHQmIGdjKQogewotICAgIGlmICghbV92aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKCkpCi0gICAgICAgIG1fY2xpZW50LT5wYWludFBhZ2VPdmVybGF5KGdjKTsKKyAgICBp
ZiAoIW1fdmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisgICAg
ICAgIGdjLnNhdmUoKTsKKyAgICAgICAgbV9vdmVybGF5LT5wYWludFBhZ2VPdmVybGF5KFRvV2Vi
Q2FudmFzKCZnYykpOworICAgICAgICBnYy5yZXN0b3JlKCk7CisgICAgfQogfQogCi12b2lkIFBh
Z2VPdmVybGF5OjppbnZhbGlkYXRlV2ViRnJhbWUoKQordm9pZCBQYWdlT3ZlcmxheTo6aW52YWxp
ZGF0ZVdlYkZyYW1lKGNvbnN0IFdlYlJlY3QmIGRhbWFnZWRSZWN0KQogewotICAgIC8vIFBhZ2VP
dmVybGF5Q2xpZW50IGRvZXMgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUgb3ZlcmxheS4KKyAg
ICAvLyBXZWJQYWdlT3ZlcmxheUNsaWVudCBkb2VzIHRoZSBhY3R1YWwgcGFpbnRpbmcgb2YgdGhl
IG92ZXJsYXkuCiAgICAgLy8gSGVyZSB3ZSBqdXN0IG1ha2Ugc3VyZSB0byBpbnZhbGlkYXRlLgot
ICAgIGlmICghbV92aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IGFibGUgdG8gaW52YWxpZGF0ZSBhIHNtYWxsZXIgcmVjdC4KLSAg
ICAgICAgLy8gRklYTUU6IElzIGl0IGltcG9ydGFudCB0byBqdXN0IGludmFsaWRhdGUgYSBzbWFs
bGVyIHJlY3QgZ2l2ZW4gdGhhdAotICAgICAgICAvLyB0aGlzIGlzIG5vdCBvbiBhIGNyaXRpY2Fs
IGNvZGVwYXRoPyBJbiBvcmRlciB0byBkbyBzbywgd2UnZAotICAgICAgICAvLyBoYXZlIHRvIHRh
a2Ugc2Nyb2xsaW5nIGludG8gYWNjb3VudC4KLSAgICAgICAgY29uc3QgV2ViU2l6ZSYgc2l6ZSA9
IG1fdmlld0ltcGwtPnNpemUoKTsKLSAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBz
aXplLndpZHRoLCBzaXplLmhlaWdodCk7CisgICAgaWYgKCFtX3ZpZXdJbXBsLT5pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoKSAmJiAhZGFtYWdlZFJlY3QuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGlmIChtX3ZpZXdJbXBsLT5jbGllbnQoKSkKICAgICAgICAgICAgIG1fdmlld0ltcGwtPmNs
aWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5oCShyZXZpc2lvbiAxMDE3MTkpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwzMyArMzksNDAgQEAgY2xhc3MgR3JhcGhpY3NMYXllckNsaWVudDsKIH0KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlZpZXdJbXBs
Oworc3RydWN0IFdlYlJlY3Q7CiAKIGNsYXNzIFBhZ2VPdmVybGF5IHsKIHB1YmxpYzoKLSAgICBj
bGFzcyBQYWdlT3ZlcmxheUNsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRQYWdlT3ZlcmxheShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKSA9IDA7CisgICAg
ZW51bSBQYWdlT3ZlcmxheVVwZGF0ZU9wdGlvbiB7CisgICAgICAgIEZvcmNlVXBkYXRlLAorICAg
ICAgICBOb3RGb3JjZVVwZGF0ZQogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxQYWdl
T3ZlcmxheT4gY3JlYXRlKFdlYlZpZXdJbXBsKiwgUGFnZU92ZXJsYXlDbGllbnQqKTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxQYWdlT3ZlcmxheT4gY3JlYXRlKFdlYlZpZXdJbXBsKiwgV2ViUGFn
ZU92ZXJsYXkqKTsKIAogICAgIH5QYWdlT3ZlcmxheSgpIHsgfQogCi0gICAgdm9pZCBzZXRDbGll
bnQoUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQorICAg
IFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGF5OyB9Cisg
ICAgdm9pZCBzZXRPdmVybGF5KFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KSB7IG1fb3ZlcmxheSA9
IG92ZXJsYXk7IH0KKworICAgIGludCB6T3JkZXIoKSBjb25zdCB7IHJldHVybiBtX3pPcmRlcjsg
fQorICAgIHZvaWQgc2V0Wk9yZGVyKGludCB6T3JkZXIpIHsgbV96T3JkZXIgPSB6T3JkZXI7IH0K
IAogICAgIHZvaWQgY2xlYXIoKTsKLSAgICB2b2lkIHVwZGF0ZSgpOworICAgIHZvaWQgdXBkYXRl
KFBhZ2VPdmVybGF5VXBkYXRlT3B0aW9uKTsKICAgICB2b2lkIHBhaW50V2ViRnJhbWUoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAgUGFnZU92ZXJsYXkoV2ViVmll
d0ltcGwqLCBQYWdlT3ZlcmxheUNsaWVudCopOwotICAgIHZvaWQgaW52YWxpZGF0ZVdlYkZyYW1l
KCk7CisgICAgUGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqLCBXZWJQYWdlT3ZlcmxheSopOworICAg
IHZvaWQgaW52YWxpZGF0ZVdlYkZyYW1lKGNvbnN0IFdlYlJlY3QmKTsKIAogICAgIFdlYlZpZXdJ
bXBsKiBtX3ZpZXdJbXBsOwotICAgIFBhZ2VPdmVybGF5Q2xpZW50KiBtX2NsaWVudDsKKyAgICBX
ZWJQYWdlT3ZlcmxheSogbV9vdmVybGF5OwogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBtX2xheWVyOwogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50PiBt
X2xheWVyQ2xpZW50OworICAgIGludCBtX3pPcmRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxp
c3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92
ZXJsYXlMaXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElO
Qy4KKyAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5TGlzdC5oIgor
CisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3ZlcmxheS5oIgor
I2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3du
UHRyPFBhZ2VPdmVybGF5TGlzdD4gUGFnZU92ZXJsYXlMaXN0OjpjcmVhdGUoV2ViVmlld0ltcGwq
IHZpZXdJbXBsKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZU92ZXJsYXlMaXN0KHZp
ZXdJbXBsKSk7Cit9CisKK1BhZ2VPdmVybGF5TGlzdDo6UGFnZU92ZXJsYXlMaXN0KFdlYlZpZXdJ
bXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCit7Cit9CisKK1BhZ2VP
dmVybGF5TGlzdDo6flBhZ2VPdmVybGF5TGlzdCgpCit7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlM
aXN0OjphZGQoV2ViUGFnZU92ZXJsYXkqIG92ZXJsYXksIGludCB6T3JkZXIpCit7CisgICAgYm9v
bCBhZGRlZCA9IGZhbHNlOworICAgIHNpemVfdCBpbmRleCA9IGZpbmQob3ZlcmxheSk7CisgICAg
aWYgKGluZGV4ID09IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgT3duUHRyPFBhZ2VPdmVybGF5
PiBwYWdlT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUobV92aWV3SW1wbCwgb3ZlcmxheSk7
CisgICAgICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChwYWdlT3ZlcmxheS5yZWxlYXNlKCkpOwor
ICAgICAgICBpbmRleCA9IG1fcGFnZU92ZXJsYXlzLnNpemUoKSAtIDE7CisgICAgICAgIGFkZGVk
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkgPSBtX3BhZ2VP
dmVybGF5c1tpbmRleF0uZ2V0KCk7CisgICAgcGFnZU92ZXJsYXktPnNldFpPcmRlcih6T3JkZXIp
OworCisgICAgLy8gQWRqdXN0IHBhZ2Ugb3ZlcmxheSBsaXN0IG9yZGVyIGJhc2VkIG9uIHRoZWly
IHotb3JkZXIgbnVtYmVycy4gV2UgZmlyc3QKKyAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIG1v
dmUgdGhlIG92ZXJsYXkgdXAgYW5kIGRvIHNvIGlmIG5lZWRlZC4gT3RoZXJ3aXNlLAorICAgIC8v
IGNoZWNrIGlmIHdlIG5lZWQgdG8gbW92ZSBpdCBkb3duLgorICAgIGJvb2wgek9yZGVyQ2hhbmdl
ZCA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSArIDEgPCBtX3BhZ2VPdmVy
bGF5cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXNbaV0tPnpPcmRl
cigpID49IG1fcGFnZU92ZXJsYXlzW2kgKyAxXS0+ek9yZGVyKCkpIHsKKyAgICAgICAgICAgIG1f
cGFnZU92ZXJsYXlzW2ldLnN3YXAobV9wYWdlT3ZlcmxheXNbaSArIDFdKTsKKyAgICAgICAgICAg
IHpPcmRlckNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF6T3Jk
ZXJDaGFuZ2VkKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA+PSAxOyAtLWkp
IHsKKyAgICAgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5c1tpXS0+ek9yZGVyKCkgPCBtX3BhZ2VP
dmVybGF5c1tpIC0gMV0tPnpPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgbV9wYWdlT3Zlcmxh
eXNbaV0uc3dhcChtX3BhZ2VPdmVybGF5c1tpIC0gMV0pOworICAgICAgICAgICAgICAgIHpPcmRl
ckNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gSWYgd2UgZGlkIG1vdmUgdGhlIG92ZXJsYXksIHRoYXQgbWVhbnMgei1vcmRlciBpcyBjaGFu
Z2VkIGFuZCB3ZSBuZWVkIHRvCisgICAgLy8gdXBkYXRlIG92ZXJsYXkgbGF5ZXJzJyB6LW9yZGVy
LiBPdGhlcndpc2UsIGp1c3QgdXBkYXRlIGN1cnJlbnQgb3ZlcmxheS4KKyAgICBpZiAoek9yZGVy
Q2hhbmdlZCkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92ZXJsYXlz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPmNsZWFyKCk7Cisg
ICAgICAgIHVwZGF0ZShQYWdlT3ZlcmxheTo6Tm90Rm9yY2VVcGRhdGUpOworICAgIH0gZWxzZQor
ICAgICAgICBwYWdlT3ZlcmxheS0+dXBkYXRlKFBhZ2VPdmVybGF5OjpOb3RGb3JjZVVwZGF0ZSk7
CisKKyAgICByZXR1cm4gYWRkZWQ7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlMaXN0OjpyZW1vdmUo
V2ViUGFnZU92ZXJsYXkqIG92ZXJsYXkpCit7CisgICAgc2l6ZV90IGluZGV4ID0gZmluZChvdmVy
bGF5KTsKKyAgICBpZiAoaW5kZXggPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9wYWdlT3ZlcmxheXNbaW5kZXhdLT5jbGVhcigpOworICAgIG1fcGFnZU92
ZXJsYXlzLnJlbW92ZShpbmRleCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGFnZU92
ZXJsYXlMaXN0Ojp1cGRhdGUoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5VXBkYXRlT3B0aW9uIHVw
ZGF0ZU9wdGlvbikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92ZXJsYXlz
LnNpemUoKTsgKytpKQorICAgICAgICBtX3BhZ2VPdmVybGF5c1tpXS0+dXBkYXRlKHVwZGF0ZU9w
dGlvbik7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlMaXN0OjpwYWludFdlYkZyYW1lKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYgZ2MpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bh
Z2VPdmVybGF5cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPnBhaW50
V2ViRnJhbWUoZ2MpOworfQorCitzaXplX3QgUGFnZU92ZXJsYXlMaXN0OjpmaW5kKFdlYlBhZ2VP
dmVybGF5KiBvdmVybGF5KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdlT3Zl
cmxheXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzW2ldLT5vdmVy
bGF5KCkgPT0gb3ZlcmxheSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1
cm4gV1RGOjpub3RGb3VuZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KKyAqIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheUxp
c3RfaAorI2RlZmluZSBQYWdlT3ZlcmxheUxpc3RfaAorCisjaW5jbHVkZSAiUGFnZU92ZXJsYXku
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2Vi
UGFnZU92ZXJsYXk7CitjbGFzcyBXZWJWaWV3SW1wbDsKKworY2xhc3MgUGFnZU92ZXJsYXlMaXN0
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlT3ZlcmxheUxpc3Q+IGNyZWF0
ZShXZWJWaWV3SW1wbCopOworCisgICAgflBhZ2VPdmVybGF5TGlzdCgpOworCisgICAgYm9vbCBl
bXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3BhZ2VPdmVybGF5cy5zaXplKCk7IH0KKworICAgIC8v
IEFkZHMvcmVtb3ZlcyBhIFBhZ2VPdmVybGF5IGZvciBnaXZlbiBjbGllbnQuCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIGEgUGFnZU92ZXJsYXkgaXMgYWRkZWQvcmVtb3ZlZC4KKyAgICBib29sIGFk
ZChXZWJQYWdlT3ZlcmxheSosIGludCAvKiB6T3JkZXIgKi8pOworICAgIGJvb2wgcmVtb3ZlKFdl
YlBhZ2VPdmVybGF5Kik7CisKKyAgICB2b2lkIHVwZGF0ZShQYWdlT3ZlcmxheTo6UGFnZU92ZXJs
YXlVcGRhdGVPcHRpb24pOworICAgIHZvaWQgcGFpbnRXZWJGcmFtZShXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8UGFnZU92
ZXJsYXk+LCAyPiBQYWdlT3ZlcmxheXM7CisKKyAgICBleHBsaWNpdCBQYWdlT3ZlcmxheUxpc3Qo
V2ViVmlld0ltcGwqKTsKKworICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbGllbnQg
Zm91bmQuIE90aGVyd2lzZSwgcmV0dXJucyBXVEY6Om5vdEZvdW5kLgorICAgIHNpemVfdCBmaW5k
KFdlYlBhZ2VPdmVybGF5Kik7CisKKyAgICBXZWJWaWV3SW1wbCogbV92aWV3SW1wbDsKKyAgICBQ
YWdlT3ZlcmxheXMgbV9wYWdlT3ZlcmxheXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFBhZ2VPdmVybGF5TGlzdF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCShyZXZpc2lvbiAxMDE3MTkpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJQYWdl
T3ZlcmxheS5oIgogI2luY2x1ZGUgIlBhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oIgorI2luY2x1ZGUg
InBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKQEAgLTI3MiwyMiArMjcyLDMzIEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6
OmJyaW5nRnJvbnRlbmQKIHsKIH0KIAotLy8gUGFnZU92ZXJsYXlDbGllbnQKLXZvaWQgV2ViRGV2
VG9vbHNBZ2VudEltcGw6OnBhaW50UGFnZU92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBnYykKKy8v
IFdlYlBhZ2VPdmVybGF5Q2xpZW50Cit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWludFBh
Z2VPdmVybGF5KFdlYkNhbnZhcyogY2FudmFzKQogewogICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIGlmIChpYykKLSAgICAgICAgaWMtPmRy
YXdIaWdobGlnaHQoZ2MpOworICAgICAgICBpYy0+ZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRl
eHRCdWlsZGVyKGNhbnZhcykuY29udGV4dCgpKTsKK30KKworV2ViUmVjdCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6ZGlydHlSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogYWJsZSB0byBpbnZh
bGlkYXRlIGEgc21hbGxlciByZWN0LgorICAgIC8vIEZJWE1FOiBJcyBpdCBpbXBvcnRhbnQgdG8g
anVzdCBpbnZhbGlkYXRlIGEgc21hbGxlciByZWN0IGdpdmVuIHRoYXQKKyAgICAvLyB0aGlzIGlz
IG5vdCBvbiBhIGNyaXRpY2FsIGNvZGVwYXRoPyBJbiBvcmRlciB0byBkbyBzbywgd2UnZAorICAg
IC8vIGhhdmUgdG8gdGFrZSBzY3JvbGxpbmcgaW50byBhY2NvdW50LgorICAgIGNvbnN0IFdlYlNp
emUmIHNpemUgPSBtX3dlYlZpZXdJbXBsLT5zaXplKCk7CisgICAgcmV0dXJuIFdlYlJlY3QoMCwg
MCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJ
bXBsOjpoaWdobGlnaHQoKQogewotICAgIG1fd2ViVmlld0ltcGwtPnNldFBhZ2VPdmVybGF5Q2xp
ZW50KHRoaXMpOworICAgIC8vIFVzZSA5OSBhcyBhIGJpZyB6LW9yZGVyIG51bWJlciBzbyB0aGF0
IGhpZ2hsaWdodCBpcyBhYm92ZSBvdGhlciBvdmVybGF5cy4KKyAgICBtX3dlYlZpZXdJbXBsLT5h
ZGRQYWdlT3ZlcmxheSh0aGlzLCA5OSk7CiB9CiAKIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6
OmhpZGVIaWdobGlnaHQoKQogewotICAgIG1fd2ViVmlld0ltcGwtPnNldFBhZ2VPdmVybGF5Q2xp
ZW50KDApOworICAgIG1fd2ViVmlld0ltcGwtPnJlbW92ZVBhZ2VPdmVybGF5KHRoaXMpOwogfQog
CiBib29sIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCShyZXZpc2lvbiAxMDE3MTkpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw4ICszMyw4IEBACiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKIAotI2luY2x1
ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJQYWdlT3ZlcmxheS5oIgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC02Miw3ICs2Miw3IEBAIHN0cnVjdCBXZWJEZXZU
b29sc01lc3NhZ2VEYXRhOwogCiBjbGFzcyBXZWJEZXZUb29sc0FnZW50SW1wbCA6IHB1YmxpYyBX
ZWJEZXZUb29sc0FnZW50UHJpdmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJQYWdlT3ZlcmxheSB7CiBwdWJsaWM6CiAgICAgV2Vi
RGV2VG9vbHNBZ2VudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJEZXZUb29sc0Fn
ZW50Q2xpZW50KiBjbGllbnQpOwogICAgIHZpcnR1YWwgfldlYkRldlRvb2xzQWdlbnRJbXBsKCk7
CkBAIC05Nyw4ICs5Nyw5IEBAIHB1YmxpYzoKIAogICAgIGludCBob3N0SWQoKSB7IHJldHVybiBt
X2hvc3RJZDsgfQogCi0gICAgLy8gUGFnZU92ZXJsYXlDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRQYWdlT3ZlcmxheShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBXZWJQ
YWdlT3ZlcmxheUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNh
bnZhcyopOworICAgIHZpcnR1YWwgV2ViUmVjdCBkaXJ0eVJlY3QoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJ
KHJldmlzaW9uIDEwMTcxOSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNjMsOCArMjA2Myw4IEBAIHZvaWQgV2ViRnJh
bWVJbXBsOjpwYWludFdpdGhDb250ZXh0KEdyYXAKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQo
KSAmJiBmcmFtZVZpZXcoKSkgewogICAgICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7CiAgICAgICAg
IGZyYW1lVmlldygpLT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7Ci0gICAgICAgIGlmICh2aWV3SW1w
bCgpLT5wYWdlT3ZlcmxheSgpKQotICAgICAgICAgICAgdmlld0ltcGwoKS0+cGFnZU92ZXJsYXko
KS0+cGFpbnRXZWJGcmFtZShnYyk7CisgICAgICAgIGlmICh2aWV3SW1wbCgpLT5wYWdlT3Zlcmxh
eXMoKSkKKyAgICAgICAgICAgIHZpZXdJbXBsKCktPnBhZ2VPdmVybGF5cygpLT5wYWludFdlYkZy
YW1lKGdjKTsKICAgICB9IGVsc2UKICAgICAgICAgZ2MuZmlsbFJlY3QoZGlydHlSZWN0LCBDb2xv
cjo6d2hpdGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIGdjLnJlc3RvcmUoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDEw
MTcxOSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI1Niw4ICsxMjU2LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9z
aXRlKGJvb2wpCiAgICAgICAgIGlmICghcGFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBk
YXRlKCk7CisgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5cykKKyAgICAgICAgICAgIG1fcGFnZU92
ZXJsYXlzLT51cGRhdGUoUGFnZU92ZXJsYXk6Ok5vdEZvcmNlVXBkYXRlKTsKIAogICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0ZSgpOwogICAgIH0KQEAgLTI2MTAsMjEgKzI2MTAsMjIg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SWdub3JlSW5wdXRFdmVudHMoYgogICAgIG1faWdub3Jl
SW5wdXRFdmVudHMgPSBuZXdWYWx1ZTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6c2V0UGFnZU92
ZXJsYXlDbGllbnQoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNs
aWVudCkKK3ZvaWQgV2ViVmlld0ltcGw6OmFkZFBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5KiBv
dmVybGF5LCBpbnQgek9yZGVyKQogewotICAgIGlmIChwYWdlT3ZlcmxheUNsaWVudCkgewotICAg
ICAgICBpZiAoIW1fcGFnZU92ZXJsYXkpCi0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5ID0gUGFn
ZU92ZXJsYXk6OmNyZWF0ZSh0aGlzLCBwYWdlT3ZlcmxheUNsaWVudCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXktPnNldENsaWVudChwYWdlT3ZlcmxheUNsaWVudCk7
Ci0gICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOworICAgIGlmICghbV9wYWdlT3Zlcmxh
eXMpCisgICAgICAgIG1fcGFnZU92ZXJsYXlzID0gUGFnZU92ZXJsYXlMaXN0OjpjcmVhdGUodGhp
cyk7CisKKyAgICBtX3BhZ2VPdmVybGF5cy0+YWRkKG92ZXJsYXksIHpPcmRlcik7CisgICAgc2V0
Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVBh
Z2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KQoreworICAgIGlmIChtX3BhZ2VPdmVy
bGF5cyAmJiBtX3BhZ2VPdmVybGF5cy0+cmVtb3ZlKG92ZXJsYXkpKSB7CiAgICAgICAgIHNldFJv
b3RMYXllck5lZWRzRGlzcGxheSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3BhZ2VP
dmVybGF5KSB7Ci0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5LT5jbGVhcigpOwotICAgICAgICAg
ICAgbV9wYWdlT3ZlcmxheSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBzZXRSb290TGF5ZXJOZWVk
c0Rpc3BsYXkoKTsKLSAgICAgICAgfQorCisgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5cy0+ZW1w
dHkoKSkKKyAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlzID0gbnVsbHB0cjsKICAgICB9CiB9CiAK
QEAgLTI4NzAsOCArMjg3MSw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRD
b21wb3MKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUNvbXBvc2l0b3IobV9sYXll
clRyZWVIb3N0LT5jb21wb3NpdG9ySWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIG1faXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29tcG9zaXRv
ckNyZWF0aW9uRmFpbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobV9wYWdlT3ZlcmxheSkK
LSAgICAgICAgICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKKyAgICAgICAgICAgIGlm
IChtX3BhZ2VPdmVybGF5cykKKyAgICAgICAgICAgICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRl
KFBhZ2VPdmVybGF5OjpGb3JjZVVwZGF0ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBtX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKICAgICAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmNsZWFyKCk7CkBAIC0yOTUyLDggKzI5NTMsOCBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAobV9wYWdlT3ZlcmxheSkKLSAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CisgICAg
aWYgKG1fcGFnZU92ZXJsYXlzKQorICAgICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKFBhZ2VP
dmVybGF5OjpGb3JjZVVwZGF0ZSk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQ29t
cG9zaXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAko
cmV2aXNpb24gMTAxNzE5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbC5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAi
UGFnZU92ZXJsYXlMaXN0LmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhQ2xpZW50SW1wbC5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAg
LTkzLDYgKzkzLDcgQEAgY2xhc3MgV2ViSW1hZ2U7CiBjbGFzcyBXZWJLZXlib2FyZEV2ZW50Owog
Y2xhc3MgV2ViTW91c2VFdmVudDsKIGNsYXNzIFdlYk1vdXNlV2hlZWxFdmVudDsKK2NsYXNzIFdl
YlBhZ2VPdmVybGF5Q2xpZW50OwogY2xhc3MgV2ViU2V0dGluZ3NJbXBsOwogY2xhc3MgV2ViVG91
Y2hFdmVudDsKIApAQCAtMjI3LDYgKzIyOCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlQmFja2dyb3VuZENvbG9yLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5hY3RpdmVGb3JlZ3Jv
dW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rp
b24odW5zaWduZWQgYWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFnZU92ZXJsYXkoV2Vi
UGFnZU92ZXJsYXkqLCBpbnQgLyogek9yZGVyICovKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
UGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqKTsKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdENs
aWVudAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7CkBAIC0yNDIsOCArMjQ1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SWdub3JlSW5w
dXRFdmVudHMoYm9vbCBuZXdWYWx1ZSk7CiAgICAgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUqIGRl
dlRvb2xzQWdlbnRQcml2YXRlKCkgeyByZXR1cm4gbV9kZXZUb29sc0FnZW50LmdldCgpOyB9CiAK
LSAgICBQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VPdmVy
bGF5LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQYWdlT3ZlcmxheUNsaWVudChQYWdlT3ZlcmxheTo6
UGFnZU92ZXJsYXlDbGllbnQqKTsKKyAgICBQYWdlT3ZlcmxheUxpc3QqIHBhZ2VPdmVybGF5cygp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlzLmdldCgpOyB9CiAKICAgICB2b2lkIHNldE92
ZXJsYXlMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAKQEAgLTU3OSw3ICs1ODEsNyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpQb3B1cENvbnRhaW5lcj4gbV9zZWxlY3RQ
b3B1cDsKIAogICAgIE93blB0cjxXZWJEZXZUb29sc0FnZW50UHJpdmF0ZT4gbV9kZXZUb29sc0Fn
ZW50OwotICAgIE93blB0cjxQYWdlT3ZlcmxheT4gbV9wYWdlT3ZlcmxheTsKKyAgICBPd25QdHI8
UGFnZU92ZXJsYXlMaXN0PiBtX3BhZ2VPdmVybGF5czsKIAogICAgIC8vIFdoZXRoZXIgdGhlIHdl
YnZpZXcgaXMgcmVuZGVyaW5nIHRyYW5zcGFyZW50bHkuCiAgICAgYm9vbCBtX2lzVHJhbnNwYXJl
bnQ7Cg==
</data>
<flag name="review"
          id="116973"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117558</attachid>
            <date>2011-12-01 20:46:24 -0800</date>
            <delta_ts>2011-12-01 22:10:24 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>webkit_73235.7.patch</filename>
            <type>text/plain</type>
            <size>30764</size>
            <attacher name="xiyuan">xiyuan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDE3MzkpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3
IEBACisyMDExLTEyLTAxICBYaXl1YW4gWGlhICA8eGl5dWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFN1cHBvcnQgYWRkaW5nL3JlbW92aW5nIHBhZ2Ugb3ZlcmxheSB0byBX
ZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZU92ZXJsYXkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojp+V2ViUGFnZU92ZXJsYXkpOgorICAgICAg
ICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL1BhZ2VPdmVybGF5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VPdmVybGF5OjpQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6Ok92ZXJsYXlHcmFwaGlj
c0xheWVyQ2xpZW50SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6T3ZlcmxheUdyYXBo
aWNzTGF5ZXJDbGllbnRJbXBsOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6T3Zl
cmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudElt
cGwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6
OnBhaW50V2ViRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6aW52YWxpZGF0
ZVdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXkuaDoKKyAgICAgICAgKFdlYktp
dDo6UGFnZU92ZXJsYXk6Om92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6
c2V0T3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5Ojp6T3JkZXIpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6c2V0Wk9yZGVyKToKKyAgICAgICAgKiBzcmMvUGFn
ZU92ZXJsYXlMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlz
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0OjpQYWdlT3Zlcmxh
eUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6On5QYWdlT3ZlcmxheUxp
c3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OmFkZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92
ZXJsYXlMaXN0Ojp1cGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OnBh
aW50V2ViRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6OmZpbmQpOgor
ICAgICAgICAqIHNyYy9QYWdlT3ZlcmxheUxpc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlBhZ2VPdmVybGF5TGlzdDo6ZW1wdHkpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWludFBh
Z2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpcnR5
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWdobGlnaHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aGlkZUhpZ2hsaWdodCk6
CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dl
YkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cGFpbnRXaXRo
Q29udGV4dCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjphZGRQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQ
YWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZGlk
UmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFnZU92ZXJsYXlzKToKKwogMjAxMS0xMi0w
MSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIGFkZCByZWZlcnJlciBwb2xpY3kgdG8gV2ViQ29udGV4dE1lbnVEYXRhCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiAxMDE3MzgpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAsNyBA
QAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNr
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViT3B0aW9uRWxlbWVudC5oJywKKyAgICAg
ICAgICAgICAgICAncHVibGljL1dlYlBhZ2VPdmVybGF5LmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQ
YWdlU2VyaWFsaXplckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VW
aXNpYmlsaXR5U3RhdGUuaCcsCkBAIC00MzcsNiArNDM4LDggQEAKICAgICAgICAgICAgICAgICAn
c3JjL3BhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9QYWdlT3ZlcmxheS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXku
aCcsCisgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheUxpc3QuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1BhZ2VPdmVybGF5TGlzdC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1BsYXRmb3Jt
U3VwcG9ydC5jcHAnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFn
ZU92ZXJsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJQYWdlT3ZlcmxheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZU92ZXJsYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBH
T09HTEUgSU5DLgorICogT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhZ2VPdmVybGF5X2gKKyNkZWZpbmUgV2ViUGFnZU92
ZXJsYXlfaAorCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZU92ZXJsYXkgeworcHVibGljOgor
ICAgIC8vIFBhaW50cyBwYWdlIG92ZXJsYXkgY29udGVudHMuCisgICAgdmlydHVhbCB2b2lkIHBh
aW50UGFnZU92ZXJsYXkoV2ViQ2FudmFzKikgPSAwOworCisgICAgLy8gUmV0dXJucyBkaXJ0eSBy
ZWN0IHRoYXQgbmVlZHMgcmVwYWludC4KKyAgICB2aXJ0dWFsIFdlYlJlY3QgZGlydHlSZWN0KCkg
Y29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViUGFnZU92ZXJsYXkoKSB7
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViUGFnZU92ZXJs
YXlfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGFnZU92ZXJsYXkuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYK
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCShyZXZpc2lvbiAx
MDE3MzgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJGcmFt
ZUNsaWVudDsKIGNsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgV2ViTm9kZTsKK2Ns
YXNzIFdlYlBhZ2VPdmVybGF5OwogY2xhc3MgV2ViUGVybWlzc2lvbkNsaWVudDsKIGNsYXNzIFdl
YlNldHRpbmdzOwogY2xhc3MgV2ViU3BlbGxDaGVja0NsaWVudDsKQEAgLTQwOSw2ICs0MTAsMTgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZp
c2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGlzSW5pdGlhbFN0YXRlKSB7IH0KIAorICAgIC8vIFBhZ2VPdmVybGF5
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIC8vIEFkZHMvcmVtb3ZlcyBwYWdlIG92ZXJsYXkgdG8gdGhpcyBXZWJWaWV3LiBU
aGVzZSBmdW5jdGlvbnMgY2hhbmdlIHRoZQorICAgIC8vIGdyYXBoaWNhbCBhcHBlYXJhbmNlIG9m
IHRoZSBXZWJWaWV3LiBXZWJQYWdlT3ZlcmxheSBwYWludHMgdGhlCisgICAgLy8gY29udGVudHMg
b2YgdGhlIHBhZ2Ugb3ZlcmxheS4gSXQgYWxzbyBwcm92aWRlcyBhbiB6LW9yZGVyIG51bWJlciBm
b3IKKyAgICAvLyB0aGUgcGFnZSBvdmVybGF5LiBUaGUgei1vcmRlciBudW1iZXIgZGVmaW5lcyB0
aGUgcGFpbnQgb3JkZXIgdGhlIHBhZ2UKKyAgICAvLyBvdmVybGF5cy4gUGFnZSBvdmVybGF5cyB3
aXRoIGxhcmdlciB6LW9yZGVyIG51bWJlciB3aWxsIGJlIHBhaW50ZWQgYWZ0ZXIKKyAgICAvLyBw
YWdlIG92ZXJsYXlzIHdpdGggc21hbGxlciB6LW9yZGVyIG51bWJlci4gVGhhdCBpcywgdGhleSBh
cHBlYXIgYWJvdmUKKyAgICAvLyB0aGUgcGFnZSBvdmVybGF5cyB3aXRoIHNtYWxsZXIgei1vcmRl
ciBudW1iZXIuIElmIHR3byBwYWdlIG92ZXJsYXlzIGhhdmUKKyAgICAvLyB0aGUgc2FtZSB6LW9y
ZGVyIG51bWJlciwgdGhlIGxhdGVyIGFkZGVkIG9uZSB3aWxsIGJlIG9uIHRvcC4KKyAgICB2aXJ0
dWFsIHZvaWQgYWRkUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqLCBpbnQgLyp6LW9yZGVyKi8p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkq
KSA9IDA7CiAKICAgICAvLyBUZXN0aW5nIGZ1bmN0aW9uYWxpdHkgZm9yIExheW91dFRlc3RDb250
cm9sbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAJKHJldmlzaW9uIDEwMTczOCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dFNraWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYlBhZ2VPdmVy
bGF5LmgiCiAjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgogI2luY2x1ZGUgIldlYlZpZXdJbXBs
LmgiCiAKQEAgLTQwLDIzICs0MiwzNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NPd25QdHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5Ojpj
cmVhdGUoV2ViVmlld0ltcGwqIHZpZXdJbXBsLCBQYWdlT3ZlcmxheUNsaWVudCogY2xpZW50KQor
bmFtZXNwYWNlIHsKKworV2ViQ2FudmFzKiBUb1dlYkNhbnZhcyhHcmFwaGljc0NvbnRleHQqIGdj
KQoreworI2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgcmV0dXJuIGdjLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCk7CisjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKKyAgICByZXR1cm4gZ2MtPnBs
YXRmb3JtQ29udGV4dCgpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlCisKK1Bhc3NPd25Q
dHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5OjpjcmVhdGUoV2ViVmlld0ltcGwqIHZpZXdJbXBs
LCBXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBh
Z2VPdmVybGF5KHZpZXdJbXBsLCBjbGllbnQpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBh
Z2VPdmVybGF5KHZpZXdJbXBsLCBvdmVybGF5KSk7CiB9CiAKLVBhZ2VPdmVybGF5OjpQYWdlT3Zl
cmxheShXZWJWaWV3SW1wbCogdmlld0ltcGwsIFBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQpCitQ
YWdlT3ZlcmxheTo6UGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqIHZpZXdJbXBsLCBXZWJQYWdlT3Zl
cmxheSogb3ZlcmxheSkKICAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCi0gICAgLCBtX2NsaWVu
dChjbGllbnQpCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKKyAgICAsIG1fek9yZGVyKDApCiB7
CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBPdmVybGF5R3Jh
cGhpY3NMYXllckNsaWVudEltcGwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVu
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8T3ZlcmxheUdyYXBoaWNzTGF5ZXJD
bGllbnRJbXBsKj4gY3JlYXRlKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgUGFnZU92ZXJsYXk6
OlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkKKyAgICBzdGF0aWMgUGFzc093
blB0cjxPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwqPiBjcmVhdGUoV2ViVmlld0ltcGwq
IHdlYlZpZXdJbXBsLCBXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgT3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKHdlYlZpZXdJ
bXBsLCBwYWdlT3ZlcmxheUNsaWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE92
ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCh3ZWJWaWV3SW1wbCwgb3ZlcmxheSkpOwogICAg
IH0KIAogICAgIHZpcnR1YWwgfk92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbCgpIHsgfQpA
QCAtNjUsOSArODEsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNS
ZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgaW5DbGlwKQorICAg
IHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGlj
c0NvbnRleHQmIGdjLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYg
aW5DbGlwKQogICAgIHsKLSAgICAgICAgbV9wYWdlT3ZlcmxheUNsaWVudC0+cGFpbnRQYWdlT3Zl
cmxheShjb250ZXh0KTsKKyAgICAgICAgZ2Muc2F2ZSgpOworICAgICAgICBtX292ZXJsYXktPnBh
aW50UGFnZU92ZXJsYXkoVG9XZWJDYW52YXMoJmdjKSk7CisgICAgICAgIGdjLnJlc3RvcmUoKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKQEAg
LTkxLDIwICsxMDksMjEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBs
LCBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQotICAg
ICAgICA6IG1fcGFnZU92ZXJsYXlDbGllbnQocGFnZU92ZXJsYXlDbGllbnQpCisgICAgT3Zlcmxh
eUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgV2ViUGFn
ZU92ZXJsYXkqIG92ZXJsYXkpCisgICAgICAgIDogbV9vdmVybGF5KG92ZXJsYXkpCiAgICAgICAg
ICwgbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkKICAgICB7CiAgICAgfQogCi0gICAgUGFnZU92
ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50KiBtX3BhZ2VPdmVybGF5Q2xpZW50OworICAgIFdlYlBh
Z2VPdmVybGF5KiBtX292ZXJsYXk7CiAgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CiB9
OwogI2VuZGlmCiAKIHZvaWQgUGFnZU92ZXJsYXk6OmNsZWFyKCkKIHsKLSAgICBpbnZhbGlkYXRl
V2ViRnJhbWUoKTsKKyAgICBjb25zdCBXZWJTaXplJiBzaXplID0gbV92aWV3SW1wbC0+c2l6ZSgp
OworICAgIGludmFsaWRhdGVXZWJGcmFtZShXZWJSZWN0KDAsIDAsIHNpemUud2lkdGgsIHNpemUu
aGVpZ2h0KSk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKG1f
bGF5ZXIpIHsKQEAgLTExNSw0MSArMTM0LDU0IEBAIHZvaWQgUGFnZU92ZXJsYXk6OmNsZWFyKCkK
ICNlbmRpZgogfQogCi12b2lkIFBhZ2VPdmVybGF5Ojp1cGRhdGUoKQordm9pZCBQYWdlT3Zlcmxh
eTo6dXBkYXRlKFBhZ2VPdmVybGF5VXBkYXRlT3B0aW9uIHVwZGF0ZU9wdGlvbikKIHsKLSAgICBp
bnZhbGlkYXRlV2ViRnJhbWUoKTsKKyAgICBpbnZhbGlkYXRlV2ViRnJhbWUobV9vdmVybGF5LT5k
aXJ0eVJlY3QoKSk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYg
KCFtX2xheWVyKSB7Ci0gICAgICAgIG1fbGF5ZXJDbGllbnQgPSBPdmVybGF5R3JhcGhpY3NMYXll
ckNsaWVudEltcGw6OmNyZWF0ZShtX3ZpZXdJbXBsLCBtX2NsaWVudCk7CisgICAgICAgIG1fbGF5
ZXJDbGllbnQgPSBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6OmNyZWF0ZShtX3ZpZXdJ
bXBsLCBtX292ZXJsYXkpOwogICAgICAgICBtX2xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KG1fbGF5ZXJDbGllbnQuZ2V0KCkpOwogICAgICAgICBtX2xheWVyLT5zZXROYW1lKCJXZWJWaWV3
SW1wbCBwYWdlIG92ZXJsYXkgY29udGVudCIpOwogICAgICAgICBtX2xheWVyLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7Ci0gICAgICAgIGNvbnN0IFdlYlNpemUmIHNpemUgPSBtX3ZpZXdJbXBsLT5z
aXplKCk7Ci0gICAgICAgIG1fbGF5ZXItPnNldFNpemUoSW50U2l6ZShzaXplLndpZHRoLCBzaXpl
LmhlaWdodCkpOworICAgICAgICB1cGRhdGVPcHRpb24gPSBGb3JjZVVwZGF0ZTsKICAgICB9CisK
KyAgICBGbG9hdFNpemUgc2l6ZShtX3ZpZXdJbXBsLT5zaXplKCkpOworICAgIGlmIChzaXplICE9
IG1fbGF5ZXItPnNpemUoKSkgeworICAgICAgICAvLyBUcmlnZ2VycyByZS1hZGRpbmcgdG8gcm9v
dCBsYXllciB0byBlbnN1cmUgdGhhdCB3ZSBhcmUgb24gdG9wIG9mCisgICAgICAgIC8vIHNjcm9s
bGJhcnMuCisgICAgICAgIG1fbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgbV9s
YXllci0+c2V0U2l6ZShzaXplKTsKKyAgICAgICAgdXBkYXRlT3B0aW9uID0gRm9yY2VVcGRhdGU7
CisgICAgfQorCiAgICAgbV92aWV3SW1wbC0+c2V0T3ZlcmxheUxheWVyKG1fbGF5ZXIuZ2V0KCkp
OwotICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworCisgICAgaWYgKHVwZGF0ZU9wdGlv
biA9PSBGb3JjZVVwZGF0ZSkKKyAgICAgICAgbV9sYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIGNvbnN0IFdlYlJlY3QmIGRpcnR5UmVjdCA9IG1fb3ZlcmxheS0+
ZGlydHlSZWN0KCk7CisgICAgICAgIGlmICghZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QoZGly
dHlSZWN0LngsIGRpcnR5UmVjdC55LCBkaXJ0eVJlY3Qud2lkdGgsIGRpcnR5UmVjdC5oZWlnaHQp
KTsKKyAgICB9CiAjZW5kaWYKIH0KIAogdm9pZCBQYWdlT3ZlcmxheTo6cGFpbnRXZWJGcmFtZShH
cmFwaGljc0NvbnRleHQmIGdjKQogewotICAgIGlmICghbV92aWV3SW1wbC0+aXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKCkpCi0gICAgICAgIG1fY2xpZW50LT5wYWludFBhZ2VPdmVybGF5
KGdjKTsKKyAgICBpZiAoIW1fdmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSgpKSB7CisgICAgICAgIGdjLnNhdmUoKTsKKyAgICAgICAgbV9vdmVybGF5LT5wYWludFBhZ2VP
dmVybGF5KFRvV2ViQ2FudmFzKCZnYykpOworICAgICAgICBnYy5yZXN0b3JlKCk7CisgICAgfQog
fQogCi12b2lkIFBhZ2VPdmVybGF5OjppbnZhbGlkYXRlV2ViRnJhbWUoKQordm9pZCBQYWdlT3Zl
cmxheTo6aW52YWxpZGF0ZVdlYkZyYW1lKGNvbnN0IFdlYlJlY3QmIGRhbWFnZWRSZWN0KQogewot
ICAgIC8vIFBhZ2VPdmVybGF5Q2xpZW50IGRvZXMgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUg
b3ZlcmxheS4KKyAgICAvLyBXZWJQYWdlT3ZlcmxheSBkb2VzIHRoZSBhY3R1YWwgcGFpbnRpbmcg
b2YgdGhlIG92ZXJsYXkuCiAgICAgLy8gSGVyZSB3ZSBqdXN0IG1ha2Ugc3VyZSB0byBpbnZhbGlk
YXRlLgotICAgIGlmICghbV92aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGFibGUgdG8gaW52YWxpZGF0ZSBhIHNtYWxsZXIgcmVj
dC4KLSAgICAgICAgLy8gRklYTUU6IElzIGl0IGltcG9ydGFudCB0byBqdXN0IGludmFsaWRhdGUg
YSBzbWFsbGVyIHJlY3QgZ2l2ZW4gdGhhdAotICAgICAgICAvLyB0aGlzIGlzIG5vdCBvbiBhIGNy
aXRpY2FsIGNvZGVwYXRoPyBJbiBvcmRlciB0byBkbyBzbywgd2UnZAotICAgICAgICAvLyBoYXZl
IHRvIHRha2Ugc2Nyb2xsaW5nIGludG8gYWNjb3VudC4KLSAgICAgICAgY29uc3QgV2ViU2l6ZSYg
c2l6ZSA9IG1fdmlld0ltcGwtPnNpemUoKTsKLSAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgw
LCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7CisgICAgaWYgKCFtX3ZpZXdJbXBsLT5pc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSAmJiAhZGFtYWdlZFJlY3QuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGlmIChtX3ZpZXdJbXBsLT5jbGllbnQoKSkKICAgICAgICAgICAgIG1fdmlld0lt
cGwtPmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5oCShyZXZpc2lvbiAxMDE3
MzgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwzMyArMzksNDAgQEAgY2xhc3MgR3JhcGhpY3NMYXllckNsaWVudDsKIH0K
IAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlZp
ZXdJbXBsOworc3RydWN0IFdlYlJlY3Q7CiAKIGNsYXNzIFBhZ2VPdmVybGF5IHsKIHB1YmxpYzoK
LSAgICBjbGFzcyBQYWdlT3ZlcmxheUNsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRQYWdlT3ZlcmxheShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKSA9IDA7
CisgICAgZW51bSBQYWdlT3ZlcmxheVVwZGF0ZU9wdGlvbiB7CisgICAgICAgIEZvcmNlVXBkYXRl
LAorICAgICAgICBOb3RGb3JjZVVwZGF0ZQogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0
cjxQYWdlT3ZlcmxheT4gY3JlYXRlKFdlYlZpZXdJbXBsKiwgUGFnZU92ZXJsYXlDbGllbnQqKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlT3ZlcmxheT4gY3JlYXRlKFdlYlZpZXdJbXBsKiwg
V2ViUGFnZU92ZXJsYXkqKTsKIAogICAgIH5QYWdlT3ZlcmxheSgpIHsgfQogCi0gICAgdm9pZCBz
ZXRDbGllbnQoUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsg
fQorICAgIFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGF5
OyB9CisgICAgdm9pZCBzZXRPdmVybGF5KFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KSB7IG1fb3Zl
cmxheSA9IG92ZXJsYXk7IH0KKworICAgIGludCB6T3JkZXIoKSBjb25zdCB7IHJldHVybiBtX3pP
cmRlcjsgfQorICAgIHZvaWQgc2V0Wk9yZGVyKGludCB6T3JkZXIpIHsgbV96T3JkZXIgPSB6T3Jk
ZXI7IH0KIAogICAgIHZvaWQgY2xlYXIoKTsKLSAgICB2b2lkIHVwZGF0ZSgpOworICAgIHZvaWQg
dXBkYXRlKFBhZ2VPdmVybGF5VXBkYXRlT3B0aW9uKTsKICAgICB2b2lkIHBhaW50V2ViRnJhbWUo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAgUGFnZU92ZXJsYXko
V2ViVmlld0ltcGwqLCBQYWdlT3ZlcmxheUNsaWVudCopOwotICAgIHZvaWQgaW52YWxpZGF0ZVdl
YkZyYW1lKCk7CisgICAgUGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqLCBXZWJQYWdlT3ZlcmxheSop
OworICAgIHZvaWQgaW52YWxpZGF0ZVdlYkZyYW1lKGNvbnN0IFdlYlJlY3QmKTsKIAogICAgIFdl
YlZpZXdJbXBsKiBtX3ZpZXdJbXBsOwotICAgIFBhZ2VPdmVybGF5Q2xpZW50KiBtX2NsaWVudDsK
KyAgICBXZWJQYWdlT3ZlcmxheSogbV9vdmVybGF5OwogICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX2xheWVyOwogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50PiBtX2xheWVyQ2xpZW50OworICAgIGludCBtX3pPcmRlcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3Zl
cmxheUxpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
UGFnZU92ZXJsYXlMaXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09P
R0xFIElOQy4KKyAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5TGlz
dC5oIgorCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3Zlcmxh
eS5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQ
YXNzT3duUHRyPFBhZ2VPdmVybGF5TGlzdD4gUGFnZU92ZXJsYXlMaXN0OjpjcmVhdGUoV2ViVmll
d0ltcGwqIHZpZXdJbXBsKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZU92ZXJsYXlM
aXN0KHZpZXdJbXBsKSk7Cit9CisKK1BhZ2VPdmVybGF5TGlzdDo6UGFnZU92ZXJsYXlMaXN0KFdl
YlZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwodmlld0ltcGwpCit7Cit9CisK
K1BhZ2VPdmVybGF5TGlzdDo6flBhZ2VPdmVybGF5TGlzdCgpCit7Cit9CisKK2Jvb2wgUGFnZU92
ZXJsYXlMaXN0OjphZGQoV2ViUGFnZU92ZXJsYXkqIG92ZXJsYXksIGludCB6T3JkZXIpCit7Cisg
ICAgYm9vbCBhZGRlZCA9IGZhbHNlOworICAgIHNpemVfdCBpbmRleCA9IGZpbmQob3ZlcmxheSk7
CisgICAgaWYgKGluZGV4ID09IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgT3duUHRyPFBhZ2VP
dmVybGF5PiBwYWdlT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUobV92aWV3SW1wbCwgb3Zl
cmxheSk7CisgICAgICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChwYWdlT3ZlcmxheS5yZWxlYXNl
KCkpOworICAgICAgICBpbmRleCA9IG1fcGFnZU92ZXJsYXlzLnNpemUoKSAtIDE7CisgICAgICAg
IGFkZGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkgPSBt
X3BhZ2VPdmVybGF5c1tpbmRleF0uZ2V0KCk7CisgICAgcGFnZU92ZXJsYXktPnNldFpPcmRlcih6
T3JkZXIpOworCisgICAgLy8gQWRqdXN0IHBhZ2Ugb3ZlcmxheSBsaXN0IG9yZGVyIGJhc2VkIG9u
IHRoZWlyIHotb3JkZXIgbnVtYmVycy4gV2UgZmlyc3QKKyAgICAvLyBjaGVjayBpZiB3ZSBuZWVk
IHRvIG1vdmUgdGhlIG92ZXJsYXkgdXAgYW5kIGRvIHNvIGlmIG5lZWRlZC4gT3RoZXJ3aXNlLAor
ICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gbW92ZSBpdCBkb3duLgorICAgIGJvb2wgek9yZGVy
Q2hhbmdlZCA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSArIDEgPCBtX3Bh
Z2VPdmVybGF5cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXNbaV0t
PnpPcmRlcigpID49IG1fcGFnZU92ZXJsYXlzW2kgKyAxXS0+ek9yZGVyKCkpIHsKKyAgICAgICAg
ICAgIG1fcGFnZU92ZXJsYXlzW2ldLnN3YXAobV9wYWdlT3ZlcmxheXNbaSArIDFdKTsKKyAgICAg
ICAgICAgIHpPcmRlckNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCF6T3JkZXJDaGFuZ2VkKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA+PSAx
OyAtLWkpIHsKKyAgICAgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5c1tpXS0+ek9yZGVyKCkgPCBt
X3BhZ2VPdmVybGF5c1tpIC0gMV0tPnpPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgbV9wYWdl
T3ZlcmxheXNbaV0uc3dhcChtX3BhZ2VPdmVybGF5c1tpIC0gMV0pOworICAgICAgICAgICAgICAg
IHpPcmRlckNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gSWYgd2UgZGlkIG1vdmUgdGhlIG92ZXJsYXksIHRoYXQgbWVhbnMgei1vcmRlciBp
cyBjaGFuZ2VkIGFuZCB3ZSBuZWVkIHRvCisgICAgLy8gdXBkYXRlIG92ZXJsYXkgbGF5ZXJzJyB6
LW9yZGVyLiBPdGhlcndpc2UsIGp1c3QgdXBkYXRlIGN1cnJlbnQgb3ZlcmxheS4KKyAgICBpZiAo
ek9yZGVyQ2hhbmdlZCkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92
ZXJsYXlzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPmNsZWFy
KCk7CisgICAgICAgIHVwZGF0ZShQYWdlT3ZlcmxheTo6Tm90Rm9yY2VVcGRhdGUpOworICAgIH0g
ZWxzZQorICAgICAgICBwYWdlT3ZlcmxheS0+dXBkYXRlKFBhZ2VPdmVybGF5OjpOb3RGb3JjZVVw
ZGF0ZSk7CisKKyAgICByZXR1cm4gYWRkZWQ7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlMaXN0Ojpy
ZW1vdmUoV2ViUGFnZU92ZXJsYXkqIG92ZXJsYXkpCit7CisgICAgc2l6ZV90IGluZGV4ID0gZmlu
ZChvdmVybGF5KTsKKyAgICBpZiAoaW5kZXggPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9wYWdlT3ZlcmxheXNbaW5kZXhdLT5jbGVhcigpOworICAgIG1f
cGFnZU92ZXJsYXlzLnJlbW92ZShpbmRleCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
UGFnZU92ZXJsYXlMaXN0Ojp1cGRhdGUoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5VXBkYXRlT3B0
aW9uIHVwZGF0ZU9wdGlvbikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92
ZXJsYXlzLnNpemUoKTsgKytpKQorICAgICAgICBtX3BhZ2VPdmVybGF5c1tpXS0+dXBkYXRlKHVw
ZGF0ZU9wdGlvbik7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlMaXN0OjpwYWludFdlYkZyYW1lKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ2MpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3BhZ2VPdmVybGF5cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0t
PnBhaW50V2ViRnJhbWUoZ2MpOworfQorCitzaXplX3QgUGFnZU92ZXJsYXlMaXN0OjpmaW5kKFdl
YlBhZ2VPdmVybGF5KiBvdmVybGF5KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
YWdlT3ZlcmxheXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzW2ld
LT5vdmVybGF5KCkgPT0gb3ZlcmxheSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAg
ICByZXR1cm4gV1RGOjpub3RGb3VuZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxp
c3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KKyAqIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3Zl
cmxheUxpc3RfaAorI2RlZmluZSBQYWdlT3ZlcmxheUxpc3RfaAorCisjaW5jbHVkZSAiUGFnZU92
ZXJsYXkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgV2ViUGFnZU92ZXJsYXk7CitjbGFzcyBXZWJWaWV3SW1wbDsKKworY2xhc3MgUGFnZU92ZXJs
YXlMaXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlT3ZlcmxheUxpc3Q+
IGNyZWF0ZShXZWJWaWV3SW1wbCopOworCisgICAgflBhZ2VPdmVybGF5TGlzdCgpOworCisgICAg
Ym9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3BhZ2VPdmVybGF5cy5zaXplKCk7IH0KKwor
ICAgIC8vIEFkZHMvcmVtb3ZlcyBhIFBhZ2VPdmVybGF5IGZvciBnaXZlbiBjbGllbnQuCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIGEgUGFnZU92ZXJsYXkgaXMgYWRkZWQvcmVtb3ZlZC4KKyAgICBi
b29sIGFkZChXZWJQYWdlT3ZlcmxheSosIGludCAvKiB6T3JkZXIgKi8pOworICAgIGJvb2wgcmVt
b3ZlKFdlYlBhZ2VPdmVybGF5Kik7CisKKyAgICB2b2lkIHVwZGF0ZShQYWdlT3ZlcmxheTo6UGFn
ZU92ZXJsYXlVcGRhdGVPcHRpb24pOworICAgIHZvaWQgcGFpbnRXZWJGcmFtZShXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8
UGFnZU92ZXJsYXk+LCAyPiBQYWdlT3ZlcmxheXM7CisKKyAgICBleHBsaWNpdCBQYWdlT3Zlcmxh
eUxpc3QoV2ViVmlld0ltcGwqKTsKKworICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBj
bGllbnQgZm91bmQuIE90aGVyd2lzZSwgcmV0dXJucyBXVEY6Om5vdEZvdW5kLgorICAgIHNpemVf
dCBmaW5kKFdlYlBhZ2VPdmVybGF5Kik7CisKKyAgICBXZWJWaWV3SW1wbCogbV92aWV3SW1wbDsK
KyAgICBQYWdlT3ZlcmxheXMgbV9wYWdlT3ZlcmxheXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFBhZ2VPdmVybGF5TGlzdF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCShyZXZpc2lvbiAxMDE3
MzgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAKICNpbmNsdWRlICJNZW1vcnlDYWNo
ZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRl
ICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlBhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oIgorI2lu
Y2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNv
dXJjZVJlcXVlc3QuaCIKQEAgLTI3MiwyMiArMjcyLDMzIEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmJyaW5nRnJvbnRlbmQKIHsKIH0KIAotLy8gUGFnZU92ZXJsYXlDbGllbnQKLXZvaWQg
V2ViRGV2VG9vbHNBZ2VudEltcGw6OnBhaW50UGFnZU92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBn
YykKKy8vIFdlYlBhZ2VPdmVybGF5Cit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWludFBh
Z2VPdmVybGF5KFdlYkNhbnZhcyogY2FudmFzKQogewogICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIGlmIChpYykKLSAgICAgICAgaWMtPmRy
YXdIaWdobGlnaHQoZ2MpOworICAgICAgICBpYy0+ZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRl
eHRCdWlsZGVyKGNhbnZhcykuY29udGV4dCgpKTsKK30KKworV2ViUmVjdCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6ZGlydHlSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogYWJsZSB0byBpbnZh
bGlkYXRlIGEgc21hbGxlciByZWN0LgorICAgIC8vIEZJWE1FOiBJcyBpdCBpbXBvcnRhbnQgdG8g
anVzdCBpbnZhbGlkYXRlIGEgc21hbGxlciByZWN0IGdpdmVuIHRoYXQKKyAgICAvLyB0aGlzIGlz
IG5vdCBvbiBhIGNyaXRpY2FsIGNvZGVwYXRoPyBJbiBvcmRlciB0byBkbyBzbywgd2UnZAorICAg
IC8vIGhhdmUgdG8gdGFrZSBzY3JvbGxpbmcgaW50byBhY2NvdW50LgorICAgIGNvbnN0IFdlYlNp
emUmIHNpemUgPSBtX3dlYlZpZXdJbXBsLT5zaXplKCk7CisgICAgcmV0dXJuIFdlYlJlY3QoMCwg
MCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJ
bXBsOjpoaWdobGlnaHQoKQogewotICAgIG1fd2ViVmlld0ltcGwtPnNldFBhZ2VPdmVybGF5Q2xp
ZW50KHRoaXMpOworICAgIC8vIFVzZSA5OSBhcyBhIGJpZyB6LW9yZGVyIG51bWJlciBzbyB0aGF0
IGhpZ2hsaWdodCBpcyBhYm92ZSBvdGhlciBvdmVybGF5cy4KKyAgICBtX3dlYlZpZXdJbXBsLT5h
ZGRQYWdlT3ZlcmxheSh0aGlzLCA5OSk7CiB9CiAKIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6
OmhpZGVIaWdobGlnaHQoKQogewotICAgIG1fd2ViVmlld0ltcGwtPnNldFBhZ2VPdmVybGF5Q2xp
ZW50KDApOworICAgIG1fd2ViVmlld0ltcGwtPnJlbW92ZVBhZ2VPdmVybGF5KHRoaXMpOwogfQog
CiBib29sIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCShyZXZpc2lvbiAxMDE3MzgpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw4ICszMyw4IEBACiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKIAotI2luY2x1
ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJQYWdlT3ZlcmxheS5oIgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC02Miw3ICs2Miw3IEBAIHN0cnVjdCBXZWJEZXZU
b29sc01lc3NhZ2VEYXRhOwogCiBjbGFzcyBXZWJEZXZUb29sc0FnZW50SW1wbCA6IHB1YmxpYyBX
ZWJEZXZUb29sc0FnZW50UHJpdmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUNsaWVudCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJQYWdlT3ZlcmxheSB7CiBwdWJsaWM6CiAgICAgV2Vi
RGV2VG9vbHNBZ2VudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJEZXZUb29sc0Fn
ZW50Q2xpZW50KiBjbGllbnQpOwogICAgIHZpcnR1YWwgfldlYkRldlRvb2xzQWdlbnRJbXBsKCk7
CkBAIC05Nyw4ICs5Nyw5IEBAIHB1YmxpYzoKIAogICAgIGludCBob3N0SWQoKSB7IHJldHVybiBt
X2hvc3RJZDsgfQogCi0gICAgLy8gUGFnZU92ZXJsYXlDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRQYWdlT3ZlcmxheShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBXZWJQ
YWdlT3ZlcmxheQorICAgIHZpcnR1YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNhbnZhcyop
OworICAgIHZpcnR1YWwgV2ViUmVjdCBkaXJ0eVJlY3QoKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlz
aW9uIDEwMTczOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNjMsOCArMjA2Myw4IEBAIHZvaWQgV2ViRnJhbWVJbXBs
OjpwYWludFdpdGhDb250ZXh0KEdyYXAKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBm
cmFtZVZpZXcoKSkgewogICAgICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7CiAgICAgICAgIGZyYW1l
VmlldygpLT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7Ci0gICAgICAgIGlmICh2aWV3SW1wbCgpLT5w
YWdlT3ZlcmxheSgpKQotICAgICAgICAgICAgdmlld0ltcGwoKS0+cGFnZU92ZXJsYXkoKS0+cGFp
bnRXZWJGcmFtZShnYyk7CisgICAgICAgIGlmICh2aWV3SW1wbCgpLT5wYWdlT3ZlcmxheXMoKSkK
KyAgICAgICAgICAgIHZpZXdJbXBsKCktPnBhZ2VPdmVybGF5cygpLT5wYWludFdlYkZyYW1lKGdj
KTsKICAgICB9IGVsc2UKICAgICAgICAgZ2MuZmlsbFJlY3QoZGlydHlSZWN0LCBDb2xvcjo6d2hp
dGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIGdjLnJlc3RvcmUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDEwMTczOCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI1Niw4ICsxMjU2LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJv
b2wpCiAgICAgICAgIGlmICghcGFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7
CisgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5cykKKyAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlz
LT51cGRhdGUoUGFnZU92ZXJsYXk6Ok5vdEZvcmNlVXBkYXRlKTsKIAogICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmNvbXBvc2l0ZSgpOwogICAgIH0KQEAgLTI2MTAsMjEgKzI2MTAsMjIgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6c2V0SWdub3JlSW5wdXRFdmVudHMoYgogICAgIG1faWdub3JlSW5wdXRF
dmVudHMgPSBuZXdWYWx1ZTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6c2V0UGFnZU92ZXJsYXlD
bGllbnQoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50KiBwYWdlT3ZlcmxheUNsaWVudCkK
K3ZvaWQgV2ViVmlld0ltcGw6OmFkZFBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5
LCBpbnQgek9yZGVyKQogewotICAgIGlmIChwYWdlT3ZlcmxheUNsaWVudCkgewotICAgICAgICBp
ZiAoIW1fcGFnZU92ZXJsYXkpCi0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5ID0gUGFnZU92ZXJs
YXk6OmNyZWF0ZSh0aGlzLCBwYWdlT3ZlcmxheUNsaWVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fcGFnZU92ZXJsYXktPnNldENsaWVudChwYWdlT3ZlcmxheUNsaWVudCk7Ci0gICAg
ICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOworICAgIGlmICghbV9wYWdlT3ZlcmxheXMpCisg
ICAgICAgIG1fcGFnZU92ZXJsYXlzID0gUGFnZU92ZXJsYXlMaXN0OjpjcmVhdGUodGhpcyk7CisK
KyAgICBtX3BhZ2VPdmVybGF5cy0+YWRkKG92ZXJsYXksIHpPcmRlcik7CisgICAgc2V0Um9vdExh
eWVyTmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnJlbW92ZVBhZ2VPdmVy
bGF5KFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KQoreworICAgIGlmIChtX3BhZ2VPdmVybGF5cyAm
JiBtX3BhZ2VPdmVybGF5cy0+cmVtb3ZlKG92ZXJsYXkpKSB7CiAgICAgICAgIHNldFJvb3RMYXll
ck5lZWRzRGlzcGxheSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3BhZ2VPdmVybGF5
KSB7Ci0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5LT5jbGVhcigpOwotICAgICAgICAgICAgbV9w
YWdlT3ZlcmxheSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3Bs
YXkoKTsKLSAgICAgICAgfQorCisgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5cy0+ZW1wdHkoKSkK
KyAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlzID0gbnVsbHB0cjsKICAgICB9CiB9CiAKQEAgLTI4
NzAsOCArMjg3MSw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3MK
ICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUNvbXBvc2l0b3IobV9sYXllclRyZWVI
b3N0LT5jb21wb3NpdG9ySWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29tcG9zaXRvckNyZWF0
aW9uRmFpbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobV9wYWdlT3ZlcmxheSkKLSAgICAg
ICAgICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKKyAgICAgICAgICAgIGlmIChtX3Bh
Z2VPdmVybGF5cykKKyAgICAgICAgICAgICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKFBhZ2VP
dmVybGF5OjpGb3JjZVVwZGF0ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QuY2xlYXIoKTsKICAgICAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0LmNsZWFyKCk7CkBAIC0yOTUyLDggKzI5NTMsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkaWRS
ZWNyZWF0ZUdyYXBoaWNzQ29uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9w
YWdlT3ZlcmxheSkKLSAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CisgICAgaWYgKG1f
cGFnZU92ZXJsYXlzKQorICAgICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKFBhZ2VPdmVybGF5
OjpGb3JjZVVwZGF0ZSk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRl
KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkocmV2aXNp
b24gMTAxNzM4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVu
dEltcGwuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbC5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAiUGFnZU92
ZXJsYXlMaXN0LmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTIyNyw2
ICsyMjcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbmFjdGl2ZUJhY2tncm91bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlRm9yZWdyb3VuZENvbG9yKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9uKHVuc2lnbmVkIGFjdGlvbik7
CisgICAgdmlydHVhbCB2b2lkIGFkZFBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5KiwgaW50IC8q
IHpPcmRlciAqLyk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVBhZ2VPdmVybGF5KFdlYlBhZ2VP
dmVybGF5Kik7CiAKICAgICAvLyBDQ0xheWVyVHJlZUhvc3RDbGllbnQKICAgICB2aXJ0dWFsIHZv
aWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwpAQCAtMjQyLDggKzI0
NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElnbm9yZUlucHV0RXZlbnRzKGJvb2wgbmV3VmFs
dWUpOwogICAgIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlKiBkZXZUb29sc0FnZW50UHJpdmF0ZSgp
IHsgcmV0dXJuIG1fZGV2VG9vbHNBZ2VudC5nZXQoKTsgfQogCi0gICAgUGFnZU92ZXJsYXkqIHBh
Z2VPdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheS5nZXQoKTsgfQotICAgIHZv
aWQgc2V0UGFnZU92ZXJsYXlDbGllbnQoUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5Q2xpZW50Kik7
CisgICAgUGFnZU92ZXJsYXlMaXN0KiBwYWdlT3ZlcmxheXMoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2VPdmVybGF5cy5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRPdmVybGF5TGF5ZXIoV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopOwogCkBAIC01NzksNyArNTgwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQ
dHI8V2ViQ29yZTo6UG9wdXBDb250YWluZXI+IG1fc2VsZWN0UG9wdXA7CiAKICAgICBPd25QdHI8
V2ViRGV2VG9vbHNBZ2VudFByaXZhdGU+IG1fZGV2VG9vbHNBZ2VudDsKLSAgICBPd25QdHI8UGFn
ZU92ZXJsYXk+IG1fcGFnZU92ZXJsYXk7CisgICAgT3duUHRyPFBhZ2VPdmVybGF5TGlzdD4gbV9w
YWdlT3ZlcmxheXM7CiAKICAgICAvLyBXaGV0aGVyIHRoZSB3ZWJ2aWV3IGlzIHJlbmRlcmluZyB0
cmFuc3BhcmVudGx5LgogICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117564</attachid>
            <date>2011-12-01 22:10:24 -0800</date>
            <delta_ts>2011-12-02 00:56:04 -0800</delta_ts>
            <desc>Remove dirtyRect.</desc>
            <filename>webkit_73235.8.patch</filename>
            <type>text/plain</type>
            <size>28462</size>
            <attacher name="xiyuan">xiyuan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDE3NDEpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1
IEBACisyMDExLTEyLTAxICBYaXl1YW4gWGlhICA8eGl5dWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFN1cHBvcnQgYWRkaW5nL3JlbW92aW5nIHBhZ2Ugb3ZlcmxheSB0byBX
ZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZU92ZXJsYXkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojp+V2ViUGFnZU92ZXJsYXkpOgorICAgICAg
ICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL1BhZ2VPdmVybGF5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VPdmVybGF5OjpQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6Ok92ZXJsYXlHcmFwaGlj
c0xheWVyQ2xpZW50SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6T3ZlcmxheUdyYXBo
aWNzTGF5ZXJDbGllbnRJbXBsOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6T3Zl
cmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsOjpPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudElt
cGwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZU92ZXJsYXk6OnBhaW50V2ViRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
T3ZlcmxheTo6aW52YWxpZGF0ZVdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXku
aDoKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6Om92ZXJsYXkpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlT3ZlcmxheTo6c2V0T3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVy
bGF5Ojp6T3JkZXIpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6c2V0Wk9yZGVyKToK
KyAgICAgICAgKiBzcmMvUGFnZU92ZXJsYXlMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OlBhZ2VPdmVybGF5TGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJs
YXlMaXN0OjpQYWdlT3ZlcmxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxp
c3Q6On5QYWdlT3ZlcmxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheUxpc3Q6
OmFkZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6cmVtb3ZlKToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZU92ZXJsYXlMaXN0Ojp1cGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlT3ZlcmxheUxpc3Q6OnBhaW50V2ViRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3Zl
cmxheUxpc3Q6OmZpbmQpOgorICAgICAgICAqIHNyYy9QYWdlT3ZlcmxheUxpc3QuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VPdmVybGF5TGlzdDo6ZW1wdHkpOgorICAgICAgICAqIHNy
Yy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xz
QWdlbnRJbXBsOjpwYWludFBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9v
bHNBZ2VudEltcGw6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdl
bnRJbXBsOjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpwYWludFdpdGhDb250ZXh0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0lt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFkZFBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnJlbW92ZVBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWdl
T3ZlcmxheXMpOgorCiAyMDExLTEyLTAxICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gYWRkIHJlZmVycmVyIHBvbGljeSB0byBXZWJD
b250ZXh0TWVudURhdGEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9u
IDEwMTc0MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBj
b3B5KQpAQCAtMjYwLDYgKzI2MCw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJOb3RpZmlj
YXRpb25QZXJtaXNzaW9uQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJP
cHRpb25FbGVtZW50LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGFnZU92ZXJsYXku
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViUGFnZVZpc2liaWxpdHlTdGF0ZS5oJywKQEAgLTQzNyw2ICs0Mzgs
OCBAQAogICAgICAgICAgICAgICAgICdzcmMvcGFpbnRpbmcvR3JhcGhpY3NDb250ZXh0QnVpbGRl
ci5oJywKICAgICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVybGF5LmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9QYWdlT3ZlcmxheS5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1BhZ2VPdmVy
bGF5TGlzdC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXlMaXN0LmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlT3ZlcmxheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VPdmVybGF5LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlT3ZlcmxheS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCisgKiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFnZU92ZXJs
YXlfaAorI2RlZmluZSBXZWJQYWdlT3ZlcmxheV9oCisKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIK
KyNpbmNsdWRlICJXZWJSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQ
YWdlT3ZlcmxheSB7CitwdWJsaWM6CisgICAgLy8gUGFpbnRzIHBhZ2Ugb3ZlcmxheSBjb250ZW50
cy4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdlT3ZlcmxheShXZWJDYW52YXMqKSA9IDA7CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJQYWdlT3ZlcmxheSgpIHsgfQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQYWdlT3ZlcmxheV9oCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlT3Zlcmxh
eS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgJKHJldmlzaW9uIDEwMTc0MSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsNyBAQCBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYkZyYW1lQ2xpZW50OwogY2xh
c3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJOb2RlOworY2xhc3MgV2ViUGFnZU92
ZXJsYXk7CiBjbGFzcyBXZWJQZXJtaXNzaW9uQ2xpZW50OwogY2xhc3MgV2ViU2V0dGluZ3M7CiBj
bGFzcyBXZWJTcGVsbENoZWNrQ2xpZW50OwpAQCAtNDA5LDYgKzQxMCwxOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRl
IHZpc2liaWxpdHlTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaXNJbml0aWFsU3RhdGUpIHsgfQogCisgICAgLy8gUGFnZU92ZXJsYXkgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8g
QWRkcy9yZW1vdmVzIHBhZ2Ugb3ZlcmxheSB0byB0aGlzIFdlYlZpZXcuIFRoZXNlIGZ1bmN0aW9u
cyBjaGFuZ2UgdGhlCisgICAgLy8gZ3JhcGhpY2FsIGFwcGVhcmFuY2Ugb2YgdGhlIFdlYlZpZXcu
IFdlYlBhZ2VPdmVybGF5IHBhaW50cyB0aGUKKyAgICAvLyBjb250ZW50cyBvZiB0aGUgcGFnZSBv
dmVybGF5LiBJdCBhbHNvIHByb3ZpZGVzIGFuIHotb3JkZXIgbnVtYmVyIGZvcgorICAgIC8vIHRo
ZSBwYWdlIG92ZXJsYXkuIFRoZSB6LW9yZGVyIG51bWJlciBkZWZpbmVzIHRoZSBwYWludCBvcmRl
ciB0aGUgcGFnZQorICAgIC8vIG92ZXJsYXlzLiBQYWdlIG92ZXJsYXlzIHdpdGggbGFyZ2VyIHot
b3JkZXIgbnVtYmVyIHdpbGwgYmUgcGFpbnRlZCBhZnRlcgorICAgIC8vIHBhZ2Ugb3ZlcmxheXMg
d2l0aCBzbWFsbGVyIHotb3JkZXIgbnVtYmVyLiBUaGF0IGlzLCB0aGV5IGFwcGVhciBhYm92ZQor
ICAgIC8vIHRoZSBwYWdlIG92ZXJsYXlzIHdpdGggc21hbGxlciB6LW9yZGVyIG51bWJlci4gSWYg
dHdvIHBhZ2Ugb3ZlcmxheXMgaGF2ZQorICAgIC8vIHRoZSBzYW1lIHotb3JkZXIgbnVtYmVyLCB0
aGUgbGF0ZXIgYWRkZWQgb25lIHdpbGwgYmUgb24gdG9wLgorICAgIHZpcnR1YWwgdm9pZCBhZGRQ
YWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSosIGludCAvKnotb3JkZXIqLykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSopID0gMDsKIAogICAg
IC8vIFRlc3RpbmcgZnVuY3Rpb25hbGl0eSBmb3IgTGF5b3V0VGVzdENvbnRyb2xsZXIgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFn
ZU92ZXJsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Bh
Z2VPdmVybGF5LmNwcAkocmV2aXNpb24gMTAxNzQxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGFnZU92ZXJsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKICNpbmNs
dWRlICJXZWJWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKIApAQCAtNDAs
MjMgKzQyLDM3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotUGFzc093blB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShXZWJWaWV3
SW1wbCogdmlld0ltcGwsIFBhZ2VPdmVybGF5Q2xpZW50KiBjbGllbnQpCituYW1lc3BhY2Ugewor
CitXZWJDYW52YXMqIFRvV2ViQ2FudmFzKEdyYXBoaWNzQ29udGV4dCogZ2MpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBQYWdlT3ZlcmxheSh2aWV3SW1wbCwgY2xpZW50KSk7CisjaWYgV0VC
S0lUX1VTSU5HX1NLSUEKKyAgICByZXR1cm4gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KTsKKyNlbGlmIFdFQktJVF9VU0lOR19DRworICAgIHJldHVybiBnYy0+cGxhdGZvcm1Db250ZXh0
KCk7CisjZW5kaWYKIH0KIAotUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KFdlYlZpZXdJbXBsKiB2
aWV3SW1wbCwgUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkKK30gLy8gbmFtZXNwYWNlCisKK1Bh
c3NPd25QdHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5OjpjcmVhdGUoV2ViVmlld0ltcGwqIHZp
ZXdJbXBsLCBXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFBhZ2VPdmVybGF5KHZpZXdJbXBsLCBvdmVybGF5KSk7Cit9CisKK1BhZ2VPdmVybGF5OjpQ
YWdlT3ZlcmxheShXZWJWaWV3SW1wbCogdmlld0ltcGwsIFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5
KQogICAgIDogbV92aWV3SW1wbCh2aWV3SW1wbCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAg
ICAsIG1fb3ZlcmxheShvdmVybGF5KQorICAgICwgbV96T3JkZXIoMCkKIHsKIH0KIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIGNsYXNzIE92ZXJsYXlHcmFwaGljc0xheWVyQ2xp
ZW50SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwqPiBj
cmVhdGUoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlD
bGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPE92ZXJsYXlH
cmFwaGljc0xheWVyQ2xpZW50SW1wbCo+IGNyZWF0ZShXZWJWaWV3SW1wbCogd2ViVmlld0ltcGws
IFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGwod2ViVmlld0ltcGwsIHBhZ2VPdmVy
bGF5Q2xpZW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3ZlcmxheUdyYXBoaWNz
TGF5ZXJDbGllbnRJbXBsKHdlYlZpZXdJbXBsLCBvdmVybGF5KSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+T3ZlcmxheUdyYXBoaWNzTGF5ZXJDbGllbnRJbXBsKCkgeyB9CkBAIC02NSw5ICs4MSwx
MSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5
ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApCisgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgZ2Ms
IEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApCiAgICAg
ewotICAgICAgICBtX3BhZ2VPdmVybGF5Q2xpZW50LT5wYWludFBhZ2VPdmVybGF5KGNvbnRleHQp
OworICAgICAgICBnYy5zYXZlKCk7CisgICAgICAgIG1fb3ZlcmxheS0+cGFpbnRQYWdlT3Zlcmxh
eShUb1dlYkNhbnZhcygmZ2MpKTsKKyAgICAgICAgZ2MucmVzdG9yZSgpOwogICAgIH0KIAogICAg
IHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdApAQCAtOTEsMTMgKzEwOSwx
MyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IE92ZXJsYXlHcmFw
aGljc0xheWVyQ2xpZW50SW1wbChXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsIFBhZ2VPdmVybGF5
OjpQYWdlT3ZlcmxheUNsaWVudCogcGFnZU92ZXJsYXlDbGllbnQpCi0gICAgICAgIDogbV9wYWdl
T3ZlcmxheUNsaWVudChwYWdlT3ZlcmxheUNsaWVudCkKKyAgICBPdmVybGF5R3JhcGhpY3NMYXll
ckNsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJQYWdlT3ZlcmxheSogb3Zl
cmxheSkKKyAgICAgICAgOiBtX292ZXJsYXkob3ZlcmxheSkKICAgICAgICAgLCBtX3dlYlZpZXdJ
bXBsKHdlYlZpZXdJbXBsKQogICAgIHsKICAgICB9CiAKLSAgICBQYWdlT3ZlcmxheTo6UGFnZU92
ZXJsYXlDbGllbnQqIG1fcGFnZU92ZXJsYXlDbGllbnQ7CisgICAgV2ViUGFnZU92ZXJsYXkqIG1f
b3ZlcmxheTsKICAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKIH07CiAjZW5kaWYKQEAg
LTEyMSwxMyArMTM5LDIwIEBAIHZvaWQgUGFnZU92ZXJsYXk6OnVwZGF0ZSgpCiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKCFtX2xheWVyKSB7Ci0gICAgICAgIG1f
bGF5ZXJDbGllbnQgPSBPdmVybGF5R3JhcGhpY3NMYXllckNsaWVudEltcGw6OmNyZWF0ZShtX3Zp
ZXdJbXBsLCBtX2NsaWVudCk7CisgICAgICAgIG1fbGF5ZXJDbGllbnQgPSBPdmVybGF5R3JhcGhp
Y3NMYXllckNsaWVudEltcGw6OmNyZWF0ZShtX3ZpZXdJbXBsLCBtX292ZXJsYXkpOwogICAgICAg
ICBtX2xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fbGF5ZXJDbGllbnQuZ2V0KCkpOwog
ICAgICAgICBtX2xheWVyLT5zZXROYW1lKCJXZWJWaWV3SW1wbCBwYWdlIG92ZXJsYXkgY29udGVu
dCIpOwogICAgICAgICBtX2xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgICAgIGNv
bnN0IFdlYlNpemUmIHNpemUgPSBtX3ZpZXdJbXBsLT5zaXplKCk7Ci0gICAgICAgIG1fbGF5ZXIt
PnNldFNpemUoSW50U2l6ZShzaXplLndpZHRoLCBzaXplLmhlaWdodCkpOwogICAgIH0KKworICAg
IEZsb2F0U2l6ZSBzaXplKG1fdmlld0ltcGwtPnNpemUoKSk7CisgICAgaWYgKHNpemUgIT0gbV9s
YXllci0+c2l6ZSgpKSB7CisgICAgICAgIC8vIFRyaWdnZXJzIHJlLWFkZGluZyB0byByb290IGxh
eWVyIHRvIGVuc3VyZSB0aGF0IHdlIGFyZSBvbiB0b3Agb2YKKyAgICAgICAgLy8gc2Nyb2xsYmFy
cy4KKyAgICAgICAgbV9sYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgICAgICBtX2xheWVy
LT5zZXRTaXplKHNpemUpOworICAgIH0KKwogICAgIG1fdmlld0ltcGwtPnNldE92ZXJsYXlMYXll
cihtX2xheWVyLmdldCgpKTsKICAgICBtX2xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICNlbmRp
ZgpAQCAtMTM1LDEzICsxNjAsMTYgQEAgdm9pZCBQYWdlT3ZlcmxheTo6dXBkYXRlKCkKIAogdm9p
ZCBQYWdlT3ZlcmxheTo6cGFpbnRXZWJGcmFtZShHcmFwaGljc0NvbnRleHQmIGdjKQogewotICAg
IGlmICghbV92aWV3SW1wbC0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCi0gICAg
ICAgIG1fY2xpZW50LT5wYWludFBhZ2VPdmVybGF5KGdjKTsKKyAgICBpZiAoIW1fdmlld0ltcGwt
PmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisgICAgICAgIGdjLnNhdmUoKTsK
KyAgICAgICAgbV9vdmVybGF5LT5wYWludFBhZ2VPdmVybGF5KFRvV2ViQ2FudmFzKCZnYykpOwor
ICAgICAgICBnYy5yZXN0b3JlKCk7CisgICAgfQogfQogCiB2b2lkIFBhZ2VPdmVybGF5OjppbnZh
bGlkYXRlV2ViRnJhbWUoKQogewotICAgIC8vIFBhZ2VPdmVybGF5Q2xpZW50IGRvZXMgdGhlIGFj
dHVhbCBwYWludGluZyBvZiB0aGUgb3ZlcmxheS4KKyAgICAvLyBXZWJQYWdlT3ZlcmxheSBkb2Vz
IHRoZSBhY3R1YWwgcGFpbnRpbmcgb2YgdGhlIG92ZXJsYXkuCiAgICAgLy8gSGVyZSB3ZSBqdXN0
IG1ha2Ugc3VyZSB0byBpbnZhbGlkYXRlLgogICAgIGlmICghbV92aWV3SW1wbC0+aXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKICAgICAgICAgLy8gRklYTUU6IGFibGUgdG8gaW52
YWxpZGF0ZSBhIHNtYWxsZXIgcmVjdC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1BhZ2VPdmVybGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
UGFnZU92ZXJsYXkuaAkocmV2aXNpb24gMTAxNzQxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGFnZU92ZXJsYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMzMgKzM5LDM1IEBAIGNs
YXNzIEdyYXBoaWNzTGF5ZXJDbGllbnQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
V2ViUGFnZU92ZXJsYXk7CiBjbGFzcyBXZWJWaWV3SW1wbDsKK3N0cnVjdCBXZWJSZWN0OwogCiBj
bGFzcyBQYWdlT3ZlcmxheSB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgUGFnZU92ZXJsYXlDbGllbnQg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JikgPSAwOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc093
blB0cjxQYWdlT3ZlcmxheT4gY3JlYXRlKFdlYlZpZXdJbXBsKiwgUGFnZU92ZXJsYXlDbGllbnQq
KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlT3ZlcmxheT4gY3JlYXRlKFdlYlZpZXdJbXBs
KiwgV2ViUGFnZU92ZXJsYXkqKTsKIAogICAgIH5QYWdlT3ZlcmxheSgpIHsgfQogCi0gICAgdm9p
ZCBzZXRDbGllbnQoUGFnZU92ZXJsYXlDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVu
dDsgfQorICAgIFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVy
bGF5OyB9CisgICAgdm9pZCBzZXRPdmVybGF5KFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KSB7IG1f
b3ZlcmxheSA9IG92ZXJsYXk7IH0KKworICAgIGludCB6T3JkZXIoKSBjb25zdCB7IHJldHVybiBt
X3pPcmRlcjsgfQorICAgIHZvaWQgc2V0Wk9yZGVyKGludCB6T3JkZXIpIHsgbV96T3JkZXIgPSB6
T3JkZXI7IH0KIAogICAgIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHVwZGF0ZSgpOwogICAgIHZv
aWQgcGFpbnRXZWJGcmFtZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKIAogcHJpdmF0ZToK
LSAgICBQYWdlT3ZlcmxheShXZWJWaWV3SW1wbCosIFBhZ2VPdmVybGF5Q2xpZW50Kik7CisgICAg
UGFnZU92ZXJsYXkoV2ViVmlld0ltcGwqLCBXZWJQYWdlT3ZlcmxheSopOwogICAgIHZvaWQgaW52
YWxpZGF0ZVdlYkZyYW1lKCk7CiAKICAgICBXZWJWaWV3SW1wbCogbV92aWV3SW1wbDsKLSAgICBQ
YWdlT3ZlcmxheUNsaWVudCogbV9jbGllbnQ7CisgICAgV2ViUGFnZU92ZXJsYXkqIG1fb3Zlcmxh
eTsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9sYXllcjsKICAgICBPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudD4gbV9sYXllckNsaWVudDsKKyAgICBpbnQg
bV96T3JkZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXlMaXN0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuCisgKiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUxpc3QuaCIKKworI2luY2x1ZGUgIlBhZ2VPdmVybGF5
LmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc093blB0cjxQYWdlT3ZlcmxheUxpc3Q+IFBh
Z2VPdmVybGF5TGlzdDo6Y3JlYXRlKFdlYlZpZXdJbXBsKiB2aWV3SW1wbCkKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFBhZ2VPdmVybGF5TGlzdCh2aWV3SW1wbCkpOworfQorCitQYWdlT3Zl
cmxheUxpc3Q6OlBhZ2VPdmVybGF5TGlzdChXZWJWaWV3SW1wbCogdmlld0ltcGwpCisgICAgOiBt
X3ZpZXdJbXBsKHZpZXdJbXBsKQoreworfQorCitQYWdlT3ZlcmxheUxpc3Q6On5QYWdlT3Zlcmxh
eUxpc3QoKQoreworfQorCitib29sIFBhZ2VPdmVybGF5TGlzdDo6YWRkKFdlYlBhZ2VPdmVybGF5
KiBvdmVybGF5LCBpbnQgek9yZGVyKQoreworICAgIGJvb2wgYWRkZWQgPSBmYWxzZTsKKyAgICBz
aXplX3QgaW5kZXggPSBmaW5kKG92ZXJsYXkpOworICAgIGlmIChpbmRleCA9PSBXVEY6Om5vdEZv
dW5kKSB7CisgICAgICAgIE93blB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXkgPSBQYWdlT3Zl
cmxheTo6Y3JlYXRlKG1fdmlld0ltcGwsIG92ZXJsYXkpOworICAgICAgICBtX3BhZ2VPdmVybGF5
cy5hcHBlbmQocGFnZU92ZXJsYXkucmVsZWFzZSgpKTsKKyAgICAgICAgaW5kZXggPSBtX3BhZ2VP
dmVybGF5cy5zaXplKCkgLSAxOworICAgICAgICBhZGRlZCA9IHRydWU7CisgICAgfQorCisgICAg
UGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5ID0gbV9wYWdlT3ZlcmxheXNbaW5kZXhdLmdldCgpOwor
ICAgIHBhZ2VPdmVybGF5LT5zZXRaT3JkZXIoek9yZGVyKTsKKworICAgIC8vIEFkanVzdCBwYWdl
IG92ZXJsYXkgbGlzdCBvcmRlciBiYXNlZCBvbiB0aGVpciB6LW9yZGVyIG51bWJlcnMuIFdlIGZp
cnN0CisgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBtb3ZlIHRoZSBvdmVybGF5IHVwIGFuZCBk
byBzbyBpZiBuZWVkZWQuIE90aGVyd2lzZSwKKyAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIG1v
dmUgaXQgZG93bi4KKyAgICBib29sIHpPcmRlckNoYW5nZWQgPSBmYWxzZTsKKyAgICBmb3IgKHNp
emVfdCBpID0gaW5kZXg7IGkgKyAxIDwgbV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzW2ldLT56T3JkZXIoKSA+PSBtX3BhZ2VPdmVybGF5c1tp
ICsgMV0tPnpPcmRlcigpKSB7CisgICAgICAgICAgICBtX3BhZ2VPdmVybGF5c1tpXS5zd2FwKG1f
cGFnZU92ZXJsYXlzW2kgKyAxXSk7CisgICAgICAgICAgICB6T3JkZXJDaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghek9yZGVyQ2hhbmdlZCkgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gaW5kZXg7IGkgPj0gMTsgLS1pKSB7CisgICAgICAgICAgICBpZiAobV9w
YWdlT3ZlcmxheXNbaV0tPnpPcmRlcigpIDwgbV9wYWdlT3ZlcmxheXNbaSAtIDFdLT56T3JkZXIo
KSkgeworICAgICAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlzW2ldLnN3YXAobV9wYWdlT3Zlcmxh
eXNbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICB6T3JkZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIGRpZCBtb3ZlIHRoZSBv
dmVybGF5LCB0aGF0IG1lYW5zIHotb3JkZXIgaXMgY2hhbmdlZCBhbmQgd2UgbmVlZCB0bworICAg
IC8vIHVwZGF0ZSBvdmVybGF5IGxheWVycycgei1vcmRlci4gT3RoZXJ3aXNlLCBqdXN0IHVwZGF0
ZSBjdXJyZW50IG92ZXJsYXkuCisgICAgaWYgKHpPcmRlckNoYW5nZWQpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VPdmVybGF5cy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1fcGFnZU92ZXJsYXlzW2ldLT5jbGVhcigpOworICAgICAgICB1cGRhdGUoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgcGFnZU92ZXJsYXktPnVwZGF0ZSgpOworCisgICAgcmV0dXJuIGFkZGVk
OworfQorCitib29sIFBhZ2VPdmVybGF5TGlzdDo6cmVtb3ZlKFdlYlBhZ2VPdmVybGF5KiBvdmVy
bGF5KQoreworICAgIHNpemVfdCBpbmRleCA9IGZpbmQob3ZlcmxheSk7CisgICAgaWYgKGluZGV4
ID09IFdURjo6bm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcGFnZU92
ZXJsYXlzW2luZGV4XS0+Y2xlYXIoKTsKKyAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUoaW5kZXgp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBhZ2VPdmVybGF5TGlzdDo6dXBkYXRlKCkK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZU92ZXJsYXlzLnNpemUoKTsgKytp
KQorICAgICAgICBtX3BhZ2VPdmVybGF5c1tpXS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgUGFnZU92
ZXJsYXlMaXN0OjpwYWludFdlYkZyYW1lKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ2MpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VPdmVybGF5cy5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9wYWdlT3ZlcmxheXNbaV0tPnBhaW50V2ViRnJhbWUoZ2MpOworfQorCitzaXpl
X3QgUGFnZU92ZXJsYXlMaXN0OjpmaW5kKFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5KQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdlT3ZlcmxheXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzW2ldLT5vdmVybGF5KCkgPT0gb3ZlcmxheSkKKyAgICAg
ICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gV1RGOjpub3RGb3VuZDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9QYWdlT3ZlcmxheUxpc3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VP
dmVybGF5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Bh
Z2VPdmVybGF5TGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGFnZU92ZXJsYXlMaXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09P
R0xFIElOQy4KKyAqIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheUxpc3RfaAorI2RlZmluZSBQYWdlT3Zlcmxh
eUxpc3RfaAorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBHcmFwaGljc0NvbnRleHQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgUGFn
ZU92ZXJsYXk7CitjbGFzcyBXZWJQYWdlT3ZlcmxheTsKK2NsYXNzIFdlYlZpZXdJbXBsOworCitj
bGFzcyBQYWdlT3ZlcmxheUxpc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBh
Z2VPdmVybGF5TGlzdD4gY3JlYXRlKFdlYlZpZXdJbXBsKik7CisKKyAgICB+UGFnZU92ZXJsYXlM
aXN0KCk7CisKKyAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fcGFnZU92ZXJsYXlz
LnNpemUoKTsgfQorCisgICAgLy8gQWRkcy9yZW1vdmVzIGEgUGFnZU92ZXJsYXkgZm9yIGdpdmVu
IGNsaWVudC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBQYWdlT3ZlcmxheSBpcyBhZGRlZC9y
ZW1vdmVkLgorICAgIGJvb2wgYWRkKFdlYlBhZ2VPdmVybGF5KiwgaW50IC8qIHpPcmRlciAqLyk7
CisgICAgYm9vbCByZW1vdmUoV2ViUGFnZU92ZXJsYXkqKTsKKworICAgIHZvaWQgdXBkYXRlKCk7
CisgICAgdm9pZCBwYWludFdlYkZyYW1lKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworCitw
cml2YXRlOgorICAgIHR5cGVkZWYgVmVjdG9yPE93blB0cjxQYWdlT3ZlcmxheT4sIDI+IFBhZ2VP
dmVybGF5czsKKworICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5TGlzdChXZWJWaWV3SW1wbCopOwor
CisgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsaWVudCBmb3VuZC4gT3RoZXJ3aXNl
LCByZXR1cm5zIFdURjo6bm90Rm91bmQuCisgICAgc2l6ZV90IGZpbmQoV2ViUGFnZU92ZXJsYXkq
KTsKKworICAgIFdlYlZpZXdJbXBsKiBtX3ZpZXdJbXBsOworICAgIFBhZ2VPdmVybGF5cyBtX3Bh
Z2VPdmVybGF5czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFn
ZU92ZXJsYXlMaXN0X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1BhZ2VPdmVybGF5TGlzdC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
ICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5jcHAJKHJldmlzaW9uIDEwMTc0MSkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsOCArNDIsOCBAQAogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5j
bHVkZSAiUGFnZVNjcmlwdERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAicGFpbnRpbmcvR3JhcGhp
Y3NDb250ZXh0QnVpbGRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtMjcy
LDIyICsyNzIsMjMgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6YnJpbmdGcm9udGVuZAog
ewogfQogCi0vLyBQYWdlT3ZlcmxheUNsaWVudAotdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6
cGFpbnRQYWdlT3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGdjKQorLy8gV2ViUGFnZU92ZXJsYXkK
K3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnBhaW50UGFnZU92ZXJsYXkoV2ViQ2FudmFzKiBj
YW52YXMpCiB7CiAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbnNwZWN0b3JDb250cm9s
bGVyKCk7CiAgICAgaWYgKGljKQotICAgICAgICBpYy0+ZHJhd0hpZ2hsaWdodChnYyk7CisgICAg
ICAgIGljLT5kcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIoY2FudmFzKS5jb250
ZXh0KCkpOwogfQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWdobGlnaHQoKQogewot
ICAgIG1fd2ViVmlld0ltcGwtPnNldFBhZ2VPdmVybGF5Q2xpZW50KHRoaXMpOworICAgIC8vIFVz
ZSA5OSBhcyBhIGJpZyB6LW9yZGVyIG51bWJlciBzbyB0aGF0IGhpZ2hsaWdodCBpcyBhYm92ZSBv
dGhlciBvdmVybGF5cy4KKyAgICBtX3dlYlZpZXdJbXBsLT5hZGRQYWdlT3ZlcmxheSh0aGlzLCA5
OSk7CiB9CiAKIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZGVIaWdobGlnaHQoKQogewot
ICAgIG1fd2ViVmlld0ltcGwtPnNldFBhZ2VPdmVybGF5Q2xpZW50KDApOworICAgIG1fd2ViVmll
d0ltcGwtPnJlbW92ZVBhZ2VPdmVybGF5KHRoaXMpOwogfQogCiBib29sIFdlYkRldlRvb2xzQWdl
bnRJbXBsOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1w
bC5oCShyZXZpc2lvbiAxMDE3NDEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAKICNp
bmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKIAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAj
aW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3Zl
cmxheS5oIgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CkBAIC02Miw3ICs2Miw3IEBAIHN0cnVjdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhOwogCiBj
bGFzcyBXZWJEZXZUb29sc0FnZW50SW1wbCA6IHB1YmxpYyBXZWJEZXZUb29sc0FnZW50UHJpdmF0
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYkNvcmU6Okluc3BlY3Rv
ckNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFBhZ2VPdmVybGF5
OjpQYWdlT3ZlcmxheUNsaWVudCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBXZWJQYWdlT3ZlcmxheSB7CiBwdWJsaWM6CiAgICAgV2ViRGV2VG9vbHNBZ2VudEltcGwoV2Vi
Vmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJEZXZUb29sc0FnZW50Q2xpZW50KiBjbGllbnQpOwog
ICAgIHZpcnR1YWwgfldlYkRldlRvb2xzQWdlbnRJbXBsKCk7CkBAIC05Nyw4ICs5Nyw4IEBAIHB1
YmxpYzoKIAogICAgIGludCBob3N0SWQoKSB7IHJldHVybiBtX2hvc3RJZDsgfQogCi0gICAgLy8g
UGFnZU92ZXJsYXlDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdlT3ZlcmxheShXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICAvLyBXZWJQYWdlT3ZlcmxheQorICAgIHZpcnR1
YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNhbnZhcyopOwogCiBwcml2YXRlOgogICAgIFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24g
MTAxNzQxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA2Myw4ICsyMDYzLDggQEAgdm9pZCBXZWJGcmFtZUltcGw6OnBh
aW50V2l0aENvbnRleHQoR3JhcAogICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1l
VmlldygpKSB7CiAgICAgICAgIGdjLmNsaXAoZGlydHlSZWN0KTsKICAgICAgICAgZnJhbWVWaWV3
KCktPnBhaW50KCZnYywgZGlydHlSZWN0KTsKLSAgICAgICAgaWYgKHZpZXdJbXBsKCktPnBhZ2VP
dmVybGF5KCkpCi0gICAgICAgICAgICB2aWV3SW1wbCgpLT5wYWdlT3ZlcmxheSgpLT5wYWludFdl
YkZyYW1lKGdjKTsKKyAgICAgICAgaWYgKHZpZXdJbXBsKCktPnBhZ2VPdmVybGF5cygpKQorICAg
ICAgICAgICAgdmlld0ltcGwoKS0+cGFnZU92ZXJsYXlzKCktPnBhaW50V2ViRnJhbWUoZ2MpOwog
ICAgIH0gZWxzZQogICAgICAgICBnYy5maWxsUmVjdChkaXJ0eVJlY3QsIENvbG9yOjp3aGl0ZSwg
Q29sb3JTcGFjZURldmljZVJHQik7CiAgICAgZ2MucmVzdG9yZSgpOwpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gMTAxNzQxKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjU2LDggKzEyNTYsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCkK
ICAgICAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYg
KG1fcGFnZU92ZXJsYXkpCi0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKKyAg
ICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQorICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXMtPnVw
ZGF0ZSgpOwogCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRlKCk7CiAgICAgfQpA
QCAtMjYxMCwyMSArMjYxMCwyMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJZ25vcmVJbnB1dEV2
ZW50cyhiCiAgICAgbV9pZ25vcmVJbnB1dEV2ZW50cyA9IG5ld1ZhbHVlOwogfQogCi12b2lkIFdl
YlZpZXdJbXBsOjpzZXRQYWdlT3ZlcmxheUNsaWVudChQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlD
bGllbnQqIHBhZ2VPdmVybGF5Q2xpZW50KQordm9pZCBXZWJWaWV3SW1wbDo6YWRkUGFnZU92ZXJs
YXkoV2ViUGFnZU92ZXJsYXkqIG92ZXJsYXksIGludCB6T3JkZXIpCiB7Ci0gICAgaWYgKHBhZ2VP
dmVybGF5Q2xpZW50KSB7Ci0gICAgICAgIGlmICghbV9wYWdlT3ZlcmxheSkKLSAgICAgICAgICAg
IG1fcGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMsIHBhZ2VPdmVybGF5Q2xp
ZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+c2V0Q2xpZW50
KHBhZ2VPdmVybGF5Q2xpZW50KTsKLSAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7Cisg
ICAgaWYgKCFtX3BhZ2VPdmVybGF5cykKKyAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBQYWdlT3Zl
cmxheUxpc3Q6OmNyZWF0ZSh0aGlzKTsKKworICAgIG1fcGFnZU92ZXJsYXlzLT5hZGQob3Zlcmxh
eSwgek9yZGVyKTsKKyAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBX
ZWJWaWV3SW1wbDo6cmVtb3ZlUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqIG92ZXJsYXkpCit7
CisgICAgaWYgKG1fcGFnZU92ZXJsYXlzICYmIG1fcGFnZU92ZXJsYXlzLT5yZW1vdmUob3Zlcmxh
eSkpIHsKICAgICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXkpIHsKLSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXkt
PmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5ID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwotICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1fcGFnZU92ZXJsYXlzLT5lbXB0eSgpKQorICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBu
dWxscHRyOwogICAgIH0KIH0KIApAQCAtMjg3MCw4ICsyODcxLDggQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvcwogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2
YXRlQ29tcG9zaXRvcihtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOwog
ICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwogICAg
ICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAgICAgICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0
ZSgpOworICAgICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQorICAgICAgICAgICAgICAgIG1f
cGFnZU92ZXJsYXlzLT51cGRhdGUoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC5jbGVhcigpOwogICAgICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dEhvc3QuY2xlYXIoKTsKQEAgLTI5NTIsOCArMjk1Myw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRp
ZFJlY3JlYXRlR3JhcGhpY3NDb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICht
X3BhZ2VPdmVybGF5KQotICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKKyAgICBpZiAo
bV9wYWdlT3ZlcmxheXMpCisgICAgICAgIG1fcGFnZU92ZXJsYXlzLT51cGRhdGUoKTsKIH0KIAog
dm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAxMDE3NDEpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCi0jaW5jbHVk
ZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUxpc3QuaCIKICNpbmNsdWRl
ICJVc2VyTWVkaWFDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Lmgi
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMjI3LDYgKzIyNyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlQmFja2dy
b3VuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW5hY3RpdmVGb3JlZ3JvdW5kQ29sb3IpOwogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtQ3VzdG9t
Q29udGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
UGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqLCBpbnQgLyogek9yZGVyICovKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqKTsKIAogICAgIC8vIEND
TGF5ZXJUcmVlSG9zdENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSk7CkBAIC0yNDIsOCArMjQ0LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0SWdub3JlSW5wdXRFdmVudHMoYm9vbCBuZXdWYWx1ZSk7CiAgICAgV2ViRGV2VG9vbHNB
Z2VudFByaXZhdGUqIGRldlRvb2xzQWdlbnRQcml2YXRlKCkgeyByZXR1cm4gbV9kZXZUb29sc0Fn
ZW50LmdldCgpOyB9CiAKLSAgICBQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXkoKSBjb25zdCB7IHJl
dHVybiBtX3BhZ2VPdmVybGF5LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQYWdlT3ZlcmxheUNsaWVu
dChQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXlDbGllbnQqKTsKKyAgICBQYWdlT3ZlcmxheUxpc3Qq
IHBhZ2VPdmVybGF5cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlzLmdldCgpOyB9CiAK
ICAgICB2b2lkIHNldE92ZXJsYXlMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAKQEAg
LTU3OSw3ICs1ODAsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpQb3B1cENvbnRh
aW5lcj4gbV9zZWxlY3RQb3B1cDsKIAogICAgIE93blB0cjxXZWJEZXZUb29sc0FnZW50UHJpdmF0
ZT4gbV9kZXZUb29sc0FnZW50OwotICAgIE93blB0cjxQYWdlT3ZlcmxheT4gbV9wYWdlT3Zlcmxh
eTsKKyAgICBPd25QdHI8UGFnZU92ZXJsYXlMaXN0PiBtX3BhZ2VPdmVybGF5czsKIAogICAgIC8v
IFdoZXRoZXIgdGhlIHdlYnZpZXcgaXMgcmVuZGVyaW5nIHRyYW5zcGFyZW50bHkuCiAgICAgYm9v
bCBtX2lzVHJhbnNwYXJlbnQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>