<?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>149157</bug_id>
          
          <creation_ts>2015-09-15 03:49:01 -0700</creation_ts>
          <short_desc>Allow the page to render before &lt;link&gt; stylesheet tags in body</short_desc>
          <delta_ts>2017-03-27 15:56:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>169079</dependson>
    
    <dependson>169277</dependson>
    
    <dependson>169465</dependson>
    
    <dependson>170040</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jake Archibald">jaffathecake</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eoconnor</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1125925</commentid>
    <comment_count>0</comment_count>
    <who name="Jake Archibald">jaffathecake</who>
    <bug_when>2015-09-15 03:49:01 -0700</bug_when>
    <thetext>Test page: https://wiki-offline.jakearchibald.com/wiki/Hulk_Hogan?use-url-flags&amp;prevent-sw=1&amp;no-css-async-hack=1

Results:
Chrome http://www.webpagetest.org/video/compare.php?tests=150424_57_12PJ-r:1-c:0
IE http://www.webpagetest.org/video/compare.php?tests=150424_NH_12XE-r:1-c:0

In the test above, the page has inline CSS, &apos;defer&apos;d javascript, then the HTML for the top toolbar. After the toolbar, there&apos;s a &lt;link&gt; for some CSS (load.php in the waterfall), followed by the article content.

In Chrome/Safari, the preparser discovers the CSS and blocks further rendering, including content before the &lt;link&gt;. IE will allow content before the &lt;link&gt; to render, and block afterwards. Firefox is similar to IE

The spec is unclear here, but developers seem to want this behaviour https://www.w3.org/Bugs/Public/show_bug.cgi?id=27303#c37, and there are hacks to work around the current block-everything behaviour https://github.com/filamentgroup/loadCSS

Chrome is looking to align with Firefox &amp; IE on this https://code.google.com/p/chromium/issues/detail?id=481122#c17

Further explanation of the problem &amp; benefits of this solution https://www.w3.org/Bugs/Public/show_bug.cgi?id=27303#c36</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125927</commentid>
    <comment_count>1</comment_count>
    <who name="Jake Archibald">jaffathecake</who>
    <bug_when>2015-09-15 03:54:19 -0700</bug_when>
    <thetext>I realise the videos in the previous comment don&apos;t show the effect in Safari specifically, unfortunately WPT doesn&apos;t support it, but testing with the Network Link Conditioner shows it to have the same issue as Chrome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164783</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-02-15 10:57:36 -0800</bug_when>
    <thetext>Chrome is planning to ship this:
https://jakearchibald.com/2016/link-in-body/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164784</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-02-15 10:57:59 -0800</bug_when>
    <thetext>&lt;rdar://problem/24658830&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217386</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-08-04 07:22:40 -0700</bug_when>
    <thetext>&gt; In Chrome/Safari, the preparser discovers the CSS and blocks further
&gt; rendering, including content before the &lt;link&gt;. 

This is not true in WebKit. Stylesheet loads triggered by preload scanner don&apos;t block rendering. Rendering is only blocked when the real parser reaches a loading &lt;link&gt; element (or &lt;style&gt; with @import).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284931</commentid>
    <comment_count>5</comment_count>
      <attachid>303826</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-08 12:28:42 -0800</bug_when>
    <thetext>Created attachment 303826
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284941</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-08 12:52:01 -0800</bug_when>
    <thetext>*** Bug 169345 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284980</commentid>
    <comment_count>7</comment_count>
      <attachid>303826</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-03-08 13:38:42 -0800</bug_when>
    <thetext>Comment on attachment 303826
patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:1575
&gt; +    // Style is non-final if the element has a pending stylesheet before it. We end up with renderers with such styles if a script
&gt; +    // forces renderer construction by querying something layout dependent.

Is this comment accurate with &lt;link rel=&quot;stylesheet&quot;&gt; in the body? Won&apos;t we force renderer construction anyway?

&gt; Source/WebCore/style/StyleTreeResolver.cpp:171
&gt; +        m_document.setHasNodesWithNonFinalStyle();

Wehre is this cleared? I see no calls to m_document.setHasNodesWithNonFinalStyle(false)

&gt; Source/WebCore/style/StyleTreeResolver.cpp:184
&gt; +        m_document.setHasNodesWithNonFinalStyle();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284997</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-08 13:54:23 -0800</bug_when>
    <thetext>&gt; Is this comment accurate with &lt;link rel=&quot;stylesheet&quot;&gt; in the body? Won&apos;t we
&gt; force renderer construction anyway?

In normal case we only compute style (and so construct renderers) up to the loading in-body stylesheet. Call to updateLayoutIgnorePendingStylesheet() forces renderer construction for all elements. In that case we generate renderers with non-final style.

&gt; Wehre is this cleared? I see no calls to
&gt; m_document.setHasNodesWithNonFinalStyle(false)

Document::resolveStyle() has

m_hasNodesWithNonFinalStyle = false;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284998</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-08 13:55:23 -0800</bug_when>
    <thetext>&gt; Document::resolveStyle() has
&gt; 
&gt; m_hasNodesWithNonFinalStyle = false;

...when we do full style rebuild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285001</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-03-08 13:57:37 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; Document::resolveStyle() has
&gt; &gt; 
&gt; &gt; m_hasNodesWithNonFinalStyle = false;
&gt; 
&gt; ...when we do full style rebuild.

It would make searching easier if this called the setHasNodesWithNonFinalStyle() function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285249</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-09 00:15:30 -0800</bug_when>
    <thetext>&gt; It would make searching easier if this called the
&gt; setHasNodesWithNonFinalStyle() function

I don&apos;t want to make setHasNodesWithNonFinalStyle take an argument since no one except Document itself should reset the flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285257</commentid>
    <comment_count>12</comment_count>
      <attachid>303826</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-09 01:07:12 -0800</bug_when>
    <thetext>Comment on attachment 303826
patch

Clearing flags on attachment: 303826

Committed r213633: &lt;http://trac.webkit.org/changeset/213633&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285258</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-09 01:07:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285761</commentid>
    <comment_count>14</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-03-09 21:11:43 -0800</bug_when>
    <thetext>*** Bug 169345 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285762</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-03-09 21:12:32 -0800</bug_when>
    <thetext>Reverted r213633 for reason:

This change caused LayoutTest imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute.html to become a flaky failure.

Committed r213701: &lt;http://trac.webkit.org/changeset/213701&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285764</commentid>
    <comment_count>16</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-03-09 21:13:33 -0800</bug_when>
    <thetext>*** Bug 169452 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285797</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-10 07:28:50 -0800</bug_when>
    <thetext>Fix for bug 169465 should make imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute.html reliable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285798</commentid>
    <comment_count>18</comment_count>
      <attachid>303826</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-10 07:30:54 -0800</bug_when>
    <thetext>Comment on attachment 303826
patch

Rejecting attachment 303826 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 303826, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/3283697</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285799</commentid>
    <comment_count>19</comment_count>
      <attachid>304042</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-10 07:33:07 -0800</bug_when>
    <thetext>Created attachment 304042
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285804</commentid>
    <comment_count>20</comment_count>
      <attachid>304042</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-10 08:01:54 -0800</bug_when>
    <thetext>Comment on attachment 304042
patch

Clearing flags on attachment: 304042

Committed r213712: &lt;http://trac.webkit.org/changeset/213712&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285805</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-10 08:02:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1290740</commentid>
    <comment_count>22</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-23 22:37:31 -0700</bug_when>
    <thetext>Reverted in http://trac.webkit.org/changeset/214333 due to iPad PLT regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291625</commentid>
    <comment_count>23</comment_count>
      <attachid>305510</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-27 14:30:10 -0700</bug_when>
    <thetext>Created attachment 305510
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291658</commentid>
    <comment_count>24</comment_count>
      <attachid>305510</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-27 15:56:36 -0700</bug_when>
    <thetext>Comment on attachment 305510
patch

Clearing flags on attachment: 305510

Committed r214435: &lt;http://trac.webkit.org/changeset/214435&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291659</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-27 15:56:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303826</attachid>
            <date>2017-03-08 12:28:42 -0800</date>
            <delta_ts>2017-03-10 07:33:07 -0800</delta_ts>
            <desc>patch</desc>
            <filename>incremental-rendering-stylesheet-7.patch</filename>
            <type>text/plain</type>
            <size>27220</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDE3LTAzLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyB0aGUgcGFnZSB0byBy
ZW5kZXIgYmVmb3JlIDxsaW5rPiBzdHlsZXNoZWV0IHRhZ3MgaW4gYm9keQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MTU3CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNDY1ODgzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDdXJyZW50bHkgd2UgYmxvY2sgc3R5bGUgYW5kIHJlbmRlcmVyIGJ1aWxk
aW5nIGNvbXBsZXRlbHkgaWYgZG9jdW1lbnQgaGFzIGFueSBsb2FkaW5nCisgICAgICAgIHN0eWxl
c2hlZXRzLiBJbiBjYXNlIGEgc2NyaXB0IHF1ZXJpZXMgc29tZXRoaW5nIGxheW91dCBkZXBlbmRl
bnQgd2UgY29uc3RydWN0IHRoZSByZW5kZXIKKyAgICAgICAgdHJlZSB3aXRoIHdoYXRldmVyIHN0
eWxlIHdlIGhhdmUgYnV0IGJsb2NrIHBhaW50aW5nIGluIGl0LgorCisgICAgICAgIFRoaXMgcGF0
Y2ggY2hhbmdlcyBiZWhhdmlvciBzbyB0aGF0IGEgbG9hZGluZyBzdHlsZXNoZWV0IGluIGJvZHkg
b25seSBibG9ja3MgcmVuZGVyaW5nIGZvciBlbGVtZW50cworICAgICAgICB0aGF0IGFyZSBhZnRl
ciBpdC4gVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgc3VjaCBzdHlsZXNoZWV0cyByYXJlbHkgYWZm
ZWN0IGVsZW1lbnRzIGJlZm9yZSB0aGVtCisgICAgICAgIGFuZCB0aGUgZWxlbWVudHMgY2FuIGJl
IHJlbmRlcmVkIHdpdGhvdXQgY2F1c2luZyB1Z2x5IHZpc2libGUgc3R5bGluZyBjaGFuZ2VzLgor
CisgICAgICAgIFRoZSBwYXRjaCByZXBsYWNlcyB0aGUgb2xkIGZsYXNoLW9mLXVuc3R5bGVkLWNv
bnRlbnQgKEZPVUMpIHByZXZlbnRhdGlvbiBtZWNoYW5pc20gd2l0aCBhIG1vcmUKKyAgICAgICAg
ZmluZS1ncmFpbmVkIG9uZS4gUGFpbnQgYmxvY2tpbmcgaXMgbm93IGRvbmUgb24gcGVyLXJlbmRl
cmVyIGJhc2lzIHdpdGggYmFzZWQgb24gaXNOb25GaW5hbCBmbGFnIGluCisgICAgICAgIFJlbmRl
clN0eWxlLgorCisgICAgICAgIEZvciBzdHlsZXNoZWV0cyBpbiBoZWFkIHRoZSBiZWhhdmlvciBz
aG91bGQgYmUgbGFyZ2VseSB1bmNoYW5nZWQuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9p
bmNyZW1lbnRhbC9zdHlsZXNoZWV0LWJvZHktaW5jcmVtZW50YWwtcmVuZGVyaW5nLmh0bWwKKwor
ICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZXNvbHZlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyk6CisKKyAgICAg
ICAgICAgIFJlbW92ZSB0aGUgb2xkIEZPVUMgcHJldmVudGF0aW9uIHN0YXRlIHRyYWNraW5nLgor
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkU2NoZWR1bGVMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KToK
KworICAgICAgICAgICAgUmVwYWludHMgd2lsbCBub3cgZ2V0IHRyaWdnZXJlZCBieSB0aGUgbm9y
bWFsIHN0eWxlIG1lY2hhbmlzbS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6Omhhc05vZGVzV2l0aE5vbkZpbmFsU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldEhhc05vZGVzV2l0aE5vbkZpbmFsU3R5bGUpOgorCisg
ICAgICAgICAgICBUcmFjayBpZiB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgc3R5bGUgbGF0ZXIg
YmVjYXVzZSBub24tZmluYWwgb3IgdW5zdHlsZWQgZWxlbWVudHMuCisKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpkaWRMYXlvdXRXaXRoUGVuZGluZ1N0eWxlc2hlZXRzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpoYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRIYXNOb2Rlc1dpdGhQ
bGFjZWhvbGRlclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpxdWFsaWZpZXNBc1Zpc3VhbGx5Tm9uRW1wdHkpOgorCisgICAgICAg
ICAgICBEb24ndCBxdWFsaWZ5IGFzIHZpc3VhbGx5IG5vbi1lbXB0eSBpZiB3ZSBoYXZlIGxvYWRp
bmcgc3R5bGVzaGVldHMgaW4gaGVhZCAoZXZlbiBpZiB0aGVyZSBpcworICAgICAgICAgICAgYSBm
b3VjLXByZXZlbnRlZCByZW5kZXIgdHJlZSkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6ZmlyZUxheW91dFJlbGF0ZWRNaWxlc3RvbmVzSWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFp
bnRDb250ZW50cyk6CisKKyAgICAgICAgICAgIEluc3RlYWQgb2YgYSBnbG9iYWwgdGVzdCwgYmxv
Y2sgcGFpbnRpbmcgaWYgaXNOb25GaW5hbCBpcyBzZXQgaW4gdGhlIHJlbmRlcmVyJ3Mgc3R5bGUu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2hvdWxkU3VwcHJlc3NQYWludGluZ0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmNoYW5n
ZVJlcXVpcmVzUmVwYWludCk6CisKKyAgICAgICAgICAgIFRoZSBpc05vbkZpbmFsIGZsYWcgcHJl
dmVudHMgcGFpbnRpbmcgc28gd2UgbmVlZCB0byB0cmlnZ2VyIHJlcGFpbnQgd2hlbiBpdCBnZXRz
IGNsZWFyZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc05vdEZpbmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpzZXRJc05vdEZpbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN0eWxlOjppc1BsYWNlaG9sZGVyU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6OnNldElzUGxhY2Vob2xkZXJTdHlsZSk6IERlbGV0ZWQuCisKKyAgICAgICAg
ICAgIFRoZXJlIGlzIG5vIG5lZWQgZm9yIHBsYWNlaG9sZGVyIHN0eWxlcyBhbnltb3JlLiBSZXVz
ZSB0aGUgYml0IGZvciBpc05vdEZpbmFsLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oOgorICAgICAgICAq
IHN0eWxlL1N0eWxlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlOjph
bmFseXplU3R5bGVTaGVldENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2NvcGU6
OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VHJlZVJlc29sdmVyOjpzdHlsZUZv
ckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVzb2x2
ZUVsZW1lbnQpOgorCisgICAgICAgICAgICBJZiB3ZSBoYXZlIHNlZW5zIGEgbG9hZGluZyBzdHls
ZXNoZWV0IGFuZCBkb24ndCBoYXZlIGEgcmVuZGVyZXIgeWV0IGRvbid0IHN0eWxlIHRoZSBlbGVt
ZW50LgorICAgICAgICAgICAgSW4gY2FzZSB0aGVyZSBpcyBhIHJlbmRlcmVyIG9yIHdlIGFyZSBp
Z25vcmluZyBwZW5kaW5nIHNoZWV0cywgcmVzb2x2ZSB0aGUgc3R5bGUgbm9ybWFsbHkKKyAgICAg
ICAgICAgIGJ1dCBtYXJrIGl0IGFzIG5vbi1maW5hbC4KKworICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6Om1ha2VQbGFjZWhvbGRlclN0eWxlKTogRGVsZXRlZC4KKwogMjAxNy0wMy0wOCAgRW5yaXF1
ZSBPY2HDsWEgR29uesOhbGV6ICA8ZW9jYW5oYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3Ry
ZWFtZXJdW01TRV0gQWN0dWFsbHkgaW1wbGVtZW50IGZsdXNoKCkgb24gcGxheWJhY2sgcGlwZWxp
bmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIxMzQ0
NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5Miw4ICsxMDkyLDggQEAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJl
c29sdmVyOgogCiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+IFN0eWxlUmVzb2x2ZXI6OnBzZXVk
b1N0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFBzZXVkb0lkIHBz
ZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwg
IWVsZW1lbnQtPmRvY3VtZW50KCkuaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpCi0gICAgICAgIHJl
dHVybiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgbV9zdGF0ZSA9IFN0YXRlKCplbGVtZW50LCBudWxscHRy
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMTM0NDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDIsOSAr
NDQyLDggQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVQogI2VuZGlm
CiAgICAgLCBtX3JlZmVyZW5jaW5nTm9kZUNvdW50KDApCiAgICAgLCBtX3NldHRpbmdzKGZyYW1l
ID8gUmVmPFNldHRpbmdzPihmcmFtZS0+c2V0dGluZ3MoKSkgOiBTZXR0aW5nczo6Y3JlYXRlKG51
bGxwdHIpKQotICAgICwgbV9oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKGZhbHNlKQorICAg
ICwgbV9oYXNOb2Rlc1dpdGhOb25GaW5hbFN0eWxlKGZhbHNlKQogICAgICwgbV9pZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoZmFsc2UpCi0gICAgLCBtX3BlbmRpbmdTaGVldExheW91dChOb0xheW91
dFdpdGhQZW5kaW5nU2hlZXRzKQogICAgICwgbV9jYWNoZWRSZXNvdXJjZUxvYWRlcihtX2ZyYW1l
ID8gUmVmPENhY2hlZFJlc291cmNlTG9hZGVyPihtX2ZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1
bWVudExvYWRlcigpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKSA6IENhY2hlZFJlc291cmNlTG9h
ZGVyOjpjcmVhdGUobnVsbHB0cikpCiAgICAgLCBtX2FjdGl2ZVBhcnNlckNvdW50KDApCiAgICAg
LCBtX3dlbGxGb3JtZWQoZmFsc2UpCkBAIC0xNzgyLDcgKzE3ODEsNyBAQCB2b2lkIERvY3VtZW50
OjpyZXNvbHZlU3R5bGUoUmVzb2x2ZVN0eWxlCiAKICAgICAgICAgaWYgKHR5cGUgPT0gUmVzb2x2
ZVN0eWxlVHlwZTo6UmVidWlsZCkgewogICAgICAgICAgICAgLy8gVGhpcyBtYXkgZ2V0IHNldCBh
Z2FpbiBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KLSAgICAgICAgICAgIG1faGFzTm9kZXNXaXRoUGxh
Y2Vob2xkZXJTdHlsZSA9IGZhbHNlOworICAgICAgICAgICAgbV9oYXNOb2Rlc1dpdGhOb25GaW5h
bFN0eWxlID0gZmFsc2U7CiAKICAgICAgICAgICAgIGF1dG8gZG9jdW1lbnRTdHlsZSA9IFN0eWxl
OjpyZXNvbHZlRm9yRG9jdW1lbnQoKnRoaXMpOwogCkBAIC0xODE4LDYgKzE4MTcsOSBAQCB2b2lk
IERvY3VtZW50OjpyZXNvbHZlU3R5bGUoUmVzb2x2ZVN0eWxlCiAgICAgICAgIH0KIAogICAgICAg
ICB1cGRhdGVkQ29tcG9zaXRpbmdMYXllcnMgPSBmcmFtZVZpZXcudXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclN0eWxlQ2hhbmdlKCk7CisKKyAgICAgICAgaWYgKG1fcmVuZGVyVmlldy0+bmVl
ZHNMYXlvdXQoKSkKKyAgICAgICAgICAgIGZyYW1lVmlldy5zY2hlZHVsZVJlbGF5b3V0KCk7CiAg
ICAgfQogCiAgICAgLy8gSWYgd2Ugd2FudGVkIHRvIGNhbGwgaW1wbGljaXRDbG9zZSgpIGR1cmlu
ZyByZWNhbGNTdHlsZSwgZG8gc28gbm93IHRoYXQgd2UncmUgZmluaXNoZWQuCkBAIC0xOTExLDMz
ICsxOTEzLDE0IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUxheW91dCgpCiAgICAgICAgIGZyYW1l
Vmlldy0+bGF5b3V0KCk7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGlzIGEgYmFkIGlkZWEgYW5kIG5l
ZWRzIHRvIGJlIHJlbW92ZWQgZXZlbnR1YWxseS4KLS8vIE90aGVyIGJyb3dzZXJzIGxvYWQgc3R5
bGVzaGVldHMgYmVmb3JlIHRoZXkgY29udGludWUgcGFyc2luZyB0aGUgd2ViIHBhZ2UuCi0vLyBT
aW5jZSB3ZSBkb24ndCwgd2UgY2FuIHJ1biBKYXZhU2NyaXB0IGNvZGUgdGhhdCBuZWVkcyBhbnN3
ZXJzIGJlZm9yZSB0aGUKLS8vIHN0eWxlc2hlZXRzIGFyZSBsb2FkZWQuIERvaW5nIGEgbGF5b3V0
IGlnbm9yaW5nIHRoZSBwZW5kaW5nIHN0eWxlc2hlZXRzCi0vLyBsZXRzIHVzIGdldCByZWFzb25h
YmxlIGFuc3dlcnMuIFRoZSBsb25nIHRlcm0gc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzCi0v
LyB0byBpbnN0ZWFkIHN1c3BlbmQgSmF2YVNjcmlwdCBleGVjdXRpb24uCiB2b2lkIERvY3VtZW50
Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoRG9jdW1lbnQ6OlJ1blBvc3RM
YXlvdXRUYXNrcyBydW5Qb3N0TGF5b3V0VGFza3MpCiB7CiAgICAgYm9vbCBvbGRJZ25vcmUgPSBt
X2lnbm9yZVBlbmRpbmdTdHlsZXNoZWV0czsKIAogICAgIGlmICghaGF2ZVN0eWxlc2hlZXRzTG9h
ZGVkKCkpIHsKICAgICAgICAgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSB0cnVlOwotICAg
ICAgICAvLyBGSVhNRTogV2UgYXJlIHdpbGxpbmcgdG8gYXR0ZW1wdCB0byBzdXBwcmVzcyBwYWlu
dGluZyB3aXRoIG91dGRhdGVkIHN0eWxlIGluZm8gb25seSBvbmNlLiAgT3VyIGFzc3VtcHRpb24g
aXMgdGhhdCBpdCB3b3VsZCBiZQotICAgICAgICAvLyBkYW5nZXJvdXMgdG8gdHJ5IHRvIHN0b3Ag
aXQgYSBzZWNvbmQgdGltZSwgYWZ0ZXIgcGFnZSBjb250ZW50IGhhcyBhbHJlYWR5IGJlZW4gbG9h
ZGVkIGFuZCBkaXNwbGF5ZWQKLSAgICAgICAgLy8gd2l0aCBhY2N1cmF0ZSBzdHlsZSBpbmZvcm1h
dGlvbi4gIChPdXIgc3VwcHJlc3Npb24gaW52b2x2ZXMgYmxhbmtpbmcgdGhlIHdob2xlIHBhZ2Ug
YXQgdGhlCi0gICAgICAgIC8vIG1vbWVudC4gIElmIGl0IHdlcmUgbW9yZSByZWZpbmVkLCB3ZSBt
aWdodCBiZSBhYmxlIHRvIGRvIHNvbWV0aGluZyBiZXR0ZXIuKQotICAgICAgICAvLyBJdCdzIHdv
cnRoIG5vdGluZyB0aG91Z2ggdGhhdCB0aGlzIGVudGlyZSBtZXRob2QgaXMgYSBoYWNrLCBzaW5j
ZSB3aGF0IHdlIHJlYWxseSB3YW50IHRvIGRvIGlzCi0gICAgICAgIC8vIHN1c3BlbmQgSlMgaW5z
dGVhZCBvZiBkb2luZyBhIGxheW91dCB3aXRoIGluYWNjdXJhdGUgaW5mb3JtYXRpb24uCi0gICAg
ICAgIEhUTUxFbGVtZW50KiBib2R5RWxlbWVudCA9IGJvZHlPckZyYW1lc2V0KCk7Ci0gICAgICAg
IGlmIChib2R5RWxlbWVudCAmJiAhYm9keUVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgbV9wZW5kaW5n
U2hlZXRMYXlvdXQgPT0gTm9MYXlvdXRXaXRoUGVuZGluZ1NoZWV0cykgewotICAgICAgICAgICAg
bV9wZW5kaW5nU2hlZXRMYXlvdXQgPSBEaWRMYXlvdXRXaXRoUGVuZGluZ1NoZWV0czsKLSAgICAg
ICAgICAgIHN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VBY3RpdmVTdHlsZVNoZWV0Q2FuZGlkYXRlcygp
OwotICAgICAgICAgICAgcmVzb2x2ZVN0eWxlKFJlc29sdmVTdHlsZVR5cGU6OlJlYnVpbGQpOwot
ICAgICAgICB9IGVsc2UgaWYgKG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSkKLSAgICAg
ICAgICAgIC8vIElmIG5ldyBub2RlcyBoYXZlIGJlZW4gYWRkZWQgb3Igc3R5bGUgcmVjYWxjIGhh
cyBiZWVuIGRvbmUgd2l0aCBzdHlsZSBzaGVldHMgc3RpbGwgcGVuZGluZywgc29tZSBub2RlcyAK
LSAgICAgICAgICAgIC8vIG1heSBub3QgaGF2ZSBoYWQgdGhlaXIgcmVhbCBzdHlsZSBjYWxjdWxh
dGVkIHlldC4gTm9ybWFsbHkgdGhpcyBnZXRzIGNsZWFuZWQgd2hlbiBzdHlsZSBzaGVldHMgYXJy
aXZlIAotICAgICAgICAgICAgLy8gYnV0IGhlcmUgd2UgbmVlZCB1cC10by1kYXRlIHN0eWxlIGlt
bWVkaWF0ZWx5LgorICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQganVzdCBpbnZhbGlkYXRl
IGVsZW1lbnRzIHdpdGggbm9uLWZpbmFsIHN0eWxlcy4KKyAgICAgICAgaWYgKG1faGFzTm9kZXNX
aXRoTm9uRmluYWxTdHlsZSkKICAgICAgICAgICAgIHJlc29sdmVTdHlsZShSZXNvbHZlU3R5bGVU
eXBlOjpSZWJ1aWxkKTsKICAgICB9CiAKQEAgLTI3NzgsMTQgKzI3NjEsMTYgQEAgdm9pZCBEb2N1
bWVudDo6c2V0UGFyc2luZyhib29sIGIpCiAKIGJvb2wgRG9jdW1lbnQ6OnNob3VsZFNjaGVkdWxl
TGF5b3V0KCkKIHsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgb25seSBiZSBjYWxsZWQgd2hl
biBGcmFtZVZpZXcgdGhpbmtzIGEgbGF5b3V0IGlzIG5lZWRlZC4KLSAgICAvLyBUaGlzIGVuZm9y
Y2VzIGEgY291cGxlIGV4dHJhIHJ1bGVzLgotICAgIC8vCi0gICAgLy8gICAgKGEpIE9ubHkgc2No
ZWR1bGUgYSBsYXlvdXQgb25jZSB0aGUgc3R5bGVzaGVldHMgYXJlIGxvYWRlZC4KLSAgICAvLyAg
ICAoYikgT25seSBzY2hlZHVsZSBsYXlvdXQgb25jZSB3ZSBoYXZlIGEgYm9keSBlbGVtZW50Lgor
ICAgIGlmICghZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWlzPEhUTUxIdG1sRWxlbWVudD4oKmRvY3VtZW50RWxlbWVudCgpKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKCFib2R5T3JGcmFtZXNldCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKHN0eWxlU2NvcGUoKS5oYXNQZW5kaW5nU2hlZXRzQmVmb3JlQm9keSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gKGhhdmVTdHlsZXNoZWV0c0xvYWRl
ZCgpICYmIGJvZHlPckZyYW1lc2V0KCkpCi0gICAgICAgIHx8IChkb2N1bWVudEVsZW1lbnQoKSAm
JiAhaXM8SFRNTEh0bWxFbGVtZW50PigqZG9jdW1lbnRFbGVtZW50KCkpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KICAgICAKIGJvb2wgRG9jdW1lbnQ6OmlzTGF5b3V0VGltZXJBY3RpdmUoKQpAQCAt
MzA4OSwxNSArMzA3NCw2IEBAIEZyYW1lKiBEb2N1bWVudDo6ZmluZFVuc2FmZVBhcmVudFNjcm9s
bFAKIAogdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKQogewot
ICAgIGlmIChtX3BlbmRpbmdTaGVldExheW91dCA9PSBEaWRMYXlvdXRXaXRoUGVuZGluZ1NoZWV0
cykgewotICAgICAgICAvLyBQYWludGluZyBpcyBkaXNhYmxlZCB3aGVuIGRvaW5nIGxheW91dHMg
d2l0aCBwZW5kaW5nIHNoZWV0cyB0byBhdm9pZCBGT1VDLgotICAgICAgICAvLyBXZSBuZWVkIHRv
IGZvcmNlIHBhaW50IHdoZW4gY29taW5nIG91dCBmcm9tIHRoaXMgc3RhdGUuCi0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIGlzIG5vdCB2ZXJ5IGVsZWdhbnQuCi0gICAgICAgIG1fcGVuZGluZ1NoZWV0
TGF5b3V0ID0gSWdub3JlTGF5b3V0V2l0aFBlbmRpbmdTaGVldHM7Ci0gICAgICAgIGlmIChyZW5k
ZXJWaWV3KCkpCi0gICAgICAgICAgICByZW5kZXJWaWV3KCktPnJlcGFpbnRWaWV3QW5kQ29tcG9z
aXRlZExheWVycygpOwotICAgIH0KLQogICAgIGlmIChhdXRvKiBwYXJzZXIgPSBzY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIoKSkKICAgICAgICAgcGFyc2VyLT5leGVjdXRlU2NyaXB0c1dhaXRpbmdG
b3JTdHlsZXNoZWV0c1Nvb24oKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lv
biAyMTM0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtOTM3LDEyICs5MzcsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPFhQ
YXRoTlNSZXNvbHZlcj4gY3JlYXRlTlNSZXNvbHZlcihOb2RlKiBub2RlUmVzb2x2ZXIpOwogICAg
IFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPFJlZjxYUGF0aFJlc3VsdD4+IGV2YWx1YXRlKGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgTm9kZSogY29udGV4dE5vZGUsIFJlZlB0cjxYUGF0aE5T
UmVzb2x2ZXI+JiYsIHVuc2lnbmVkIHNob3J0IHR5cGUsIFhQYXRoUmVzdWx0Kik7CiAKLSAgICBl
bnVtIFBlbmRpbmdTaGVldExheW91dCB7IE5vTGF5b3V0V2l0aFBlbmRpbmdTaGVldHMsIERpZExh
eW91dFdpdGhQZW5kaW5nU2hlZXRzLCBJZ25vcmVMYXlvdXRXaXRoUGVuZGluZ1NoZWV0cyB9Owot
Ci0gICAgYm9vbCBkaWRMYXlvdXRXaXRoUGVuZGluZ1N0eWxlc2hlZXRzKCkgY29uc3QgeyByZXR1
cm4gbV9wZW5kaW5nU2hlZXRMYXlvdXQgPT0gRGlkTGF5b3V0V2l0aFBlbmRpbmdTaGVldHM7IH0K
LQotICAgIGJvb2wgaGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZTsgfQotICAgIHZvaWQgc2V0SGFzTm9kZXNX
aXRoUGxhY2Vob2xkZXJTdHlsZSgpIHsgbV9oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlID0g
dHJ1ZTsgfQorICAgIGJvb2wgaGFzTm9kZXNXaXRoTm9uRmluYWxTdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzTm9kZXNXaXRoTm9uRmluYWxTdHlsZTsgfQorICAgIHZvaWQgc2V0SGFzTm9kZXNX
aXRoTm9uRmluYWxTdHlsZSgpIHsgbV9oYXNOb2Rlc1dpdGhOb25GaW5hbFN0eWxlID0gdHJ1ZTsg
fQogCiAgICAgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uKFNlbGVjdGlvblJlc3RvcmF0
aW9uTW9kZSk7CiAgICAgdm9pZCBjYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKQEAgLTEz
ODYsMTYgKzEzODIsMTEgQEAgcHJpdmF0ZToKICAgICBjb25zdCBSZWY8U2V0dGluZ3M+IG1fc2V0
dGluZ3M7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3R5bGVSZXNvbHZlcj4gbV91c2VyQWdlbnRT
aGFkb3dUcmVlU3R5bGVSZXNvbHZlcjsKLSAgICBib29sIG1faGFzTm9kZXNXaXRoUGxhY2Vob2xk
ZXJTdHlsZTsKKyAgICBib29sIG1faGFzTm9kZXNXaXRoTm9uRmluYWxTdHlsZTsKICAgICAvLyBC
dXQgc29tZXRpbWVzIHlvdSBuZWVkIHRvIGlnbm9yZSBwZW5kaW5nIHN0eWxlc2hlZXQgY291bnQg
dG8KICAgICAvLyBmb3JjZSBhbiBpbW1lZGlhdGUgbGF5b3V0IHdoZW4gcmVxdWVzdGVkIGJ5IEpT
LgogICAgIGJvb2wgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHM7CiAKLSAgICAvLyBJZiB3ZSBk
byBpZ25vcmUgdGhlIHBlbmRpbmcgc3R5bGVzaGVldCBjb3VudCwgdGhlbiB3ZSBuZWVkIHRvIGFk
ZCBhIGJvb2xlYW4KLSAgICAvLyB0byB0cmFjayB0aGF0IHRoaXMgaGFwcGVuZWQgc28gdGhhdCB3
ZSBjYW4gZG8gYSBmdWxsIHJlcGFpbnQgd2hlbiB0aGUgc3R5bGVzaGVldHMKLSAgICAvLyBkbyBl
dmVudHVhbGx5IGxvYWQuCi0gICAgUGVuZGluZ1NoZWV0TGF5b3V0IG1fcGVuZGluZ1NoZWV0TGF5
b3V0OwotCiAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV9kb21XaW5kb3c7CiAgICAgV2Vha1B0cjxE
b2N1bWVudD4gbV9jb250ZXh0RG9jdW1lbnQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMjEzNDQ2KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUz
LDcgKzE1Myw3IEBAIGJvb2wgSFRNTEZyYW1lU2V0RWxlbWVudDo6cmVuZGVyZXJJc05lZWQKIHsK
ICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSwgZnJhbWVzIHJlbmRlciBldmVuIHdoZW4gZGlzcGxh
eTogbm9uZSBpcyBzZXQuCiAgICAgLy8gSG93ZXZlciwgd2UgZGVsYXkgY3JlYXRpbmcgYSByZW5k
ZXJlciB1bnRpbCBzdHlsZXNoZWV0cyBoYXZlIGxvYWRlZC4gCi0gICAgcmV0dXJuICFzdHlsZS5p
c1BsYWNlaG9sZGVyU3R5bGUoKTsKKyAgICByZXR1cm4gIXN0eWxlLmlzTm90RmluYWwoKTsKIH0K
IAogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxGcmFtZVNldEVsZW1lbnQ6OmNyZWF0ZUVs
ZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRp
b24mKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMjEzNDQ2KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTg4LDYgKzQ1ODgsMTAgQEAgYm9vbCBGcmFtZVZpZXc6OnF1YWxpZmllc0FzVmlzdWFsbHlOb25F
bQogICAgIGlmICghZnJhbWUoKS5kb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgZnJhbWUoKS5sb2Fk
ZXIoKS5zdGF0ZU1hY2hpbmUoKS5jb21taXR0ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFsc28gaWdub3Jl
IHJlbmRlcmVycyB3aXRoIG5vbi1maW5hbCBzdHlsZS4KKyAgICBpZiAoZnJhbWUoKS5kb2N1bWVu
dCgpLT5zdHlsZVNjb3BlKCkuaGFzUGVuZGluZ1NoZWV0c0JlZm9yZUJvZHkoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgLy8gUmVxdWlyZSB0aGUgZG9jdW1lbnQgdG8gZ3JvdyBhIGJp
dC4KICAgICAvLyBVc2luZyBhIHZhbHVlIG9mIDQ4IGFsbG93cyB0aGUgaGVhZGVyIG9uIEdvb2ds
ZSdzIHNlYXJjaCBwYWdlIHRvIHJlbmRlciBpbW1lZGlhdGVseSBiZWZvcmUgc2VhcmNoIHJlc3Vs
dHMgcG9wdWxhdGUgbGF0ZXIuCiAgICAgc3RhdGljIGNvbnN0IGludCBkb2N1bWVudEhlaWdodFRo
cmVzaG9sZCA9IDQ4OwpAQCAtNTEzMCw3ICs1MTM0LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmZpcmVM
YXlvdXRSZWxhdGVkTWlsZXN0bwogICAgIHVwZGF0ZUlzVmlzdWFsbHlOb25FbXB0eSgpOwogCiAg
ICAgLy8gSWYgdGhlIGxheW91dCB3YXMgZG9uZSB3aXRoIHBlbmRpbmcgc2hlZXRzLCB3ZSBhcmUg
bm90IGluIGZhY3QgdmlzdWFsbHkgbm9uLWVtcHR5IHlldC4KLSAgICBpZiAobV9pc1Zpc3VhbGx5
Tm9uRW1wdHkgJiYgIWZyYW1lKCkuZG9jdW1lbnQoKS0+ZGlkTGF5b3V0V2l0aFBlbmRpbmdTdHls
ZXNoZWV0cygpICYmIG1fZmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Q2FsbGJhY2tQZW5kaW5n
KSB7CisgICAgaWYgKG1faXNWaXN1YWxseU5vbkVtcHR5ICYmbV9maXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRDYWxsYmFja1BlbmRpbmcpIHsKICAgICAgICAgbV9maXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRDYWxsYmFja1BlbmRpbmcgPSBmYWxzZTsKICAgICAgICAgaWYgKHJlcXVlc3RlZE1p
bGVzdG9uZXMgJiBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpCiAgICAgICAgICAgICBt
aWxlc3RvbmVzQWNoaWV2ZWQgfD0gRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAyMTM0
NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTcxLDEwICsxNTcxLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnQKIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIC8v
IEF2b2lkIHBhaW50aW5nIGRlc2NlbmRhbnRzIG9mIHRoZSByb290IGVsZW1lbnQgd2hlbiBzdHls
ZXNoZWV0cyBoYXZlbid0IGxvYWRlZC4gIFRoaXMgZWxpbWluYXRlcyBGT1VDLgotICAgIC8vIEl0
J3Mgb2sgbm90IHRvIGRyYXcsIGJlY2F1c2UgbGF0ZXIgb24sIHdoZW4gYWxsIHRoZSBzdHlsZXNo
ZWV0cyBkbyBsb2FkLCBzdHlsZVJlc29sdmVyQ2hhbmdlZCgpIG9uIHRoZSBEb2N1bWVudAotICAg
IC8vIHdpbGwgZG8gYSBmdWxsIHJlcGFpbnQuCi0gICAgaWYgKGRvY3VtZW50KCkuZGlkTGF5b3V0
V2l0aFBlbmRpbmdTdHlsZXNoZWV0cygpICYmICFpc1JlbmRlclZpZXcoKSkKKyAgICAvLyBTdHls
ZSBpcyBub24tZmluYWwgaWYgdGhlIGVsZW1lbnQgaGFzIGEgcGVuZGluZyBzdHlsZXNoZWV0IGJl
Zm9yZSBpdC4gV2UgZW5kIHVwIHdpdGggcmVuZGVyZXJzIHdpdGggc3VjaCBzdHlsZXMgaWYgYSBz
Y3JpcHQKKyAgICAvLyBmb3JjZXMgcmVuZGVyZXIgY29uc3RydWN0aW9uIGJ5IHF1ZXJ5aW5nIHNv
bWV0aGluZyBsYXlvdXQgZGVwZW5kZW50LgorICAgIC8vIEF2b2lkIEZPVUMgYnkgbm90IHBhaW50
aW5nLiBTd2l0Y2hpbmcgdG8gZmluYWwgc3R5bGUgdHJpZ2dlcnMgcmVwYWludC4KKyAgICBpZiAo
c3R5bGUoKS5pc05vdEZpbmFsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChjaGlsZHJl
bklubGluZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CShyZXZpc2lvbiAyMTM0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTM4LDEwICszOTM4LDcgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNob3VsZERvU29mdHdhcmVQYWludAogICAgIAogc3RhdGljIGlubGluZSBib29sIHNo
b3VsZFN1cHByZXNzUGFpbnRpbmdMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCiB7Ci0gICAgLy8g
QXZvaWQgcGFpbnRpbmcgZGVzY2VuZGFudHMgb2YgdGhlIHJvb3QgbGF5ZXIgd2hlbiBzdHlsZXNo
ZWV0cyBoYXZlbid0IGxvYWRlZC4gVGhpcyBlbGltaW5hdGVzIEZPVUMuCi0gICAgLy8gSXQncyBv
ayBub3QgdG8gZHJhdywgYmVjYXVzZSBsYXRlciBvbiwgd2hlbiBhbGwgdGhlIHN0eWxlc2hlZXRz
IGRvIGxvYWQsIHVwZGF0ZVN0eWxlU2VsZWN0b3Igb24gdGhlIERvY3VtZW50Ci0gICAgLy8gd2ls
bCBkbyBhIGZ1bGwgcmVwYWludCgpLgotICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRpZExheW91dFdpdGhQZW5kaW5nU3R5bGVzaGVldHMoKSAmJiAhbGF5ZXItPmlzUm9vdExh
eWVyKCkgJiYgIWxheWVyLT5yZW5kZXJlcigpLmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSkK
KyAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5pc05vdEZpbmFsKCkgJiYgIWxheWVy
LT5pc1Jvb3RMYXllcigpICYmICFsYXllci0+cmVuZGVyZXIoKS5pc0RvY3VtZW50RWxlbWVudFJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQXZvaWQgcGFpbnRpbmcg
YWxsIGxheWVycyBpZiB0aGUgZG9jdW1lbnQgaXMgaW4gYSBzdGF0ZSB3aGVyZSB2aXN1YWwgdXBk
YXRlcyBhcmVuJ3QgYWxsb3dlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMjEzNDQ2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUz
LDYgKzg1Myw5IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWludCgKICAg
ICAgICAgfHwgbV9yYXJlSW5oZXJpdGVkRGF0YS0+aW1hZ2VSZW5kZXJpbmcgIT0gb3RoZXIubV9y
YXJlSW5oZXJpdGVkRGF0YS0+aW1hZ2VSZW5kZXJpbmcpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CisgICAgaWYgKG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPmlzTm90RmluYWwgIT0gb3RoZXIubV9y
YXJlTm9uSW5oZXJpdGVkRGF0YS0+aXNOb3RGaW5hbCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICAgICBpZiAobV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+c2hhcGVPdXRzaWRlICE9IG90aGVyLm1f
cmFyZU5vbkluaGVyaXRlZERhdGEtPnNoYXBlT3V0c2lkZSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
CShyZXZpc2lvbiAyMTM0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0NSw4ICsxNjQ1LDkgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBJc29sYXRpb24gaW5pdGlhbElzb2xhdGlvbigpIHsgcmV0dXJuIElzb2xhdGlv
bkF1dG87IH0KICNlbmRpZgogCi0gICAgYm9vbCBpc1BsYWNlaG9sZGVyU3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5pc1BsYWNlaG9sZGVyU3R5bGU7IH0KLSAg
ICB2b2lkIHNldElzUGxhY2Vob2xkZXJTdHlsZSgpIHsgU0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0
ZWREYXRhLCBpc1BsYWNlaG9sZGVyU3R5bGUsIHRydWUpOyB9CisgICAgLy8gSW5kaWNhdGVzIHRo
ZSBzdHlsZSBpcyBsaWtlbHkgdG8gY2hhbmdlIGR1ZSB0byBhIHBlbmRpbmcgc3R5bGVzaGVldCBs
b2FkLgorICAgIGJvb2wgaXNOb3RGaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVy
aXRlZERhdGEtPmlzTm90RmluYWw7IH0KKyAgICB2b2lkIHNldElzTm90RmluYWwoKSB7IFNFVF9W
QVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgaXNOb3RGaW5hbCwgdHJ1ZSk7IH0KIAogICAgIHZv
aWQgc2V0VmlzaXRlZExpbmtDb2xvcihjb25zdCBDb2xvciYpOwogICAgIHZvaWQgc2V0VmlzaXRl
ZExpbmtCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihtX3JhcmVOb25J
bmhlcml0ZWREYXRhLCB2aXNpdGVkTGlua0JhY2tncm91bmRDb2xvciwgdik7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YS5jcHAJKHJldmlzaW9uIDIxMzQ0NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OlN0eWxl
UmFyZU5vbkkKICAgICAsIGJyZWFrSW5zaWRlKFJlbmRlclN0eWxlOjppbml0aWFsQnJlYWtJbnNp
ZGUoKSkKICAgICAsIHJlc2l6ZShSZW5kZXJTdHlsZTo6aW5pdGlhbFJlc2l6ZSgpKQogICAgICwg
aGFzQXR0ckNvbnRlbnQoZmFsc2UpCi0gICAgLCBpc1BsYWNlaG9sZGVyU3R5bGUoZmFsc2UpCisg
ICAgLCBpc05vdEZpbmFsKGZhbHNlKQogewogICAgIG1hc2tCb3hJbWFnZS5zZXRNYXNrRGVmYXVs
dHMoKTsKIH0KQEAgLTIwMCw3ICsyMDAsNyBAQCBpbmxpbmUgU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YTo6U3R5bGVSCiAgICAgLCBicmVha0luc2lkZShvLmJyZWFrSW5zaWRlKQogICAgICwgcmVz
aXplKG8ucmVzaXplKQogICAgICwgaGFzQXR0ckNvbnRlbnQoby5oYXNBdHRyQ29udGVudCkKLSAg
ICAsIGlzUGxhY2Vob2xkZXJTdHlsZShvLmlzUGxhY2Vob2xkZXJTdHlsZSkKKyAgICAsIGlzTm90
RmluYWwoby5pc05vdEZpbmFsKQogewogfQogCkBAIC0zMDQsNyArMzA0LDcgQEAgYm9vbCBTdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcgogICAgICAgICAmJiBicmVha0luc2lkZSA9
PSBvLmJyZWFrSW5zaWRlCiAgICAgICAgICYmIHJlc2l6ZSA9PSBvLnJlc2l6ZQogICAgICAgICAm
JiBoYXNBdHRyQ29udGVudCA9PSBvLmhhc0F0dHJDb250ZW50Ci0gICAgICAgICYmIGlzUGxhY2Vo
b2xkZXJTdHlsZSA9PSBvLmlzUGxhY2Vob2xkZXJTdHlsZTsKKyAgICAgICAgJiYgaXNOb3RGaW5h
bCA9PSBvLmlzTm90RmluYWw7CiB9CiAKIGJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6
Y29udGVudERhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG90
aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCShyZXZpc2lvbiAyMTM0NDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgcHVibGljOgogCiAgICAgdW5z
aWduZWQgaGFzQXR0ckNvbnRlbnQgOiAxOwogCi0gICAgdW5zaWduZWQgaXNQbGFjZWhvbGRlclN0
eWxlIDogMTsKKyAgICB1bnNpZ25lZCBpc05vdEZpbmFsIDogMTsKIAogcHJpdmF0ZToKICAgICBT
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNj
b3BlLmNwcAkocmV2aXNpb24gMjEzNTE1KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVT
Y29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OSw3ICszODksNyBAQCBTY29wZTo6U3R5bGVS
ZXNvbHZlclVwZGF0ZVR5cGUgU2NvcGU6OmFuCiAgICAgYXV0byBzdHlsZVJlc29sdmVyVXBkYXRl
VHlwZSA9IGhhc0luc2VydGlvbnMgPyBSZXNldCA6IEFkZGl0aXZlOwogCiAgICAgLy8gSWYgd2Ug
YXJlIGFscmVhZHkgcGFyc2luZyB0aGUgYm9keSBhbmQgc28gbWF5IGhhdmUgc2lnbmlmaWNhbnQg
YW1vdW50IG9mIGVsZW1lbnRzLCBwdXQgc29tZSBlZmZvcnQgaW50byB0cnlpbmcgdG8gYXZvaWQg
c3R5bGUgcmVjYWxjcy4KLSAgICBpZiAoIW1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKSB8fCBt
X2RvY3VtZW50Lmhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKSkKKyAgICBpZiAoIW1fZG9j
dW1lbnQuYm9keU9yRnJhbWVzZXQoKSB8fCBtX2RvY3VtZW50Lmhhc05vZGVzV2l0aE5vbkZpbmFs
U3R5bGUoKSkKICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlOwogCiAgICAg
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyBpbnZhbGlkYXRpb25BbmFseXNpcyhhZGRlZFNoZWV0
cywgc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCkpOwpAQCAtNDQwLDcgKzQ0MCw3
IEBAIHZvaWQgU2NvcGU6OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGEKIAogICAgIC8vIERv
bid0IGJvdGhlciB1cGRhdGluZywgc2luY2Ugd2UgaGF2ZW4ndCBsb2FkZWQgYWxsIG91ciBzdHls
ZSBpbmZvIHlldAogICAgIC8vIGFuZCBoYXZlbid0IGNhbGN1bGF0ZWQgdGhlIHN0eWxlIHJlc29s
dmVyIGZvciB0aGUgZmlyc3QgdGltZS4KLSAgICBpZiAoIW1fc2hhZG93Um9vdCAmJiAhbV9kaWRV
cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyAmJiBoYXNQZW5kaW5nU2hlZXRzKCkpIHsKKyAgICBpZiAo
IW1fc2hhZG93Um9vdCAmJiAhbV9kaWRVcGRhdGVBY3RpdmVTdHlsZVNoZWV0cyAmJiBoYXNQZW5k
aW5nU2hlZXRzQmVmb3JlQm9keSgpKSB7CiAgICAgICAgIGNsZWFyUmVzb2x2ZXIoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJl
c29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVS
ZXNvbHZlci5jcHAJKHJldmlzaW9uIDIxMzUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMjQgKzUxLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgU3R5bGUgewogCi1zdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBtYWtlUGxhY2Vob2xkZXJTdHlsZShEb2N1bWVudCYgZG9jdW1l
bnQpCi17Ci0gICAgYXV0byBwbGFjZWhvbGRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZVB0
cigpOwotICAgIHBsYWNlaG9sZGVyU3R5bGUtPnNldERpc3BsYXkoTk9ORSk7Ci0gICAgcGxhY2Vo
b2xkZXJTdHlsZS0+c2V0SXNQbGFjZWhvbGRlclN0eWxlKCk7Ci0KLSAgICBGb250Q2FzY2FkZURl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFt
aWx5KHN0YW5kYXJkRmFtaWx5KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVG
cm9tSWRlbnRpZmllcihDU1NWYWx1ZU1lZGl1bSk7Ci0gICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZhbHNlLCBkb2N1bWVudCk7Ci0gICAg
Zm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShzaXplKTsKLSAgICBwbGFjZWhvbGRlclN0eWxlLT5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLQotICAgIHBsYWNlaG9sZGVyU3R5bGUtPmZv
bnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7Ci0gICAgcmV0dXJu
IHBsYWNlaG9sZGVyU3R5bGU7Ci19Ci0KIFRyZWVSZXNvbHZlcjo6VHJlZVJlc29sdmVyKERvY3Vt
ZW50JiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CkBAIC0xMjYsMTEg
KzEwOCw2IEBAIHZvaWQgVHJlZVJlc29sdmVyOjpwb3BTY29wZSgpCiAKIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gVHJlZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKQogewotICAgIGlmIChtX2Rp
ZFNlZVBlbmRpbmdTdHlsZXNoZWV0ICYmICFlbGVtZW50LnJlbmRlcmVyKCkgJiYgIW1fZG9jdW1l
bnQuaXNJZ25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cygpKSB7Ci0gICAgICAgIG1fZG9jdW1lbnQu
c2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwotICAgICAgICByZXR1cm4gbWFrZVBs
YWNlaG9sZGVyU3R5bGUobV9kb2N1bWVudCk7Ci0gICAgfQotCiAgICAgaWYgKGVsZW1lbnQuaGFz
Q3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHNo
YWRvd0hvc3RTdHlsZSA9IHNjb3BlKCkuc2hhZG93Um9vdCA/IG1fdXBkYXRlLT5lbGVtZW50U3R5
bGUoKnNjb3BlKCkuc2hhZG93Um9vdC0+aG9zdCgpKSA6IG51bGxwdHI7CiAgICAgICAgIGlmIChh
dXRvIGN1c3RvbVN0eWxlID0gZWxlbWVudC5yZXNvbHZlQ3VzdG9tU3R5bGUoaW5oZXJpdGVkU3R5
bGUsIHNoYWRvd0hvc3RTdHlsZSkpIHsKQEAgLTE5MCwxNSArMTY3LDI1IEBAIHN0YXRpYyBib29s
IGFmZmVjdHNSZW5kZXJlZFN1YnRyZWUoRWxlbWUKIAogRWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2
ZXI6OnJlc29sdmVFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CisgICAgaWYgKG1fZGlkU2Vl
UGVuZGluZ1N0eWxlc2hlZXQgJiYgIWVsZW1lbnQucmVuZGVyZXIoKSAmJiAhbV9kb2N1bWVudC5p
c0lnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKCkpIHsKKyAgICAgICAgbV9kb2N1bWVudC5zZXRI
YXNOb2Rlc1dpdGhOb25GaW5hbFN0eWxlKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CiAgICAgYXV0byBuZXdTdHlsZSA9IHN0eWxlRm9yRWxlbWVudChlbGVtZW50LCBwYXJlbnQoKS5z
dHlsZSk7CiAKICAgICBpZiAoIWFmZmVjdHNSZW5kZXJlZFN1YnRyZWUoZWxlbWVudCwgKm5ld1N0
eWxlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gdXBkYXRlID0gY3JlYXRlQW5p
bWF0ZWRFbGVtZW50VXBkYXRlKFdURk1vdmUobmV3U3R5bGUpLCBlbGVtZW50LCBwYXJlbnQoKS5j
aGFuZ2UpOwotCiAgICAgYXV0byogZXhpc3RpbmdTdHlsZSA9IGVsZW1lbnQucmVuZGVyU3R5bGUo
KTsKIAorICAgIGlmIChtX2RpZFNlZVBlbmRpbmdTdHlsZXNoZWV0ICYmICghZXhpc3RpbmdTdHls
ZSB8fCBleGlzdGluZ1N0eWxlLT5pc05vdEZpbmFsKCkpKSB7CisgICAgICAgIG5ld1N0eWxlLT5z
ZXRJc05vdEZpbmFsKCk7CisgICAgICAgIG1fZG9jdW1lbnQuc2V0SGFzTm9kZXNXaXRoTm9uRmlu
YWxTdHlsZSgpOworICAgIH0KKworICAgIGF1dG8gdXBkYXRlID0gY3JlYXRlQW5pbWF0ZWRFbGVt
ZW50VXBkYXRlKFdURk1vdmUobmV3U3R5bGUpLCBlbGVtZW50LCBwYXJlbnQoKS5jaGFuZ2UpOwor
CiAgICAgaWYgKCZlbGVtZW50ID09IG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkpIHsKICAg
ICAgICAgbV9kb2N1bWVudEVsZW1lbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cigqdXBk
YXRlLnN0eWxlKTsKICAgICAgICAgc2NvcGUoKS5zdHlsZVJlc29sdmVyLnNldE92ZXJyaWRlRG9j
dW1lbnRFbGVtZW50U3R5bGUobV9kb2N1bWVudEVsZW1lbnRTdHlsZS5nZXQoKSk7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTM0NDYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0wMy0wOCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgTG9hZGluZyBpbi1ib2R5IHN0eWxlc2hlZXRzIHNob3VsZCBu
b3QgYmxvY2sgcmVuZGVyaW5nIG9mIGVsZW1lbnRzIGJlZm9yZSB0aGVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkzNDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5jcmVtZW50
YWwvcmVzb3VyY2VzL2RlbGF5ZWQtY3NzLnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9pbmNyZW1lbnRhbC9zdHlsZXNoZWV0LWJvZHktaW5jcmVtZW50YWwtcmVuZGVyaW5nLWV4cGVj
dGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5jcmVtZW50YWwvc3R5bGVz
aGVldC1ib2R5LWluY3JlbWVudGFsLXJlbmRlcmluZy5odG1sOiBBZGRlZC4KKwogMjAxNy0wMy0w
NiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgcmVu
ZGVyIHRyZWUgYnVpbGRpbmcgYmVmb3JlIGxvYWRpbmcgc3R5bGVzaGVldCBlbGVtZW50cwpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9zdHlsZXNoZWV0LWJvZHktaW5j
cmVtZW50YWwtcmVuZGVyaW5nLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9zdHlsZXNoZWV0LWJvZHktaW5jcmVtZW50YWwtcmVu
ZGVyaW5nLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbmNyZW1lbnRhbC9zdHlsZXNoZWV0LWJvZHktaW5jcmVtZW50YWwtcmVuZGVyaW5nLWV4
cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACis8ZGl2IHN0eWxlPSJ3
aWR0aDoxMDBweDsgaGVpZ2h0OjEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuIj48L2Rpdj4K
KzxkaXYgc3R5bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHg7IGJhY2tncm91bmQtY29sb3I6
Z3JlZW4iPjwvZGl2PgorPHA+CitCZWZvcmUgc3R5bGVzaGVldCBsb2FkOiAocmVwYWludCByZWN0
cyAocmVjdCA4IDggMTAwIDEwMCkgKTxicj4KK0FmdGVyIHN0eWxlc2hlZXQgbG9hZDogKHJlcGFp
bnQgcmVjdHMgKHJlY3QgOCAxMDggMTAwIDEwMCkgKTxicj4KKzwvcD4KSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5jcmVtZW50YWwvc3R5bGVzaGVldC1ib2R5LWluY3JlbWVudGFsLXJl
bmRlcmluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5jcmVt
ZW50YWwvc3R5bGVzaGVldC1ib2R5LWluY3JlbWVudGFsLXJlbmRlcmluZy5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5jcmVtZW50YWwvc3R5bGVzaGVldC1i
b2R5LWluY3JlbWVudGFsLXJlbmRlcmluZy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjQgQEAKKzxib2R5PgorPHNjcmlwdD4KK2RvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7CisKK2lu
dGVybmFscy5zdGFydFRyYWNraW5nUmVwYWludHMoKTsKK2xldCBpbml0aWFsUmVjdHM7CitzZXRU
aW1lb3V0KCgpID0+IHsKKyAgIGluaXRpYWxSZWN0cyA9IGludGVybmFscy5yZXBhaW50UmVjdHNB
c1RleHQoKTsKKyAgIGludGVybmFscy5zdG9wVHJhY2tpbmdSZXBhaW50cygpOworICAgaW50ZXJu
YWxzLnN0YXJ0VHJhY2tpbmdSZXBhaW50cygpOworfSwgMCk7CisKK2RvY3VtZW50LmJvZHkub25s
b2FkID0gKCkgPT4geworICAgIGxldCBmaW5hbFJlY3RzID0gaW50ZXJuYWxzLnJlcGFpbnRSZWN0
c0FzVGV4dCgpOworICAgIGludGVybmFscy5zdG9wVHJhY2tpbmdSZXBhaW50cygpOworICAgIGRv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IGA8cD4KKyAgICAgICAgQmVmb3JlIHN0eWxlc2hlZXQg
bG9hZDogJHtpbml0aWFsUmVjdHN9PGJyPgorICAgICAgICBBZnRlciBzdHlsZXNoZWV0IGxvYWQ6
ICR7ZmluYWxSZWN0c308YnI+CisgICAgPC9wPmA7Cit9OworPC9zY3JpcHQ+Cis8ZGl2IHN0eWxl
PSJ3aWR0aDoxMDBweDsgaGVpZ2h0OjEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuIj48L2Rp
dj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2RlbGF5ZWQtY3NzLnBo
cD9kZWxheT0zMDAiPgorPGRpdiBjbGFzcz1kZWxheWVkIHN0eWxlPSJ3aWR0aDoxMDBweDsgaGVp
Z2h0OjEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOnJlZCI+PC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2luY3JlbWVudGFsL3Jlc291cmNlcy9kZWxheWVkLWNzcy5waHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9yZXNvdXJjZXMvZGVs
YXllZC1jc3MucGhwCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5j
cmVtZW50YWwvcmVzb3VyY2VzL2RlbGF5ZWQtY3NzLnBocAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDggQEAKKzw/cGhwCitoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBuby1zdG9y
ZSIpOworaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvY3NzIik7CisKKyRkZWxheSA9ICRfR0VU
WydkZWxheSddOwordXNsZWVwKCRkZWxheSAqIDEwMDApOworPz4KKy5kZWxheWVkIHsgYmFja2dy
b3VuZC1jb2xvcjogZ3JlZW4gIWltcG9ydGFudCB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304042</attachid>
            <date>2017-03-10 07:33:07 -0800</date>
            <delta_ts>2017-03-27 14:30:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>incremental-rendering-stylesheet-8.patch</filename>
            <type>text/plain</type>
            <size>27216</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDE3LTAzLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyB0aGUgcGFnZSB0byBy
ZW5kZXIgYmVmb3JlIDxsaW5rPiBzdHlsZXNoZWV0IHRhZ3MgaW4gYm9keQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MTU3CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNDY1ODgzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIu
CisKKyAgICAgICAgQ3VycmVudGx5IHdlIGJsb2NrIHN0eWxlIGFuZCByZW5kZXJlciBidWlsZGlu
ZyBjb21wbGV0ZWx5IGlmIGRvY3VtZW50IGhhcyBhbnkgbG9hZGluZworICAgICAgICBzdHlsZXNo
ZWV0cy4gSW4gY2FzZSBhIHNjcmlwdCBxdWVyaWVzIHNvbWV0aGluZyBsYXlvdXQgZGVwZW5kZW50
IHdlIGNvbnN0cnVjdCB0aGUgcmVuZGVyCisgICAgICAgIHRyZWUgd2l0aCB3aGF0ZXZlciBzdHls
ZSB3ZSBoYXZlIGJ1dCBibG9jayBwYWludGluZyBpbiBpdC4KKworICAgICAgICBUaGlzIHBhdGNo
IGNoYW5nZXMgYmVoYXZpb3Igc28gdGhhdCBhIGxvYWRpbmcgc3R5bGVzaGVldCBpbiBib2R5IG9u
bHkgYmxvY2tzIHJlbmRlcmluZyBmb3IgZWxlbWVudHMKKyAgICAgICAgdGhhdCBhcmUgYWZ0ZXIg
aXQuIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHN1Y2ggc3R5bGVzaGVldHMgcmFyZWx5IGFmZmVj
dCBlbGVtZW50cyBiZWZvcmUgdGhlbQorICAgICAgICBhbmQgdGhlIGVsZW1lbnRzIGNhbiBiZSBy
ZW5kZXJlZCB3aXRob3V0IGNhdXNpbmcgdWdseSB2aXNpYmxlIHN0eWxpbmcgY2hhbmdlcy4KKwor
ICAgICAgICBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG9sZCBmbGFzaC1vZi11bnN0eWxlZC1jb250
ZW50IChGT1VDKSBwcmV2ZW50YXRpb24gbWVjaGFuaXNtIHdpdGggYSBtb3JlCisgICAgICAgIGZp
bmUtZ3JhaW5lZCBvbmUuIFBhaW50IGJsb2NraW5nIGlzIG5vdyBkb25lIG9uIHBlci1yZW5kZXJl
ciBiYXNpcyB3aXRoIGJhc2VkIG9uIGlzTm9uRmluYWwgZmxhZyBpbgorICAgICAgICBSZW5kZXJT
dHlsZS4KKworICAgICAgICBGb3Igc3R5bGVzaGVldHMgaW4gaGVhZCB0aGUgYmVoYXZpb3Igc2hv
dWxkIGJlIGxhcmdlbHkgdW5jaGFuZ2VkLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvaW5j
cmVtZW50YWwvc3R5bGVzaGVldC1ib2R5LWluY3JlbWVudGFsLXJlbmRlcmluZy5odG1sCisKKyAg
ICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpOgorCisgICAgICAg
ICAgICBSZW1vdmUgdGhlIG9sZCBGT1VDIHByZXZlbnRhdGlvbiBzdGF0ZSB0cmFja2luZy4KKwor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNob3VsZFNjaGVkdWxlTGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRSZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCk6CisK
KyAgICAgICAgICAgIFJlcGFpbnRzIHdpbGwgbm93IGdldCB0cmlnZ2VyZWQgYnkgdGhlIG5vcm1h
bCBzdHlsZSBtZWNoYW5pc20uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpoYXNOb2Rlc1dpdGhOb25GaW5hbFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpzZXRIYXNOb2Rlc1dpdGhOb25GaW5hbFN0eWxlKToKKworICAg
ICAgICAgICAgVHJhY2sgaWYgd2UgbmVlZCB0byByZWNvbXB1dGUgdGhlIHN0eWxlIGxhdGVyIGJl
Y2F1c2Ugbm9uLWZpbmFsIG9yIHVuc3R5bGVkIGVsZW1lbnRzLgorCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6ZGlkTGF5b3V0V2l0aFBlbmRpbmdTdHlsZXNoZWV0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SGFzTm9kZXNXaXRoUGxh
Y2Vob2xkZXJTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OnJlbmRlcmVy
SXNOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6cXVhbGlmaWVzQXNWaXN1YWxseU5vbkVtcHR5KToKKworICAgICAgICAg
ICAgRG9uJ3QgcXVhbGlmeSBhcyB2aXN1YWxseSBub24tZW1wdHkgaWYgd2UgaGF2ZSBsb2FkaW5n
IHN0eWxlc2hlZXRzIGluIGhlYWQgKGV2ZW4gaWYgdGhlcmUgaXMKKyAgICAgICAgICAgIGEgZm91
Yy1wcmV2ZW50ZWQgcmVuZGVyIHRyZWUpLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OmZpcmVMYXlvdXRSZWxhdGVkTWlsZXN0b25lc0lmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50
Q29udGVudHMpOgorCisgICAgICAgICAgICBJbnN0ZWFkIG9mIGEgZ2xvYmFsIHRlc3QsIGJsb2Nr
IHBhaW50aW5nIGlmIGlzTm9uRmluYWwgaXMgc2V0IGluIHRoZSByZW5kZXJlcidzIHN0eWxlLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNob3VsZFN1cHByZXNzUGFpbnRpbmdMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VS
ZXF1aXJlc1JlcGFpbnQpOgorCisgICAgICAgICAgICBUaGUgaXNOb25GaW5hbCBmbGFnIHByZXZl
bnRzIHBhaW50aW5nIHNvIHdlIG5lZWQgdG8gdHJpZ2dlciByZXBhaW50IHdoZW4gaXQgZ2V0cyBj
bGVhcmVkLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aXNOb3RGaW5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTdHlsZTo6c2V0SXNOb3RGaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6aXNQbGFjZWhvbGRlclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjpzZXRJc1BsYWNlaG9sZGVyU3R5bGUpOiBEZWxldGVkLgorCisgICAgICAgICAg
ICBUaGVyZSBpcyBubyBuZWVkIGZvciBwbGFjZWhvbGRlciBzdHlsZXMgYW55bW9yZS4gUmV1c2Ug
dGhlIGJpdCBmb3IgaXNOb3RGaW5hbC4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGE6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaDoKKyAgICAgICAgKiBz
dHlsZS9TdHlsZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6YW5h
bHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlOjp1
cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6c3R5bGVGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnJlc29sdmVF
bGVtZW50KToKKworICAgICAgICAgICAgSWYgd2UgaGF2ZSBzZWVucyBhIGxvYWRpbmcgc3R5bGVz
aGVldCBhbmQgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyIHlldCBkb24ndCBzdHlsZSB0aGUgZWxlbWVu
dC4KKyAgICAgICAgICAgIEluIGNhc2UgdGhlcmUgaXMgYSByZW5kZXJlciBvciB3ZSBhcmUgaWdu
b3JpbmcgcGVuZGluZyBzaGVldHMsIHJlc29sdmUgdGhlIHN0eWxlIG5vcm1hbGx5CisgICAgICAg
ICAgICBidXQgbWFyayBpdCBhcyBub24tZmluYWwuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjptYWtlUGxhY2Vob2xkZXJTdHlsZSk6IERlbGV0ZWQuCisKIDIwMTctMDMtMDggIEVucmlxdWUg
T2Nhw7FhIEdvbnrDoWxleiAgPGVvY2FuaGFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVh
bWVyXVtNU0VdIEFjdHVhbGx5IGltcGxlbWVudCBmbHVzaCgpIG9uIHBsYXliYWNrIHBpcGVsaW5l
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyMTM0NDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwOTIsOCArMTA5Miw4IEBAIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gU3R5bGVSZXNv
bHZlcjoKIAogVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9T
dHlsZVJ1bGVzRm9yRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50LCBQc2V1ZG9JZCBwc2V1
ZG9JZCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUpCiB7Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFl
bGVtZW50LT5kb2N1bWVudCgpLmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQotICAgICAgICByZXR1
cm4gVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PigpOworICAgIGlmICghZWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIG1fc3RhdGUgPSBTdGF0ZSgqZWxlbWVudCwgbnVsbHB0cik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjEzNDQ2KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQyLDkgKzQ0
Miw4IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFUKICNlbmRpZgog
ICAgICwgbV9yZWZlcmVuY2luZ05vZGVDb3VudCgwKQogICAgICwgbV9zZXR0aW5ncyhmcmFtZSA/
IFJlZjxTZXR0aW5ncz4oZnJhbWUtPnNldHRpbmdzKCkpIDogU2V0dGluZ3M6OmNyZWF0ZShudWxs
cHRyKSkKLSAgICAsIG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZShmYWxzZSkKKyAgICAs
IG1faGFzTm9kZXNXaXRoTm9uRmluYWxTdHlsZShmYWxzZSkKICAgICAsIG1faWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKGZhbHNlKQotICAgICwgbV9wZW5kaW5nU2hlZXRMYXlvdXQoTm9MYXlvdXRX
aXRoUGVuZGluZ1NoZWV0cykKICAgICAsIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXIobV9mcmFtZSA/
IFJlZjxDYWNoZWRSZXNvdXJjZUxvYWRlcj4obV9mcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1l
bnRMb2FkZXIoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSkgOiBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6Y3JlYXRlKG51bGxwdHIpKQogICAgICwgbV9hY3RpdmVQYXJzZXJDb3VudCgwKQogICAgICwg
bV93ZWxsRm9ybWVkKGZhbHNlKQpAQCAtMTc4Miw3ICsxNzgxLDcgQEAgdm9pZCBEb2N1bWVudDo6
cmVzb2x2ZVN0eWxlKFJlc29sdmVTdHlsZQogCiAgICAgICAgIGlmICh0eXBlID09IFJlc29sdmVT
dHlsZVR5cGU6OlJlYnVpbGQpIHsKICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGdldCBzZXQgYWdh
aW4gZHVyaW5nIHN0eWxlIHJlc29sdmUuCi0gICAgICAgICAgICBtX2hhc05vZGVzV2l0aFBsYWNl
aG9sZGVyU3R5bGUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1faGFzTm9kZXNXaXRoTm9uRmluYWxT
dHlsZSA9IGZhbHNlOwogCiAgICAgICAgICAgICBhdXRvIGRvY3VtZW50U3R5bGUgPSBTdHlsZTo6
cmVzb2x2ZUZvckRvY3VtZW50KCp0aGlzKTsKIApAQCAtMTgxOCw2ICsxODE3LDkgQEAgdm9pZCBE
b2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJlc29sdmVTdHlsZQogICAgICAgICB9CiAKICAgICAgICAg
dXBkYXRlZENvbXBvc2l0aW5nTGF5ZXJzID0gZnJhbWVWaWV3LnVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpOworCisgICAgICAgIGlmIChtX3JlbmRlclZpZXctPm5lZWRz
TGF5b3V0KCkpCisgICAgICAgICAgICBmcmFtZVZpZXcuc2NoZWR1bGVSZWxheW91dCgpOwogICAg
IH0KIAogICAgIC8vIElmIHdlIHdhbnRlZCB0byBjYWxsIGltcGxpY2l0Q2xvc2UoKSBkdXJpbmcg
cmVjYWxjU3R5bGUsIGRvIHNvIG5vdyB0aGF0IHdlJ3JlIGZpbmlzaGVkLgpAQCAtMTkxMSwzMyAr
MTkxMywxNCBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXQoKQogICAgICAgICBmcmFtZVZp
ZXctPmxheW91dCgpOwogfQogCi0vLyBGSVhNRTogVGhpcyBpcyBhIGJhZCBpZGVhIGFuZCBuZWVk
cyB0byBiZSByZW1vdmVkIGV2ZW50dWFsbHkuCi0vLyBPdGhlciBicm93c2VycyBsb2FkIHN0eWxl
c2hlZXRzIGJlZm9yZSB0aGV5IGNvbnRpbnVlIHBhcnNpbmcgdGhlIHdlYiBwYWdlLgotLy8gU2lu
Y2Ugd2UgZG9uJ3QsIHdlIGNhbiBydW4gSmF2YVNjcmlwdCBjb2RlIHRoYXQgbmVlZHMgYW5zd2Vy
cyBiZWZvcmUgdGhlCi0vLyBzdHlsZXNoZWV0cyBhcmUgbG9hZGVkLiBEb2luZyBhIGxheW91dCBp
Z25vcmluZyB0aGUgcGVuZGluZyBzdHlsZXNoZWV0cwotLy8gbGV0cyB1cyBnZXQgcmVhc29uYWJs
ZSBhbnN3ZXJzLiBUaGUgbG9uZyB0ZXJtIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcwotLy8g
dG8gaW5zdGVhZCBzdXNwZW5kIEphdmFTY3JpcHQgZXhlY3V0aW9uLgogdm9pZCBEb2N1bWVudDo6
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKERvY3VtZW50OjpSdW5Qb3N0TGF5
b3V0VGFza3MgcnVuUG9zdExheW91dFRhc2tzKQogewogICAgIGJvb2wgb2xkSWdub3JlID0gbV9p
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHM7CiAKICAgICBpZiAoIWhhdmVTdHlsZXNoZWV0c0xvYWRl
ZCgpKSB7CiAgICAgICAgIG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzID0gdHJ1ZTsKLSAgICAg
ICAgLy8gRklYTUU6IFdlIGFyZSB3aWxsaW5nIHRvIGF0dGVtcHQgdG8gc3VwcHJlc3MgcGFpbnRp
bmcgd2l0aCBvdXRkYXRlZCBzdHlsZSBpbmZvIG9ubHkgb25jZS4gIE91ciBhc3N1bXB0aW9uIGlz
IHRoYXQgaXQgd291bGQgYmUKLSAgICAgICAgLy8gZGFuZ2Vyb3VzIHRvIHRyeSB0byBzdG9wIGl0
IGEgc2Vjb25kIHRpbWUsIGFmdGVyIHBhZ2UgY29udGVudCBoYXMgYWxyZWFkeSBiZWVuIGxvYWRl
ZCBhbmQgZGlzcGxheWVkCi0gICAgICAgIC8vIHdpdGggYWNjdXJhdGUgc3R5bGUgaW5mb3JtYXRp
b24uICAoT3VyIHN1cHByZXNzaW9uIGludm9sdmVzIGJsYW5raW5nIHRoZSB3aG9sZSBwYWdlIGF0
IHRoZQotICAgICAgICAvLyBtb21lbnQuICBJZiBpdCB3ZXJlIG1vcmUgcmVmaW5lZCwgd2UgbWln
aHQgYmUgYWJsZSB0byBkbyBzb21ldGhpbmcgYmV0dGVyLikKLSAgICAgICAgLy8gSXQncyB3b3J0
aCBub3RpbmcgdGhvdWdoIHRoYXQgdGhpcyBlbnRpcmUgbWV0aG9kIGlzIGEgaGFjaywgc2luY2Ug
d2hhdCB3ZSByZWFsbHkgd2FudCB0byBkbyBpcwotICAgICAgICAvLyBzdXNwZW5kIEpTIGluc3Rl
YWQgb2YgZG9pbmcgYSBsYXlvdXQgd2l0aCBpbmFjY3VyYXRlIGluZm9ybWF0aW9uLgotICAgICAg
ICBIVE1MRWxlbWVudCogYm9keUVsZW1lbnQgPSBib2R5T3JGcmFtZXNldCgpOwotICAgICAgICBp
ZiAoYm9keUVsZW1lbnQgJiYgIWJvZHlFbGVtZW50LT5yZW5kZXJlcigpICYmIG1fcGVuZGluZ1No
ZWV0TGF5b3V0ID09IE5vTGF5b3V0V2l0aFBlbmRpbmdTaGVldHMpIHsKLSAgICAgICAgICAgIG1f
cGVuZGluZ1NoZWV0TGF5b3V0ID0gRGlkTGF5b3V0V2l0aFBlbmRpbmdTaGVldHM7Ci0gICAgICAg
ICAgICBzdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQWN0aXZlU3R5bGVTaGVldENhbmRpZGF0ZXMoKTsK
LSAgICAgICAgICAgIHJlc29sdmVTdHlsZShSZXNvbHZlU3R5bGVUeXBlOjpSZWJ1aWxkKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChtX2hhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUpCi0gICAgICAg
ICAgICAvLyBJZiBuZXcgbm9kZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHN0eWxlIHJlY2FsYyBoYXMg
YmVlbiBkb25lIHdpdGggc3R5bGUgc2hlZXRzIHN0aWxsIHBlbmRpbmcsIHNvbWUgbm9kZXMgCi0g
ICAgICAgICAgICAvLyBtYXkgbm90IGhhdmUgaGFkIHRoZWlyIHJlYWwgc3R5bGUgY2FsY3VsYXRl
ZCB5ZXQuIE5vcm1hbGx5IHRoaXMgZ2V0cyBjbGVhbmVkIHdoZW4gc3R5bGUgc2hlZXRzIGFycml2
ZSAKLSAgICAgICAgICAgIC8vIGJ1dCBoZXJlIHdlIG5lZWQgdXAtdG8tZGF0ZSBzdHlsZSBpbW1l
ZGlhdGVseS4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGp1c3QgaW52YWxpZGF0ZSBl
bGVtZW50cyB3aXRoIG5vbi1maW5hbCBzdHlsZXMuCisgICAgICAgIGlmIChtX2hhc05vZGVzV2l0
aE5vbkZpbmFsU3R5bGUpCiAgICAgICAgICAgICByZXNvbHZlU3R5bGUoUmVzb2x2ZVN0eWxlVHlw
ZTo6UmVidWlsZCk7CiAgICAgfQogCkBAIC0yNzc4LDE0ICsyNzYxLDE2IEBAIHZvaWQgRG9jdW1l
bnQ6OnNldFBhcnNpbmcoYm9vbCBiKQogCiBib29sIERvY3VtZW50OjpzaG91bGRTY2hlZHVsZUxh
eW91dCgpCiB7Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkIHdoZW4g
RnJhbWVWaWV3IHRoaW5rcyBhIGxheW91dCBpcyBuZWVkZWQuCi0gICAgLy8gVGhpcyBlbmZvcmNl
cyBhIGNvdXBsZSBleHRyYSBydWxlcy4KLSAgICAvLwotICAgIC8vICAgIChhKSBPbmx5IHNjaGVk
dWxlIGEgbGF5b3V0IG9uY2UgdGhlIHN0eWxlc2hlZXRzIGFyZSBsb2FkZWQuCi0gICAgLy8gICAg
KGIpIE9ubHkgc2NoZWR1bGUgbGF5b3V0IG9uY2Ugd2UgaGF2ZSBhIGJvZHkgZWxlbWVudC4KKyAg
ICBpZiAoIWRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFpczxIVE1MSHRtbEVsZW1lbnQ+KCpkb2N1bWVudEVsZW1lbnQoKSkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmICghYm9keU9yRnJhbWVzZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChzdHlsZVNjb3BlKCkuaGFzUGVuZGluZ1NoZWV0c0JlZm9yZUJvZHkoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIChoYXZlU3R5bGVzaGVldHNMb2FkZWQo
KSAmJiBib2R5T3JGcmFtZXNldCgpKQotICAgICAgICB8fCAoZG9jdW1lbnRFbGVtZW50KCkgJiYg
IWlzPEhUTUxIdG1sRWxlbWVudD4oKmRvY3VtZW50RWxlbWVudCgpKSk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAgICAgCiBib29sIERvY3VtZW50Ojppc0xheW91dFRpbWVyQWN0aXZlKCkKQEAgLTMw
ODksMTUgKzMwNzQsNiBAQCBGcmFtZSogRG9jdW1lbnQ6OmZpbmRVbnNhZmVQYXJlbnRTY3JvbGxQ
CiAKIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCkKIHsKLSAg
ICBpZiAobV9wZW5kaW5nU2hlZXRMYXlvdXQgPT0gRGlkTGF5b3V0V2l0aFBlbmRpbmdTaGVldHMp
IHsKLSAgICAgICAgLy8gUGFpbnRpbmcgaXMgZGlzYWJsZWQgd2hlbiBkb2luZyBsYXlvdXRzIHdp
dGggcGVuZGluZyBzaGVldHMgdG8gYXZvaWQgRk9VQy4KLSAgICAgICAgLy8gV2UgbmVlZCB0byBm
b3JjZSBwYWludCB3aGVuIGNvbWluZyBvdXQgZnJvbSB0aGlzIHN0YXRlLgotICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBub3QgdmVyeSBlbGVnYW50LgotICAgICAgICBtX3BlbmRpbmdTaGVldExh
eW91dCA9IElnbm9yZUxheW91dFdpdGhQZW5kaW5nU2hlZXRzOwotICAgICAgICBpZiAocmVuZGVy
VmlldygpKQotICAgICAgICAgICAgcmVuZGVyVmlldygpLT5yZXBhaW50Vmlld0FuZENvbXBvc2l0
ZWRMYXllcnMoKTsKLSAgICB9Ci0KICAgICBpZiAoYXV0byogcGFyc2VyID0gc2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyKCkpCiAgICAgICAgIHBhcnNlci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9y
U3R5bGVzaGVldHNTb29uKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24g
MjEzNDQ2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTkzNywxMiArOTM3LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxYUGF0
aE5TUmVzb2x2ZXI+IGNyZWF0ZU5TUmVzb2x2ZXIoTm9kZSogbm9kZVJlc29sdmVyKTsKICAgICBX
RUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxSZWY8WFBhdGhSZXN1bHQ+PiBldmFsdWF0ZShjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIE5vZGUqIGNvbnRleHROb2RlLCBSZWZQdHI8WFBhdGhOU1Jl
c29sdmVyPiYmLCB1bnNpZ25lZCBzaG9ydCB0eXBlLCBYUGF0aFJlc3VsdCopOwogCi0gICAgZW51
bSBQZW5kaW5nU2hlZXRMYXlvdXQgeyBOb0xheW91dFdpdGhQZW5kaW5nU2hlZXRzLCBEaWRMYXlv
dXRXaXRoUGVuZGluZ1NoZWV0cywgSWdub3JlTGF5b3V0V2l0aFBlbmRpbmdTaGVldHMgfTsKLQot
ICAgIGJvb2wgZGlkTGF5b3V0V2l0aFBlbmRpbmdTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJu
IG1fcGVuZGluZ1NoZWV0TGF5b3V0ID09IERpZExheW91dFdpdGhQZW5kaW5nU2hlZXRzOyB9Ci0K
LSAgICBib29sIGhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X2hhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGU7IH0KLSAgICB2b2lkIHNldEhhc05vZGVzV2l0
aFBsYWNlaG9sZGVyU3R5bGUoKSB7IG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSA9IHRy
dWU7IH0KKyAgICBib29sIGhhc05vZGVzV2l0aE5vbkZpbmFsU3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX2hhc05vZGVzV2l0aE5vbkZpbmFsU3R5bGU7IH0KKyAgICB2b2lkIHNldEhhc05vZGVzV2l0
aE5vbkZpbmFsU3R5bGUoKSB7IG1faGFzTm9kZXNXaXRoTm9uRmluYWxTdHlsZSA9IHRydWU7IH0K
IAogICAgIHZvaWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbihTZWxlY3Rpb25SZXN0b3JhdGlv
bk1vZGUpOwogICAgIHZvaWQgY2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCk7CkBAIC0xMzg2
LDE2ICsxMzgyLDExIEBAIHByaXZhdGU6CiAgICAgY29uc3QgUmVmPFNldHRpbmdzPiBtX3NldHRp
bmdzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0eWxlUmVzb2x2ZXI+IG1fdXNlckFnZW50U2hh
ZG93VHJlZVN0eWxlUmVzb2x2ZXI7Ci0gICAgYm9vbCBtX2hhc05vZGVzV2l0aFBsYWNlaG9sZGVy
U3R5bGU7CisgICAgYm9vbCBtX2hhc05vZGVzV2l0aE5vbkZpbmFsU3R5bGU7CiAgICAgLy8gQnV0
IHNvbWV0aW1lcyB5b3UgbmVlZCB0byBpZ25vcmUgcGVuZGluZyBzdHlsZXNoZWV0IGNvdW50IHRv
CiAgICAgLy8gZm9yY2UgYW4gaW1tZWRpYXRlIGxheW91dCB3aGVuIHJlcXVlc3RlZCBieSBKUy4K
ICAgICBib29sIG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzOwogCi0gICAgLy8gSWYgd2UgZG8g
aWdub3JlIHRoZSBwZW5kaW5nIHN0eWxlc2hlZXQgY291bnQsIHRoZW4gd2UgbmVlZCB0byBhZGQg
YSBib29sZWFuCi0gICAgLy8gdG8gdHJhY2sgdGhhdCB0aGlzIGhhcHBlbmVkIHNvIHRoYXQgd2Ug
Y2FuIGRvIGEgZnVsbCByZXBhaW50IHdoZW4gdGhlIHN0eWxlc2hlZXRzCi0gICAgLy8gZG8gZXZl
bnR1YWxseSBsb2FkLgotICAgIFBlbmRpbmdTaGVldExheW91dCBtX3BlbmRpbmdTaGVldExheW91
dDsKLQogICAgIFJlZlB0cjxET01XaW5kb3c+IG1fZG9tV2luZG93OwogICAgIFdlYWtQdHI8RG9j
dW1lbnQ+IG1fY29udGV4dERvY3VtZW50OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIxMzQ0NikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3
ICsxNTMsNyBAQCBib29sIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkCiB7CiAg
ICAgLy8gRm9yIGNvbXBhdGliaWxpdHksIGZyYW1lcyByZW5kZXIgZXZlbiB3aGVuIGRpc3BsYXk6
IG5vbmUgaXMgc2V0LgogICAgIC8vIEhvd2V2ZXIsIHdlIGRlbGF5IGNyZWF0aW5nIGEgcmVuZGVy
ZXIgdW50aWwgc3R5bGVzaGVldHMgaGF2ZSBsb2FkZWQuIAotICAgIHJldHVybiAhc3R5bGUuaXNQ
bGFjZWhvbGRlclN0eWxlKCk7CisgICAgcmV0dXJuICFzdHlsZS5pc05vdEZpbmFsKCk7CiB9CiAK
IFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MRnJhbWVTZXRFbGVtZW50OjpjcmVhdGVFbGVt
ZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9u
JikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDIxMzQ0NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4
OCw2ICs0NTg4LDEwIEBAIGJvb2wgRnJhbWVWaWV3OjpxdWFsaWZpZXNBc1Zpc3VhbGx5Tm9uRW0K
ICAgICBpZiAoIWZyYW1lKCkuZG9jdW1lbnQoKS0+cGFyc2luZygpICYmIGZyYW1lKCkubG9hZGVy
KCkuc3RhdGVNYWNoaW5lKCkuY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhbHNvIGlnbm9yZSBy
ZW5kZXJlcnMgd2l0aCBub24tZmluYWwgc3R5bGUuCisgICAgaWYgKGZyYW1lKCkuZG9jdW1lbnQo
KS0+c3R5bGVTY29wZSgpLmhhc1BlbmRpbmdTaGVldHNCZWZvcmVCb2R5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIC8vIFJlcXVpcmUgdGhlIGRvY3VtZW50IHRvIGdyb3cgYSBiaXQu
CiAgICAgLy8gVXNpbmcgYSB2YWx1ZSBvZiA0OCBhbGxvd3MgdGhlIGhlYWRlciBvbiBHb29nbGUn
cyBzZWFyY2ggcGFnZSB0byByZW5kZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHNlYXJjaCByZXN1bHRz
IHBvcHVsYXRlIGxhdGVyLgogICAgIHN0YXRpYyBjb25zdCBpbnQgZG9jdW1lbnRIZWlnaHRUaHJl
c2hvbGQgPSA0ODsKQEAgLTUxMzAsNyArNTEzNCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpmaXJlTGF5
b3V0UmVsYXRlZE1pbGVzdG8KICAgICB1cGRhdGVJc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKIAogICAg
IC8vIElmIHRoZSBsYXlvdXQgd2FzIGRvbmUgd2l0aCBwZW5kaW5nIHNoZWV0cywgd2UgYXJlIG5v
dCBpbiBmYWN0IHZpc3VhbGx5IG5vbi1lbXB0eSB5ZXQuCi0gICAgaWYgKG1faXNWaXN1YWxseU5v
bkVtcHR5ICYmICFmcmFtZSgpLmRvY3VtZW50KCktPmRpZExheW91dFdpdGhQZW5kaW5nU3R5bGVz
aGVldHMoKSAmJiBtX2ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dENhbGxiYWNrUGVuZGluZykg
eworICAgIGlmIChtX2lzVmlzdWFsbHlOb25FbXB0eSAmJm1fZmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Q2FsbGJhY2tQZW5kaW5nKSB7CiAgICAgICAgIG1fZmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Q2FsbGJhY2tQZW5kaW5nID0gZmFsc2U7CiAgICAgICAgIGlmIChyZXF1ZXN0ZWRNaWxl
c3RvbmVzICYgRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KQogICAgICAgICAgICAgbWls
ZXN0b25lc0FjaGlldmVkIHw9IERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMjEzNDQ2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU3MSwxMCArMTU3MSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWlu
dEluZm8mIHBhaW50CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICAvLyBB
dm9pZCBwYWludGluZyBkZXNjZW5kYW50cyBvZiB0aGUgcm9vdCBlbGVtZW50IHdoZW4gc3R5bGVz
aGVldHMgaGF2ZW4ndCBsb2FkZWQuICBUaGlzIGVsaW1pbmF0ZXMgRk9VQy4KLSAgICAvLyBJdCdz
IG9rIG5vdCB0byBkcmF3LCBiZWNhdXNlIGxhdGVyIG9uLCB3aGVuIGFsbCB0aGUgc3R5bGVzaGVl
dHMgZG8gbG9hZCwgc3R5bGVSZXNvbHZlckNoYW5nZWQoKSBvbiB0aGUgRG9jdW1lbnQKLSAgICAv
LyB3aWxsIGRvIGEgZnVsbCByZXBhaW50LgotICAgIGlmIChkb2N1bWVudCgpLmRpZExheW91dFdp
dGhQZW5kaW5nU3R5bGVzaGVldHMoKSAmJiAhaXNSZW5kZXJWaWV3KCkpCisgICAgLy8gU3R5bGUg
aXMgbm9uLWZpbmFsIGlmIHRoZSBlbGVtZW50IGhhcyBhIHBlbmRpbmcgc3R5bGVzaGVldCBiZWZv
cmUgaXQuIFdlIGVuZCB1cCB3aXRoIHJlbmRlcmVycyB3aXRoIHN1Y2ggc3R5bGVzIGlmIGEgc2Ny
aXB0CisgICAgLy8gZm9yY2VzIHJlbmRlcmVyIGNvbnN0cnVjdGlvbiBieSBxdWVyeWluZyBzb21l
dGhpbmcgbGF5b3V0IGRlcGVuZGVudC4KKyAgICAvLyBBdm9pZCBGT1VDIGJ5IG5vdCBwYWludGlu
Zy4gU3dpdGNoaW5nIHRvIGZpbmFsIHN0eWxlIHRyaWdnZXJzIHJlcGFpbnQuCisgICAgaWYgKHN0
eWxlKCkuaXNOb3RGaW5hbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY2hpbGRyZW5J
bmxpbmUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
cmV2aXNpb24gMjEzNDQ2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkzOCwxMCArMzkzOCw3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzaG91bGREb1NvZnR3YXJlUGFpbnQKICAgICAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRTdXBwcmVzc1BhaW50aW5nTGF5ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQogewotICAgIC8vIEF2
b2lkIHBhaW50aW5nIGRlc2NlbmRhbnRzIG9mIHRoZSByb290IGxheWVyIHdoZW4gc3R5bGVzaGVl
dHMgaGF2ZW4ndCBsb2FkZWQuIFRoaXMgZWxpbWluYXRlcyBGT1VDLgotICAgIC8vIEl0J3Mgb2sg
bm90IHRvIGRyYXcsIGJlY2F1c2UgbGF0ZXIgb24sIHdoZW4gYWxsIHRoZSBzdHlsZXNoZWV0cyBk
byBsb2FkLCB1cGRhdGVTdHlsZVNlbGVjdG9yIG9uIHRoZSBEb2N1bWVudAotICAgIC8vIHdpbGwg
ZG8gYSBmdWxsIHJlcGFpbnQoKS4KLSAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5kaWRMYXlvdXRXaXRoUGVuZGluZ1N0eWxlc2hlZXRzKCkgJiYgIWxheWVyLT5pc1Jvb3RMYXll
cigpICYmICFsYXllci0+cmVuZGVyZXIoKS5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCisg
ICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkuaXNOb3RGaW5hbCgpICYmICFsYXllci0+
aXNSb290TGF5ZXIoKSAmJiAhbGF5ZXItPnJlbmRlcmVyKCkuaXNEb2N1bWVudEVsZW1lbnRSZW5k
ZXJlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEF2b2lkIHBhaW50aW5nIGFs
bCBsYXllcnMgaWYgdGhlIGRvY3VtZW50IGlzIGluIGEgc3RhdGUgd2hlcmUgdmlzdWFsIHVwZGF0
ZXMgYXJlbid0IGFsbG93ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDIxMzQ0NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1Myw2
ICs4NTMsOSBAQCBib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc1JlcGFpbnQoCiAgICAg
ICAgIHx8IG1fcmFyZUluaGVyaXRlZERhdGEtPmltYWdlUmVuZGVyaW5nICE9IG90aGVyLm1fcmFy
ZUluaGVyaXRlZERhdGEtPmltYWdlUmVuZGVyaW5nKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAor
ICAgIGlmIChtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5pc05vdEZpbmFsICE9IG90aGVyLm1fcmFy
ZU5vbkluaGVyaXRlZERhdGEtPmlzTm90RmluYWwpCisgICAgICAgIHJldHVybiB0cnVlOworCiAg
ICAgaWYgKG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPnNoYXBlT3V0c2lkZSAhPSBvdGhlci5tX3Jh
cmVOb25Jbmhlcml0ZWREYXRhLT5zaGFwZU91dHNpZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAko
cmV2aXNpb24gMjEzNDQ2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NDUsOCArMTY0NSw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSXNvbGF0aW9uIGluaXRpYWxJc29sYXRpb24oKSB7IHJldHVybiBJc29sYXRpb25B
dXRvOyB9CiAjZW5kaWYKIAotICAgIGJvb2wgaXNQbGFjZWhvbGRlclN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+aXNQbGFjZWhvbGRlclN0eWxlOyB9Ci0gICAg
dm9pZCBzZXRJc1BsYWNlaG9sZGVyU3R5bGUoKSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVk
RGF0YSwgaXNQbGFjZWhvbGRlclN0eWxlLCB0cnVlKTsgfQorICAgIC8vIEluZGljYXRlcyB0aGUg
c3R5bGUgaXMgbGlrZWx5IHRvIGNoYW5nZSBkdWUgdG8gYSBwZW5kaW5nIHN0eWxlc2hlZXQgbG9h
ZC4KKyAgICBib29sIGlzTm90RmluYWwoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0
ZWREYXRhLT5pc05vdEZpbmFsOyB9CisgICAgdm9pZCBzZXRJc05vdEZpbmFsKCkgeyBTRVRfVkFS
KG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIGlzTm90RmluYWwsIHRydWUpOyB9CiAKICAgICB2b2lk
IHNldFZpc2l0ZWRMaW5rQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIHNldFZpc2l0ZWRM
aW5rQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIobV9yYXJlTm9uSW5o
ZXJpdGVkRGF0YSwgdmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IsIHYpOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGEuY3BwCShyZXZpc2lvbiAyMTM0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJh
cmVOb25JCiAgICAgLCBicmVha0luc2lkZShSZW5kZXJTdHlsZTo6aW5pdGlhbEJyZWFrSW5zaWRl
KCkpCiAgICAgLCByZXNpemUoUmVuZGVyU3R5bGU6OmluaXRpYWxSZXNpemUoKSkKICAgICAsIGhh
c0F0dHJDb250ZW50KGZhbHNlKQotICAgICwgaXNQbGFjZWhvbGRlclN0eWxlKGZhbHNlKQorICAg
ICwgaXNOb3RGaW5hbChmYWxzZSkKIHsKICAgICBtYXNrQm94SW1hZ2Uuc2V0TWFza0RlZmF1bHRz
KCk7CiB9CkBAIC0yMDAsNyArMjAwLDcgQEAgaW5saW5lIFN0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGE6OlN0eWxlUgogICAgICwgYnJlYWtJbnNpZGUoby5icmVha0luc2lkZSkKICAgICAsIHJlc2l6
ZShvLnJlc2l6ZSkKICAgICAsIGhhc0F0dHJDb250ZW50KG8uaGFzQXR0ckNvbnRlbnQpCi0gICAg
LCBpc1BsYWNlaG9sZGVyU3R5bGUoby5pc1BsYWNlaG9sZGVyU3R5bGUpCisgICAgLCBpc05vdEZp
bmFsKG8uaXNOb3RGaW5hbCkKIHsKIH0KIApAQCAtMzA0LDcgKzMwNCw3IEBAIGJvb2wgU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3IKICAgICAgICAgJiYgYnJlYWtJbnNpZGUgPT0g
by5icmVha0luc2lkZQogICAgICAgICAmJiByZXNpemUgPT0gby5yZXNpemUKICAgICAgICAgJiYg
aGFzQXR0ckNvbnRlbnQgPT0gby5oYXNBdHRyQ29udGVudAotICAgICAgICAmJiBpc1BsYWNlaG9s
ZGVyU3R5bGUgPT0gby5pc1BsYWNlaG9sZGVyU3R5bGU7CisgICAgICAgICYmIGlzTm90RmluYWwg
PT0gby5pc05vdEZpbmFsOwogfQogCiBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OmNv
bnRlbnREYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvdGhl
cikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAkocmV2aXNpb24gMjEzNDQ2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2ln
bmVkIGhhc0F0dHJDb250ZW50IDogMTsKIAotICAgIHVuc2lnbmVkIGlzUGxhY2Vob2xkZXJTdHls
ZSA6IDE7CisgICAgdW5zaWduZWQgaXNOb3RGaW5hbCA6IDE7CiAKIHByaXZhdGU6CiAgICAgU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29w
ZS5jcHAJKHJldmlzaW9uIDIxMzUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2Nv
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODksNyArMzg5LDcgQEAgU2NvcGU6OlN0eWxlUmVz
b2x2ZXJVcGRhdGVUeXBlIFNjb3BlOjphbgogICAgIGF1dG8gc3R5bGVSZXNvbHZlclVwZGF0ZVR5
cGUgPSBoYXNJbnNlcnRpb25zID8gUmVzZXQgOiBBZGRpdGl2ZTsKIAogICAgIC8vIElmIHdlIGFy
ZSBhbHJlYWR5IHBhcnNpbmcgdGhlIGJvZHkgYW5kIHNvIG1heSBoYXZlIHNpZ25pZmljYW50IGFt
b3VudCBvZiBlbGVtZW50cywgcHV0IHNvbWUgZWZmb3J0IGludG8gdHJ5aW5nIHRvIGF2b2lkIHN0
eWxlIHJlY2FsY3MuCi0gICAgaWYgKCFtX2RvY3VtZW50LmJvZHlPckZyYW1lc2V0KCkgfHwgbV9k
b2N1bWVudC5oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCkpCisgICAgaWYgKCFtX2RvY3Vt
ZW50LmJvZHlPckZyYW1lc2V0KCkgfHwgbV9kb2N1bWVudC5oYXNOb2Rlc1dpdGhOb25GaW5hbFN0
eWxlKCkpCiAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZTsKIAogICAgIFN0
eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMgaW52YWxpZGF0aW9uQW5hbHlzaXMoYWRkZWRTaGVldHMs
IHN0eWxlUmVzb2x2ZXIubWVkaWFRdWVyeUV2YWx1YXRvcigpKTsKQEAgLTQ0MCw3ICs0NDAsNyBA
QCB2b2lkIFNjb3BlOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhCiAKICAgICAvLyBEb24n
dCBib3RoZXIgdXBkYXRpbmcsIHNpbmNlIHdlIGhhdmVuJ3QgbG9hZGVkIGFsbCBvdXIgc3R5bGUg
aW5mbyB5ZXQKICAgICAvLyBhbmQgaGF2ZW4ndCBjYWxjdWxhdGVkIHRoZSBzdHlsZSByZXNvbHZl
ciBmb3IgdGhlIGZpcnN0IHRpbWUuCi0gICAgaWYgKCFtX3NoYWRvd1Jvb3QgJiYgIW1fZGlkVXBk
YXRlQWN0aXZlU3R5bGVTaGVldHMgJiYgaGFzUGVuZGluZ1NoZWV0cygpKSB7CisgICAgaWYgKCFt
X3NoYWRvd1Jvb3QgJiYgIW1fZGlkVXBkYXRlQWN0aXZlU3R5bGVTaGVldHMgJiYgaGFzUGVuZGlu
Z1NoZWV0c0JlZm9yZUJvZHkoKSkgewogICAgICAgICBjbGVhclJlc29sdmVyKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVz
b2x2ZXIuY3BwCShyZXZpc2lvbiAyMTM1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVRyZWVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDI0ICs1MSw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIAotc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gbWFrZVBsYWNlaG9sZGVyU3R5bGUoRG9jdW1lbnQmIGRvY3VtZW50
KQotewotICAgIGF1dG8gcGxhY2Vob2xkZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVQdHIo
KTsKLSAgICBwbGFjZWhvbGRlclN0eWxlLT5zZXREaXNwbGF5KE5PTkUpOwotICAgIHBsYWNlaG9s
ZGVyU3R5bGUtPnNldElzUGxhY2Vob2xkZXJTdHlsZSgpOwotCi0gICAgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWls
eShzdGFuZGFyZEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJv
bUlkZW50aWZpZXIoQ1NTVmFsdWVNZWRpdW0pOwotICAgIGZsb2F0IHNpemUgPSBTdHlsZTo6Zm9u
dFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlTWVkaXVtLCBmYWxzZSwgZG9jdW1lbnQpOwotICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoc2l6ZSk7Ci0gICAgcGxhY2Vob2xkZXJTdHlsZS0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0KLSAgICBwbGFjZWhvbGRlclN0eWxlLT5mb250
Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOwotICAgIHJldHVybiBw
bGFjZWhvbGRlclN0eWxlOwotfQotCiBUcmVlUmVzb2x2ZXI6OlRyZWVSZXNvbHZlcihEb2N1bWVu
dCYgZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogewpAQCAtMTI2LDExICsx
MDgsNiBAQCB2b2lkIFRyZWVSZXNvbHZlcjo6cG9wU2NvcGUoKQogCiBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IFRyZWVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQsIGNvbnN0IFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSkKIHsKLSAgICBpZiAobV9kaWRT
ZWVQZW5kaW5nU3R5bGVzaGVldCAmJiAhZWxlbWVudC5yZW5kZXJlcigpICYmICFtX2RvY3VtZW50
LmlzSWdub3JpbmdQZW5kaW5nU3R5bGVzaGVldHMoKSkgewotICAgICAgICBtX2RvY3VtZW50LnNl
dEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIG1ha2VQbGFj
ZWhvbGRlclN0eWxlKG1fZG9jdW1lbnQpOwotICAgIH0KLQogICAgIGlmIChlbGVtZW50Lmhhc0N1
c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzaGFk
b3dIb3N0U3R5bGUgPSBzY29wZSgpLnNoYWRvd1Jvb3QgPyBtX3VwZGF0ZS0+ZWxlbWVudFN0eWxl
KCpzY29wZSgpLnNoYWRvd1Jvb3QtPmhvc3QoKSkgOiBudWxscHRyOwogICAgICAgICBpZiAoYXV0
byBjdXN0b21TdHlsZSA9IGVsZW1lbnQucmVzb2x2ZUN1c3RvbVN0eWxlKGluaGVyaXRlZFN0eWxl
LCBzaGFkb3dIb3N0U3R5bGUpKSB7CkBAIC0xOTAsMTUgKzE2NywyNSBAQCBzdGF0aWMgYm9vbCBh
ZmZlY3RzUmVuZGVyZWRTdWJ0cmVlKEVsZW1lCiAKIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVy
OjpyZXNvbHZlRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogeworICAgIGlmIChtX2RpZFNlZVBl
bmRpbmdTdHlsZXNoZWV0ICYmICFlbGVtZW50LnJlbmRlcmVyKCkgJiYgIW1fZG9jdW1lbnQuaXNJ
Z25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cygpKSB7CisgICAgICAgIG1fZG9jdW1lbnQuc2V0SGFz
Tm9kZXNXaXRoTm9uRmluYWxTdHlsZSgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwog
ICAgIGF1dG8gbmV3U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgcGFyZW50KCkuc3R5
bGUpOwogCiAgICAgaWYgKCFhZmZlY3RzUmVuZGVyZWRTdWJ0cmVlKGVsZW1lbnQsICpuZXdTdHls
ZSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIHVwZGF0ZSA9IGNyZWF0ZUFuaW1h
dGVkRWxlbWVudFVwZGF0ZShXVEZNb3ZlKG5ld1N0eWxlKSwgZWxlbWVudCwgcGFyZW50KCkuY2hh
bmdlKTsKLQogICAgIGF1dG8qIGV4aXN0aW5nU3R5bGUgPSBlbGVtZW50LnJlbmRlclN0eWxlKCk7
CiAKKyAgICBpZiAobV9kaWRTZWVQZW5kaW5nU3R5bGVzaGVldCAmJiAoIWV4aXN0aW5nU3R5bGUg
fHwgZXhpc3RpbmdTdHlsZS0+aXNOb3RGaW5hbCgpKSkgeworICAgICAgICBuZXdTdHlsZS0+c2V0
SXNOb3RGaW5hbCgpOworICAgICAgICBtX2RvY3VtZW50LnNldEhhc05vZGVzV2l0aE5vbkZpbmFs
U3R5bGUoKTsKKyAgICB9CisKKyAgICBhdXRvIHVwZGF0ZSA9IGNyZWF0ZUFuaW1hdGVkRWxlbWVu
dFVwZGF0ZShXVEZNb3ZlKG5ld1N0eWxlKSwgZWxlbWVudCwgcGFyZW50KCkuY2hhbmdlKTsKKwog
ICAgIGlmICgmZWxlbWVudCA9PSBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpKSB7CiAgICAg
ICAgIG1fZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnVwZGF0
ZS5zdHlsZSk7CiAgICAgICAgIHNjb3BlKCkuc3R5bGVSZXNvbHZlci5zZXRPdmVycmlkZURvY3Vt
ZW50RWxlbWVudFN0eWxlKG1fZG9jdW1lbnRFbGVtZW50U3R5bGUuZ2V0KCkpOwpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMjEzNDQ2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDMtMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBw
bGUuY29tPgorCisgICAgICAgIExvYWRpbmcgaW4tYm9keSBzdHlsZXNoZWV0cyBzaG91bGQgbm90
IGJsb2NrIHJlbmRlcmluZyBvZiBlbGVtZW50cyBiZWZvcmUgdGhlbQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzQ1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgICogaHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9y
ZXNvdXJjZXMvZGVsYXllZC1jc3MucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2lu
Y3JlbWVudGFsL3N0eWxlc2hlZXQtYm9keS1pbmNyZW1lbnRhbC1yZW5kZXJpbmctZXhwZWN0ZWQu
aHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9zdHlsZXNoZWV0
LWJvZHktaW5jcmVtZW50YWwtcmVuZGVyaW5nLmh0bWw6IEFkZGVkLgorCiAyMDE3LTAzLTA2ICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyByZW5kZXIg
dHJlZSBidWlsZGluZyBiZWZvcmUgbG9hZGluZyBzdHlsZXNoZWV0IGVsZW1lbnRzCkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luY3JlbWVudGFsL3N0eWxlc2hlZXQtYm9keS1pbmNyZW1l
bnRhbC1yZW5kZXJpbmctZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luY3JlbWVudGFsL3N0eWxlc2hlZXQtYm9keS1pbmNyZW1lbnRhbC1yZW5kZXJp
bmctZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luY3JlbWVudGFsL3N0eWxlc2hlZXQtYm9keS1pbmNyZW1lbnRhbC1yZW5kZXJpbmctZXhwZWN0
ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKzxkaXYgc3R5bGU9IndpZHRo
OjEwMHB4OyBoZWlnaHQ6MTAwcHg7IGJhY2tncm91bmQtY29sb3I6Z3JlZW4iPjwvZGl2PgorPGRp
diBzdHlsZT0id2lkdGg6MTAwcHg7IGhlaWdodDoxMDBweDsgYmFja2dyb3VuZC1jb2xvcjpncmVl
biI+PC9kaXY+Cis8cD4KK0JlZm9yZSBzdHlsZXNoZWV0IGxvYWQ6IChyZXBhaW50IHJlY3RzIChy
ZWN0IDggOCAxMDAgMTAwKSApPGJyPgorQWZ0ZXIgc3R5bGVzaGVldCBsb2FkOiAocmVwYWludCBy
ZWN0cyAocmVjdCA4IDEwOCAxMDAgMTAwKSApPGJyPgorPC9wPgpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9zdHlsZXNoZWV0LWJvZHktaW5jcmVtZW50YWwtcmVuZGVy
aW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbmNyZW1lbnRh
bC9zdHlsZXNoZWV0LWJvZHktaW5jcmVtZW50YWwtcmVuZGVyaW5nLmh0bWwJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9zdHlsZXNoZWV0LWJvZHkt
aW5jcmVtZW50YWwtcmVuZGVyaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBA
QAorPGJvZHk+Cis8c2NyaXB0PgorZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDsKKworaW50ZXJu
YWxzLnN0YXJ0VHJhY2tpbmdSZXBhaW50cygpOworbGV0IGluaXRpYWxSZWN0czsKK3NldFRpbWVv
dXQoKCkgPT4geworICAgaW5pdGlhbFJlY3RzID0gaW50ZXJuYWxzLnJlcGFpbnRSZWN0c0FzVGV4
dCgpOworICAgaW50ZXJuYWxzLnN0b3BUcmFja2luZ1JlcGFpbnRzKCk7CisgICBpbnRlcm5hbHMu
c3RhcnRUcmFja2luZ1JlcGFpbnRzKCk7Cit9LCAwKTsKKworZG9jdW1lbnQuYm9keS5vbmxvYWQg
PSAoKSA9PiB7CisgICAgbGV0IGZpbmFsUmVjdHMgPSBpbnRlcm5hbHMucmVwYWludFJlY3RzQXNU
ZXh0KCk7CisgICAgaW50ZXJuYWxzLnN0b3BUcmFja2luZ1JlcGFpbnRzKCk7CisgICAgZG9jdW1l
bnQuYm9keS5pbm5lckhUTUwgKz0gYDxwPgorICAgICAgICBCZWZvcmUgc3R5bGVzaGVldCBsb2Fk
OiAke2luaXRpYWxSZWN0c308YnI+CisgICAgICAgIEFmdGVyIHN0eWxlc2hlZXQgbG9hZDogJHtm
aW5hbFJlY3RzfTxicj4KKyAgICA8L3A+YDsKK307Cis8L3NjcmlwdD4KKzxkaXYgc3R5bGU9Indp
ZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHg7IGJhY2tncm91bmQtY29sb3I6Z3JlZW4iPjwvZGl2Pgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvZGVsYXllZC1jc3MucGhwP2Rl
bGF5PTMwMCI+Cis8ZGl2IGNsYXNzPWRlbGF5ZWQgc3R5bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6
MTAwcHg7IGJhY2tncm91bmQtY29sb3I6cmVkIj48L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5jcmVtZW50YWwvcmVzb3VyY2VzL2RlbGF5ZWQtY3NzLnBocAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luY3JlbWVudGFsL3Jlc291cmNlcy9kZWxheWVk
LWNzcy5waHAJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbmNyZW1l
bnRhbC9yZXNvdXJjZXMvZGVsYXllZC1jc3MucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OCBAQAorPD9waHAKK2hlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUsIG5vLXN0b3JlIik7
CitoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9jc3MiKTsKKworJGRlbGF5ID0gJF9HRVRbJ2Rl
bGF5J107Cit1c2xlZXAoJGRlbGF5ICogMTAwMCk7Cis/PgorLmRlbGF5ZWQgeyBiYWNrZ3JvdW5k
LWNvbG9yOiBncmVlbiAhaW1wb3J0YW50IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305510</attachid>
            <date>2017-03-27 14:30:10 -0700</date>
            <delta_ts>2017-03-27 15:56:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>incremental-rendering-stylesheet-10.patch</filename>
            <type>text/plain</type>
            <size>26469</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNDM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDE3LTAzLTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyB0aGUgcGFnZSB0byBy
ZW5kZXIgYmVmb3JlIDxsaW5rPiBzdHlsZXNoZWV0IHRhZ3MgaW4gYm9keQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MTU3CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNDY1ODgzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIu
CisKKyAgICAgICAgQ3VycmVudGx5IHdlIGJsb2NrIHN0eWxlIGFuZCByZW5kZXJlciBidWlsZGlu
ZyBjb21wbGV0ZWx5IGlmIGRvY3VtZW50IGhhcyBhbnkgbG9hZGluZworICAgICAgICBzdHlsZXNo
ZWV0cy4gSW4gY2FzZSBhIHNjcmlwdCBxdWVyaWVzIHNvbWV0aGluZyBsYXlvdXQgZGVwZW5kZW50
IHdlIGNvbnN0cnVjdCB0aGUgcmVuZGVyCisgICAgICAgIHRyZWUgd2l0aCB3aGF0ZXZlciBzdHls
ZSB3ZSBoYXZlIGJ1dCBibG9jayBwYWludGluZyBpbiBpdC4KKworICAgICAgICBUaGlzIHBhdGNo
IGNoYW5nZXMgYmVoYXZpb3Igc28gdGhhdCBhIGxvYWRpbmcgc3R5bGVzaGVldCBpbiBib2R5IG9u
bHkgYmxvY2tzIHJlbmRlcmluZyBmb3IgZWxlbWVudHMKKyAgICAgICAgdGhhdCBhcmUgYWZ0ZXIg
aXQuIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHN1Y2ggc3R5bGVzaGVldHMgcmFyZWx5IGFmZmVj
dCBlbGVtZW50cyBiZWZvcmUgdGhlbQorICAgICAgICBhbmQgdGhlIGVsZW1lbnRzIGNhbiBiZSBy
ZW5kZXJlZCB3aXRob3V0IGNhdXNpbmcgdWdseSB2aXNpYmxlIHN0eWxpbmcgY2hhbmdlcy4KKwor
ICAgICAgICBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG9sZCBmbGFzaC1vZi11bnN0eWxlZC1jb250
ZW50IChGT1VDKSBwcmV2ZW50YXRpb24gbWVjaGFuaXNtIHdpdGggYSBtb3JlCisgICAgICAgIGZp
bmUtZ3JhaW5lZCBvbmUuIFBhaW50IGJsb2NraW5nIGlzIG5vdyBkb25lIG9uIHBlci1yZW5kZXJl
ciBiYXNpcyB3aXRoIGJhc2VkIG9uIGlzTm9uRmluYWwgZmxhZyBpbgorICAgICAgICBSZW5kZXJT
dHlsZS4KKworICAgICAgICBGb3Igc3R5bGVzaGVldHMgaW4gaGVhZCB0aGUgYmVoYXZpb3Igc2hv
dWxkIGJlIGxhcmdlbHkgdW5jaGFuZ2VkLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvaW5j
cmVtZW50YWwvc3R5bGVzaGVldC1ib2R5LWluY3JlbWVudGFsLXJlbmRlcmluZy5odG1sCisKKyAg
ICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpOgorCisgICAgICAg
ICAgICBSZW1vdmUgdGhlIG9sZCBGT1VDIHByZXZlbnRhdGlvbiBzdGF0ZSB0cmFja2luZy4KKwor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNob3VsZFNjaGVkdWxlTGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRSZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCk6CisK
KyAgICAgICAgICAgIFJlcGFpbnRzIHdpbGwgbm93IGdldCB0cmlnZ2VyZWQgYnkgdGhlIG5vcm1h
bCBzdHlsZSBtZWNoYW5pc20uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpoYXNOb2Rlc1dpdGhOb25GaW5hbFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpzZXRIYXNOb2Rlc1dpdGhOb25GaW5hbFN0eWxlKToKKworICAg
ICAgICAgICAgVHJhY2sgaWYgd2UgbmVlZCB0byByZWNvbXB1dGUgdGhlIHN0eWxlIGxhdGVyIGJl
Y2F1c2Ugbm9uLWZpbmFsIG9yIHVuc3R5bGVkIGVsZW1lbnRzLgorCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6ZGlkTGF5b3V0V2l0aFBlbmRpbmdTdHlsZXNoZWV0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SGFzTm9kZXNXaXRoUGxh
Y2Vob2xkZXJTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OnJlbmRlcmVy
SXNOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6cXVhbGlmaWVzQXNWaXN1YWxseU5vbkVtcHR5KToKKworICAgICAgICAg
ICAgRG9uJ3QgcXVhbGlmeSBhcyB2aXN1YWxseSBub24tZW1wdHkgaWYgd2UgaGF2ZSBsb2FkaW5n
IHN0eWxlc2hlZXRzIGluIGhlYWQgKGV2ZW4gaWYgdGhlcmUgaXMKKyAgICAgICAgICAgIGEgZm91
Yy1wcmV2ZW50ZWQgcmVuZGVyIHRyZWUpLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OmZpcmVMYXlvdXRSZWxhdGVkTWlsZXN0b25lc0lmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50
Q29udGVudHMpOgorCisgICAgICAgICAgICBJbnN0ZWFkIG9mIGEgZ2xvYmFsIHRlc3QsIGJsb2Nr
IHBhaW50aW5nIGlmIGlzTm9uRmluYWwgaXMgc2V0IGluIHRoZSByZW5kZXJlcidzIHN0eWxlLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNob3VsZFN1cHByZXNzUGFpbnRpbmdMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VS
ZXF1aXJlc1JlcGFpbnQpOgorCisgICAgICAgICAgICBUaGUgaXNOb25GaW5hbCBmbGFnIHByZXZl
bnRzIHBhaW50aW5nIHNvIHdlIG5lZWQgdG8gdHJpZ2dlciByZXBhaW50IHdoZW4gaXQgZ2V0cyBj
bGVhcmVkLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aXNOb3RGaW5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTdHlsZTo6c2V0SXNOb3RGaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6aXNQbGFjZWhvbGRlclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjpzZXRJc1BsYWNlaG9sZGVyU3R5bGUpOiBEZWxldGVkLgorCisgICAgICAgICAg
ICBUaGVyZSBpcyBubyBuZWVkIGZvciBwbGFjZWhvbGRlciBzdHlsZXMgYW55bW9yZS4gUmV1c2Ug
dGhlIGJpdCBmb3IgaXNOb3RGaW5hbC4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGE6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaDoKKyAgICAgICAgKiBz
dHlsZS9TdHlsZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6YW5h
bHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlOjp1
cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6c3R5bGVGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnJlc29sdmVF
bGVtZW50KToKKworICAgICAgICAgICAgSWYgd2UgaGF2ZSBzZWVucyBhIGxvYWRpbmcgc3R5bGVz
aGVldCBhbmQgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyIHlldCBkb24ndCBzdHlsZSB0aGUgZWxlbWVu
dC4KKyAgICAgICAgICAgIEluIGNhc2UgdGhlcmUgaXMgYSByZW5kZXJlciBvciB3ZSBhcmUgaWdu
b3JpbmcgcGVuZGluZyBzaGVldHMsIHJlc29sdmUgdGhlIHN0eWxlIG5vcm1hbGx5CisgICAgICAg
ICAgICBidXQgbWFyayBpdCBhcyBub24tZmluYWwuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjptYWtlUGxhY2Vob2xkZXJTdHlsZSk6IERlbGV0ZWQuCisKIDIwMTctMDMtMjQgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBxcFN1
bSBpbiBXZWJSVEMgc3RhdHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDIxNDM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyMyw4ICsxMTIzLDggQEAgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGU+PiBTdHlsZVJlc29sdmVyOgogCiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+IFN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsIFBzZXVkb0lkIHBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKIHsKLSAgICBp
ZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmRvY3VtZW50KCkuaGF2ZVN0eWxlc2hlZXRzTG9hZGVk
KCkpCi0gICAgICAgIHJldHVybiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+KCk7CisgICAgaWYg
KCFlbGVtZW50KQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9zdGF0ZSA9IFN0YXRlKCpl
bGVtZW50LCBudWxscHRyKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAyMTQzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzI1LDcgKzE3MjUsOCBAQCB2b2lkIERvY3VtZW50OjpyZXNvbHZlU3R5bGUoUmVz
b2x2ZVN0eWxlCiAKICAgICAgICAgaWYgKHR5cGUgPT0gUmVzb2x2ZVN0eWxlVHlwZTo6UmVidWls
ZCkgewogICAgICAgICAgICAgLy8gVGhpcyBtYXkgZ2V0IHNldCBhZ2FpbiBkdXJpbmcgc3R5bGUg
cmVzb2x2ZS4KLSAgICAgICAgICAgIG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSA9IGZh
bHNlOworICAgICAgICAgICAgbV9oYXNOb2Rlc1dpdGhOb25GaW5hbFN0eWxlID0gZmFsc2U7Cisg
ICAgICAgICAgICBtX2hhc05vZGVzV2l0aE1pc3NpbmdTdHlsZSA9IGZhbHNlOwogCiAgICAgICAg
ICAgICBhdXRvIGRvY3VtZW50U3R5bGUgPSBTdHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KCp0aGlz
KTsKIApAQCAtMTc2MSw2ICsxNzYyLDkgQEAgdm9pZCBEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJl
c29sdmVTdHlsZQogICAgICAgICB9CiAKICAgICAgICAgdXBkYXRlZENvbXBvc2l0aW5nTGF5ZXJz
ID0gZnJhbWVWaWV3LnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpOwor
CisgICAgICAgIGlmIChtX3JlbmRlclZpZXctPm5lZWRzTGF5b3V0KCkpCisgICAgICAgICAgICBm
cmFtZVZpZXcuc2NoZWR1bGVSZWxheW91dCgpOwogICAgIH0KIAogICAgIC8vIElmIHdlIHdhbnRl
ZCB0byBjYWxsIGltcGxpY2l0Q2xvc2UoKSBkdXJpbmcgcmVjYWxjU3R5bGUsIGRvIHNvIG5vdyB0
aGF0IHdlJ3JlIGZpbmlzaGVkLgpAQCAtMTg1NCwzNCArMTg1OCwxNSBAQCB2b2lkIERvY3VtZW50
Ojp1cGRhdGVMYXlvdXQoKQogICAgICAgICBmcmFtZVZpZXctPmxheW91dCgpOwogfQogCi0vLyBG
SVhNRTogVGhpcyBpcyBhIGJhZCBpZGVhIGFuZCBuZWVkcyB0byBiZSByZW1vdmVkIGV2ZW50dWFs
bHkuCi0vLyBPdGhlciBicm93c2VycyBsb2FkIHN0eWxlc2hlZXRzIGJlZm9yZSB0aGV5IGNvbnRp
bnVlIHBhcnNpbmcgdGhlIHdlYiBwYWdlLgotLy8gU2luY2Ugd2UgZG9uJ3QsIHdlIGNhbiBydW4g
SmF2YVNjcmlwdCBjb2RlIHRoYXQgbmVlZHMgYW5zd2VycyBiZWZvcmUgdGhlCi0vLyBzdHlsZXNo
ZWV0cyBhcmUgbG9hZGVkLiBEb2luZyBhIGxheW91dCBpZ25vcmluZyB0aGUgcGVuZGluZyBzdHls
ZXNoZWV0cwotLy8gbGV0cyB1cyBnZXQgcmVhc29uYWJsZSBhbnN3ZXJzLiBUaGUgbG9uZyB0ZXJt
IHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcwotLy8gdG8gaW5zdGVhZCBzdXNwZW5kIEphdmFT
Y3JpcHQgZXhlY3V0aW9uLgogdm9pZCBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKERvY3VtZW50OjpSdW5Qb3N0TGF5b3V0VGFza3MgcnVuUG9zdExheW91dFRh
c2tzKQogewogICAgIGJvb2wgb2xkSWdub3JlID0gbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHM7
CiAKICAgICBpZiAoIWhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSB7CiAgICAgICAgIG1faWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzID0gdHJ1ZTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGFyZSB3aWxs
aW5nIHRvIGF0dGVtcHQgdG8gc3VwcHJlc3MgcGFpbnRpbmcgd2l0aCBvdXRkYXRlZCBzdHlsZSBp
bmZvIG9ubHkgb25jZS4gIE91ciBhc3N1bXB0aW9uIGlzIHRoYXQgaXQgd291bGQgYmUKLSAgICAg
ICAgLy8gZGFuZ2Vyb3VzIHRvIHRyeSB0byBzdG9wIGl0IGEgc2Vjb25kIHRpbWUsIGFmdGVyIHBh
Z2UgY29udGVudCBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCBhbmQgZGlzcGxheWVkCi0gICAgICAg
IC8vIHdpdGggYWNjdXJhdGUgc3R5bGUgaW5mb3JtYXRpb24uICAoT3VyIHN1cHByZXNzaW9uIGlu
dm9sdmVzIGJsYW5raW5nIHRoZSB3aG9sZSBwYWdlIGF0IHRoZQotICAgICAgICAvLyBtb21lbnQu
ICBJZiBpdCB3ZXJlIG1vcmUgcmVmaW5lZCwgd2UgbWlnaHQgYmUgYWJsZSB0byBkbyBzb21ldGhp
bmcgYmV0dGVyLikKLSAgICAgICAgLy8gSXQncyB3b3J0aCBub3RpbmcgdGhvdWdoIHRoYXQgdGhp
cyBlbnRpcmUgbWV0aG9kIGlzIGEgaGFjaywgc2luY2Ugd2hhdCB3ZSByZWFsbHkgd2FudCB0byBk
byBpcwotICAgICAgICAvLyBzdXNwZW5kIEpTIGluc3RlYWQgb2YgZG9pbmcgYSBsYXlvdXQgd2l0
aCBpbmFjY3VyYXRlIGluZm9ybWF0aW9uLgotICAgICAgICBIVE1MRWxlbWVudCogYm9keUVsZW1l
bnQgPSBib2R5T3JGcmFtZXNldCgpOwotICAgICAgICBpZiAoYm9keUVsZW1lbnQgJiYgIWJvZHlF
bGVtZW50LT5yZW5kZXJlcigpICYmIG1fcGVuZGluZ1NoZWV0TGF5b3V0ID09IE5vTGF5b3V0V2l0
aFBlbmRpbmdTaGVldHMpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NoZWV0TGF5b3V0ID0gRGlk
TGF5b3V0V2l0aFBlbmRpbmdTaGVldHM7Ci0gICAgICAgICAgICBzdHlsZVNjb3BlKCkuZGlkQ2hh
bmdlQWN0aXZlU3R5bGVTaGVldENhbmRpZGF0ZXMoKTsKLSAgICAgICAgICAgIHJlc29sdmVTdHls
ZShSZXNvbHZlU3R5bGVUeXBlOjpSZWJ1aWxkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtX2hhc05v
ZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUpCi0gICAgICAgICAgICAvLyBJZiBuZXcgbm9kZXMgaGF2
ZSBiZWVuIGFkZGVkIG9yIHN0eWxlIHJlY2FsYyBoYXMgYmVlbiBkb25lIHdpdGggc3R5bGUgc2hl
ZXRzIHN0aWxsIHBlbmRpbmcsIHNvbWUgbm9kZXMgCi0gICAgICAgICAgICAvLyBtYXkgbm90IGhh
dmUgaGFkIHRoZWlyIHJlYWwgc3R5bGUgY2FsY3VsYXRlZCB5ZXQuIE5vcm1hbGx5IHRoaXMgZ2V0
cyBjbGVhbmVkIHdoZW4gc3R5bGUgc2hlZXRzIGFycml2ZSAKLSAgICAgICAgICAgIC8vIGJ1dCBo
ZXJlIHdlIG5lZWQgdXAtdG8tZGF0ZSBzdHlsZSBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgIHJl
c29sdmVTdHlsZShSZXNvbHZlU3R5bGVUeXBlOjpSZWJ1aWxkKTsKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGp1c3QgaW52YWxpZGF0ZSBlbGVtZW50cyB3aXRoIG1pc3Npbmcgc3R5bGVz
LgorICAgICAgICBpZiAobV9oYXNOb2Rlc1dpdGhNaXNzaW5nU3R5bGUpCisgICAgICAgICAgICBz
Y2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCk7CiAgICAgfQogCiAgICAgdXBkYXRlTGF5b3V0KCk7
CkBAIC0yNzI1LDE0ICsyNzEwLDE2IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFBhcnNpbmcoYm9vbCBi
KQogCiBib29sIERvY3VtZW50OjpzaG91bGRTY2hlZHVsZUxheW91dCgpCiB7Ci0gICAgLy8gVGhp
cyBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkIHdoZW4gRnJhbWVWaWV3IHRoaW5rcyBhIGxh
eW91dCBpcyBuZWVkZWQuCi0gICAgLy8gVGhpcyBlbmZvcmNlcyBhIGNvdXBsZSBleHRyYSBydWxl
cy4KLSAgICAvLwotICAgIC8vICAgIChhKSBPbmx5IHNjaGVkdWxlIGEgbGF5b3V0IG9uY2UgdGhl
IHN0eWxlc2hlZXRzIGFyZSBsb2FkZWQuCi0gICAgLy8gICAgKGIpIE9ubHkgc2NoZWR1bGUgbGF5
b3V0IG9uY2Ugd2UgaGF2ZSBhIGJvZHkgZWxlbWVudC4KKyAgICBpZiAoIWRvY3VtZW50RWxlbWVu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpczxIVE1MSHRtbEVsZW1lbnQ+
KCpkb2N1bWVudEVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghYm9k
eU9yRnJhbWVzZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdHlsZVNjb3Bl
KCkuaGFzUGVuZGluZ1NoZWV0c0JlZm9yZUJvZHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIChoYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJiBib2R5T3JGcmFtZXNldCgp
KQotICAgICAgICB8fCAoZG9jdW1lbnRFbGVtZW50KCkgJiYgIWlzPEhUTUxIdG1sRWxlbWVudD4o
KmRvY3VtZW50RWxlbWVudCgpKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAgICAgCiBib29sIERv
Y3VtZW50Ojppc0xheW91dFRpbWVyQWN0aXZlKCkKQEAgLTMwMzYsMTUgKzMwMjMsNiBAQCBGcmFt
ZSogRG9jdW1lbnQ6OmZpbmRVbnNhZmVQYXJlbnRTY3JvbGxQCiAKIHZvaWQgRG9jdW1lbnQ6OmRp
ZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCkKIHsKLSAgICBpZiAobV9wZW5kaW5nU2hlZXRM
YXlvdXQgPT0gRGlkTGF5b3V0V2l0aFBlbmRpbmdTaGVldHMpIHsKLSAgICAgICAgLy8gUGFpbnRp
bmcgaXMgZGlzYWJsZWQgd2hlbiBkb2luZyBsYXlvdXRzIHdpdGggcGVuZGluZyBzaGVldHMgdG8g
YXZvaWQgRk9VQy4KLSAgICAgICAgLy8gV2UgbmVlZCB0byBmb3JjZSBwYWludCB3aGVuIGNvbWlu
ZyBvdXQgZnJvbSB0aGlzIHN0YXRlLgotICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgdmVy
eSBlbGVnYW50LgotICAgICAgICBtX3BlbmRpbmdTaGVldExheW91dCA9IElnbm9yZUxheW91dFdp
dGhQZW5kaW5nU2hlZXRzOwotICAgICAgICBpZiAocmVuZGVyVmlldygpKQotICAgICAgICAgICAg
cmVuZGVyVmlldygpLT5yZXBhaW50Vmlld0FuZENvbXBvc2l0ZWRMYXllcnMoKTsKLSAgICB9Ci0K
ICAgICBpZiAoYXV0byogcGFyc2VyID0gc2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCkpCiAgICAg
ICAgIHBhcnNlci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHNTb29uKCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjE0MzY4KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkzNiwxMiArOTM2LDEwIEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8WFBhdGhOU1Jlc29sdmVyPiBjcmVhdGVO
U1Jlc29sdmVyKE5vZGUqIG5vZGVSZXNvbHZlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8UmVmPFhQYXRoUmVzdWx0Pj4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBOb2RlKiBjb250ZXh0Tm9kZSwgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4mJiwgdW5zaWduZWQg
c2hvcnQgdHlwZSwgWFBhdGhSZXN1bHQqKTsKIAotICAgIGVudW0gUGVuZGluZ1NoZWV0TGF5b3V0
IHsgTm9MYXlvdXRXaXRoUGVuZGluZ1NoZWV0cywgRGlkTGF5b3V0V2l0aFBlbmRpbmdTaGVldHMs
IElnbm9yZUxheW91dFdpdGhQZW5kaW5nU2hlZXRzIH07Ci0KLSAgICBib29sIGRpZExheW91dFdp
dGhQZW5kaW5nU3R5bGVzaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdTaGVldExheW91
dCA9PSBEaWRMYXlvdXRXaXRoUGVuZGluZ1NoZWV0czsgfQotCi0gICAgYm9vbCBoYXNOb2Rlc1dp
dGhQbGFjZWhvbGRlclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNOb2Rlc1dpdGhQbGFjZWhv
bGRlclN0eWxlOyB9Ci0gICAgdm9pZCBzZXRIYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCkg
eyBtX2hhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUgPSB0cnVlOyB9CisgICAgYm9vbCBoYXNO
b2Rlc1dpdGhOb25GaW5hbFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNOb2Rlc1dpdGhOb25G
aW5hbFN0eWxlOyB9CisgICAgdm9pZCBzZXRIYXNOb2Rlc1dpdGhOb25GaW5hbFN0eWxlKCkgeyBt
X2hhc05vZGVzV2l0aE5vbkZpbmFsU3R5bGUgPSB0cnVlOyB9CisgICAgYm9vbCBoYXNOb2Rlc1dp
dGhNaXNzaW5nU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2hhc05vZGVzV2l0aE1pc3NpbmdTdHls
ZTsgfQorICAgIHZvaWQgc2V0SGFzTm9kZXNXaXRoTWlzc2luZ1N0eWxlKCkgeyBtX2hhc05vZGVz
V2l0aE1pc3NpbmdTdHlsZSA9IHRydWU7IH0KIAogICAgIHZvaWQgdXBkYXRlRm9jdXNBcHBlYXJh
bmNlU29vbihTZWxlY3Rpb25SZXN0b3JhdGlvbk1vZGUpOwogICAgIHZvaWQgY2FuY2VsRm9jdXNB
cHBlYXJhbmNlVXBkYXRlKCk7CkBAIC0xNjc4LDE2ICsxNjc2LDEyIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3dlbGxGb3JtZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9jcmVhdGVSZW5kZXJlcnMg
eyB0cnVlIH07CiAKLSAgICBib29sIG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2hhc05vZGVzV2l0aE5vbkZpbmFsU3R5bGUgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9oYXNOb2Rlc1dpdGhNaXNzaW5nU3R5bGUgeyBmYWxzZSB9OwogICAgIC8vIEJ1
dCBzb21ldGltZXMgeW91IG5lZWQgdG8gaWdub3JlIHBlbmRpbmcgc3R5bGVzaGVldCBjb3VudCB0
bwogICAgIC8vIGZvcmNlIGFuIGltbWVkaWF0ZSBsYXlvdXQgd2hlbiByZXF1ZXN0ZWQgYnkgSlMu
CiAgICAgYm9vbCBtX2lnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyB7IGZhbHNlIH07CiAKLSAgICAv
LyBJZiB3ZSBkbyBpZ25vcmUgdGhlIHBlbmRpbmcgc3R5bGVzaGVldCBjb3VudCwgdGhlbiB3ZSBu
ZWVkIHRvIGFkZCBhIGJvb2xlYW4KLSAgICAvLyB0byB0cmFjayB0aGF0IHRoaXMgaGFwcGVuZWQg
c28gdGhhdCB3ZSBjYW4gZG8gYSBmdWxsIHJlcGFpbnQgd2hlbiB0aGUgc3R5bGVzaGVldHMKLSAg
ICAvLyBkbyBldmVudHVhbGx5IGxvYWQuCi0gICAgUGVuZGluZ1NoZWV0TGF5b3V0IG1fcGVuZGlu
Z1NoZWV0TGF5b3V0IHsgTm9MYXlvdXRXaXRoUGVuZGluZ1NoZWV0cyB9OwotCiAgICAgYm9vbCBt
X2hhc0VsZW1lbnRVc2luZ1N0eWxlQmFzZWRFZGl0YWJpbGl0eSB7IGZhbHNlIH07CiAgICAgYm9v
bCBtX2ZvY3VzTmF2aWdhdGlvblN0YXJ0aW5nTm9kZUlzUmVtb3ZlZCB7IGZhbHNlIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkocmV2aXNp
b24gMjE0MzY4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIGJvb2wgSFRNTEZyYW1lU2V0RWxl
bWVudDo6cmVuZGVyZXJJc05lZWQKIHsKICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSwgZnJhbWVz
IHJlbmRlciBldmVuIHdoZW4gZGlzcGxheTogbm9uZSBpcyBzZXQuCiAgICAgLy8gSG93ZXZlciwg
d2UgZGVsYXkgY3JlYXRpbmcgYSByZW5kZXJlciB1bnRpbCBzdHlsZXNoZWV0cyBoYXZlIGxvYWRl
ZC4gCi0gICAgcmV0dXJuICFzdHlsZS5pc1BsYWNlaG9sZGVyU3R5bGUoKTsKKyAgICByZXR1cm4g
IXN0eWxlLmlzTm90RmluYWwoKTsKIH0KIAogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxG
cmFtZVNldEVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxl
LCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAkocmV2aXNpb24gMjE0MzY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTg2LDYgKzQ1ODYsMTAgQEAgYm9vbCBGcmFtZVZpZXc6
OnF1YWxpZmllc0FzVmlzdWFsbHlOb25FbQogICAgIGlmICghZnJhbWUoKS5kb2N1bWVudCgpLT5w
YXJzaW5nKCkgJiYgZnJhbWUoKS5sb2FkZXIoKS5zdGF0ZU1hY2hpbmUoKS5jb21taXR0ZWRGaXJz
dFJlYWxEb2N1bWVudExvYWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGFsc28gaWdub3JlIHJlbmRlcmVycyB3aXRoIG5vbi1maW5hbCBzdHlsZS4K
KyAgICBpZiAoZnJhbWUoKS5kb2N1bWVudCgpLT5zdHlsZVNjb3BlKCkuaGFzUGVuZGluZ1NoZWV0
c0JlZm9yZUJvZHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgLy8gUmVxdWlyZSB0
aGUgZG9jdW1lbnQgdG8gZ3JvdyBhIGJpdC4KICAgICAvLyBVc2luZyBhIHZhbHVlIG9mIDQ4IGFs
bG93cyB0aGUgaGVhZGVyIG9uIEdvb2dsZSdzIHNlYXJjaCBwYWdlIHRvIHJlbmRlciBpbW1lZGlh
dGVseSBiZWZvcmUgc2VhcmNoIHJlc3VsdHMgcG9wdWxhdGUgbGF0ZXIuCiAgICAgc3RhdGljIGNv
bnN0IGludCBkb2N1bWVudEhlaWdodFRocmVzaG9sZCA9IDQ4OwpAQCAtNTEyOCw3ICs1MTMyLDcg
QEAgdm9pZCBGcmFtZVZpZXc6OmZpcmVMYXlvdXRSZWxhdGVkTWlsZXN0bwogICAgIHVwZGF0ZUlz
VmlzdWFsbHlOb25FbXB0eSgpOwogCiAgICAgLy8gSWYgdGhlIGxheW91dCB3YXMgZG9uZSB3aXRo
IHBlbmRpbmcgc2hlZXRzLCB3ZSBhcmUgbm90IGluIGZhY3QgdmlzdWFsbHkgbm9uLWVtcHR5IHll
dC4KLSAgICBpZiAobV9pc1Zpc3VhbGx5Tm9uRW1wdHkgJiYgIWZyYW1lKCkuZG9jdW1lbnQoKS0+
ZGlkTGF5b3V0V2l0aFBlbmRpbmdTdHlsZXNoZWV0cygpICYmIG1fZmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0Q2FsbGJhY2tQZW5kaW5nKSB7CisgICAgaWYgKG1faXNWaXN1YWxseU5vbkVtcHR5
ICYmbV9maXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRDYWxsYmFja1BlbmRpbmcpIHsKICAgICAg
ICAgbV9maXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRDYWxsYmFja1BlbmRpbmcgPSBmYWxzZTsK
ICAgICAgICAgaWYgKHJlcXVlc3RlZE1pbGVzdG9uZXMgJiBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXQpCiAgICAgICAgICAgICBtaWxlc3RvbmVzQWNoaWV2ZWQgfD0gRGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCShyZXZpc2lvbiAyMTQzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc5LDEwICsxNTc5LDEwIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKIAogdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQogewotICAgIC8vIEF2b2lkIHBhaW50aW5nIGRlc2NlbmRhbnRzIG9mIHRo
ZSByb290IGVsZW1lbnQgd2hlbiBzdHlsZXNoZWV0cyBoYXZlbid0IGxvYWRlZC4gIFRoaXMgZWxp
bWluYXRlcyBGT1VDLgotICAgIC8vIEl0J3Mgb2sgbm90IHRvIGRyYXcsIGJlY2F1c2UgbGF0ZXIg
b24sIHdoZW4gYWxsIHRoZSBzdHlsZXNoZWV0cyBkbyBsb2FkLCBzdHlsZVJlc29sdmVyQ2hhbmdl
ZCgpIG9uIHRoZSBEb2N1bWVudAotICAgIC8vIHdpbGwgZG8gYSBmdWxsIHJlcGFpbnQuCi0gICAg
aWYgKGRvY3VtZW50KCkuZGlkTGF5b3V0V2l0aFBlbmRpbmdTdHlsZXNoZWV0cygpICYmICFpc1Jl
bmRlclZpZXcoKSkKKyAgICAvLyBTdHlsZSBpcyBub24tZmluYWwgaWYgdGhlIGVsZW1lbnQgaGFz
IGEgcGVuZGluZyBzdHlsZXNoZWV0IGJlZm9yZSBpdC4gV2UgZW5kIHVwIHdpdGggcmVuZGVyZXJz
IHdpdGggc3VjaCBzdHlsZXMgaWYgYSBzY3JpcHQKKyAgICAvLyBmb3JjZXMgcmVuZGVyZXIgY29u
c3RydWN0aW9uIGJ5IHF1ZXJ5aW5nIHNvbWV0aGluZyBsYXlvdXQgZGVwZW5kZW50LgorICAgIC8v
IEF2b2lkIEZPVUMgYnkgbm90IHBhaW50aW5nLiBTd2l0Y2hpbmcgdG8gZmluYWwgc3R5bGUgdHJp
Z2dlcnMgcmVwYWludC4KKyAgICBpZiAoc3R5bGUoKS5pc05vdEZpbmFsKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAyMTQzNjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTM5LDEw
ICszOTM5LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZERvU29mdHdhcmVQYWludAogICAg
IAogc3RhdGljIGlubGluZSBib29sIHNob3VsZFN1cHByZXNzUGFpbnRpbmdMYXllcihSZW5kZXJM
YXllciogbGF5ZXIpCiB7Ci0gICAgLy8gQXZvaWQgcGFpbnRpbmcgZGVzY2VuZGFudHMgb2YgdGhl
IHJvb3QgbGF5ZXIgd2hlbiBzdHlsZXNoZWV0cyBoYXZlbid0IGxvYWRlZC4gVGhpcyBlbGltaW5h
dGVzIEZPVUMuCi0gICAgLy8gSXQncyBvayBub3QgdG8gZHJhdywgYmVjYXVzZSBsYXRlciBvbiwg
d2hlbiBhbGwgdGhlIHN0eWxlc2hlZXRzIGRvIGxvYWQsIHVwZGF0ZVN0eWxlU2VsZWN0b3Igb24g
dGhlIERvY3VtZW50Ci0gICAgLy8gd2lsbCBkbyBhIGZ1bGwgcmVwYWludCgpLgotICAgIGlmIChs
YXllci0+cmVuZGVyZXIoKS5kb2N1bWVudCgpLmRpZExheW91dFdpdGhQZW5kaW5nU3R5bGVzaGVl
dHMoKSAmJiAhbGF5ZXItPmlzUm9vdExheWVyKCkgJiYgIWxheWVyLT5yZW5kZXJlcigpLmlzRG9j
dW1lbnRFbGVtZW50UmVuZGVyZXIoKSkKKyAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUo
KS5pc05vdEZpbmFsKCkgJiYgIWxheWVyLT5pc1Jvb3RMYXllcigpICYmICFsYXllci0+cmVuZGVy
ZXIoKS5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgLy8gQXZvaWQgcGFpbnRpbmcgYWxsIGxheWVycyBpZiB0aGUgZG9jdW1lbnQgaXMgaW4g
YSBzdGF0ZSB3aGVyZSB2aXN1YWwgdXBkYXRlcyBhcmVuJ3QgYWxsb3dlZC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24g
MjE0MzY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODUzLDYgKzg1Myw5IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNo
YW5nZVJlcXVpcmVzUmVwYWludCgKICAgICAgICAgfHwgbV9yYXJlSW5oZXJpdGVkRGF0YS0+aW1h
Z2VSZW5kZXJpbmcgIT0gb3RoZXIubV9yYXJlSW5oZXJpdGVkRGF0YS0+aW1hZ2VSZW5kZXJpbmcp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCisgICAgaWYgKG1fcmFyZU5vbkluaGVyaXRlZERhdGEt
PmlzTm90RmluYWwgIT0gb3RoZXIubV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+aXNOb3RGaW5hbCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAobV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+
c2hhcGVPdXRzaWRlICE9IG90aGVyLm1fcmFyZU5vbkluaGVyaXRlZERhdGEtPnNoYXBlT3V0c2lk
ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyMTQzNjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY1
Myw4ICsxNjUzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBJc29sYXRpb24gaW5pdGlhbElzb2xh
dGlvbigpIHsgcmV0dXJuIElzb2xhdGlvbkF1dG87IH0KICNlbmRpZgogCi0gICAgYm9vbCBpc1Bs
YWNlaG9sZGVyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5p
c1BsYWNlaG9sZGVyU3R5bGU7IH0KLSAgICB2b2lkIHNldElzUGxhY2Vob2xkZXJTdHlsZSgpIHsg
U0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBpc1BsYWNlaG9sZGVyU3R5bGUsIHRydWUp
OyB9CisgICAgLy8gSW5kaWNhdGVzIHRoZSBzdHlsZSBpcyBsaWtlbHkgdG8gY2hhbmdlIGR1ZSB0
byBhIHBlbmRpbmcgc3R5bGVzaGVldCBsb2FkLgorICAgIGJvb2wgaXNOb3RGaW5hbCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPmlzTm90RmluYWw7IH0KKyAgICB2b2lk
IHNldElzTm90RmluYWwoKSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgaXNOb3RG
aW5hbCwgdHJ1ZSk7IH0KIAogICAgIHZvaWQgc2V0VmlzaXRlZExpbmtDb2xvcihjb25zdCBDb2xv
ciYpOwogICAgIHZvaWQgc2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3Im
IHYpIHsgU0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCB2aXNpdGVkTGlua0JhY2tncm91
bmRDb2xvciwgdik7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAJKHJldmlzaW9uIDIx
NDM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIFN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGE6OlN0eWxlUmFyZU5vbkkKICAgICAsIGJyZWFrSW5zaWRlKFJlbmRl
clN0eWxlOjppbml0aWFsQnJlYWtJbnNpZGUoKSkKICAgICAsIHJlc2l6ZShSZW5kZXJTdHlsZTo6
aW5pdGlhbFJlc2l6ZSgpKQogICAgICwgaGFzQXR0ckNvbnRlbnQoZmFsc2UpCi0gICAgLCBpc1Bs
YWNlaG9sZGVyU3R5bGUoZmFsc2UpCisgICAgLCBpc05vdEZpbmFsKGZhbHNlKQogewogICAgIG1h
c2tCb3hJbWFnZS5zZXRNYXNrRGVmYXVsdHMoKTsKIH0KQEAgLTIwMCw3ICsyMDAsNyBAQCBpbmxp
bmUgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6U3R5bGVSCiAgICAgLCBicmVha0luc2lkZShv
LmJyZWFrSW5zaWRlKQogICAgICwgcmVzaXplKG8ucmVzaXplKQogICAgICwgaGFzQXR0ckNvbnRl
bnQoby5oYXNBdHRyQ29udGVudCkKLSAgICAsIGlzUGxhY2Vob2xkZXJTdHlsZShvLmlzUGxhY2Vo
b2xkZXJTdHlsZSkKKyAgICAsIGlzTm90RmluYWwoby5pc05vdEZpbmFsKQogewogfQogCkBAIC0z
MDQsNyArMzA0LDcgQEAgYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcgog
ICAgICAgICAmJiBicmVha0luc2lkZSA9PSBvLmJyZWFrSW5zaWRlCiAgICAgICAgICYmIHJlc2l6
ZSA9PSBvLnJlc2l6ZQogICAgICAgICAmJiBoYXNBdHRyQ29udGVudCA9PSBvLmhhc0F0dHJDb250
ZW50Ci0gICAgICAgICYmIGlzUGxhY2Vob2xkZXJTdHlsZSA9PSBvLmlzUGxhY2Vob2xkZXJTdHls
ZTsKKyAgICAgICAgJiYgaXNOb3RGaW5hbCA9PSBvLmlzTm90RmluYWw7CiB9CiAKIGJvb2wgU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6Y29udGVudERhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YS5oCShyZXZpc2lvbiAyMTQzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIw
LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaGFzQXR0ckNvbnRlbnQgOiAxOwogCi0gICAg
dW5zaWduZWQgaXNQbGFjZWhvbGRlclN0eWxlIDogMTsKKyAgICB1bnNpZ25lZCBpc05vdEZpbmFs
IDogMTsKIAogcHJpdmF0ZToKICAgICBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAkocmV2aXNpb24gMjE0MzY4KQorKysgU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw3
ICszOTQsNyBAQCBTY29wZTo6U3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgU2NvcGU6OmFuCiAgICAg
YXV0byBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9IGhhc0luc2VydGlvbnMgPyBSZXNldCA6IEFk
ZGl0aXZlOwogCiAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgcGFyc2luZyB0aGUgYm9keSBhbmQg
c28gbWF5IGhhdmUgc2lnbmlmaWNhbnQgYW1vdW50IG9mIGVsZW1lbnRzLCBwdXQgc29tZSBlZmZv
cnQgaW50byB0cnlpbmcgdG8gYXZvaWQgc3R5bGUgcmVjYWxjcy4KLSAgICBpZiAoIW1fZG9jdW1l
bnQuYm9keU9yRnJhbWVzZXQoKSB8fCBtX2RvY3VtZW50Lmhhc05vZGVzV2l0aFBsYWNlaG9sZGVy
U3R5bGUoKSkKKyAgICBpZiAoIW1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKSB8fCBtX2RvY3Vt
ZW50Lmhhc05vZGVzV2l0aE5vbkZpbmFsU3R5bGUoKSB8fCBtX2RvY3VtZW50Lmhhc05vZGVzV2l0
aE1pc3NpbmdTdHlsZSgpKQogICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGU7
CiAKICAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIGludmFsaWRhdGlvbkFuYWx5c2lzKGFk
ZGVkU2hlZXRzLCBzdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0b3IoKSk7CkBAIC00NDUs
NyArNDQ1LDcgQEAgdm9pZCBTY29wZTo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYQogCiAg
ICAgLy8gRG9uJ3QgYm90aGVyIHVwZGF0aW5nLCBzaW5jZSB3ZSBoYXZlbid0IGxvYWRlZCBhbGwg
b3VyIHN0eWxlIGluZm8geWV0CiAgICAgLy8gYW5kIGhhdmVuJ3QgY2FsY3VsYXRlZCB0aGUgc3R5
bGUgcmVzb2x2ZXIgZm9yIHRoZSBmaXJzdCB0aW1lLgotICAgIGlmICghbV9zaGFkb3dSb290ICYm
ICFtX2RpZFVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzICYmIGhhc1BlbmRpbmdTaGVldHMoKSkgewor
ICAgIGlmICghbV9zaGFkb3dSb290ICYmICFtX2RpZFVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzICYm
IGhhc1BlbmRpbmdTaGVldHNCZWZvcmVCb2R5KCkpIHsKICAgICAgICAgY2xlYXJSZXNvbHZlcigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVUcmVlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjE0MzY4KQorKysgU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwyNCArNTEs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBTdHlsZSB7CiAKLXN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1ha2VQbGFjZWhvbGRlclN0eWxlKERvY3VtZW50
JiBkb2N1bWVudCkKLXsKLSAgICBhdXRvIHBsYWNlaG9sZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlUHRyKCk7Ci0gICAgcGxhY2Vob2xkZXJTdHlsZS0+c2V0RGlzcGxheShOT05FKTsKLSAg
ICBwbGFjZWhvbGRlclN0eWxlLT5zZXRJc1BsYWNlaG9sZGVyU3R5bGUoKTsKLQotICAgIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRPbmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3
b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlTWVkaXVtKTsKLSAgICBmbG9hdCBzaXplID0g
U3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50
KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHNpemUpOwotICAgIHBsYWNlaG9sZGVyU3R5bGUt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotCi0gICAgcGxhY2Vob2xkZXJT
dHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKLSAg
ICByZXR1cm4gcGxhY2Vob2xkZXJTdHlsZTsKLX0KLQogVHJlZVJlc29sdmVyOjpUcmVlUmVzb2x2
ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKIHsKQEAg
LTEyNiwxMSArMTA4LDYgQEAgdm9pZCBUcmVlUmVzb2x2ZXI6OnBvcFNjb3BlKCkKIAogc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBUcmVlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUpCiB7Ci0gICAg
aWYgKG1fZGlkU2VlUGVuZGluZ1N0eWxlc2hlZXQgJiYgIWVsZW1lbnQucmVuZGVyZXIoKSAmJiAh
bV9kb2N1bWVudC5pc0lnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKCkpIHsKLSAgICAgICAgbV9k
b2N1bWVudC5zZXRIYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCk7Ci0gICAgICAgIHJldHVy
biBtYWtlUGxhY2Vob2xkZXJTdHlsZShtX2RvY3VtZW50KTsKLSAgICB9Ci0KICAgICBpZiAoZWxl
bWVudC5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkgewogICAgICAgICBSZW5kZXJT
dHlsZSogc2hhZG93SG9zdFN0eWxlID0gc2NvcGUoKS5zaGFkb3dSb290ID8gbV91cGRhdGUtPmVs
ZW1lbnRTdHlsZSgqc2NvcGUoKS5zaGFkb3dSb290LT5ob3N0KCkpIDogbnVsbHB0cjsKICAgICAg
ICAgaWYgKGF1dG8gY3VzdG9tU3R5bGUgPSBlbGVtZW50LnJlc29sdmVDdXN0b21TdHlsZShpbmhl
cml0ZWRTdHlsZSwgc2hhZG93SG9zdFN0eWxlKSkgewpAQCAtMTkxLDE1ICsxNjgsMjUgQEAgc3Rh
dGljIGJvb2wgYWZmZWN0c1JlbmRlcmVkU3VidHJlZShFbGVtZQogCiBFbGVtZW50VXBkYXRlIFRy
ZWVSZXNvbHZlcjo6cmVzb2x2ZUVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKKyAgICBpZiAo
bV9kaWRTZWVQZW5kaW5nU3R5bGVzaGVldCAmJiAhZWxlbWVudC5yZW5kZXJlcigpICYmICFtX2Rv
Y3VtZW50LmlzSWdub3JpbmdQZW5kaW5nU3R5bGVzaGVldHMoKSkgeworICAgICAgICBtX2RvY3Vt
ZW50LnNldEhhc05vZGVzV2l0aE1pc3NpbmdTdHlsZSgpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKwogICAgIGF1dG8gbmV3U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgcGFy
ZW50KCkuc3R5bGUpOwogCiAgICAgaWYgKCFhZmZlY3RzUmVuZGVyZWRTdWJ0cmVlKGVsZW1lbnQs
ICpuZXdTdHlsZSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIHVwZGF0ZSA9IGNy
ZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0ZShXVEZNb3ZlKG5ld1N0eWxlKSwgZWxlbWVudCwgcGFy
ZW50KCkuY2hhbmdlKTsKLQogICAgIGF1dG8qIGV4aXN0aW5nU3R5bGUgPSBlbGVtZW50LnJlbmRl
clN0eWxlKCk7CiAKKyAgICBpZiAobV9kaWRTZWVQZW5kaW5nU3R5bGVzaGVldCAmJiAoIWV4aXN0
aW5nU3R5bGUgfHwgZXhpc3RpbmdTdHlsZS0+aXNOb3RGaW5hbCgpKSkgeworICAgICAgICBuZXdT
dHlsZS0+c2V0SXNOb3RGaW5hbCgpOworICAgICAgICBtX2RvY3VtZW50LnNldEhhc05vZGVzV2l0
aE5vbkZpbmFsU3R5bGUoKTsKKyAgICB9CisKKyAgICBhdXRvIHVwZGF0ZSA9IGNyZWF0ZUFuaW1h
dGVkRWxlbWVudFVwZGF0ZShXVEZNb3ZlKG5ld1N0eWxlKSwgZWxlbWVudCwgcGFyZW50KCkuY2hh
bmdlKTsKKwogICAgIGlmICgmZWxlbWVudCA9PSBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgp
KSB7CiAgICAgICAgIG1fZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQ
dHIoKnVwZGF0ZS5zdHlsZSk7CiAgICAgICAgIHNjb3BlKCkuc3R5bGVSZXNvbHZlci5zZXRPdmVy
cmlkZURvY3VtZW50RWxlbWVudFN0eWxlKG1fZG9jdW1lbnRFbGVtZW50U3R5bGUuZ2V0KCkpOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMjE0MzY4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDMtMjcgIEFudHRpIEtvaXZpc3RvICA8
YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIExvYWRpbmcgaW4tYm9keSBzdHlsZXNoZWV0cyBz
aG91bGQgbm90IGJsb2NrIHJlbmRlcmluZyBvZiBlbGVtZW50cyBiZWZvcmUgdGhlbQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzQ1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgICogaHR0cC90ZXN0cy9pbmNy
ZW1lbnRhbC9yZXNvdXJjZXMvZGVsYXllZC1jc3MucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL2luY3JlbWVudGFsL3N0eWxlc2hlZXQtYm9keS1pbmNyZW1lbnRhbC1yZW5kZXJpbmct
ZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9z
dHlsZXNoZWV0LWJvZHktaW5jcmVtZW50YWwtcmVuZGVyaW5nLmh0bWw6IEFkZGVkLgorCiAyMDE3
LTAzLTI0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
c3VwcG9ydCBmb3IgcXBTdW0gaW4gV2ViUlRDIHN0YXRzCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2luY3JlbWVudGFsL3N0eWxlc2hlZXQtYm9keS1pbmNyZW1lbnRhbC1yZW5kZXJpbmct
ZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luY3Jl
bWVudGFsL3N0eWxlc2hlZXQtYm9keS1pbmNyZW1lbnRhbC1yZW5kZXJpbmctZXhwZWN0ZWQuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luY3JlbWVudGFsL3N0
eWxlc2hlZXQtYm9keS1pbmNyZW1lbnRhbC1yZW5kZXJpbmctZXhwZWN0ZWQuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKzxkaXYgc3R5bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6
MTAwcHg7IGJhY2tncm91bmQtY29sb3I6Z3JlZW4iPjwvZGl2PgorPGRpdiBzdHlsZT0id2lkdGg6
MTAwcHg7IGhlaWdodDoxMDBweDsgYmFja2dyb3VuZC1jb2xvcjpncmVlbiI+PC9kaXY+Cis8cD4K
K0JlZm9yZSBzdHlsZXNoZWV0IGxvYWQ6IChyZXBhaW50IHJlY3RzIChyZWN0IDggOCAxMDAgMTAw
KSApPGJyPgorQWZ0ZXIgc3R5bGVzaGVldCBsb2FkOiAocmVwYWludCByZWN0cyAocmVjdCA4IDEw
OCAxMDAgMTAwKSApPGJyPgorPC9wPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbmNy
ZW1lbnRhbC9zdHlsZXNoZWV0LWJvZHktaW5jcmVtZW50YWwtcmVuZGVyaW5nLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9zdHlsZXNoZWV0LWJv
ZHktaW5jcmVtZW50YWwtcmVuZGVyaW5nLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbmNyZW1lbnRhbC9zdHlsZXNoZWV0LWJvZHktaW5jcmVtZW50YWwtcmVu
ZGVyaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorPGJvZHk+Cis8c2Ny
aXB0PgorZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDsKKworaW50ZXJuYWxzLnN0YXJ0VHJhY2tp
bmdSZXBhaW50cygpOworbGV0IGluaXRpYWxSZWN0czsKK3NldFRpbWVvdXQoKCkgPT4geworICAg
aW5pdGlhbFJlY3RzID0gaW50ZXJuYWxzLnJlcGFpbnRSZWN0c0FzVGV4dCgpOworICAgaW50ZXJu
YWxzLnN0b3BUcmFja2luZ1JlcGFpbnRzKCk7CisgICBpbnRlcm5hbHMuc3RhcnRUcmFja2luZ1Jl
cGFpbnRzKCk7Cit9LCAwKTsKKworZG9jdW1lbnQuYm9keS5vbmxvYWQgPSAoKSA9PiB7CisgICAg
bGV0IGZpbmFsUmVjdHMgPSBpbnRlcm5hbHMucmVwYWludFJlY3RzQXNUZXh0KCk7CisgICAgaW50
ZXJuYWxzLnN0b3BUcmFja2luZ1JlcGFpbnRzKCk7CisgICAgZG9jdW1lbnQuYm9keS5pbm5lckhU
TUwgKz0gYDxwPgorICAgICAgICBCZWZvcmUgc3R5bGVzaGVldCBsb2FkOiAke2luaXRpYWxSZWN0
c308YnI+CisgICAgICAgIEFmdGVyIHN0eWxlc2hlZXQgbG9hZDogJHtmaW5hbFJlY3RzfTxicj4K
KyAgICA8L3A+YDsKK307Cis8L3NjcmlwdD4KKzxkaXYgc3R5bGU9IndpZHRoOjEwMHB4OyBoZWln
aHQ6MTAwcHg7IGJhY2tncm91bmQtY29sb3I6Z3JlZW4iPjwvZGl2PgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvZGVsYXllZC1jc3MucGhwP2RlbGF5PTMwMCI+Cis8ZGl2
IGNsYXNzPWRlbGF5ZWQgc3R5bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHg7IGJhY2tncm91
bmQtY29sb3I6cmVkIj48L2Rpdj4K
</data>

          </attachment>
      

    </bug>

</bugzilla>