<?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>176583</bug_id>
          
          <creation_ts>2017-09-07 21:32:21 -0700</creation_ts>
          <short_desc>Modernize and make API::UIClient more asynchronous</short_desc>
          <delta_ts>2017-09-27 13:02:19 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>bburg</cc>
    
    <cc>berto</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1346710</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-07 21:32:21 -0700</bug_when>
    <thetext>Modernize and make API::UIClient more asynchronous</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346711</commentid>
    <comment_count>1</comment_count>
      <attachid>320235</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-07 21:38:09 -0700</bug_when>
    <thetext>Created attachment 320235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346712</commentid>
    <comment_count>2</comment_count>
      <attachid>320236</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-07 21:51:57 -0700</bug_when>
    <thetext>Created attachment 320236
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346713</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-07 21:54:42 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346714</commentid>
    <comment_count>4</comment_count>
      <attachid>320237</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-07 21:58:12 -0700</bug_when>
    <thetext>Created attachment 320237
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346722</commentid>
    <comment_count>5</comment_count>
      <attachid>320242</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-07 22:45:22 -0700</bug_when>
    <thetext>Created attachment 320242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346837</commentid>
    <comment_count>6</comment_count>
      <attachid>320271</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-08 10:06:28 -0700</bug_when>
    <thetext>Created attachment 320271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346864</commentid>
    <comment_count>7</comment_count>
      <attachid>320271</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-09-08 11:03:38 -0700</bug_when>
    <thetext>Comment on attachment 320271
Patch

Automation changes look OK in principle, but I would like to read this more deeply and run test suite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346866</commentid>
    <comment_count>8</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-09-08 11:04:10 -0700</bug_when>
    <thetext>(In reply to Brian Burg from comment #7)
&gt; Comment on attachment 320271 [details]
&gt; Patch
&gt; 
&gt; Automation changes look OK in principle, but I would like to read this more
&gt; deeply and run test suite.

Or Carlos could do the same. I don&apos;t have time to review until Monday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347597</commentid>
    <comment_count>9</comment_count>
      <attachid>320271</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-09-11 14:09:41 -0700</bug_when>
    <thetext>Comment on attachment 320271
Patch

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

r=me with small request

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:212
&gt; +    page.getWindowFrameWithCompletionHandler([this, protectedThis = WTFMove(protectedThis), activeURL = page.pageLoadState().activeURL(), handle = handleForWebPageProxy(page), completionHandler = WTFMove(completionHandler)](WebCore::FloatRect windowFrame) mutable {

Err, this is weird. The async part should not be in the factory method, which just translates WK types to JSON payloads. So the new signature for this builder should be adjusted to take the page and its windowFrame, and stay synchronous.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:235
&gt; +void WebAutomationSession::getNextContext(Ref&lt;WebAutomationSession&gt;&amp;&amp; protectedThis, Vector&lt;Ref&lt;WebPageProxy&gt;&gt;&amp;&amp; pages, Ref&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Automation::BrowsingContext&gt;&gt; contexts, Ref&lt;WebAutomationSession::GetBrowsingContextsCallback&gt;&amp;&amp; callback)

This diff is hard to read.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:242
&gt; +    buildBrowsingContextForPage(WTFMove(protectedThis), page.get(), [this, pages = WTFMove(pages), contexts = WTFMove(contexts), callback = WTFMove(callback)](Ref&lt;WebAutomationSession&gt;&amp;&amp; protectedThis, Ref&lt;Inspector::Protocol::Automation::BrowsingContext&gt;&amp;&amp; context) mutable {

... so the windowFrame async call would be here, and call the builder inside the completion handler.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1288
&gt; +

parsedButton and parsedInteraction don&apos;t need to be in the completion handler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347674</commentid>
    <comment_count>10</comment_count>
      <attachid>320486</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-11 15:24:04 -0700</bug_when>
    <thetext>Created attachment 320486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347690</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-11 15:51:30 -0700</bug_when>
    <thetext>http://trac.webkit.org/r221887</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353781</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 13:02:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694523&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320235</attachid>
            <date>2017-09-07 21:38:09 -0700</date>
            <delta_ts>2017-09-07 21:51:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176583-20170907213808.patch</filename>
            <type>text/plain</type>
            <size>58342</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE3NzcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE3LTA5LTA3ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIGFu
ZCBtYWtlIEFQSTo6VUlDbGllbnQgbW9yZSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjU4MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFQSTo6VUlDbGllbnQgY2FsbHMgdGhhdCBy
ZXR1cm4gdmFsdWVzIHN5bmNocm9ub3VzbHkgcmVxdWlyZSBzeW5jaHJvbm91cyBBUElzIHVubmVj
ZXNzYXJpbHkuCisgICAgICAgIEhhdmluZyB0aGVtIGNhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3
aXRoIHRoZSByZXN1bHRzIGluc3RlYWQgYWxsb3dzIHVzIHRvIG1ha2UgYXN5bmNocm9ub3VzCisg
ICAgICAgIEFQSXMsIGFuZCBleGlzdGluZyBzeW5jaHJvbm91cyBBUElzIGNhbiBqdXN0IGNhbGwg
dGhlIGNvbXBsZXRpb24gaGFuZGxlcnMgaW1tZWRpYXRlbHkuCisgICAgICAgIAorICAgICAgICBV
bmZvcnR1bmF0ZWx5IGFuIGFzc3VtcHRpb24gdGhhdCBBUEk6OlVJQ2xpZW50Ojp3aW5kb3dGcmFt
ZSByZXR1cm5zIHN5bmNocm9ub3VzbHkgaGFkIHdvcmtlZAorICAgICAgICBpdHMgd2F5IGludG8g
dGhlIFdlYkF1dG9tYXRpb25TZXNzaW9uLCB3aGljaCBjYWxscyBXZWJQYWdlUHJveHk6OmdldFdp
bmRvd0ZyYW1lLiAgTWFraW5nIGl0CisgICAgICAgIGFzeW5jaHJvbm91cyByZXF1aXJlZCBtYWtp
bmcgc29tZSBhdXRvbWF0aW9uIHByb3RvY29scyBhc3luY2hyb25vdXMgc28gdGhleSBjYW4gc2Vu
ZCB0aGVpcgorICAgICAgICByZXN1bHQgb25jZSB0aGV5IGhhdmUgdGhlIHJlc3VsdGluZyBmcmFt
ZXMgZnJvbSB0aGUgVUlDbGllbnQuCisgICAgICAgIAorICAgICAgICBObyBjaGFuZ2UgaW4gYmVo
YXZpb3VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oOgorICAgICAg
ICAoQVBJOjpVSUNsaWVudDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKEFQSTo6
VUlDbGllbnQ6Om1lbnVCYXJJc1Zpc2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0
TWVudUJhcklzVmlzaWJsZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpzdGF0dXNCYXJJc1Zp
c2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0U3RhdHVzQmFySXNWaXNpYmxlKToK
KyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmlzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OnNldFdpbmRv
d0ZyYW1lKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OndpbmRvd0ZyYW1lKToKKyAgICAgICAg
KEFQSTo6VUlDbGllbnQ6OmhlYWRlckhlaWdodCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50Ojpm
b290ZXJIZWlnaHQpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6ZHJhd0hlYWRlcik6CisgICAg
ICAgIChBUEk6OlVJQ2xpZW50OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnByaW50RnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAg
ICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb246CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldE5leHRDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtTW91c2VJbnRlcmFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAg
ICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZh
U2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb29sYmFy
c0FyZVZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldE1lbnVCYXJJ
c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zp
c2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFN0YXR1c0JhcklzVmlz
aWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNp
YmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJc1Jlc2l6YWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0SXNSZXNpemFibGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNjcmVlblRvUm9vdFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnJvb3RWaWV3VG9TY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnByaW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhlYWRl
ckhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9vdGVySGVpZ2h0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmF3SGVhZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1Zp
ZXcgaW5pdFdpdGhGcmFtZVByb3h5OnZpZXc6XSk6CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3
IF9hZGp1c3RQcmludGluZ01hcmdpbnNGb3JIZWFkZXJBbmRGb290ZXJdKToKKyAgICAgICAgKC1b
V0tQcmludGluZ1ZpZXcgZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZTpdKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6CisKIDIwMTctMDktMDcgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFVwc3RyZWFtIFFUS2l0LXJl
bGF0ZWQgV2ViS2l0U3lzdGVtSW50ZXJmYWNlIGZ1bmN0aW9ucwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQ4
LDcgKzM5NDgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oCiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFJlZlB0cjxN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpEZWxheWVkUmVwbHk+
IHJlcGx5KQordm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgUmVmPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4mJiByZXBs
eSkKIHsKICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJh
bWVJRCk7CiAgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CkBAIC0zOTYxLDcgKzM5NjEsOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdFByb21wdCh1CiAgICAgICAgICAgICBhdXRv
bWF0aW9uU2Vzc2lvbi0+d2lsbFNob3dKYXZhU2NyaXB0RGlhbG9nKCp0aGlzKTsKICAgICB9CiAK
LSAgICBtX3VpQ2xpZW50LT5ydW5KYXZhU2NyaXB0UHJvbXB0KHRoaXMsIG1lc3NhZ2UsIGRlZmF1
bHRWYWx1ZSwgZnJhbWUsIHNlY3VyaXR5T3JpZ2luLCBbcmVwbHldKGNvbnN0IFN0cmluZyYgcmVz
dWx0KSB7IHJlcGx5LT5zZW5kKHJlc3VsdCk7IH0pOworICAgIG1fdWlDbGllbnQtPnJ1bkphdmFT
Y3JpcHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBmcmFtZSwgc2VjdXJpdHlP
cmlnaW4sIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXShjb25zdCBTdHJpbmcmIHJlc3VsdCkgewor
ICAgICAgICByZXBseS0+c2VuZChyZXN1bHQpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkBAIC00MDUxLDcgKzQwNTMs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yCiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
CiB7Ci0gICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKHRoaXMsIHRvb2xiYXJz
QXJlVmlzaWJsZSk7CisgICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKCp0aGlz
LCB0b29sYmFyc0FyZVZpc2libGUpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0VG9vbGJh
cnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRUb29sYmFyc0FyZVZp
c2libGU6OkRlbGF5ZWRSZXBseT4mJiByZXBseSkKQEAgLTQwNjMsNTIgKzQwNjUsNjUgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmdldFRvb2xiYXJzQXJlVmlzaWJsZQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91
aUNsaWVudC0+c2V0TWVudUJhcklzVmlzaWJsZSh0aGlzLCBtZW51QmFySXNWaXNpYmxlKTsKKyAg
ICBtX3VpQ2xpZW50LT5zZXRNZW51QmFySXNWaXNpYmxlKCp0aGlzLCBtZW51QmFySXNWaXNpYmxl
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zpc2libGUoYm9vbCYgbWVu
dUJhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRNZW51QmFySXNWaXNpYmxlKFJl
ZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRNZW51QmFySXNWaXNpYmxlOjpEZWxheWVkUmVw
bHk+JiYgcmVwbHkpCiB7Ci0gICAgbWVudUJhcklzVmlzaWJsZSA9IG1fdWlDbGllbnQtPm1lbnVC
YXJJc1Zpc2libGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+bWVudUJhcklzVmlzaWJsZSgqdGhp
cywgW3JlcGx5ID0gV1RGTW92ZShyZXBseSldIChib29sIHZpc2libGUpIHsKKyAgICAgICAgcmVw
bHktPnNlbmQodmlzaWJsZSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRT
dGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91aUNs
aWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKHRoaXMsIHN0YXR1c0JhcklzVmlzaWJsZSk7Cisg
ICAgbV91aUNsaWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKCp0aGlzLCBzdGF0dXNCYXJJc1Zp
c2libGUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNpYmxlKGJv
b2wmIHN0YXR1c0JhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRTdGF0dXNCYXJJ
c1Zpc2libGUoUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFN0YXR1c0JhcklzVmlzaWJs
ZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHN0YXR1c0JhcklzVmlzaWJsZSA9IG1f
dWlDbGllbnQtPnN0YXR1c0JhcklzVmlzaWJsZSh0aGlzKTsKKyAgICBtX3VpQ2xpZW50LT5zdGF0
dXNCYXJJc1Zpc2libGUoKnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCB2aXNp
YmxlKSB7CisgICAgICAgIHJlcGx5LT5zZW5kKHZpc2libGUpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSkKIHsKLSAgICBt
X3VpQ2xpZW50LT5zZXRJc1Jlc2l6YWJsZSh0aGlzLCBpc1Jlc2l6YWJsZSk7CisgICAgbV91aUNs
aWVudC0+c2V0SXNSZXNpemFibGUoKnRoaXMsIGlzUmVzaXphYmxlKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmdldElzUmVzaXphYmxlKGJvb2wmIGlzUmVzaXphYmxlKQordm9pZCBXZWJQYWdl
UHJveHk6OmdldElzUmVzaXphYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRJc1Jl
c2l6YWJsZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIGlzUmVzaXphYmxlID0gbV91
aUNsaWVudC0+aXNSZXNpemFibGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+aXNSZXNpemFibGUo
KnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCByZXNpemFibGUpIHsKKyAgICAg
ICAgcmVwbHktPnNlbmQocmVzaXphYmxlKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFdpbmRvd0ZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCiB7Ci0g
ICAgbV91aUNsaWVudC0+c2V0V2luZG93RnJhbWUodGhpcywgbV9wYWdlQ2xpZW50LmNvbnZlcnRU
b0RldmljZVNwYWNlKG5ld1dpbmRvd0ZyYW1lKSk7CisgICAgbV91aUNsaWVudC0+c2V0V2luZG93
RnJhbWUoKnRoaXMsIG1fcGFnZUNsaWVudC5jb252ZXJ0VG9EZXZpY2VTcGFjZShuZXdXaW5kb3dG
cmFtZSkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2luZG93RnJhbWUoRmxvYXRSZWN0
JiBuZXdXaW5kb3dGcmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZShSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0V2luZG93RnJhbWU6OkRlbGF5ZWRSZXBseT4mJiBy
ZXBseSkKIHsKLSAgICBuZXdXaW5kb3dGcmFtZSA9IG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2Vy
U3BhY2UobV91aUNsaWVudC0+d2luZG93RnJhbWUodGhpcykpOworICAgIG1fdWlDbGllbnQtPndp
bmRvd0ZyYW1lKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBy
ZXBseSA9IFdURk1vdmUocmVwbHkpXSAoRmxvYXRSZWN0IGZyYW1lKSB7CisgICAgICAgIHJlcGx5
LT5zZW5kKG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2VyU3BhY2UoZnJhbWUpKTsKKyAgICB9KTsK
IH0KLSAgICAKLXZvaWQgV2ViUGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBv
aW50JiBzY3JlZW5Qb2ludCwgSW50UG9pbnQmIHdpbmRvd1BvaW50KQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIoRnVuY3Rpb248dm9pZChG
bG9hdFJlY3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fdWlDbGllbnQtPndpbmRv
d0ZyYW1lKCp0aGlzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBzY3JlZW5Qb2ludCwg
UmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBs
eT4mJiByZXBseSkKIHsKLSAgICB3aW5kb3dQb2ludCA9IG1fcGFnZUNsaWVudC5zY3JlZW5Ub1Jv
b3RWaWV3KHNjcmVlblBvaW50KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQuc2NyZWVu
VG9Sb290VmlldyhzY3JlZW5Qb2ludCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlUHJveHk6OnJv
b3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgdmlld1JlY3QsIEludFJlY3QmIHJlc3VsdCkK
K3ZvaWQgV2ViUGFnZVByb3h5Ojpyb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHZpZXdS
ZWN0LCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXll
ZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHJlc3VsdCA9IG1fcGFnZUNsaWVudC5yb290Vmlld1Rv
U2NyZWVuKHZpZXdSZWN0KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQucm9vdFZpZXdU
b1NjcmVlbih2aWV3UmVjdCkpOwogfQogICAgIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTQxOTQs
NyArNDIwOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmludEZyYW1lKHVpbnQ2NF90IGYKICAg
ICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJhbWVJRCk7CiAg
ICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CiAKLSAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKHRo
aXMsIGZyYW1lKTsKKyAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKCp0aGlzLCAqZnJhbWUpOwog
CiAgICAgZW5kUHJpbnRpbmcoKTsgLy8gU2VuZCBhIG1lc3NhZ2Ugc3luY2hyb25vdXNseSB3aGls
ZSBtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uIGlzIHN0aWxsIHRydWUuCiAgICAgbV9p
c1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbiA9IGZhbHNlOwpAQCAtNTkwMSwzMiArNTkxNiwz
MiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRGVzdHJveU5vdGlmaWNhdGlvCiAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpLT5kaWREZXN0cm95Tm90aWZpY2F0aW9uKHRoaXMsIG5vdGlmaWNhdGlvbklEKTsKIH0KIAot
ZmxvYXQgV2ViUGFnZVByb3h5OjpoZWFkZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitm
bG9hdCBXZWJQYWdlUHJveHk6OmhlYWRlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsK
LSAgICBpZiAoZnJhbWUtPmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1l
LmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX3VpQ2xpZW50LT5oZWFkZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3Vp
Q2xpZW50LT5oZWFkZXJIZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotZmxvYXQgV2ViUGFnZVBy
b3h5Ojpmb290ZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitmbG9hdCBXZWJQYWdlUHJv
eHk6OmZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsKLSAgICBpZiAoZnJhbWUt
PmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1lLmlzRGlzcGxheWluZ1BE
RkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3VpQ2xpZW50LT5m
b290ZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3VpQ2xpZW50LT5mb290ZXJI
ZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdIZWFkZXIo
V2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmIGZyYW1lLCBGbG9hdFJlY3QmJiByZWN0
KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKKyAgICBpZiAo
ZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
dWlDbGllbnQtPmRyYXdIZWFkZXIodGhpcywgZnJhbWUsIHJlY3QpOworICAgIG1fdWlDbGllbnQt
PmRyYXdIZWFkZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJlY3QpKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmRyYXdGb290ZXIoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmIGZy
YW1lLCBGbG9hdFJlY3QmJiByZWN0KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERG
RG9jdW1lbnQoKSkKKyAgICBpZiAoZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIodGhpcywgZnJhbWUsIHJl
Y3QpOworICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJl
Y3QpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJ1bk1vZGFsKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODA4LDEw
ICs4MDgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGNv
bnN0IFN0cmluZyYsIGJvb2wsIFdURjo6RnVuY3Rpb248dm9pZCAoQVBJOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqLCBib29sIGhhZEV4Y2VwdGlvbiwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0
YWlscyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pOwogICAgIHZv
aWQgZm9yY2VSZXBhaW50KFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiYpOwogCi0gICAgZmxvYXQgaGVh
ZGVySGVpZ2h0KFdlYkZyYW1lUHJveHkqKTsKLSAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSopOwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSYpOworICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5Jik7CisgICAg
dm9pZCBkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7Cisg
ICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBEaWN0aW9uYXJ5LgpAQCAtMTE2OCw3ICsx
MTY4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb2N1cyhib29sIGZvY3VzZWQpOwogICAg
IHZvaWQgc2V0V2luZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9p
ZCBnZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGdldFdpbmRv
d0ZyYW1lKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZTo6RGVsYXll
ZFJlcGx5PiYmKTsKKyAgICB2b2lkIGdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVy
KEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RmxvYXRSZWN0KT4mJik7CiAKICAgICBib29sIGlzUmVz
b3VyY2VDYWNoaW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzb3VyY2VDYWNoaW5n
RGlzYWJsZWQ7IH0KICAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpOwpA
QCAtMTI5Niw3ICsxMjk3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAg
dm9pZCBydW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgUmVmPE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHJ1
bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6RGVsYXllZFJlcGx5PiYmKTsKLSAgICB2b2lkIHJ1bkph
dmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4pOworICAg
IHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6RGVsYXllZFJlcGx5
PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJIaXRUZXN0UmVzdWx0RGF0YSYmLCB1aW50MzJfdCBt
b2RpZmllcnMsIFVzZXJEYXRhJiYpOwogCkBAIC0xMzEwLDEzICsxMzExLDEzIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
OwogICAgIHZvaWQgZ2V0VG9vbGJhcnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRUb29sYmFyc0FyZVZpc2libGU6OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBz
ZXRNZW51QmFySXNWaXNpYmxlKGJvb2wgbWVudUJhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRN
ZW51QmFySXNWaXNpYmxlKGJvb2wmIG1lbnVCYXJJc1Zpc2libGUpOworICAgIHZvaWQgZ2V0TWVu
dUJhcklzVmlzaWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlz
aWJsZTo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShi
b29sIHN0YXR1c0JhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRTdGF0dXNCYXJJc1Zpc2libGUo
Ym9vbCYgc3RhdHVzQmFySXNWaXNpYmxlKTsKKyAgICB2b2lkIGdldFN0YXR1c0JhcklzVmlzaWJs
ZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlOjpEZWxh
eWVkUmVwbHk+JiYpOwogICAgIHZvaWQgc2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSk7
Ci0gICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShib29sJiBpc1Jlc2l6YWJsZSk7Ci0gICAgdm9pZCBz
Y3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgV2Vi
Q29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKLSAgICB2b2lkIHJvb3RWaWV3VG9TY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld1JlY3QsIFdlYkNvcmU6OkludFJlY3QmIHJlc3Vs
dCk7CisgICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
R2V0SXNSZXNpemFibGU6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9pZCBzY3JlZW5Ub1Jvb3RW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgUmVmPE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9p
ZCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdSZWN0LCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXllZFJlcGx5PiYm
KTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgdm9pZCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2NyZWVuUG9pbnQsIFdlYkNvcmU6OkludFBv
aW50JiB3aW5kb3dQb2ludCk7CiAgICAgdm9pZCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVl
bihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3UmVjdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVz
dWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE2
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2V0UmVuZGVyVHJlZVNpemUodWlu
dDY0X3QgdHJlZVNpemUpCiAgICAgU2V0VG9vbGJhcnNBcmVWaXNpYmxlKGJvb2wgdG9vbGJhcnNB
cmVWaXNpYmxlKQogICAgIEdldFRvb2xiYXJzQXJlVmlzaWJsZSgpIC0+IChib29sIHRvb2xiYXJz
QXJlVmlzaWJsZSkgRGVsYXllZAotICAgIFNldE1lbnVCYXJJc1Zpc2libGUoYm9vbCBtZW51QmFy
SXNWaXNpYmxlKTsKLSAgICBHZXRNZW51QmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgbWVudUJhcklz
VmlzaWJsZSk7CisgICAgU2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUp
CisgICAgR2V0TWVudUJhcklzVmlzaWJsZSgpIC0+IChib29sIG1lbnVCYXJJc1Zpc2libGUpIERl
bGF5ZWQKICAgICBTZXRTdGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUp
Ci0gICAgR2V0U3RhdHVzQmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgc3RhdHVzQmFySXNWaXNpYmxl
KQorICAgIEdldFN0YXR1c0JhcklzVmlzaWJsZSgpIC0+IChib29sIHN0YXR1c0JhcklzVmlzaWJs
ZSkgRGVsYXllZAogICAgIFNldElzUmVzaXphYmxlKGJvb2wgaXNSZXNpemFibGUpCi0gICAgR2V0
SXNSZXNpemFibGUoKSAtPiAoYm9vbCBpc1Jlc2l6YWJsZSkKKyAgICBHZXRJc1Jlc2l6YWJsZSgp
IC0+IChib29sIGlzUmVzaXphYmxlKSBEZWxheWVkCiAgICAgU2V0V2luZG93RnJhbWUoV2ViQ29y
ZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQotICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNv
cmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkKLSAgICBTY3JlZW5Ub1Jvb3RWaWV3KFdlYkNvcmU6
OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29yZTo6SW50UG9pbnQgd2luZG93UG9pbnQp
Ci0gICAgUm9vdFZpZXdUb1NjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3Jl
OjpJbnRSZWN0IHNjcmVlbkZyYW1lKQorICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6
OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgRGVsYXllZAorICAgIFNjcmVlblRvUm9vdFZpZXcoV2Vi
Q29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQ
b2ludCkgRGVsYXllZAorICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0
KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgRGVsYXllZAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgU2hvd1ZhbGlkYXRpb25NZXNzYWdlKFdlYkNvcmU6OkludFJlY3QgYW5j
aG9yUmVjdCwgU3RyaW5nIG1lc3NhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAkocmV2aXNpb24gMjIxNzcxKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE2ICs5NywxNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0
OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQmKSB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCB0b29sYmFyc0FyZVZpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRp
b25IYW5kbGVyKHRydWUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJs
ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGJvb2wpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBtZW51
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
Ym9vbCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXZWJLaXQ6Oldl
YlBhZ2VQcm94eSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVz
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgYm9vbCkgeyB9Ci0gICAgdmlydHVh
bCBib29sIGlzUmVzaXphYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSos
IGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV2ViS2l0
OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWVudUJhcklzVmlz
aWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TWVudUJhcklzVmlzaWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRpb25I
YW5kbGVyKHRydWUpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpc1Jlc2l6
YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SXNSZXNpemFibGUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IHdpbmRvd0ZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gV2ViQ29yZTo6Rmxv
YXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93RnJhbWUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgd2luZG93RnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsgfQogCiAgICAgdmlydHVhbCBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJ1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5n
JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiwgRnVuY3Rpb248dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7IH0KQEAgLTEzMCwxMSArMTMwLDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qo
V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBTZWN1cml0eU9yaWdpbiosIFdlYktpdDo6Tm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QqKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gUHJpbnRp
bmcuCi0gICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkq
LCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBmbG9h
dCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpX
ZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zvb3RlcihXZWJLaXQ6OldlYlBhZ2VQ
cm94eSosIFdlYktpdDo6V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmludEZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
V2ViS2l0OjpXZWJGcmFtZVByb3h5KikgeyB9CisgICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWln
aHQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBmbG9hdCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2
b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb290
ZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBXZWJDb3Jl
OjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHByaW50RnJhbWUoV2ViS2l0OjpX
ZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJ1bk1vZGFsKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MzksNjkgKzE4MzksNjkgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBh
ZwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobV9jbGllbnQudG9vbGJhcnNBcmVWaXNp
YmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2Us
IGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUo
V2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmICghbV9jbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0
b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAg
ICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUs
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5KiBwYWdlKSBmaW5hbAorICAgICAgICB2b2lkIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50Lm1lbnVCYXJJc1Zpc2libGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubWVudUJhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2NsaWVu
dC5tZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCisgICAgICAgIHZvaWQgc2V0TWVudUJh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldE1lbnVCYXJJc1Zp
c2libGUodG9BUEkocGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgICAgICBtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgdmlz
aWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIGJv
b2wgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSogcGFnZSkgZmluYWwKKyAgICAgICAg
dm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIW1fY2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5zdGF0dXNCYXJJc1Zpc2libGUo
dG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobV9jbGllbnQuc3RhdHVzQmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN0YXR1c0Jh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAg
ICAgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZp
c2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuc2V0U3Rh
dHVzQmFySXNWaXNpYmxlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1f
Y2xpZW50LnNldFN0YXR1c0JhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNldFN0YXR1c0Jhcklz
VmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgICAgIH0KIAotICAgICAgICBib29sIGlzUmVzaXphYmxlKFdlYlBhZ2VQcm94eSogcGFn
ZSkgZmluYWwKKyAgICAgICAgdm9pZCBpc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIEZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaXNSZXNpemFibGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaXNSZXNpemFibGUodG9B
UEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIobV9jbGllbnQuaXNSZXNpemFibGUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SXNSZXNpemFibGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHJlc2l6YWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRJc1Jl
c2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgcmVzaXphYmxlKSBmaW5hbAogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNldElzUmVzaXphYmxlKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldElzUmVzaXphYmxlKHRvQVBJ
KHBhZ2UpLCByZXNpemFibGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAg
ICBtX2NsaWVudC5zZXRJc1Jlc2l6YWJsZSh0b0FQSSgmcGFnZSksIHJlc2l6YWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0V2luZG93
RnJhbWUoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lKSBmaW5hbAor
ICAgICAgICB2b2lkIHNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgRmxv
YXRSZWN0JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVu
dC5zZXRXaW5kb3dGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
IG1fY2xpZW50LnNldFdpbmRvd0ZyYW1lKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5zZXRXaW5kb3dGcmFt
ZSh0b0FQSSgmcGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0UmVjdCB3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkq
IHBhZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5JiBwYWdl
LCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZ2V0V2luZG93RnJh
bWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgICAgICAgICByZXR1cm4gdG9G
bG9hdFJlY3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkocGFnZSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbykpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodG9GbG9hdFJl
Y3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbCgpIGNvbnN0IGZpbmFsCkBAIC0xOTkwLDQ0ICsxOTkwLDQ0IEBAIHZvaWQg
V0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFByaW50aW5nLgotICAgICAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViUGFnZVByb3h5KiBw
YWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkgZmluYWwKKyAgICAgICAgZmxvYXQgaGVhZGVySGVp
Z2h0KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUpIGZpbmFsCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaGVhZGVySGVpZ2h0KQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVp
Z2h0KHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVpZ2h0KHRvQVBJKCZwYWdlKSwg
dG9BUEkoJmZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJv
eHkqIGZyYW1lKSBmaW5hbAorICAgICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5
JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5mb290ZXJIZWlnaHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkocGFnZSks
IHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkoJnBhZ2UpLCB0b0FQSSgmZnJhbWUpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBkcmF3
SGVhZGVyKFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkgZmluYWwKKyAgICAgICAgdm9pZCBkcmF3SGVhZGVyKFdl
YlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIFdlYkNvcmU6OkZsb2F0UmVj
dCYmIHJlY3QpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZHJh
d0hlYWRlcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1fY2xpZW50
LmRyYXdIZWFkZXIodG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5kcmF3SGVhZGVyKHRv
QVBJKCZwYWdlKSwgdG9BUEkoJmZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVBy
b3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiByZWN0KSBmaW5hbAorICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVByb3h5JiBwYWdl
LCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgV2ViQ29yZTo6RmxvYXRSZWN0JiYgcmVjdCkgZmluYWwK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kcmF3Rm9vdGVyKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9jbGllbnQuZHJhd0Zvb3Rlcih0b0FQ
SShwYWdlKSwgdG9BUEkoZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LmRyYXdGb290ZXIodG9BUEkoJnBhZ2UpLCB0b0FQ
SSgmZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZvaWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZy
YW1lUHJveHkqIGZyYW1lKSBmaW5hbAorICAgICAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVBy
b3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFtX2NsaWVudC5wcmludEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgbV9jbGllbnQucHJpbnRGcmFtZSh0b0FQSShwYWdlKSwgdG9BUEkoZnJh
bWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQucHJp
bnRGcmFtZSh0b0FQSSgmcGFnZSksIHRvQVBJKCZmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bk1vZGFsKCkgY29uc3QgZmlu
YWwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5q
c29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0
b21hdGlvbi5qc29uCShyZXZpc2lvbiAyMjE3NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgkod29ya2luZyBjb3B5KQpAQCAtMjI1LDcgKzIy
NSw4IEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmV0Y2hlcyBpbmZvcm1hdGlvbiBh
Ym91dCBhbGwgb3BlbiBicm93c2luZyBjb250ZXh0cyAod2luZG93cyBhbmQgdGFicykgaW4gdGhl
IGF1dG9tYXRpb24gc2Vzc2lvbi4iLAogICAgICAgICAgICAgInJldHVybnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb250ZXh0cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjog
eyAiJHJlZiI6ICJCcm93c2luZ0NvbnRleHQiIH0sICJkZXNjcmlwdGlvbiI6ICJBbGwga25vd24g
YnJvd3NpbmcgY29udGV4dHMgYXZhaWxhYmxlIHRvIHRoZSBzZXNzaW9uLiIgfQotICAgICAgICAg
ICAgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUKICAgICAgICAg
fSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiZ2V0QnJvd3NpbmdDb250ZXh0IiwK
QEAgLTIzNSw3ICsyMzYsOCBAQAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJyZXR1cm5z
IjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29udGV4dCIsICIkcmVmIjogIkJyb3dz
aW5nQ29udGV4dCIsICJkZXNjcmlwdGlvbiI6ICJUaGUgYnJvd3NpbmcgY29udGV4dCBhdmFpbGFi
bGUgdG8gdGhlIHNlc3Npb24uIiB9Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAg
ICAibmFtZSI6ICJjcmVhdGVCcm93c2luZ0NvbnRleHQiLApAQCAtMjY1LDcgKzI2Nyw4IEBACiAg
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhh
bmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRsZSIsICJkZXNjcmlwdGlvbiI6ICJU
aGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0byBiZSByZXNpemVkLiIgfSwKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNpemUiLCAiJHJlZiI6ICJTaXplIiwgImRlc2NyaXB0
aW9uIjogIlRoZSBuZXcgc2l6ZSBmb3IgdGhlIGJyb3dzaW5nIGNvbnRleHQncyB3aW5kb3cuIiB9
Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1
ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJtb3ZlV2luZG93
T2ZCcm93c2luZ0NvbnRleHQiLApAQCAtMjczLDcgKzI3Niw4IEBACiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhhbmRsZSIsICIkcmVmIjog
IkJyb3dzaW5nQ29udGV4dEhhbmRsZSIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaGFuZGxlIGZvciB0
aGUgYnJvd3NpbmcgY29udGV4dCB0byBiZSBtb3ZlZC4iIH0sCiAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJvcmlnaW4iLCAiJHJlZiI6ICJQb2ludCIsICJkZXNjcmlwdGlvbiI6ICJUaGUgbmV3
IG9yaWdpbiBmb3IgdGhlIGJyb3dzaW5nIGNvbnRleHQncyB3aW5kb3cuIFRoZSBwb3NpdGlvbiBp
cyBpbnRlcnByZXRlZCBpbiBzY3JlZW4gY29vcmRpbmF0ZSBzcGFjZSwgcmVsYXRpdmUgdG8gdGhl
IHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4uIiB9Ci0gICAgICAgICAgICBdCisgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAogICAgICAg
ICB7CiAgICAgICAgICAgICAibmFtZSI6ICJuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dCIsCkBAIC0z
NjUsNyArMzY5LDggQEAKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAicmV0dXJucyI6IFsK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvc2l0aW9uIiwgIiRyZWYiOiAiUG9pbnQiLCAi
ZGVzY3JpcHRpb24iOiAiVGhlIHVwZGF0ZWQgcG9zaXRpb24gb2YgdGhlIG1vdXNlIGN1cnNvciwg
c3BlY2lmaWVkIGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzLiIgfQotICAgICAgICAgICAgXQorICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUKICAgICAgICAgfSwKICAgICAg
ICAgewogICAgICAgICAgICAgIm5hbWUiOiAicGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zIiwK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAyMjE3NjkpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA3LDU2ICsyMDcsNjggQEAgU3RyaW5nIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpoYW5kbGVGb3JXZQogICAgIHJldHVybiBoYW5kbGVGb3JXZWJGcmFtZUlEKHdlYkZyYW1l
UHJveHkuZnJhbWVJRCgpKTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dD4gV2ViQXV0b21hdGlvblNlc3Npb246OmJ1aWxkQnJvd3Np
bmdDb250ZXh0Rm9yUGFnZShXZWJQYWdlUHJveHkmIHBhZ2UpCit2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UoV2ViUGFnZVByb3h5JiBwYWdlLCBG
dW5jdGlvbjx2b2lkKFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCB3aW5kb3dGcmFtZTsKLSAgICBwYWdlLmdldFdpbmRvd0ZyYW1lKHdpbmRvd0ZyYW1lKTsK
LQotICAgIGF1dG8gb3JpZ2luT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6UG9pbnQ6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRYKHdpbmRvd0ZyYW1lLngoKSkKLSAgICAg
ICAgLnNldFkod2luZG93RnJhbWUueSgpKQotICAgICAgICAucmVsZWFzZSgpOwotCi0gICAgYXV0
byBzaXplT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2l6ZTo6Y3Jl
YXRlKCkKLSAgICAgICAgLnNldFdpZHRoKHdpbmRvd0ZyYW1lLndpZHRoKCkpCi0gICAgICAgIC5z
ZXRIZWlnaHQod2luZG93RnJhbWUuaGVpZ2h0KCkpCi0gICAgICAgIC5yZWxlYXNlKCk7Ci0KLSAg
ICBTdHJpbmcgaGFuZGxlID0gaGFuZGxlRm9yV2ViUGFnZVByb3h5KHBhZ2UpOwotCi0gICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dDo6Y3Jl
YXRlKCkKLSAgICAgICAgLnNldEhhbmRsZShoYW5kbGUpCi0gICAgICAgIC5zZXRBY3RpdmUobV9h
Y3RpdmVCcm93c2luZ0NvbnRleHRIYW5kbGUgPT0gaGFuZGxlKQotICAgICAgICAuc2V0VXJsKHBh
Z2UucGFnZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpKQotICAgICAgICAuc2V0V2luZG93T3JpZ2lu
KFdURk1vdmUob3JpZ2luT2JqZWN0KSkKLSAgICAgICAgLnNldFdpbmRvd1NpemUoV1RGTW92ZShz
aXplT2JqZWN0KSkKLSAgICAgICAgLnJlbGVhc2UoKTsKKyAgICBwYWdlLmdldFdpbmRvd0ZyYW1l
V2l0aENvbXBsZXRpb25IYW5kbGVyKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGFjdGl2ZVVSTCA9IHBhZ2UucGFnZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpLCBoYW5kbGUg
PSBoYW5kbGVGb3JXZWJQYWdlUHJveHkocGFnZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgewor
ICAgICAgICBhdXRvIG9yaWdpbk9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OlBvaW50OjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFgod2luZG93RnJhbWUueCgpKQor
ICAgICAgICAgICAgLnNldFkod2luZG93RnJhbWUueSgpKQorICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKKworICAgICAgICBhdXRvIHNpemVPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpTaXplOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFdpZHRoKHdpbmRvd0ZyYW1l
LndpZHRoKCkpCisgICAgICAgICAgICAuc2V0SGVpZ2h0KHdpbmRvd0ZyYW1lLmhlaWdodCgpKQor
ICAgICAgICAgICAgLnJlbGVhc2UoKTsKKworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ6OmNyZWF0ZSgpCisg
ICAgICAgICAgICAuc2V0SGFuZGxlKGhhbmRsZSkKKyAgICAgICAgICAgIC5zZXRBY3RpdmUobV9h
Y3RpdmVCcm93c2luZ0NvbnRleHRIYW5kbGUgPT0gaGFuZGxlKQorICAgICAgICAgICAgLnNldFVy
bChhY3RpdmVVUkwpCisgICAgICAgICAgICAuc2V0V2luZG93T3JpZ2luKFdURk1vdmUob3JpZ2lu
T2JqZWN0KSkKKyAgICAgICAgICAgIC5zZXRXaW5kb3dTaXplKFdURk1vdmUoc2l6ZU9iamVjdCkp
CisgICAgICAgICAgICAucmVsZWFzZSgpKTsKKyAgICB9KTsKIH0KIAogLy8gUGxhdGZvcm0taW5k
ZXBlbmRlbnQgQ29tbWFuZHMuCiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJyb3dz
aW5nQ29udGV4dHMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHQ+PiYgY29udGV4dHMpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpnZXROZXh0Q29udGV4dChSZWY8V2ViQXV0b21hdGlvblNlc3Npb24+JiYgcHJvdGVjdGVkVGhp
cywgVmVjdG9yPFJlZjxXZWJQYWdlUHJveHk+PiYmIHBhZ2VzLCBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0Pj4gY29udGV4dHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6R2V0QnJvd3NpbmdDb250
ZXh0c0NhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIGNvbnRleHRzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0Pjo6Y3JlYXRlKCk7Ci0KKyAgICBpZiAocGFnZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
IGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKGNvbnRleHRzKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgYXV0byBwYWdlID0gcGFnZXMudGFrZUxhc3QoKTsKKyAgICBidWlsZEJy
b3dzaW5nQ29udGV4dEZvclBhZ2UocGFnZS5nZXQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBX
VEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBwYWdlcyA9IFdURk1vdmUocGFnZXMpLCBjb250ZXh0cyA9
IFdURk1vdmUoY29udGV4dHMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiYmIGNvbnRleHQp
IG11dGFibGUgeworICAgICAgICBjb250ZXh0cy0+YWRkSXRlbShXVEZNb3ZlKGNvbnRleHQpKTsK
KyAgICAgICAgZ2V0TmV4dENvbnRleHQoV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgV1RGTW92ZShw
YWdlcyksIFdURk1vdmUoY29udGV4dHMpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgfSk7Cit9
CisgICAgCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRCcm93c2luZ0NvbnRleHRzKElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0
c0NhbGxiYWNrPiYmIGNhbGxiYWNrKQoreworICAgIFZlY3RvcjxSZWY8V2ViUGFnZVByb3h5Pj4g
cGFnZXM7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzUG9vbC0+cHJvY2Vzc2Vz
KCkpIHsKICAgICAgICAgZm9yIChhdXRvKiBwYWdlIDogcHJvY2Vzcy0+cGFnZXMoKSkgewogICAg
ICAgICAgICAgQVNTRVJUKHBhZ2UpOwogICAgICAgICAgICAgaWYgKCFwYWdlLT5pc0NvbnRyb2xs
ZWRCeUF1dG9tYXRpb24oKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgY29udGV4dHMtPmFkZEl0ZW0oYnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKCpwYWdlKSk7
CisgICAgICAgICAgICBwYWdlcy5hcHBlbmQoKnBhZ2UpOwogICAgICAgICB9CiAgICAgfQorICAg
IAorICAgIGdldE5leHRDb250ZXh0KG1ha2VSZWYoKnRoaXMpLCBXVEZNb3ZlKHBhZ2VzKSwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0Pjo6Y3JlYXRlKCksIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4mIGNvbnRleHQpCit2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBSZWY8R2V0QnJv
d3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBw
YWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBj
b250ZXh0ID0gYnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKCpwYWdlKTsKKyAgICBidWlsZEJy
b3dzaW5nQ29udGV4dEZvclBhZ2UoKnBhZ2UsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XSAoUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4m
JiBjb250ZXh0KSB7CisgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKGNvbnRl
eHQpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y3JlYXRlQnJv
d3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBTdHJpbmcq
IGhhbmRsZSkKQEAgLTMwMSw3ICszMTMsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpz
d2l0Y2hUb0Jyb3dzCiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkF1dG9t
YXRpb25TZXNzaW9uUHJveHk6OkZvY3VzRnJhbWUocGFnZS0+cGFnZUlEKCksIGZyYW1lSUQudmFs
dWUoKSksIDApOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNpemVXaW5kb3dP
ZkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBzaXpl
T2JqZWN0KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzaXplV2luZG93T2ZCcm93c2lu
Z0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgc2l6ZU9iamVjdCwg
UmVmPFJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5vdElt
cGxlbWVudGVkKTsKQEAgLTMyNCwyNyArMzM2LDI4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnJlc2l6ZVdpbmRvd08KICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBv
cmlnaW5hbEZyYW1lOwotICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lKG9yaWdpbmFsRnJhbWUpOwor
ICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigqcGFnZSksIHdpZHRoLCBoZWlnaHRd
KFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZyYW1lKSBtdXRhYmxlIHsKKyAgICAgICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IG5ld0ZyYW1lID0gV2ViQ29yZTo6RmxvYXRSZWN0KG9yaWdpbmFsRnJh
bWUubG9jYXRpb24oKSwgV2ViQ29yZTo6RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAgICAg
ICAgaWYgKG5ld0ZyYW1lID09IG9yaWdpbmFsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gY2Fs
bGJhY2stPnNlbmRTdWNjZXNzKCk7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbmV3RnJhbWUg
PSBXZWJDb3JlOjpGbG9hdFJlY3Qob3JpZ2luYWxGcmFtZS5sb2NhdGlvbigpLCBXZWJDb3JlOjpG
bG9hdFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIGlmIChuZXdGcmFtZSA9PSBvcmlnaW5hbEZy
YW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwYWdlLT5zZXRXaW5kb3dGcmFtZShuZXdGcmFt
ZSk7CisgICAgICAgIHBhZ2UtPnNldFdpbmRvd0ZyYW1lKG5ld0ZyYW1lKTsKIAotI2lmICFQTEFU
Rk9STShHVEspCi0gICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkIGF0IGFsbCwgaXQncyBwcm9iYWJs
eSBmYWlyIHRvIHJlcG9ydCB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLgotICAgIC8vIChXZSBj
YW4ndCBhc3N1bWUgdGhhdCB0aGUgcmVxdWVzdGVkIGZyYW1lIHNpemUgd2lsbCBiZSBob25vcmVk
IGV4YWN0bHksIGhvd2V2ZXIuKQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB1cGRhdGVkRnJhbWU7
Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWUodXBkYXRlZEZyYW1lKTsKLSAgICBpZiAob3JpZ2lu
YWxGcmFtZSA9PSB1cGRhdGVkRnJhbWUpCi0gICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgd2luZG93IHNpemUgd2FzIGV4cGVj
dGVkIHRvIGhhdmUgY2hhbmdlZCwgYnV0IGRpZCBub3QuIik7CisjaWYgUExBVEZPUk0oR1RLKQor
ICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyNlbHNlCisgICAgICAgIC8vIElmIG5v
dGhpbmcgY2hhbmdlZCBhdCBhbGwsIGl0J3MgcHJvYmFibHkgZmFpciB0byByZXBvcnQgdGhhdCBz
b21ldGhpbmcgd2VudCB3cm9uZy4KKyAgICAgICAgLy8gKFdlIGNhbid0IGFzc3VtZSB0aGF0IHRo
ZSByZXF1ZXN0ZWQgZnJhbWUgc2l6ZSB3aWxsIGJlIGhvbm9yZWQgZXhhY3RseSwgaG93ZXZlci4p
CisgICAgICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKFtjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBvcmlnaW5hbEZyYW1lXShXZWJDb3JlOjpGbG9hdFJl
Y3QgdXBkYXRlZEZyYW1lKSB7CisgICAgICAgICAgICBpZiAob3JpZ2luYWxGcmFtZSA9PSB1cGRh
dGVkRnJhbWUpCisgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKFNUUklOR19G
T1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUg
d2luZG93IHNpemUgd2FzIGV4cGVjdGVkIHRvIGhhdmUgY2hhbmdlZCwgYnV0IGRpZCBub3QuIikp
OworICAgICAgICB9KTsKICNlbmRpZgorICAgIH0pOwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBwb3NpdGlvbk9iamVjdCkKK3ZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246Om1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JiBwb3NpdGlvbk9iamVjdCwgUmVmPE1vdmVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogI2lmIFBMQVRGT1JNKElPUykKICAgICBG
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1lbnRlZCk7CkBAIC0zNjgsMjMgKzM4
MSwyOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptb3ZlV2luZG93T2ZCCiAgICAgICAg
IEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZyYW1lOwotICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lKG9y
aWdpbmFsRnJhbWUpOworICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5k
bGVyKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigqcGFnZSks
IHgsIHldKFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZyYW1lKSBtdXRhYmxlIHsKIAotICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBuZXdGcmFtZSA9IFdlYkNvcmU6OkZsb2F0UmVjdChXZWJDb3Jl
OjpGbG9hdFBvaW50KHgsIHkpLCBvcmlnaW5hbEZyYW1lLnNpemUoKSk7Ci0gICAgaWYgKG5ld0Zy
YW1lID09IG9yaWdpbmFsRnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IG5ld0ZyYW1lID0gV2ViQ29yZTo6RmxvYXRSZWN0KFdlYkNvcmU6OkZsb2F0UG9p
bnQoeCwgeSksIG9yaWdpbmFsRnJhbWUuc2l6ZSgpKTsKKyAgICAgICAgaWYgKG5ld0ZyYW1lID09
IG9yaWdpbmFsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2stPnNlbmRTdWNjZXNz
KCk7CiAKLSAgICBwYWdlLT5zZXRXaW5kb3dGcmFtZShuZXdGcmFtZSk7CisgICAgICAgIHBhZ2Ut
PnNldFdpbmRvd0ZyYW1lKG5ld0ZyYW1lKTsKIAotI2lmICFQTEFURk9STShHVEspCi0gICAgLy8g
SWYgbm90aGluZyBjaGFuZ2VkIGF0IGFsbCwgaXQncyBwcm9iYWJseSBmYWlyIHRvIHJlcG9ydCB0
aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLgotICAgIC8vIChXZSBjYW4ndCBhc3N1bWUgdGhhdCB0
aGUgcmVxdWVzdGVkIGZyYW1lIHNpemUgd2lsbCBiZSBob25vcmVkIGV4YWN0bHksIGhvd2V2ZXIu
KQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB1cGRhdGVkRnJhbWU7Ci0gICAgcGFnZS0+Z2V0V2lu
ZG93RnJhbWUodXBkYXRlZEZyYW1lKTsKLSAgICBpZiAob3JpZ2luYWxGcmFtZSA9PSB1cGRhdGVk
RnJhbWUpCi0gICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKElu
dGVybmFsRXJyb3IsICJUaGUgd2luZG93IHBvc2l0aW9uIHdhcyBleHBlY3RlZCB0byBoYXZlIGNo
YW5nZWQsIGJ1dCBkaWQgbm90LiIpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgY2FsbGJh
Y2stPnNlbmRTdWNjZXNzKCk7CisjZWxzZQorICAgICAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQg
YXQgYWxsLCBpdCdzIHByb2JhYmx5IGZhaXIgdG8gcmVwb3J0IHRoYXQgc29tZXRoaW5nIHdlbnQg
d3JvbmcuCisgICAgICAgIC8vIChXZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgcmVxdWVzdGVkIGZy
YW1lIHNpemUgd2lsbCBiZSBob25vcmVkIGV4YWN0bHksIGhvd2V2ZXIuKQorICAgICAgICBwYWdl
LT5nZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcihbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgb3JpZ2luYWxGcmFtZV0oV2ViQ29yZTo6RmxvYXRSZWN0IHVwZGF0ZWRGcmFt
ZSkgeworICAgICAgICAgICAgaWYgKG9yaWdpbmFsRnJhbWUgPT0gdXBkYXRlZEZyYW1lKQorICAg
ICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BSRURFRklORURf
RVJST1JfTkFNRV9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHdpbmRvdyBwb3NpdGlv
biB3YXMgZXhwZWN0ZWQgdG8gaGF2ZSBjaGFuZ2VkLCBidXQgZGlkIG5vdC4iKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CisgICAg
ICAgIH0pOwogI2VuZGlmCiAjZW5kaWYKKyAgICB9KTsKIH0KIAogc3RhdGljIHN0ZDo6b3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4gcGFn
ZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIoY29uc3QgU3RyaW5nKiBvcHRpb25hbFBh
Z2VMb2FkU3RyYXRlZ3lTdHJpbmcpCkBAIC0xMjIxLDcgKzEyMzksNyBAQCBzdGF0aWMgV2ViRXZl
bnQ6Ok1vZGlmaWVycyBwcm90b2NvbE1vZGlmCiB9CiAjZW5kaWYgLy8gVVNFKEFQUEtJVCkKIAot
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oSW5zcGVj
dG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcmVxdWVzdGVkUG9zaXRpb25PYmplY3QsIGNv
bnN0IFN0cmluZyYgbW91c2VCdXR0b25TdHJpbmcsIGNvbnN0IFN0cmluZyYgbW91c2VJbnRlcmFj
dGlvblN0cmluZywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYga2V5TW9kaWZpZXJT
dHJpbmdzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ+JiB1
cGRhdGVkUG9zaXRpb25PYmplY3QpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3Jt
TW91c2VJbnRlcmFjdGlvbihJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiByZXF1
ZXN0ZWRQb3NpdGlvbk9iamVjdCwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1dHRvblN0cmluZywgY29u
c3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5JiBrZXlNb2RpZmllclN0cmluZ3MsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlv
bkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogI2lmICFVU0UoQVBQS0lUKSAmJiAhUExBVEZPUk0o
R1RLKQogICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAg
LTEyMzgsNDEgKzEyNTYsNDEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1v
dXNlSQogICAgIGlmICghcmVxdWVzdGVkUG9zaXRpb25PYmplY3QuZ2V0RG91YmxlKFdURjo6QVND
SUlMaXRlcmFsKCJ5IiksIHkpKQogICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAneScgd2FzIG5vdCBm
b3VuZC4iKTsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZTsKLSAgICBwYWdl
LT5nZXRXaW5kb3dGcmFtZSh3aW5kb3dGcmFtZSk7Ci0KLSAgICB4ID0gc3RkOjptaW4oc3RkOjpt
YXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1lLnNpemUoKS53aWR0aCgpKTsKLSAgICB5ID0gc3RkOjpt
aW4oc3RkOjptYXgoMC4wZiwgeSArIHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKSwgd2luZG93RnJh
bWUuc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIFdlYkNvcmU6OkludFBvaW50IHZpZXdQb3NpdGlv
biA9IFdlYkNvcmU6OkludFBvaW50KHN0YXRpY19jYXN0PGludD4oeCksIHN0YXRpY19jYXN0PGlu
dD4oeSkpOwotCi0gICAgYXV0byBwYXJzZWRJbnRlcmFjdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbj4obW91c2VJbnRlcmFjdGlv
blN0cmluZyk7Ci0gICAgaWYgKCFwYXJzZWRJbnRlcmFjdGlvbikKLSAgICAgICAgRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJh
bWV0ZXIgJ2ludGVyYWN0aW9uJyBpcyBpbnZhbGlkLiIpOwotCi0gICAgYXV0byBwYXJzZWRCdXR0
b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9u
Pihtb3VzZUJ1dHRvblN0cmluZyk7Ci0gICAgaWYgKCFwYXJzZWRCdXR0b24pCi0gICAgICAgIEZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJU
aGUgcGFyYW1ldGVyICdidXR0b24nIGlzIGludmFsaWQuIik7Ci0KICAgICBXZWJFdmVudDo6TW9k
aWZpZXJzIGtleU1vZGlmaWVycyA9IChXZWJFdmVudDo6TW9kaWZpZXJzKTA7CiAgICAgZm9yIChh
dXRvIGl0ID0ga2V5TW9kaWZpZXJTdHJpbmdzLmJlZ2luKCk7IGl0ICE9IGtleU1vZGlmaWVyU3Ry
aW5ncy5lbmQoKTsgKytpdCkgewogICAgICAgICBTdHJpbmcgbW9kaWZpZXJTdHJpbmc7CiAgICAg
ICAgIGlmICghaXQtPmdldCgpLT5hc1N0cmluZyhtb2RpZmllclN0cmluZykpCi0gICAgICAgICAg
ICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVy
LCAiVGhlIHBhcmFtZXRlciAnbW9kaWZpZXJzJyBpcyBpbnZhbGlkLiIpOworICAgICAgICAgICAg
cmV0dXJuIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1Jf
TkFNRV9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnbW9kaWZp
ZXJzJyBpcyBpbnZhbGlkLiIpKTsKIAogICAgICAgICBhdXRvIHBhcnNlZE1vZGlmaWVyID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXlNb2RpZmllcj4obW9kaWZp
ZXJTdHJpbmcpOwogICAgICAgICBpZiAoIXBhcnNlZE1vZGlmaWVyKQotICAgICAgICAgICAgRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEg
bW9kaWZpZXIgaW4gdGhlICdtb2RpZmllcnMnIGFycmF5IGlzIGludmFsaWQuIik7CisgICAgICAg
ICAgICByZXR1cm4gY2FsbGJhY2stPnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5FRF9F
UlJPUl9OQU1FX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBIG1vZGlmaWVyIGluIHRo
ZSAnbW9kaWZpZXJzJyBhcnJheSBpcyBpbnZhbGlkLiIpKTsKICAgICAgICAgV2ViRXZlbnQ6Ok1v
ZGlmaWVycyBlbnVtVmFsdWUgPSBwcm90b2NvbE1vZGlmaWVyVG9XZWJFdmVudE1vZGlmaWVyKHBh
cnNlZE1vZGlmaWVyLnZhbHVlKCkpOwogICAgICAgICBrZXlNb2RpZmllcnMgPSAoV2ViRXZlbnQ6
Ok1vZGlmaWVycykoZW51bVZhbHVlIHwga2V5TW9kaWZpZXJzKTsKICAgICB9CisgICAgCisgICAg
cGFnZS0+Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFn
ZSA9IG1ha2VSZWYoKnBhZ2UpLCB4LCB5LCBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBtb3VzZUJ1
dHRvblN0cmluZywga2V5TW9kaWZpZXJzXShXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUp
IG11dGFibGUgewogCi0gICAgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24oKnBhZ2Us
IHZpZXdQb3NpdGlvbiwgcGFyc2VkSW50ZXJhY3Rpb24udmFsdWUoKSwgcGFyc2VkQnV0dG9uLnZh
bHVlKCksIGtleU1vZGlmaWVycyk7CisgICAgICAgIHggPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBm
LCB4KSwgd2luZG93RnJhbWUuc2l6ZSgpLndpZHRoKCkpOworICAgICAgICB5ID0gc3RkOjptaW4o
c3RkOjptYXgoMC4wZiwgeSArIHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKSwgd2luZG93RnJhbWUu
c2l6ZSgpLmhlaWdodCgpKTsKIAotICAgIHVwZGF0ZWRQb3NpdGlvbk9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50OjpjcmVhdGUoKQotICAgICAgICAuc2V0WCh4
KQotICAgICAgICAuc2V0WSh5IC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCi0gICAgICAgIC5y
ZWxlYXNlKCk7CisgICAgICAgIFdlYkNvcmU6OkludFBvaW50IHZpZXdQb3NpdGlvbiA9IFdlYkNv
cmU6OkludFBvaW50KHN0YXRpY19jYXN0PGludD4oeCksIHN0YXRpY19jYXN0PGludD4oeSkpOwor
CisgICAgICAgIGF1dG8gcGFyc2VkSW50ZXJhY3Rpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJhY3Rpb24+KG1vdXNlSW50ZXJhY3Rpb25TdHJp
bmcpOworICAgICAgICBpZiAoIXBhcnNlZEludGVyYWN0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IGNhbGxiYWNrLT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9B
TkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW50ZXJhY3Rpb24n
IGlzIGludmFsaWQuIikpOworCisgICAgICAgIGF1dG8gcGFyc2VkQnV0dG9uID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbj4obW91c2VCdXR0b25T
dHJpbmcpOworICAgICAgICBpZiAoIXBhcnNlZEJ1dHRvbikKKyAgICAgICAgICAgIHJldHVybiBj
YWxsYmFjay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUVfQU5E
X0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2J1dHRvbicgaXMgaW52
YWxpZC4iKSk7CisKKyAgICAgICAgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24ocGFn
ZSwgdmlld1Bvc2l0aW9uLCBwYXJzZWRJbnRlcmFjdGlvbi52YWx1ZSgpLCBwYXJzZWRCdXR0b24u
dmFsdWUoKSwga2V5TW9kaWZpZXJzKTsKKworICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3Mo
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAuc2V0WCh4KQorICAgICAgICAgICAgLnNldFkoeSAtIHBhZ2UtPnRvcENvbnRlbnRJbnNl
dCgpKQorICAgICAgICAgICAgLnJlbGVhc2UoKSk7CisgICAgfSk7CiAjZW5kaWYgLy8gVVNFKEFQ
UEtJVCkKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAkocmV2aXNpb24gMjIxNzY5KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMjAgKzExNSwyMCBAQCBwdWJsaWM6CiAgICAgLy8gYW5k
IHRoZSAtLXBsYXRmb3JtIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgcHJvdG9jb2wgYmluZGluZ3Mg
Z2VuZXJhdG9yLgogCiAgICAgLy8gUGxhdGZvcm06IEdlbmVyaWMKLSAgICB2b2lkIGdldEJyb3dz
aW5nQ29udGV4dHMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHQ+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0KEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiYpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0
QnJvd3NpbmdDb250ZXh0cyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgUmVmPEdldEJyb3dzaW5n
Q29udGV4dHNDYWxsYmFjaz4mJikgZmluYWw7CisgICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHQo
SW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFJlZjxHZXRCcm93c2luZ0Nv
bnRleHRDYWxsYmFjaz4mJikgZmluYWw7CiAgICAgdm9pZCBjcmVhdGVCcm93c2luZ0NvbnRleHQo
SW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIFN0cmluZyopIG92ZXJyaWRlOwogICAgIHZvaWQgY2xv
c2VCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBT
dHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzaXplV2lu
ZG93T2ZCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgc2l6ZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBtb3ZlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgcG9zaXRpb24pIG92ZXJyaWRlOworICAgIHZvaWQgcmVzaXplV2luZG93T2ZCcm93
c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgc2l6ZSwgUmVmPFJlc2l6ZVdpbmRv
d09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOworICAgIHZvaWQgbW92ZVdpbmRv
d09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHBvc2l0aW9uLCBSZWY8
TW92ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwogICAgIHZvaWQg
bmF2aWdhdGVCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBh
Z2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGludCogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQs
IFJlZjxOYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAgICB2
b2lkIGdvQmFja0luQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywg
Y29uc3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdD
b250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZ29Gb3J3YXJkSW5Ccm93c2lu
Z0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBpbnQqIG9wdGlvbmFs
UGFnZUxvYWRUaW1lb3V0LCBSZWY8R29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZWxvYWRCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9h
ZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBpbnQqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8
UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgd2Fp
dEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1l
SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29u
c3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFdhaXRGb3JOYXZpZ2F0aW9uVG9D
b21wbGV0ZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIGV2YWx1YXRlSmF2YVNjcmlw
dEZ1bmN0aW9uKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBT
dHJpbmcmIGZ1bmN0aW9uLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBhcmd1bWVu
dHMsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwg
Y29uc3QgaW50KiBvcHRpb25hbENhbGxiYWNrVGltZW91dCwgUmVmPEluc3BlY3Rvcjo6QXV0b21h
dGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25D
YWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBt
b3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5JiBrZXlNb2RpZmllcnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpQb2ludD4mIHVwZGF0ZWRQb3NpdGlvbikgb3ZlcnJpZGU7CisgICAg
dm9pZCBwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiByZXF1
ZXN0ZWRQb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiBt
b3VzZUludGVyYWN0aW9uLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBrZXlNb2Rp
ZmllcnMsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYmKSBmaW5hbDsKICAg
ICB2b2lkIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhJbnNwZWN0b3I6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkm
IGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYm
KSBvdmVycmlkZTsKICAgICB2b2lkIHRha2VTY3JlZW5zaG90KEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFu
ZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9u
YWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCByZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50KiBvcHRpb25hbE9yZGluYWwsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRs
ZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwpAQCAt
MTYwLDcgKzE2MCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KiB3ZWJQ
YWdlUHJveHlGb3JIYW5kbGUoY29uc3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIGhhbmRsZUZvcldl
YlBhZ2VQcm94eShjb25zdCBXZWJQYWdlUHJveHkmKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiBidWlsZEJyb3dzaW5nQ29udGV4
dEZvclBhZ2UoV2ViUGFnZVByb3h5Jik7CisgICAgdm9pZCBidWlsZEJyb3dzaW5nQ29udGV4dEZv
clBhZ2UoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiYmKT4mJik7CisgICAgdm9pZCBnZXROZXh0
Q29udGV4dChSZWY8V2ViQXV0b21hdGlvblNlc3Npb24+JiYsIFZlY3RvcjxSZWY8V2ViUGFnZVBy
b3h5Pj4mJiwgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4+LCBSZWY8V2ViQXV0b21hdGlvblNlc3Np
b246OkdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mJik7CiAKICAgICBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiB3ZWJGcmFtZUlERm9ySGFuZGxlKGNvbnN0IFN0cmluZyYpOwogICAgIFN0cmlu
ZyBoYW5kbGVGb3JXZWJGcmFtZUlEKHVpbnQ2NF90IGZyYW1lSUQpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAkocmV2aXNpb24gMjIxNzcxKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTAsNyArMTEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBkZWNpZGVQb2xpY3lG
b3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdChXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5
JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdFByb3h5JikgZmluYWw7CiAgICAgICAgIGJvb2wgY2hlY2tVc2VyTWVk
aWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmLCBBUEk6
OlNlY3VyaXR5T3JpZ2luJiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIFVzZXJNZWRpYVBlcm1pc3Np
b25DaGVja1Byb3h5JikgZmluYWw7CiAgICAgICAgIHZvaWQgbWVkaWFDYXB0dXJlU3RhdGVEaWRD
aGFuZ2UoV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKSBmaW5hbDsKLSAg
ICAgICAgdm9pZCBwcmludEZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqKSBmaW5h
bDsKKyAgICAgICAgdm9pZCBwcmludEZyYW1lKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkm
KSBmaW5hbDsKICNpZiBQTEFURk9STShJT1MpCiAjaWYgSEFWRShBUFBfTElOS1MpCiAgICAgICAg
IGJvb2wgc2hvdWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudChfV0tBY3RpdmF0ZWRF
bGVtZW50SW5mbyAqKSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1VJRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvVUlEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjIxNzcxKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODAxLDEwICs4MDEs
OCBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZWFjaGVkQXBwbGljCiAgICAgfSkuZ2V0
KCldOwogfQogCi12b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpwcmludEZyYW1lKFdlYlBhZ2VQ
cm94eSosIFdlYkZyYW1lUHJveHkqIHdlYkZyYW1lUHJveHkpCit2b2lkIFVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpwcmludEZyYW1lKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIHdlYkZyYW1l
UHJveHkpCiB7Ci0gICAgQVNTRVJUX0FSRyh3ZWJGcmFtZVByb3h5LCB3ZWJGcmFtZVByb3h5KTsK
LQogICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdQcmludEZy
YW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTgxMiw3ICs4MTAsNyBAQCB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpwcmludEZyYW1lKFdlCiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBwcmludEZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUhh
bmRsZTo6Y3JlYXRlKHdlYkZyYW1lUHJveHktPmZyYW1lSUQoKSkpXTsKKyAgICBbKGlkIDxXS1VJ
RGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3
IHByaW50RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUod2ViRnJhbWVQcm94
eS5mcmFtZUlEKCkpKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNsb3NlKFdl
YlBhZ2VQcm94eSopCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5tbQkocmV2aXNpb24gMjIxNzY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MjgsNyArMTYyOCw3IEBA
IE5TUHJpbnRPcGVyYXRpb24gKldlYlZpZXdJbXBsOjpwcmludE9wZXIKIAogICAgIC8vIEZJWE1F
OiBJZiB0aGUgZnJhbWUgY2Fubm90IGJlIHByaW50ZWQgKGUuZy4gaWYgaXQgY29udGFpbnMgYW4g
ZW5jcnlwdGVkIFBERiB0aGF0IGRpc2FsbG93cwogICAgIC8vIHByaW50aW5nKSwgdGhpcyBmdW5j
dGlvbiBzaG91bGQgcmV0dXJuIG5pbC4KLSAgICBSZXRhaW5QdHI8V0tQcmludGluZ1ZpZXc+IHBy
aW50aW5nVmlldyA9IGFkb3B0TlMoW1tXS1ByaW50aW5nVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZVByb3h5OiZmcmFtZSB2aWV3Om1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKV0pOworICAgIFJldGFp
blB0cjxXS1ByaW50aW5nVmlldz4gcHJpbnRpbmdWaWV3ID0gYWRvcHROUyhbW1dLUHJpbnRpbmdW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lUHJveHk6ZnJhbWUgdmlldzptX3ZpZXcuZ2V0QXV0b3Jl
bGVhc2VkKCldKTsKICAgICAvLyBOU1ByaW50T3BlcmF0aW9uIHRha2VzIG93bmVyc2hpcCBvZiB0
aGUgdmlldy4KICAgICBOU1ByaW50T3BlcmF0aW9uICpwcmludE9wZXJhdGlvbiA9IFtOU1ByaW50
T3BlcmF0aW9uIHByaW50T3BlcmF0aW9uV2l0aFZpZXc6cHJpbnRpbmdWaWV3LmdldCgpIHByaW50
SW5mbzpwcmludEluZm9dOwogICAgIFtwcmludE9wZXJhdGlvbiBzZXRDYW5TcGF3blNlcGFyYXRl
VGhyZWFkOllFU107CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGlu
Z1ZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmlu
dGluZ1ZpZXcuaAkocmV2aXNpb24gMjIxNzY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dLUHJpbnRpbmdWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgQGlu
dGVyZmFjZSBXS1ByaW50aW5nVmlldyA6IE5TVmlldyB7CiAgICAgTlNUaW1lciAqX2F1dG9kaXNw
bGF5UmVzdW1lVGltZXI7CiB9CiAKLS0gKGlkKWluaXRXaXRoRnJhbWVQcm94eTooV2ViS2l0OjpX
ZWJGcmFtZVByb3h5KilmcmFtZSB2aWV3OihOU1ZpZXcgKil3a1ZpZXc7CistIChpZClpbml0V2l0
aEZyYW1lUHJveHk6KFdlYktpdDo6V2ViRnJhbWVQcm94eSYpZnJhbWUgdmlldzooTlNWaWV3ICop
d2tWaWV3OwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1By
aW50aW5nVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V0tQcmludGluZ1ZpZXcubW0JKHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEsMTMgKzUx
LDEzIEBAIHN0YXRpYyBCT09MIGlzRm9yY2luZ1ByZXZpZXdVcGRhdGU7CiAKIEBpbXBsZW1lbnRh
dGlvbiBXS1ByaW50aW5nVmlldwogCi0tIChpZClpbml0V2l0aEZyYW1lUHJveHk6KFdlYktpdDo6
V2ViRnJhbWVQcm94eSopZnJhbWUgdmlldzooTlNWaWV3ICopd2tWaWV3CistIChpZClpbml0V2l0
aEZyYW1lUHJveHk6KFdlYktpdDo6V2ViRnJhbWVQcm94eSYpZnJhbWUgdmlldzooTlNWaWV3ICop
d2tWaWV3CiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsgLy8gTm8gZnJhbWUgcmVjdCB0byBw
YXNzIHRvIE5TVmlldy4KICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAg
ICBfd2ViRnJhbWUgPSBmcmFtZTsKKyAgICBfd2ViRnJhbWUgPSAmZnJhbWU7CiAgICAgX3drVmll
dyA9IHdrVmlldzsKIAogICAgIHJldHVybiBzZWxmOwpAQCAtMTUxLDggKzE1MSw4IEBAIC0gKHZv
aWQpX2FkanVzdFByaW50aW5nTWFyZ2luc0ZvckhlYWRlckEKICAgICB9CiAgICAgCiAgICAgQ0dG
bG9hdCBzY2FsZSA9IFtpbmZvIHNjYWxpbmdGYWN0b3JdOwotICAgIFtpbmZvIHNldFRvcE1hcmdp
bjpvcmlnaW5hbFRvcE1hcmdpbiArIF93ZWJGcmFtZS0+cGFnZSgpLT5oZWFkZXJIZWlnaHQoX3dl
YkZyYW1lLmdldCgpKSAqIHNjYWxlXTsKLSAgICBbaW5mbyBzZXRCb3R0b21NYXJnaW46b3JpZ2lu
YWxCb3R0b21NYXJnaW4gKyBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KF93ZWJGcmFt
ZS5nZXQoKSkgKiBzY2FsZV07CisgICAgW2luZm8gc2V0VG9wTWFyZ2luOm9yaWdpbmFsVG9wTWFy
Z2luICsgX3dlYkZyYW1lLT5wYWdlKCktPmhlYWRlckhlaWdodCgqX3dlYkZyYW1lKSAqIHNjYWxl
XTsKKyAgICBbaW5mbyBzZXRCb3R0b21NYXJnaW46b3JpZ2luYWxCb3R0b21NYXJnaW4gKyBfd2Vi
RnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KCpfd2ViRnJhbWUpICogc2NhbGVdOwogfQogCiAt
IChCT09MKV9pc1ByaW50aW5nUHJldmlldwpAQCAtNjM3LDE4ICs2MzcsMTggQEAgLSAodm9pZClk
cmF3UGFnZUJvcmRlcldpdGhTaXplOihOU1NpemUpYgogICAgIE5TU2l6ZSBwYXBlclNpemUgPSBb
cHJpbnRJbmZvIHBhcGVyU2l6ZV07CiAgICAgQ0dGbG9hdCBoZWFkZXJGb290ZXJMZWZ0ID0gW3By
aW50SW5mbyBsZWZ0TWFyZ2luXSAvIHNjYWxlOwogICAgIENHRmxvYXQgaGVhZGVyRm9vdGVyV2lk
dGggPSAocGFwZXJTaXplLndpZHRoIC0gKFtwcmludEluZm8gbGVmdE1hcmdpbl0gKyBbcHJpbnRJ
bmZvIHJpZ2h0TWFyZ2luXSkpIC8gc2NhbGU7Ci0gICAgTlNSZWN0IGZvb3RlclJlY3QgPSBOU01h
a2VSZWN0KGhlYWRlckZvb3RlckxlZnQsIFtwcmludEluZm8gYm90dG9tTWFyZ2luXSAvIHNjYWxl
IC0gX3dlYkZyYW1lLT5wYWdlKCktPmZvb3RlckhlaWdodChfd2ViRnJhbWUuZ2V0KCkpLCBoZWFk
ZXJGb290ZXJXaWR0aCwgX3dlYkZyYW1lLT5wYWdlKCktPmZvb3RlckhlaWdodChfd2ViRnJhbWUu
Z2V0KCkpKTsKLSAgICBOU1JlY3QgaGVhZGVyUmVjdCA9IE5TTWFrZVJlY3QoaGVhZGVyRm9vdGVy
TGVmdCwgKHBhcGVyU2l6ZS5oZWlnaHQgLSBbcHJpbnRJbmZvIHRvcE1hcmdpbl0pIC8gc2NhbGUs
IGhlYWRlckZvb3RlcldpZHRoLCBfd2ViRnJhbWUtPnBhZ2UoKS0+aGVhZGVySGVpZ2h0KF93ZWJG
cmFtZS5nZXQoKSkpOworICAgIE5TUmVjdCBmb290ZXJSZWN0ID0gTlNNYWtlUmVjdChoZWFkZXJG
b290ZXJMZWZ0LCBbcHJpbnRJbmZvIGJvdHRvbU1hcmdpbl0gLyBzY2FsZSAtIF93ZWJGcmFtZS0+
cGFnZSgpLT5mb290ZXJIZWlnaHQoKl93ZWJGcmFtZSksIGhlYWRlckZvb3RlcldpZHRoLCBfd2Vi
RnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KCpfd2ViRnJhbWUpKTsKKyAgICBOU1JlY3QgaGVh
ZGVyUmVjdCA9IE5TTWFrZVJlY3QoaGVhZGVyRm9vdGVyTGVmdCwgKHBhcGVyU2l6ZS5oZWlnaHQg
LSBbcHJpbnRJbmZvIHRvcE1hcmdpbl0pIC8gc2NhbGUsIGhlYWRlckZvb3RlcldpZHRoLCBfd2Vi
RnJhbWUtPnBhZ2UoKS0+aGVhZGVySGVpZ2h0KCpfd2ViRnJhbWUpKTsKIAogICAgIE5TR3JhcGhp
Y3NDb250ZXh0ICpjdXJyZW50Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF07CiAgICAgW2N1cnJlbnRDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKICAgICBOU1Jl
Y3RDbGlwKGhlYWRlclJlY3QpOwotICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5kcmF3SGVhZGVyKF93
ZWJGcmFtZS5nZXQoKSwgaGVhZGVyUmVjdCk7CisgICAgX3dlYkZyYW1lLT5wYWdlKCktPmRyYXdI
ZWFkZXIoKl93ZWJGcmFtZSwgaGVhZGVyUmVjdCk7CiAgICAgW2N1cnJlbnRDb250ZXh0IHJlc3Rv
cmVHcmFwaGljc1N0YXRlXTsKIAogICAgIFtjdXJyZW50Q29udGV4dCBzYXZlR3JhcGhpY3NTdGF0
ZV07CiAgICAgTlNSZWN0Q2xpcChmb290ZXJSZWN0KTsKLSAgICBfd2ViRnJhbWUtPnBhZ2UoKS0+
ZHJhd0Zvb3Rlcihfd2ViRnJhbWUuZ2V0KCksIGZvb3RlclJlY3QpOworICAgIF93ZWJGcmFtZS0+
cGFnZSgpLT5kcmF3Rm9vdGVyKCpfd2ViRnJhbWUsIGZvb3RlclJlY3QpOwogICAgIFtjdXJyZW50
Q29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjIxNzY5KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTM2LDEwICsxMzYsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd0Fu
ZFZpZXdGcmFtZXNDaAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJbiBjYXNlIHRoZSBVSSBj
bGllbnQgb3ZlcnJpZGVzIGdldFdpbmRvd0ZyYW1lKCksIHdlIGNhbGwgaXQgaGVyZSB0byBtYWtl
IHN1cmUgd2Ugc2VuZCB0aGUgYXBwcm9wcmlhdGUgd2luZG93IGZyYW1lLgotICAgIEZsb2F0UmVj
dCB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMgPSBtX3VpQ2xpZW50LT53aW5kb3dGcmFt
ZSh0aGlzKTsKLSAgICBGbG9hdFJlY3Qgd2luZG93RnJhbWVJblVuZmxpcHBlZFNjcmVlbkNvb3Jk
aW5hdGVzID0gbV9wYWdlQ2xpZW50LmNvbnZlcnRUb1VzZXJTcGFjZSh3aW5kb3dGcmFtZUluU2Ny
ZWVuQ29vcmRpbmF0ZXMpOwotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OldpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cywgd2luZG93RnJhbWVJblVuZmxpcHBlZFNjcmVlbkNvb3JkaW5hdGVzLCB2aWV3RnJhbWVJbldp
bmRvd0Nvb3JkaW5hdGVzLCBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKSwgbV9wYWdlSUQp
OworICAgIG1fdWlDbGllbnQtPndpbmRvd0ZyYW1lKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBhY2Nlc3Np
YmlsaXR5Vmlld0Nvb3JkaW5hdGVzXSAoRmxvYXRSZWN0IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29y
ZGluYXRlcykgeworICAgICAgICBGbG9hdFJlY3Qgd2luZG93RnJhbWVJblVuZmxpcHBlZFNjcmVl
bkNvb3JkaW5hdGVzID0gbV9wYWdlQ2xpZW50LmNvbnZlcnRUb1VzZXJTcGFjZSh3aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMpOworICAgICAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6V2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNjcmVlbkNv
b3JkaW5hdGVzLCB3aW5kb3dGcmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMsIHZpZXdG
cmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpLCBt
X3BhZ2VJRCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRNYWluRnJhbWVJ
c1Njcm9sbGFibGUoYm9vbCBpc1Njcm9sbGFibGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320236</attachid>
            <date>2017-09-07 21:51:57 -0700</date>
            <delta_ts>2017-09-07 21:58:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176583-20170907215156.patch</filename>
            <type>text/plain</type>
            <size>61806</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE3NzcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE3LTA5LTA3ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIGFu
ZCBtYWtlIEFQSTo6VUlDbGllbnQgbW9yZSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjU4MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFQSTo6VUlDbGllbnQgY2FsbHMgdGhhdCBy
ZXR1cm4gdmFsdWVzIHN5bmNocm9ub3VzbHkgcmVxdWlyZSBzeW5jaHJvbm91cyBBUElzIHVubmVj
ZXNzYXJpbHkuCisgICAgICAgIEhhdmluZyB0aGVtIGNhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3
aXRoIHRoZSByZXN1bHRzIGluc3RlYWQgYWxsb3dzIHVzIHRvIG1ha2UgYXN5bmNocm9ub3VzCisg
ICAgICAgIEFQSXMsIGFuZCBleGlzdGluZyBzeW5jaHJvbm91cyBBUElzIGNhbiBqdXN0IGNhbGwg
dGhlIGNvbXBsZXRpb24gaGFuZGxlcnMgaW1tZWRpYXRlbHkuCisgICAgICAgIAorICAgICAgICBV
bmZvcnR1bmF0ZWx5IGFuIGFzc3VtcHRpb24gdGhhdCBBUEk6OlVJQ2xpZW50Ojp3aW5kb3dGcmFt
ZSByZXR1cm5zIHN5bmNocm9ub3VzbHkgaGFkIHdvcmtlZAorICAgICAgICBpdHMgd2F5IGludG8g
dGhlIFdlYkF1dG9tYXRpb25TZXNzaW9uLCB3aGljaCBjYWxscyBXZWJQYWdlUHJveHk6OmdldFdp
bmRvd0ZyYW1lLiAgTWFraW5nIGl0CisgICAgICAgIGFzeW5jaHJvbm91cyByZXF1aXJlZCBtYWtp
bmcgc29tZSBhdXRvbWF0aW9uIHByb3RvY29scyBhc3luY2hyb25vdXMgc28gdGhleSBjYW4gc2Vu
ZCB0aGVpcgorICAgICAgICByZXN1bHQgb25jZSB0aGV5IGhhdmUgdGhlIHJlc3VsdGluZyBmcmFt
ZXMgZnJvbSB0aGUgVUlDbGllbnQuCisgICAgICAgIAorICAgICAgICBObyBjaGFuZ2UgaW4gYmVo
YXZpb3VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oOgorICAgICAg
ICAoQVBJOjpVSUNsaWVudDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKEFQSTo6
VUlDbGllbnQ6Om1lbnVCYXJJc1Zpc2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0
TWVudUJhcklzVmlzaWJsZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpzdGF0dXNCYXJJc1Zp
c2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0U3RhdHVzQmFySXNWaXNpYmxlKToK
KyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmlzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OnNldFdpbmRv
d0ZyYW1lKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OndpbmRvd0ZyYW1lKToKKyAgICAgICAg
KEFQSTo6VUlDbGllbnQ6OmhlYWRlckhlaWdodCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50Ojpm
b290ZXJIZWlnaHQpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6ZHJhd0hlYWRlcik6CisgICAg
ICAgIChBUEk6OlVJQ2xpZW50OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnByaW50RnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAg
ICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb246CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldE5leHRDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtTW91c2VJbnRlcmFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAg
ICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZh
U2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb29sYmFy
c0FyZVZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldE1lbnVCYXJJ
c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zp
c2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFN0YXR1c0JhcklzVmlz
aWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNp
YmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJc1Jlc2l6YWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0SXNSZXNpemFibGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNjcmVlblRvUm9vdFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnJvb3RWaWV3VG9TY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnByaW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhlYWRl
ckhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9vdGVySGVpZ2h0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmF3SGVhZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1Zp
ZXcgaW5pdFdpdGhGcmFtZVByb3h5OnZpZXc6XSk6CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3
IF9hZGp1c3RQcmludGluZ01hcmdpbnNGb3JIZWFkZXJBbmRGb290ZXJdKToKKyAgICAgICAgKC1b
V0tQcmludGluZ1ZpZXcgZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZTpdKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6CisKIDIwMTctMDktMDcgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFVwc3RyZWFtIFFUS2l0LXJl
bGF0ZWQgV2ViS2l0U3lzdGVtSW50ZXJmYWNlIGZ1bmN0aW9ucwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQ4
LDcgKzM5NDgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oCiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFJlZlB0cjxN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpEZWxheWVkUmVwbHk+
IHJlcGx5KQordm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgUmVmPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4mJiByZXBs
eSkKIHsKICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJh
bWVJRCk7CiAgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CkBAIC0zOTYxLDcgKzM5NjEsOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdFByb21wdCh1CiAgICAgICAgICAgICBhdXRv
bWF0aW9uU2Vzc2lvbi0+d2lsbFNob3dKYXZhU2NyaXB0RGlhbG9nKCp0aGlzKTsKICAgICB9CiAK
LSAgICBtX3VpQ2xpZW50LT5ydW5KYXZhU2NyaXB0UHJvbXB0KHRoaXMsIG1lc3NhZ2UsIGRlZmF1
bHRWYWx1ZSwgZnJhbWUsIHNlY3VyaXR5T3JpZ2luLCBbcmVwbHldKGNvbnN0IFN0cmluZyYgcmVz
dWx0KSB7IHJlcGx5LT5zZW5kKHJlc3VsdCk7IH0pOworICAgIG1fdWlDbGllbnQtPnJ1bkphdmFT
Y3JpcHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBmcmFtZSwgc2VjdXJpdHlP
cmlnaW4sIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXShjb25zdCBTdHJpbmcmIHJlc3VsdCkgewor
ICAgICAgICByZXBseS0+c2VuZChyZXN1bHQpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkBAIC00MDUxLDcgKzQwNTMs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yCiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
CiB7Ci0gICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKHRoaXMsIHRvb2xiYXJz
QXJlVmlzaWJsZSk7CisgICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKCp0aGlz
LCB0b29sYmFyc0FyZVZpc2libGUpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0VG9vbGJh
cnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRUb29sYmFyc0FyZVZp
c2libGU6OkRlbGF5ZWRSZXBseT4mJiByZXBseSkKQEAgLTQwNjMsNTIgKzQwNjUsNjUgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmdldFRvb2xiYXJzQXJlVmlzaWJsZQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91
aUNsaWVudC0+c2V0TWVudUJhcklzVmlzaWJsZSh0aGlzLCBtZW51QmFySXNWaXNpYmxlKTsKKyAg
ICBtX3VpQ2xpZW50LT5zZXRNZW51QmFySXNWaXNpYmxlKCp0aGlzLCBtZW51QmFySXNWaXNpYmxl
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zpc2libGUoYm9vbCYgbWVu
dUJhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRNZW51QmFySXNWaXNpYmxlKFJl
ZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRNZW51QmFySXNWaXNpYmxlOjpEZWxheWVkUmVw
bHk+JiYgcmVwbHkpCiB7Ci0gICAgbWVudUJhcklzVmlzaWJsZSA9IG1fdWlDbGllbnQtPm1lbnVC
YXJJc1Zpc2libGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+bWVudUJhcklzVmlzaWJsZSgqdGhp
cywgW3JlcGx5ID0gV1RGTW92ZShyZXBseSldIChib29sIHZpc2libGUpIHsKKyAgICAgICAgcmVw
bHktPnNlbmQodmlzaWJsZSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRT
dGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91aUNs
aWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKHRoaXMsIHN0YXR1c0JhcklzVmlzaWJsZSk7Cisg
ICAgbV91aUNsaWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKCp0aGlzLCBzdGF0dXNCYXJJc1Zp
c2libGUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNpYmxlKGJv
b2wmIHN0YXR1c0JhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRTdGF0dXNCYXJJ
c1Zpc2libGUoUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFN0YXR1c0JhcklzVmlzaWJs
ZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHN0YXR1c0JhcklzVmlzaWJsZSA9IG1f
dWlDbGllbnQtPnN0YXR1c0JhcklzVmlzaWJsZSh0aGlzKTsKKyAgICBtX3VpQ2xpZW50LT5zdGF0
dXNCYXJJc1Zpc2libGUoKnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCB2aXNp
YmxlKSB7CisgICAgICAgIHJlcGx5LT5zZW5kKHZpc2libGUpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSkKIHsKLSAgICBt
X3VpQ2xpZW50LT5zZXRJc1Jlc2l6YWJsZSh0aGlzLCBpc1Jlc2l6YWJsZSk7CisgICAgbV91aUNs
aWVudC0+c2V0SXNSZXNpemFibGUoKnRoaXMsIGlzUmVzaXphYmxlKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmdldElzUmVzaXphYmxlKGJvb2wmIGlzUmVzaXphYmxlKQordm9pZCBXZWJQYWdl
UHJveHk6OmdldElzUmVzaXphYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRJc1Jl
c2l6YWJsZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIGlzUmVzaXphYmxlID0gbV91
aUNsaWVudC0+aXNSZXNpemFibGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+aXNSZXNpemFibGUo
KnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCByZXNpemFibGUpIHsKKyAgICAg
ICAgcmVwbHktPnNlbmQocmVzaXphYmxlKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFdpbmRvd0ZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCiB7Ci0g
ICAgbV91aUNsaWVudC0+c2V0V2luZG93RnJhbWUodGhpcywgbV9wYWdlQ2xpZW50LmNvbnZlcnRU
b0RldmljZVNwYWNlKG5ld1dpbmRvd0ZyYW1lKSk7CisgICAgbV91aUNsaWVudC0+c2V0V2luZG93
RnJhbWUoKnRoaXMsIG1fcGFnZUNsaWVudC5jb252ZXJ0VG9EZXZpY2VTcGFjZShuZXdXaW5kb3dG
cmFtZSkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2luZG93RnJhbWUoRmxvYXRSZWN0
JiBuZXdXaW5kb3dGcmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZShSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0V2luZG93RnJhbWU6OkRlbGF5ZWRSZXBseT4mJiBy
ZXBseSkKIHsKLSAgICBuZXdXaW5kb3dGcmFtZSA9IG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2Vy
U3BhY2UobV91aUNsaWVudC0+d2luZG93RnJhbWUodGhpcykpOworICAgIG1fdWlDbGllbnQtPndp
bmRvd0ZyYW1lKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBy
ZXBseSA9IFdURk1vdmUocmVwbHkpXSAoRmxvYXRSZWN0IGZyYW1lKSB7CisgICAgICAgIHJlcGx5
LT5zZW5kKG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2VyU3BhY2UoZnJhbWUpKTsKKyAgICB9KTsK
IH0KLSAgICAKLXZvaWQgV2ViUGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBv
aW50JiBzY3JlZW5Qb2ludCwgSW50UG9pbnQmIHdpbmRvd1BvaW50KQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIoRnVuY3Rpb248dm9pZChG
bG9hdFJlY3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fdWlDbGllbnQtPndpbmRv
d0ZyYW1lKCp0aGlzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBzY3JlZW5Qb2ludCwg
UmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBs
eT4mJiByZXBseSkKIHsKLSAgICB3aW5kb3dQb2ludCA9IG1fcGFnZUNsaWVudC5zY3JlZW5Ub1Jv
b3RWaWV3KHNjcmVlblBvaW50KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQuc2NyZWVu
VG9Sb290VmlldyhzY3JlZW5Qb2ludCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlUHJveHk6OnJv
b3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgdmlld1JlY3QsIEludFJlY3QmIHJlc3VsdCkK
K3ZvaWQgV2ViUGFnZVByb3h5Ojpyb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHZpZXdS
ZWN0LCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXll
ZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHJlc3VsdCA9IG1fcGFnZUNsaWVudC5yb290Vmlld1Rv
U2NyZWVuKHZpZXdSZWN0KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQucm9vdFZpZXdU
b1NjcmVlbih2aWV3UmVjdCkpOwogfQogICAgIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTQxOTQs
NyArNDIwOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmludEZyYW1lKHVpbnQ2NF90IGYKICAg
ICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJhbWVJRCk7CiAg
ICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CiAKLSAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKHRo
aXMsIGZyYW1lKTsKKyAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKCp0aGlzLCAqZnJhbWUpOwog
CiAgICAgZW5kUHJpbnRpbmcoKTsgLy8gU2VuZCBhIG1lc3NhZ2Ugc3luY2hyb25vdXNseSB3aGls
ZSBtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uIGlzIHN0aWxsIHRydWUuCiAgICAgbV9p
c1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbiA9IGZhbHNlOwpAQCAtNTkwMSwzMiArNTkxNiwz
MiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRGVzdHJveU5vdGlmaWNhdGlvCiAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpLT5kaWREZXN0cm95Tm90aWZpY2F0aW9uKHRoaXMsIG5vdGlmaWNhdGlvbklEKTsKIH0KIAot
ZmxvYXQgV2ViUGFnZVByb3h5OjpoZWFkZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitm
bG9hdCBXZWJQYWdlUHJveHk6OmhlYWRlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsK
LSAgICBpZiAoZnJhbWUtPmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1l
LmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX3VpQ2xpZW50LT5oZWFkZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3Vp
Q2xpZW50LT5oZWFkZXJIZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotZmxvYXQgV2ViUGFnZVBy
b3h5Ojpmb290ZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitmbG9hdCBXZWJQYWdlUHJv
eHk6OmZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsKLSAgICBpZiAoZnJhbWUt
PmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1lLmlzRGlzcGxheWluZ1BE
RkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3VpQ2xpZW50LT5m
b290ZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3VpQ2xpZW50LT5mb290ZXJI
ZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdIZWFkZXIo
V2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmIGZyYW1lLCBGbG9hdFJlY3QmJiByZWN0
KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKKyAgICBpZiAo
ZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
dWlDbGllbnQtPmRyYXdIZWFkZXIodGhpcywgZnJhbWUsIHJlY3QpOworICAgIG1fdWlDbGllbnQt
PmRyYXdIZWFkZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJlY3QpKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmRyYXdGb290ZXIoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmIGZy
YW1lLCBGbG9hdFJlY3QmJiByZWN0KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERG
RG9jdW1lbnQoKSkKKyAgICBpZiAoZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIodGhpcywgZnJhbWUsIHJl
Y3QpOworICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJl
Y3QpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJ1bk1vZGFsKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODA4LDEw
ICs4MDgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGNv
bnN0IFN0cmluZyYsIGJvb2wsIFdURjo6RnVuY3Rpb248dm9pZCAoQVBJOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqLCBib29sIGhhZEV4Y2VwdGlvbiwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0
YWlscyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pOwogICAgIHZv
aWQgZm9yY2VSZXBhaW50KFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiYpOwogCi0gICAgZmxvYXQgaGVh
ZGVySGVpZ2h0KFdlYkZyYW1lUHJveHkqKTsKLSAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSopOwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSYpOworICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5Jik7CisgICAg
dm9pZCBkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7Cisg
ICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBEaWN0aW9uYXJ5LgpAQCAtMTE2OCw3ICsx
MTY4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb2N1cyhib29sIGZvY3VzZWQpOwogICAg
IHZvaWQgc2V0V2luZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9p
ZCBnZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGdldFdpbmRv
d0ZyYW1lKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZTo6RGVsYXll
ZFJlcGx5PiYmKTsKKyAgICB2b2lkIGdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVy
KEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RmxvYXRSZWN0KT4mJik7CiAKICAgICBib29sIGlzUmVz
b3VyY2VDYWNoaW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzb3VyY2VDYWNoaW5n
RGlzYWJsZWQ7IH0KICAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpOwpA
QCAtMTI5Niw3ICsxMjk3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAg
dm9pZCBydW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgUmVmPE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHJ1
bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6RGVsYXllZFJlcGx5PiYmKTsKLSAgICB2b2lkIHJ1bkph
dmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4pOworICAg
IHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6RGVsYXllZFJlcGx5
PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJIaXRUZXN0UmVzdWx0RGF0YSYmLCB1aW50MzJfdCBt
b2RpZmllcnMsIFVzZXJEYXRhJiYpOwogCkBAIC0xMzEwLDEzICsxMzExLDEzIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
OwogICAgIHZvaWQgZ2V0VG9vbGJhcnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRUb29sYmFyc0FyZVZpc2libGU6OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBz
ZXRNZW51QmFySXNWaXNpYmxlKGJvb2wgbWVudUJhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRN
ZW51QmFySXNWaXNpYmxlKGJvb2wmIG1lbnVCYXJJc1Zpc2libGUpOworICAgIHZvaWQgZ2V0TWVu
dUJhcklzVmlzaWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlz
aWJsZTo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShi
b29sIHN0YXR1c0JhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRTdGF0dXNCYXJJc1Zpc2libGUo
Ym9vbCYgc3RhdHVzQmFySXNWaXNpYmxlKTsKKyAgICB2b2lkIGdldFN0YXR1c0JhcklzVmlzaWJs
ZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlOjpEZWxh
eWVkUmVwbHk+JiYpOwogICAgIHZvaWQgc2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSk7
Ci0gICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShib29sJiBpc1Jlc2l6YWJsZSk7Ci0gICAgdm9pZCBz
Y3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgV2Vi
Q29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKLSAgICB2b2lkIHJvb3RWaWV3VG9TY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld1JlY3QsIFdlYkNvcmU6OkludFJlY3QmIHJlc3Vs
dCk7CisgICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
R2V0SXNSZXNpemFibGU6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9pZCBzY3JlZW5Ub1Jvb3RW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgUmVmPE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9p
ZCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdSZWN0LCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXllZFJlcGx5PiYm
KTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgdm9pZCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2NyZWVuUG9pbnQsIFdlYkNvcmU6OkludFBv
aW50JiB3aW5kb3dQb2ludCk7CiAgICAgdm9pZCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVl
bihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3UmVjdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVz
dWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE2
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2V0UmVuZGVyVHJlZVNpemUodWlu
dDY0X3QgdHJlZVNpemUpCiAgICAgU2V0VG9vbGJhcnNBcmVWaXNpYmxlKGJvb2wgdG9vbGJhcnNB
cmVWaXNpYmxlKQogICAgIEdldFRvb2xiYXJzQXJlVmlzaWJsZSgpIC0+IChib29sIHRvb2xiYXJz
QXJlVmlzaWJsZSkgRGVsYXllZAotICAgIFNldE1lbnVCYXJJc1Zpc2libGUoYm9vbCBtZW51QmFy
SXNWaXNpYmxlKTsKLSAgICBHZXRNZW51QmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgbWVudUJhcklz
VmlzaWJsZSk7CisgICAgU2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUp
CisgICAgR2V0TWVudUJhcklzVmlzaWJsZSgpIC0+IChib29sIG1lbnVCYXJJc1Zpc2libGUpIERl
bGF5ZWQKICAgICBTZXRTdGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUp
Ci0gICAgR2V0U3RhdHVzQmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgc3RhdHVzQmFySXNWaXNpYmxl
KQorICAgIEdldFN0YXR1c0JhcklzVmlzaWJsZSgpIC0+IChib29sIHN0YXR1c0JhcklzVmlzaWJs
ZSkgRGVsYXllZAogICAgIFNldElzUmVzaXphYmxlKGJvb2wgaXNSZXNpemFibGUpCi0gICAgR2V0
SXNSZXNpemFibGUoKSAtPiAoYm9vbCBpc1Jlc2l6YWJsZSkKKyAgICBHZXRJc1Jlc2l6YWJsZSgp
IC0+IChib29sIGlzUmVzaXphYmxlKSBEZWxheWVkCiAgICAgU2V0V2luZG93RnJhbWUoV2ViQ29y
ZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQotICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNv
cmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkKLSAgICBTY3JlZW5Ub1Jvb3RWaWV3KFdlYkNvcmU6
OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29yZTo6SW50UG9pbnQgd2luZG93UG9pbnQp
Ci0gICAgUm9vdFZpZXdUb1NjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3Jl
OjpJbnRSZWN0IHNjcmVlbkZyYW1lKQorICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6
OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgRGVsYXllZAorICAgIFNjcmVlblRvUm9vdFZpZXcoV2Vi
Q29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQ
b2ludCkgRGVsYXllZAorICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0
KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgRGVsYXllZAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgU2hvd1ZhbGlkYXRpb25NZXNzYWdlKFdlYkNvcmU6OkludFJlY3QgYW5j
aG9yUmVjdCwgU3RyaW5nIG1lc3NhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAkocmV2aXNpb24gMjIxNzcxKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE2ICs5NywxNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0
OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQmKSB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCB0b29sYmFyc0FyZVZpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRp
b25IYW5kbGVyKHRydWUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJs
ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGJvb2wpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBtZW51
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
Ym9vbCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXZWJLaXQ6Oldl
YlBhZ2VQcm94eSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVz
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgYm9vbCkgeyB9Ci0gICAgdmlydHVh
bCBib29sIGlzUmVzaXphYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSos
IGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV2ViS2l0
OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWVudUJhcklzVmlz
aWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TWVudUJhcklzVmlzaWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRpb25I
YW5kbGVyKHRydWUpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpc1Jlc2l6
YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SXNSZXNpemFibGUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IHdpbmRvd0ZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gV2ViQ29yZTo6Rmxv
YXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93RnJhbWUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgd2luZG93RnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsgfQogCiAgICAgdmlydHVhbCBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJ1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5n
JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiwgRnVuY3Rpb248dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7IH0KQEAgLTEzMCwxMSArMTMwLDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qo
V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBTZWN1cml0eU9yaWdpbiosIFdlYktpdDo6Tm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QqKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gUHJpbnRp
bmcuCi0gICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkq
LCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBmbG9h
dCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpX
ZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zvb3RlcihXZWJLaXQ6OldlYlBhZ2VQ
cm94eSosIFdlYktpdDo6V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmludEZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
V2ViS2l0OjpXZWJGcmFtZVByb3h5KikgeyB9CisgICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWln
aHQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBmbG9hdCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2
b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb290
ZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBXZWJDb3Jl
OjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHByaW50RnJhbWUoV2ViS2l0OjpX
ZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJ1bk1vZGFsKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MzksNjkgKzE4MzksNjkgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBh
ZwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobV9jbGllbnQudG9vbGJhcnNBcmVWaXNp
YmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2Us
IGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUo
V2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmICghbV9jbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0
b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAg
ICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUs
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5KiBwYWdlKSBmaW5hbAorICAgICAgICB2b2lkIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50Lm1lbnVCYXJJc1Zpc2libGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubWVudUJhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2NsaWVu
dC5tZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCisgICAgICAgIHZvaWQgc2V0TWVudUJh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldE1lbnVCYXJJc1Zp
c2libGUodG9BUEkocGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgICAgICBtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgdmlz
aWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIGJv
b2wgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSogcGFnZSkgZmluYWwKKyAgICAgICAg
dm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIW1fY2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5zdGF0dXNCYXJJc1Zpc2libGUo
dG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobV9jbGllbnQuc3RhdHVzQmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN0YXR1c0Jh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAg
ICAgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZp
c2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuc2V0U3Rh
dHVzQmFySXNWaXNpYmxlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1f
Y2xpZW50LnNldFN0YXR1c0JhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNldFN0YXR1c0Jhcklz
VmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgICAgIH0KIAotICAgICAgICBib29sIGlzUmVzaXphYmxlKFdlYlBhZ2VQcm94eSogcGFn
ZSkgZmluYWwKKyAgICAgICAgdm9pZCBpc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIEZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaXNSZXNpemFibGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaXNSZXNpemFibGUodG9B
UEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIobV9jbGllbnQuaXNSZXNpemFibGUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SXNSZXNpemFibGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHJlc2l6YWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRJc1Jl
c2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgcmVzaXphYmxlKSBmaW5hbAogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNldElzUmVzaXphYmxlKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldElzUmVzaXphYmxlKHRvQVBJ
KHBhZ2UpLCByZXNpemFibGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAg
ICBtX2NsaWVudC5zZXRJc1Jlc2l6YWJsZSh0b0FQSSgmcGFnZSksIHJlc2l6YWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0V2luZG93
RnJhbWUoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lKSBmaW5hbAor
ICAgICAgICB2b2lkIHNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgRmxv
YXRSZWN0JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVu
dC5zZXRXaW5kb3dGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
IG1fY2xpZW50LnNldFdpbmRvd0ZyYW1lKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5zZXRXaW5kb3dGcmFt
ZSh0b0FQSSgmcGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0UmVjdCB3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkq
IHBhZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5JiBwYWdl
LCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZ2V0V2luZG93RnJh
bWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgICAgICAgICByZXR1cm4gdG9G
bG9hdFJlY3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkocGFnZSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbykpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodG9GbG9hdFJl
Y3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbCgpIGNvbnN0IGZpbmFsCkBAIC0xOTkwLDQ0ICsxOTkwLDQ0IEBAIHZvaWQg
V0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFByaW50aW5nLgotICAgICAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViUGFnZVByb3h5KiBw
YWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkgZmluYWwKKyAgICAgICAgZmxvYXQgaGVhZGVySGVp
Z2h0KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUpIGZpbmFsCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaGVhZGVySGVpZ2h0KQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVp
Z2h0KHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVpZ2h0KHRvQVBJKCZwYWdlKSwg
dG9BUEkoJmZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJv
eHkqIGZyYW1lKSBmaW5hbAorICAgICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5
JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5mb290ZXJIZWlnaHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkocGFnZSks
IHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkoJnBhZ2UpLCB0b0FQSSgmZnJhbWUpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBkcmF3
SGVhZGVyKFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkgZmluYWwKKyAgICAgICAgdm9pZCBkcmF3SGVhZGVyKFdl
YlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIFdlYkNvcmU6OkZsb2F0UmVj
dCYmIHJlY3QpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZHJh
d0hlYWRlcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1fY2xpZW50
LmRyYXdIZWFkZXIodG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5kcmF3SGVhZGVyKHRv
QVBJKCZwYWdlKSwgdG9BUEkoJmZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVBy
b3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiByZWN0KSBmaW5hbAorICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVByb3h5JiBwYWdl
LCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgV2ViQ29yZTo6RmxvYXRSZWN0JiYgcmVjdCkgZmluYWwK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kcmF3Rm9vdGVyKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9jbGllbnQuZHJhd0Zvb3Rlcih0b0FQ
SShwYWdlKSwgdG9BUEkoZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LmRyYXdGb290ZXIodG9BUEkoJnBhZ2UpLCB0b0FQ
SSgmZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZvaWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZy
YW1lUHJveHkqIGZyYW1lKSBmaW5hbAorICAgICAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVBy
b3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFtX2NsaWVudC5wcmludEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgbV9jbGllbnQucHJpbnRGcmFtZSh0b0FQSShwYWdlKSwgdG9BUEkoZnJh
bWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQucHJp
bnRGcmFtZSh0b0FQSSgmcGFnZSksIHRvQVBJKCZmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bk1vZGFsKCkgY29uc3QgZmlu
YWwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRVSUNsaWVudC5jcHAJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDQy
ICsxMDIsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Via2l0X3dp
bmRvd19wcm9wZXJ0aWVzX2dldF90b29sYmFyX3Zpc2libGUod2Via2l0X3dlYl92aWV3X2dldF93
aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcpKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRUb29s
YmFyc0FyZVZpc2libGUoV2ViUGFnZVByb3h5KiwgYm9vbCB2aXNpYmxlKSBvdmVycmlkZQorICAg
IHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94eSYsIGJvb2wgdmlzaWJsZSkg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFy
VmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldyks
IHZpc2libGUpOwogICAgIH0KIAotICAgIGJvb2wgbWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJv
eHkqKSBvdmVycmlkZQorICAgIHZvaWQgbWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkmLCBG
dW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbWVudWJhcl92aXNp
YmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSk7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbWVu
dWJhcl92aXNpYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJW
aWV3KSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0TWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJv
eHkqLCBib29sIHZpc2libGUpIG92ZXJyaWRlCisgICAgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxl
KFdlYlBhZ2VQcm94eSYsIGJvb2wgdmlzaWJsZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHdl
YmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOwogICAgIH0KIAotICAgIGJv
b2wgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisgICAgdm9pZCBz
dGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiB3ZWJraXRf
d2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxlKHdlYmtpdF93ZWJfdmlld19n
ZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfc3RhdHVzYmFyX3Zpc2libGUod2Via2l0
X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcpKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5KiwgYm9vbCB2aXNpYmxl
KSBvdmVycmlkZQorICAgIHZvaWQgc2V0U3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSYs
IGJvb2wgdmlzaWJsZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHdlYmtpdFdpbmRvd1Byb3Bl
cnRpZXNTZXRTdGF0dXNiYXJWaXNpYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3Bl
cnRpZXMobV93ZWJWaWV3KSwgdmlzaWJsZSk7CiAgICAgfQogCi0gICAgYm9vbCBpc1Jlc2l6YWJs
ZShXZWJQYWdlUHJveHkqKSBvdmVycmlkZQorICAgIHZvaWQgaXNSZXNpemFibGUoV2ViUGFnZVBy
b3h5JiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6
YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldykpOwor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jl
c2l6YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldykp
KTsKICAgICB9CiAKLSAgICB2b2lkIHNldElzUmVzaXphYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wg
cmVzaXphYmxlKSBvdmVycmlkZQorICAgIHZvaWQgc2V0SXNSZXNpemFibGUoV2ViUGFnZVByb3h5
JiwgYm9vbCByZXNpemFibGUpIG92ZXJyaWRlCiAgICAgewogICAgICAgICB3ZWJraXRXaW5kb3dQ
cm9wZXJ0aWVzU2V0UmVzaXphYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRp
ZXMobV93ZWJWaWV3KSwgcmVzaXphYmxlKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFdpbmRvd0Zy
YW1lKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZnJhbWUpIG92ZXJy
aWRlCisgICAgdm9pZCBzZXRXaW5kb3dGcmFtZShXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGZyYW1lKSBvdmVycmlkZQogICAgIHsKICNpZiBQTEFURk9STShHVEspCiAg
ICAgICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeSA9IFdlYkNvcmU6OkludFJlY3QoZnJhbWUpOwpA
QCAtMTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAKLSAgICBXZWJDb3Jl
OjpGbG9hdFJlY3Qgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICBXZWJD
b3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5Jikgb3ZlcnJpZGUKICAgICB7
CiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7IDAs
IDAsIDAsIDAgfTsKQEAgLTIwNCw5ICsyMDQsOSBAQCBwcml2YXRlOgogICAgIH0KIAogI2lmIFBM
QVRGT1JNKEdUSykKLSAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQ
cm94eSogZnJhbWUpIG92ZXJyaWRlCisgICAgdm9pZCBwcmludEZyYW1lKFdlYlBhZ2VQcm94eSYs
IFdlYkZyYW1lUHJveHkmIGZyYW1lKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgd2Via2l0V2Vi
Vmlld1ByaW50RnJhbWUobV93ZWJWaWV3LCBmcmFtZSk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdQ
cmludEZyYW1lKG1fd2ViVmlldywgJmZyYW1lKTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24J
KHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
QXV0b21hdGlvbi5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDggQEAKICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJGZXRjaGVzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcGVu
IGJyb3dzaW5nIGNvbnRleHRzICh3aW5kb3dzIGFuZCB0YWJzKSBpbiB0aGUgYXV0b21hdGlvbiBz
ZXNzaW9uLiIsCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbnRleHRzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIkJy
b3dzaW5nQ29udGV4dCIgfSwgImRlc2NyaXB0aW9uIjogIkFsbCBrbm93biBicm93c2luZyBjb250
ZXh0cyBhdmFpbGFibGUgdG8gdGhlIHNlc3Npb24uIiB9Ci0gICAgICAgICAgICBdCisgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAogICAgICAgICB7
CiAgICAgICAgICAgICAibmFtZSI6ICJnZXRCcm93c2luZ0NvbnRleHQiLApAQCAtMjM1LDcgKzIz
Niw4IEBACiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgInJldHVybnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb250ZXh0IiwgIiRyZWYiOiAiQnJvd3NpbmdDb250ZXh0Iiwg
ImRlc2NyaXB0aW9uIjogIlRoZSBicm93c2luZyBjb250ZXh0IGF2YWlsYWJsZSB0byB0aGUgc2Vz
c2lvbi4iIH0KLSAgICAgICAgICAgIF0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiYXN5
bmMiOiB0cnVlCiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImNy
ZWF0ZUJyb3dzaW5nQ29udGV4dCIsCkBAIC0yNjUsNyArMjY3LDggQEAKICAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGFuZGxlIiwgIiRyZWYi
OiAiQnJvd3NpbmdDb250ZXh0SGFuZGxlIiwgImRlc2NyaXB0aW9uIjogIlRoZSBoYW5kbGUgZm9y
IHRoZSBicm93c2luZyBjb250ZXh0IHRvIGJlIHJlc2l6ZWQuIiB9LAogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic2l6ZSIsICIkcmVmIjogIlNpemUiLCAiZGVzY3JpcHRpb24iOiAiVGhlIG5l
dyBzaXplIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCdzIHdpbmRvdy4iIH0KLSAgICAgICAgICAg
IF0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlCiAgICAgICAgIH0s
CiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogIm1vdmVXaW5kb3dPZkJyb3dzaW5nQ29u
dGV4dCIsCkBAIC0yNzMsNyArMjc2LDggQEAKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwog
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGFuZGxlIiwgIiRyZWYiOiAiQnJvd3NpbmdDb250
ZXh0SGFuZGxlIiwgImRlc2NyaXB0aW9uIjogIlRoZSBoYW5kbGUgZm9yIHRoZSBicm93c2luZyBj
b250ZXh0IHRvIGJlIG1vdmVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9yaWdp
biIsICIkcmVmIjogIlBvaW50IiwgImRlc2NyaXB0aW9uIjogIlRoZSBuZXcgb3JpZ2luIGZvciB0
aGUgYnJvd3NpbmcgY29udGV4dCdzIHdpbmRvdy4gVGhlIHBvc2l0aW9uIGlzIGludGVycHJldGVk
IGluIHNjcmVlbiBjb29yZGluYXRlIHNwYWNlLCByZWxhdGl2ZSB0byB0aGUgdXBwZXIgbGVmdCBj
b3JuZXIgb2YgdGhlIHNjcmVlbi4iIH0KLSAgICAgICAgICAgIF0KKyAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICAiYXN5bmMiOiB0cnVlCiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAg
ICAgICJuYW1lIjogIm5hdmlnYXRlQnJvd3NpbmdDb250ZXh0IiwKQEAgLTM2NSw3ICszNjksOCBA
QAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicG9zaXRpb24iLCAiJHJlZiI6ICJQb2ludCIsICJkZXNjcmlwdGlvbiI6
ICJUaGUgdXBkYXRlZCBwb3NpdGlvbiBvZiB0aGUgbW91c2UgY3Vyc29yLCBzcGVjaWZpZWQgaW4g
dmlld3BvcnQgY29vcmRpbmF0ZXMuIiB9Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAg
ICAgICAibmFtZSI6ICJwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMiLApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDcsNTYgKzIwNyw2OCBAQCBTdHJpbmcgV2ViQXV0b21hdGlvblNlc3Npb246OmhhbmRsZUZv
cldlCiAgICAgcmV0dXJuIGhhbmRsZUZvcldlYkZyYW1lSUQod2ViRnJhbWVQcm94eS5mcmFtZUlE
KCkpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQ
YWdlKFdlYlBhZ2VQcm94eSYgcGFnZSkKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmJ1aWxk
QnJvd3NpbmdDb250ZXh0Rm9yUGFnZShXZWJQYWdlUHJveHkmIHBhZ2UsIEZ1bmN0aW9uPHZvaWQo
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4mJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0Zy
YW1lOwotICAgIHBhZ2UuZ2V0V2luZG93RnJhbWUod2luZG93RnJhbWUpOwotCi0gICAgYXV0byBv
cmlnaW5PYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQb2ludDo6Y3Jl
YXRlKCkKLSAgICAgICAgLnNldFgod2luZG93RnJhbWUueCgpKQotICAgICAgICAuc2V0WSh3aW5k
b3dGcmFtZS55KCkpCi0gICAgICAgIC5yZWxlYXNlKCk7Ci0KLSAgICBhdXRvIHNpemVPYmplY3Qg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTaXplOjpjcmVhdGUoKQotICAgICAg
ICAuc2V0V2lkdGgod2luZG93RnJhbWUud2lkdGgoKSkKLSAgICAgICAgLnNldEhlaWdodCh3aW5k
b3dGcmFtZS5oZWlnaHQoKSkKLSAgICAgICAgLnJlbGVhc2UoKTsKLQotICAgIFN0cmluZyBoYW5k
bGUgPSBoYW5kbGVGb3JXZWJQYWdlUHJveHkocGFnZSk7Ci0KLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0OjpjcmVhdGUoKQotICAgICAg
ICAuc2V0SGFuZGxlKGhhbmRsZSkKLSAgICAgICAgLnNldEFjdGl2ZShtX2FjdGl2ZUJyb3dzaW5n
Q29udGV4dEhhbmRsZSA9PSBoYW5kbGUpCi0gICAgICAgIC5zZXRVcmwocGFnZS5wYWdlTG9hZFN0
YXRlKCkuYWN0aXZlVVJMKCkpCi0gICAgICAgIC5zZXRXaW5kb3dPcmlnaW4oV1RGTW92ZShvcmln
aW5PYmplY3QpKQotICAgICAgICAuc2V0V2luZG93U2l6ZShXVEZNb3ZlKHNpemVPYmplY3QpKQot
ICAgICAgICAucmVsZWFzZSgpOworICAgIHBhZ2UuZ2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlv
bkhhbmRsZXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYWN0aXZlVVJM
ID0gcGFnZS5wYWdlTG9hZFN0YXRlKCkuYWN0aXZlVVJMKCksIGhhbmRsZSA9IGhhbmRsZUZvcldl
YlBhZ2VQcm94eShwYWdlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKSB7CisgICAgICAgIGF1dG8g
b3JpZ2luT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNy
ZWF0ZSgpCisgICAgICAgICAgICAuc2V0WCh3aW5kb3dGcmFtZS54KCkpCisgICAgICAgICAgICAu
c2V0WSh3aW5kb3dGcmFtZS55KCkpCisgICAgICAgICAgICAucmVsZWFzZSgpOworCisgICAgICAg
IGF1dG8gc2l6ZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNpemU6
OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0V2lkdGgod2luZG93RnJhbWUud2lkdGgoKSkKKyAg
ICAgICAgICAgIC5zZXRIZWlnaHQod2luZG93RnJhbWUuaGVpZ2h0KCkpCisgICAgICAgICAgICAu
cmVsZWFzZSgpOworCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5z
ZXRIYW5kbGUoaGFuZGxlKQorICAgICAgICAgICAgLnNldEFjdGl2ZShtX2FjdGl2ZUJyb3dzaW5n
Q29udGV4dEhhbmRsZSA9PSBoYW5kbGUpCisgICAgICAgICAgICAuc2V0VXJsKGFjdGl2ZVVSTCkK
KyAgICAgICAgICAgIC5zZXRXaW5kb3dPcmlnaW4oV1RGTW92ZShvcmlnaW5PYmplY3QpKQorICAg
ICAgICAgICAgLnNldFdpbmRvd1NpemUoV1RGTW92ZShzaXplT2JqZWN0KSkKKyAgICAgICAgICAg
IC5yZWxlYXNlKCkpOworICAgIH0pOwogfQogCiAvLyBQbGF0Zm9ybS1pbmRlcGVuZGVudCBDb21t
YW5kcy4KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0cyhJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dD4+JiBjb250ZXh0cykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldE5leHRDb250
ZXh0KFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4mJiBwcm90ZWN0ZWRUaGlzLCBWZWN0b3I8UmVm
PFdlYlBhZ2VQcm94eT4+JiYgcGFnZXMsIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+PiBjb250ZXh0
cywgUmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uOjpHZXRCcm93c2luZ0NvbnRleHRzQ2FsbGJhY2s+
JiYgY2FsbGJhY2spCiB7Ci0gICAgY29udGV4dHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+OjpjcmVh
dGUoKTsKLQorICAgIGlmIChwYWdlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2FsbGJhY2stPnNl
bmRTdWNjZXNzKFdURk1vdmUoY29udGV4dHMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBhdXRvIHBhZ2UgPSBwYWdlcy50YWtlTGFzdCgpOworICAgIGJ1aWxkQnJvd3NpbmdDb250ZXh0
Rm9yUGFnZShwYWdlLmdldCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyksIHBhZ2VzID0gV1RGTW92ZShwYWdlcyksIGNvbnRleHRzID0gV1RGTW92ZShjb250
ZXh0cyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+JiYgY29udGV4dCkgbXV0YWJsZSB7Cisg
ICAgICAgIGNvbnRleHRzLT5hZGRJdGVtKFdURk1vdmUoY29udGV4dCkpOworICAgICAgICBnZXRO
ZXh0Q29udGV4dChXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBXVEZNb3ZlKHBhZ2VzKSwgV1RGTW92
ZShjb250ZXh0cyksIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMoSW5zcGVjdG9yOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRzQ2FsbGJhY2s+JiYg
Y2FsbGJhY2spCit7CisgICAgVmVjdG9yPFJlZjxXZWJQYWdlUHJveHk+PiBwYWdlczsKICAgICBm
b3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewogICAgICAg
ICBmb3IgKGF1dG8qIHBhZ2UgOiBwcm9jZXNzLT5wYWdlcygpKSB7CiAgICAgICAgICAgICBBU1NF
UlQocGFnZSk7CiAgICAgICAgICAgICBpZiAoIXBhZ2UtPmlzQ29udHJvbGxlZEJ5QXV0b21hdGlv
bigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBjb250ZXh0cy0+
YWRkSXRlbShidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UoKnBhZ2UpKTsKKyAgICAgICAgICAg
IHBhZ2VzLmFwcGVuZCgqcGFnZSk7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgZ2V0TmV4
dENvbnRleHQobWFrZVJlZigqdGhpcyksIFdURk1vdmUocGFnZXMpLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHQ+OjpjcmVhdGUoKSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpnZXRCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiYgY29udGV4dCkKK3ZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRD
YWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdl
UHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGNvbnRleHQgPSBidWls
ZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UoKnBhZ2UpOworICAgIGJ1aWxkQnJvd3NpbmdDb250ZXh0
Rm9yUGFnZSgqcGFnZSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiYmIGNvbnRleHQpIHsK
KyAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKFdURk1vdmUoY29udGV4dCkpOworICAgIH0p
OwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjcmVhdGVCcm93c2luZ0NvbnRleHQo
SW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogaGFuZGxlKQpAQCAt
MzAxLDcgKzMxMyw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3MK
ICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Q
cm94eTo6Rm9jdXNGcmFtZShwYWdlLT5wYWdlSUQoKSwgZnJhbWVJRC52YWx1ZSgpKSwgMCk7CiB9
CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250
ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHNpemVPYmplY3QpCit2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNpemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJbnNw
ZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBzaXplT2JqZWN0LCBSZWY8UmVzaXplV2lu
ZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1wbGVtZW50ZWQpOwpA
QCAtMzI0LDI3ICszMzYsMjggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzaXplV2lu
ZG93TwogICAgIGlmICghcGFnZSkKICAgICAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Io
V2luZG93Tm90Rm91bmQpOwogCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG9yaWdpbmFsRnJhbWU7
Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWUob3JpZ2luYWxGcmFtZSk7CisgICAgcGFnZS0+Z2V0
V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIoW2NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgd2lkdGgsIGhlaWdodF0oV2ViQ29yZTo6Rmxv
YXRSZWN0IG9yaWdpbmFsRnJhbWUpIG11dGFibGUgeworICAgICAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgbmV3RnJhbWUgPSBXZWJDb3JlOjpGbG9hdFJlY3Qob3JpZ2luYWxGcmFtZS5sb2NhdGlvbigp
LCBXZWJDb3JlOjpGbG9hdFNpemUod2lkdGgsIGhlaWdodCkpOworICAgICAgICBpZiAobmV3RnJh
bWUgPT0gb3JpZ2luYWxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay0+c2VuZFN1
Y2Nlc3MoKTsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBuZXdGcmFtZSA9IFdlYkNvcmU6OkZs
b2F0UmVjdChvcmlnaW5hbEZyYW1lLmxvY2F0aW9uKCksIFdlYkNvcmU6OkZsb2F0U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7Ci0gICAgaWYgKG5ld0ZyYW1lID09IG9yaWdpbmFsRnJhbWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHBhZ2UtPnNldFdpbmRvd0ZyYW1lKG5ld0ZyYW1lKTsKKyAgICAgICAg
cGFnZS0+c2V0V2luZG93RnJhbWUobmV3RnJhbWUpOwogCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAg
ICAvLyBJZiBub3RoaW5nIGNoYW5nZWQgYXQgYWxsLCBpdCdzIHByb2JhYmx5IGZhaXIgdG8gcmVw
b3J0IHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuCi0gICAgLy8gKFdlIGNhbid0IGFzc3VtZSB0
aGF0IHRoZSByZXF1ZXN0ZWQgZnJhbWUgc2l6ZSB3aWxsIGJlIGhvbm9yZWQgZXhhY3RseSwgaG93
ZXZlci4pCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHVwZGF0ZWRGcmFtZTsKLSAgICBwYWdlLT5n
ZXRXaW5kb3dGcmFtZSh1cGRhdGVkRnJhbWUpOwotICAgIGlmIChvcmlnaW5hbEZyYW1lID09IHVw
ZGF0ZWRGcmFtZSkKLSAgICAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJ
TFMoSW50ZXJuYWxFcnJvciwgIlRoZSB3aW5kb3cgc2l6ZSB3YXMgZXhwZWN0ZWQgdG8gaGF2ZSBj
aGFuZ2VkLCBidXQgZGlkIG5vdC4iKTsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIGNhbGxi
YWNrLT5zZW5kU3VjY2VzcygpOworI2Vsc2UKKyAgICAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2Vk
IGF0IGFsbCwgaXQncyBwcm9iYWJseSBmYWlyIHRvIHJlcG9ydCB0aGF0IHNvbWV0aGluZyB3ZW50
IHdyb25nLgorICAgICAgICAvLyAoV2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlcXVlc3RlZCBm
cmFtZSBzaXplIHdpbGwgYmUgaG9ub3JlZCBleGFjdGx5LCBob3dldmVyLikKKyAgICAgICAgcGFn
ZS0+Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIoW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIG9yaWdpbmFsRnJhbWVdKFdlYkNvcmU6OkZsb2F0UmVjdCB1cGRhdGVkRnJh
bWUpIHsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbEZyYW1lID09IHVwZGF0ZWRGcmFtZSkKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVE
X0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSB3aW5kb3cgc2l6ZSB3
YXMgZXhwZWN0ZWQgdG8gaGF2ZSBjaGFuZ2VkLCBidXQgZGlkIG5vdC4iKSk7CisgICAgICAgIH0p
OwogI2VuZGlmCisgICAgfSk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6bW92ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIHBvc2l0aW9uT2JqZWN0KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bW92
ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QmIHBvc2l0aW9uT2JqZWN0LCBSZWY8TW92ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAgLTM2OCwyMyArMzgxLDI4IEBAIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkIKICAgICAgICAgRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IG9yaWdpbmFsRnJhbWU7Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWUob3JpZ2luYWxGcmFtZSk7
CisgICAgcGFnZS0+Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIoW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgeCwgeV0oV2ViQ29y
ZTo6RmxvYXRSZWN0IG9yaWdpbmFsRnJhbWUpIG11dGFibGUgewogCi0gICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IG5ld0ZyYW1lID0gV2ViQ29yZTo6RmxvYXRSZWN0KFdlYkNvcmU6OkZsb2F0UG9pbnQo
eCwgeSksIG9yaWdpbmFsRnJhbWUuc2l6ZSgpKTsKLSAgICBpZiAobmV3RnJhbWUgPT0gb3JpZ2lu
YWxGcmFtZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbmV3
RnJhbWUgPSBXZWJDb3JlOjpGbG9hdFJlY3QoV2ViQ29yZTo6RmxvYXRQb2ludCh4LCB5KSwgb3Jp
Z2luYWxGcmFtZS5zaXplKCkpOworICAgICAgICBpZiAobmV3RnJhbWUgPT0gb3JpZ2luYWxGcmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKIAotICAgIHBh
Z2UtPnNldFdpbmRvd0ZyYW1lKG5ld0ZyYW1lKTsKKyAgICAgICAgcGFnZS0+c2V0V2luZG93RnJh
bWUobmV3RnJhbWUpOwogCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAvLyBJZiBub3RoaW5nIGNo
YW5nZWQgYXQgYWxsLCBpdCdzIHByb2JhYmx5IGZhaXIgdG8gcmVwb3J0IHRoYXQgc29tZXRoaW5n
IHdlbnQgd3JvbmcuCi0gICAgLy8gKFdlIGNhbid0IGFzc3VtZSB0aGF0IHRoZSByZXF1ZXN0ZWQg
ZnJhbWUgc2l6ZSB3aWxsIGJlIGhvbm9yZWQgZXhhY3RseSwgaG93ZXZlci4pCi0gICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IHVwZGF0ZWRGcmFtZTsKLSAgICBwYWdlLT5nZXRXaW5kb3dGcmFtZSh1cGRh
dGVkRnJhbWUpOwotICAgIGlmIChvcmlnaW5hbEZyYW1lID09IHVwZGF0ZWRGcmFtZSkKLSAgICAg
ICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwg
IlRoZSB3aW5kb3cgcG9zaXRpb24gd2FzIGV4cGVjdGVkIHRvIGhhdmUgY2hhbmdlZCwgYnV0IGRp
ZCBub3QuIik7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nl
c3MoKTsKKyNlbHNlCisgICAgICAgIC8vIElmIG5vdGhpbmcgY2hhbmdlZCBhdCBhbGwsIGl0J3Mg
cHJvYmFibHkgZmFpciB0byByZXBvcnQgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4KKyAgICAg
ICAgLy8gKFdlIGNhbid0IGFzc3VtZSB0aGF0IHRoZSByZXF1ZXN0ZWQgZnJhbWUgc2l6ZSB3aWxs
IGJlIGhvbm9yZWQgZXhhY3RseSwgaG93ZXZlci4pCisgICAgICAgIHBhZ2UtPmdldFdpbmRvd0Zy
YW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBv
cmlnaW5hbEZyYW1lXShXZWJDb3JlOjpGbG9hdFJlY3QgdXBkYXRlZEZyYW1lKSB7CisgICAgICAg
ICAgICBpZiAob3JpZ2luYWxGcmFtZSA9PSB1cGRhdGVkRnJhbWUpCisgICAgICAgICAgICAgICAg
Y2FsbGJhY2stPnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FO
RF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgd2luZG93IHBvc2l0aW9uIHdhcyBleHBlY3Rl
ZCB0byBoYXZlIGNoYW5nZWQsIGJ1dCBkaWQgbm90LiIpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyAgICAgICAgfSk7CiAjZW5k
aWYKICNlbmRpZgorICAgIH0pOwogfQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiBwYWdlTG9hZFN0cmF0ZWd5
RnJvbVN0cmluZ1BhcmFtZXRlcihjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eVN0cmluZykKQEAgLTEyMjEsNyArMTIzOSw3IEBAIHN0YXRpYyBXZWJFdmVudDo6TW9kaWZpZXJz
IHByb3RvY29sTW9kaWYKIH0KICNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdCwgY29uc3QgU3RyaW5nJiBt
b3VzZUJ1dHRvblN0cmluZywgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBrZXlNb2RpZmllclN0cmluZ3MsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQb2ludD4mIHVwZGF0ZWRQb3NpdGlv
bk9iamVjdCkKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0
aW9uKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9u
T2JqZWN0LCBjb25zdCBTdHJpbmcmIG1vdXNlQnV0dG9uU3RyaW5nLCBjb25zdCBTdHJpbmcmIG1v
dXNlSW50ZXJhY3Rpb25TdHJpbmcsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGtl
eU1vZGlmaWVyU3RyaW5ncywgUmVmPFBlcmZvcm1Nb3VzZUludGVyYWN0aW9uQ2FsbGJhY2s+JiYg
Y2FsbGJhY2spCiB7CiAjaWYgIVVTRShBUFBLSVQpICYmICFQTEFURk9STShHVEspCiAgICAgRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1wbGVtZW50ZWQpOwpAQCAtMTIzOCw0MSArMTI1
Niw0MSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJCiAgICAgaWYg
KCFyZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdC5nZXREb3VibGUoV1RGOjpBU0NJSUxpdGVyYWwoInki
KSwgeSkpCiAgICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1p
c3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICd5JyB3YXMgbm90IGZvdW5kLiIpOwogCi0g
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lOwotICAgIHBhZ2UtPmdldFdpbmRvd0Zy
YW1lKHdpbmRvd0ZyYW1lKTsKLQotICAgIHggPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBmLCB4KSwg
d2luZG93RnJhbWUuc2l6ZSgpLndpZHRoKCkpOwotICAgIHkgPSBzdGQ6Om1pbihzdGQ6Om1heCgw
LjBmLCB5ICsgcGFnZS0+dG9wQ29udGVudEluc2V0KCkpLCB3aW5kb3dGcmFtZS5zaXplKCkuaGVp
Z2h0KCkpOwotCi0gICAgV2ViQ29yZTo6SW50UG9pbnQgdmlld1Bvc2l0aW9uID0gV2ViQ29yZTo6
SW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pih4KSwgc3RhdGljX2Nhc3Q8aW50Pih5KSk7Ci0KLSAg
ICBhdXRvIHBhcnNlZEludGVyYWN0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uPihtb3VzZUludGVyYWN0aW9uU3RyaW5nKTsKLSAg
ICBpZiAoIXBhcnNlZEludGVyYWN0aW9uKQotICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW50ZXJh
Y3Rpb24nIGlzIGludmFsaWQuIik7Ci0KLSAgICBhdXRvIHBhcnNlZEJ1dHRvbiA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24+KG1vdXNlQnV0dG9u
U3RyaW5nKTsKLSAgICBpZiAoIXBhcnNlZEJ1dHRvbikKLSAgICAgICAgRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIg
J2J1dHRvbicgaXMgaW52YWxpZC4iKTsKLQogICAgIFdlYkV2ZW50OjpNb2RpZmllcnMga2V5TW9k
aWZpZXJzID0gKFdlYkV2ZW50OjpNb2RpZmllcnMpMDsKICAgICBmb3IgKGF1dG8gaXQgPSBrZXlN
b2RpZmllclN0cmluZ3MuYmVnaW4oKTsgaXQgIT0ga2V5TW9kaWZpZXJTdHJpbmdzLmVuZCgpOyAr
K2l0KSB7CiAgICAgICAgIFN0cmluZyBtb2RpZmllclN0cmluZzsKICAgICAgICAgaWYgKCFpdC0+
Z2V0KCktPmFzU3RyaW5nKG1vZGlmaWVyU3RyaW5nKSkKLSAgICAgICAgICAgIEZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1l
dGVyICdtb2RpZmllcnMnIGlzIGludmFsaWQuIik7CisgICAgICAgICAgICByZXR1cm4gY2FsbGJh
Y2stPnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRB
SUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdtb2RpZmllcnMnIGlzIGludmFs
aWQuIikpOwogCiAgICAgICAgIGF1dG8gcGFyc2VkTW9kaWZpZXIgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleU1vZGlmaWVyPihtb2RpZmllclN0cmluZyk7CiAg
ICAgICAgIGlmICghcGFyc2VkTW9kaWZpZXIpCi0gICAgICAgICAgICBGQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQSBtb2RpZmllciBpbiB0
aGUgJ21vZGlmaWVycycgYXJyYXkgaXMgaW52YWxpZC4iKTsKKyAgICAgICAgICAgIHJldHVybiBj
YWxsYmFjay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUVfQU5E
X0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgbW9kaWZpZXIgaW4gdGhlICdtb2RpZmllcnMn
IGFycmF5IGlzIGludmFsaWQuIikpOwogICAgICAgICBXZWJFdmVudDo6TW9kaWZpZXJzIGVudW1W
YWx1ZSA9IHByb3RvY29sTW9kaWZpZXJUb1dlYkV2ZW50TW9kaWZpZXIocGFyc2VkTW9kaWZpZXIu
dmFsdWUoKSk7CiAgICAgICAgIGtleU1vZGlmaWVycyA9IChXZWJFdmVudDo6TW9kaWZpZXJzKShl
bnVtVmFsdWUgfCBrZXlNb2RpZmllcnMpOwogICAgIH0KKyAgICAKKyAgICBwYWdlLT5nZXRXaW5k
b3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigq
cGFnZSksIHgsIHksIG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcsIG1vdXNlQnV0dG9uU3RyaW5nLCBr
ZXlNb2RpZmllcnNdKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgbXV0YWJsZSB7CiAK
LSAgICBwbGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbigqcGFnZSwgdmlld1Bvc2l0aW9u
LCBwYXJzZWRJbnRlcmFjdGlvbi52YWx1ZSgpLCBwYXJzZWRCdXR0b24udmFsdWUoKSwga2V5TW9k
aWZpZXJzKTsKKyAgICAgICAgeCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHgpLCB3aW5kb3dG
cmFtZS5zaXplKCkud2lkdGgoKSk7CisgICAgICAgIHkgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBm
LCB5ICsgcGFnZS0+dG9wQ29udGVudEluc2V0KCkpLCB3aW5kb3dGcmFtZS5zaXplKCkuaGVpZ2h0
KCkpOwogCi0gICAgdXBkYXRlZFBvc2l0aW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRYKHgpCi0gICAgICAgIC5z
ZXRZKHkgLSBwYWdlLT50b3BDb250ZW50SW5zZXQoKSkKLSAgICAgICAgLnJlbGVhc2UoKTsKKyAg
ICAgICAgV2ViQ29yZTo6SW50UG9pbnQgdmlld1Bvc2l0aW9uID0gV2ViQ29yZTo6SW50UG9pbnQo
c3RhdGljX2Nhc3Q8aW50Pih4KSwgc3RhdGljX2Nhc3Q8aW50Pih5KSk7CisKKyAgICAgICAgYXV0
byBwYXJzZWRJbnRlcmFjdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxw
ZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6TW91c2VJbnRlcmFjdGlvbj4obW91c2VJbnRlcmFjdGlvblN0cmluZyk7CisgICAgICAg
IGlmICghcGFyc2VkSW50ZXJhY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2stPnNl
bmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKElu
dmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnRlcmFjdGlvbicgaXMgaW52YWxpZC4i
KSk7CisKKyAgICAgICAgYXV0byBwYXJzZWRCdXR0b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihtb3VzZUJ1dHRvblN0cmluZyk7CisgICAg
ICAgIGlmICghcGFyc2VkQnV0dG9uKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLT5zZW5k
RmFpbHVyZShTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnYnV0dG9uJyBpcyBpbnZhbGlkLiIpKTsKKwor
ICAgICAgICBwbGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihwYWdlLCB2aWV3UG9zaXRp
b24sIHBhcnNlZEludGVyYWN0aW9uLnZhbHVlKCksIHBhcnNlZEJ1dHRvbi52YWx1ZSgpLCBrZXlN
b2RpZmllcnMpOworCisgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpQb2ludDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRYKHgp
CisgICAgICAgICAgICAuc2V0WSh5IC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCisgICAgICAg
ICAgICAucmVsZWFzZSgpKTsKKyAgICB9KTsKICNlbmRpZiAvLyBVU0UoQVBQS0lUKQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCShyZXZpc2lvbiAyMjE3NjkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNSwyMCArMTE1LDIwIEBAIHB1YmxpYzoKICAgICAvLyBhbmQgdGhlIC0tcGxhdGZv
cm0gYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBwcm90b2NvbCBiaW5kaW5ncyBnZW5lcmF0b3IuCiAK
ICAgICAvLyBQbGF0Zm9ybTogR2VuZXJpYwotICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0cyhJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4+Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHQ+Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRCcm93c2luZ0NvbnRl
eHRzKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxi
YWNrPiYmKSBmaW5hbDsKKyAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKSBmaW5hbDsKICAgICB2b2lkIGNyZWF0ZUJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiwgU3RyaW5nKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbG9zZUJyb3dzaW5nQ29u
dGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxGcmFtZUhhbmRsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNpemVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBzaXplKSBvdmVycmlkZTsKLSAgICB2b2lk
IG1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBwb3Np
dGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXNpemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBzaXplLCBSZWY8UmVzaXplV2luZG93T2ZCcm93c2luZ0Nv
bnRleHRDYWxsYmFjaz4mJikgZmluYWw7CisgICAgdm9pZCBtb3ZlV2luZG93T2ZCcm93c2luZ0Nv
bnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcG9zaXRpb24sIFJlZjxNb3ZlV2luZG93T2ZC
cm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7CiAgICAgdm9pZCBuYXZpZ2F0ZUJyb3dz
aW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eVN0cmluZywgY29uc3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPE5hdmlnYXRl
QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZ29CYWNrSW5C
cm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBpbnQqIG9w
dGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFj
az4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChJbnNw
ZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25h
bFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGludCogb3B0aW9uYWxQYWdlTG9hZFRpbWVv
dXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHJlbG9hZEJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJp
bmcsIGNvbnN0IGludCogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxSZWxvYWRCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB3YWl0Rm9yTmF2aWdhdGlv
blRvQ29tcGxldGUoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBpbnQqIG9wdGlv
bmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJh
Y2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oSW5z
cGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rp
b24sIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGFyZ3VtZW50cywgY29uc3QgYm9v
bCogb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBjb25zdCBpbnQqIG9w
dGlvbmFsQ2FsbGJhY2tUaW1lb3V0LCBSZWY8SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG1vdXNlQnV0dG9uLCBj
b25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rpb24sIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXkmIGtleU1vZGlmaWVycywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OlBvaW50PiYgdXBkYXRlZFBvc2l0aW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIHBlcmZvcm1N
b3VzZUludGVyYWN0aW9uKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9u
LCBjb25zdCBTdHJpbmcmIG1vdXNlQnV0dG9uLCBjb25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rp
b24sIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGtleU1vZGlmaWVycywgUmVmPFBl
cmZvcm1Nb3VzZUludGVyYWN0aW9uQ2FsbGJhY2s+JiYpIGZpbmFsOwogICAgIHZvaWQgcGVyZm9y
bUtleWJvYXJkSW50ZXJhY3Rpb25zKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW50ZXJhY3Rpb25z
LCBSZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgdGFrZVNjcmVlbnNob3QoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxOb2RlSGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9W
aWV3SWZOZWVkZWQsIFJlZjxUYWtlU2NyZWVuc2hvdENhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAg
ICB2b2lkIHJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25h
bEZyYW1lSGFuZGxlLCBjb25zdCBpbnQqIG9wdGlvbmFsT3JkaW5hbCwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbE5hbWUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOb2RlSGFuZGxlLCBSZWY8UmVzb2x2
ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CkBAIC0xNjAsNyArMTYwLDgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eUZvckhh
bmRsZShjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgaGFuZGxlRm9yV2ViUGFnZVByb3h5KGNv
bnN0IFdlYlBhZ2VQcm94eSYpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+IGJ1aWxkQnJvd3NpbmdDb250ZXh0Rm9yUGFnZShXZWJQ
YWdlUHJveHkmKTsKKyAgICB2b2lkIGJ1aWxkQnJvd3NpbmdDb250ZXh0Rm9yUGFnZShXZWJQYWdl
UHJveHkmLCBGdW5jdGlvbjx2b2lkKFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHQ+JiYpPiYmKTsKKyAgICB2b2lkIGdldE5leHRDb250ZXh0KFJlZjxX
ZWJBdXRvbWF0aW9uU2Vzc2lvbj4mJiwgVmVjdG9yPFJlZjxXZWJQYWdlUHJveHk+PiYmLCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0Pj4sIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6R2V0QnJvd3Np
bmdDb250ZXh0c0NhbGxiYWNrPiYmKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHdl
YkZyYW1lSURGb3JIYW5kbGUoY29uc3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIGhhbmRsZUZvcldl
YkZyYW1lSUQodWludDY0X3QgZnJhbWVJRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9VSURlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsx
MTAsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3Vy
aXR5T3JpZ2luJiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0UHJveHkmKSBmaW5hbDsKICAgICAgICAgYm9vbCBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25G
b3JPcmlnaW4oV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmln
aW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkm
KSBmaW5hbDsKICAgICAgICAgdm9pZCBtZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZShXZWJDb3Jl
OjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MpIGZpbmFsOwotICAgICAgICB2b2lkIHBy
aW50RnJhbWUoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSopIGZpbmFsOworICAgICAgICB2
b2lkIHByaW50RnJhbWUoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYpIGZpbmFsOwogI2lm
IFBMQVRGT1JNKElPUykKICNpZiBIQVZFKEFQUF9MSU5LUykKICAgICAgICAgYm9vbCBzaG91bGRJ
bmNsdWRlQXBwTGlua0FjdGlvbnNGb3JFbGVtZW50KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICop
IGZpbmFsOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRl
Lm1tCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9V
SURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsMTAgKzgwMSw4IEBAIHZvaWQgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlYWNoZWRBcHBsaWMKICAgICB9KS5nZXQoKV07CiB9CiAKLXZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByaW50RnJhbWUoV2ViUGFnZVByb3h5KiwgV2ViRnJh
bWVQcm94eSogd2ViRnJhbWVQcm94eSkKK3ZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByaW50
RnJhbWUoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYgd2ViRnJhbWVQcm94eSkKIHsKLSAg
ICBBU1NFUlRfQVJHKHdlYkZyYW1lUHJveHksIHdlYkZyYW1lUHJveHkpOwotCiAgICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1ByaW50RnJhbWUpCiAgICAgICAg
IHJldHVybjsKIApAQCAtODEyLDcgKzgxMCw3IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnByaW50RnJhbWUoV2UKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdh
dGUubV93ZWJWaWV3IHByaW50RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUo
d2ViRnJhbWVQcm94eS0+ZnJhbWVJRCgpKSldOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcHJpbnRGcmFtZTp3
cmFwcGVyKEFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZSh3ZWJGcmFtZVByb3h5LmZyYW1lSUQoKSkp
XTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y2xvc2UoV2ViUGFnZVByb3h5KikK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCShy
ZXZpc2lvbiAyMjE3NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYyOCw3ICsxNjI4LDcgQEAgTlNQcmludE9wZXJh
dGlvbiAqV2ViVmlld0ltcGw6OnByaW50T3BlcgogCiAgICAgLy8gRklYTUU6IElmIHRoZSBmcmFt
ZSBjYW5ub3QgYmUgcHJpbnRlZCAoZS5nLiBpZiBpdCBjb250YWlucyBhbiBlbmNyeXB0ZWQgUERG
IHRoYXQgZGlzYWxsb3dzCiAgICAgLy8gcHJpbnRpbmcpLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBy
ZXR1cm4gbmlsLgotICAgIFJldGFpblB0cjxXS1ByaW50aW5nVmlldz4gcHJpbnRpbmdWaWV3ID0g
YWRvcHROUyhbW1dLUHJpbnRpbmdWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lUHJveHk6JmZyYW1l
IHZpZXc6bV92aWV3LmdldEF1dG9yZWxlYXNlZCgpXSk7CisgICAgUmV0YWluUHRyPFdLUHJpbnRp
bmdWaWV3PiBwcmludGluZ1ZpZXcgPSBhZG9wdE5TKFtbV0tQcmludGluZ1ZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWVQcm94eTpmcmFtZSB2aWV3Om1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKV0pOwog
ICAgIC8vIE5TUHJpbnRPcGVyYXRpb24gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB2aWV3LgogICAg
IE5TUHJpbnRPcGVyYXRpb24gKnByaW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gcHJp
bnRPcGVyYXRpb25XaXRoVmlldzpwcmludGluZ1ZpZXcuZ2V0KCkgcHJpbnRJbmZvOnByaW50SW5m
b107CiAgICAgW3ByaW50T3BlcmF0aW9uIHNldENhblNwYXduU2VwYXJhdGVUaHJlYWQ6WUVTXTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5oCShy
ZXZpc2lvbiAyMjE3NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGlu
Z1ZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBAaW50ZXJmYWNlIFdLUHJp
bnRpbmdWaWV3IDogTlNWaWV3IHsKICAgICBOU1RpbWVyICpfYXV0b2Rpc3BsYXlSZXN1bWVUaW1l
cjsKIH0KIAotLSAoaWQpaW5pdFdpdGhGcmFtZVByb3h5OihXZWJLaXQ6OldlYkZyYW1lUHJveHkq
KWZyYW1lIHZpZXc6KE5TVmlldyAqKXdrVmlldzsKKy0gKGlkKWluaXRXaXRoRnJhbWVQcm94eToo
V2ViS2l0OjpXZWJGcmFtZVByb3h5JilmcmFtZSB2aWV3OihOU1ZpZXcgKil3a1ZpZXc7CiAKIEBl
bmQKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmll
dy5tbQkocmV2aXNpb24gMjIxNzY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dL
UHJpbnRpbmdWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMyArNTEsMTMgQEAgc3RhdGlj
IEJPT0wgaXNGb3JjaW5nUHJldmlld1VwZGF0ZTsKIAogQGltcGxlbWVudGF0aW9uIFdLUHJpbnRp
bmdWaWV3CiAKLS0gKGlkKWluaXRXaXRoRnJhbWVQcm94eTooV2ViS2l0OjpXZWJGcmFtZVByb3h5
KilmcmFtZSB2aWV3OihOU1ZpZXcgKil3a1ZpZXcKKy0gKGlkKWluaXRXaXRoRnJhbWVQcm94eToo
V2ViS2l0OjpXZWJGcmFtZVByb3h5JilmcmFtZSB2aWV3OihOU1ZpZXcgKil3a1ZpZXcKIHsKICAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOyAvLyBObyBmcmFtZSByZWN0IHRvIHBhc3MgdG8gTlNWaWV3
LgogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIF93ZWJGcmFtZSA9
IGZyYW1lOworICAgIF93ZWJGcmFtZSA9ICZmcmFtZTsKICAgICBfd2tWaWV3ID0gd2tWaWV3Owog
CiAgICAgcmV0dXJuIHNlbGY7CkBAIC0xNTEsOCArMTUxLDggQEAgLSAodm9pZClfYWRqdXN0UHJp
bnRpbmdNYXJnaW5zRm9ySGVhZGVyQQogICAgIH0KICAgICAKICAgICBDR0Zsb2F0IHNjYWxlID0g
W2luZm8gc2NhbGluZ0ZhY3Rvcl07Ci0gICAgW2luZm8gc2V0VG9wTWFyZ2luOm9yaWdpbmFsVG9w
TWFyZ2luICsgX3dlYkZyYW1lLT5wYWdlKCktPmhlYWRlckhlaWdodChfd2ViRnJhbWUuZ2V0KCkp
ICogc2NhbGVdOwotICAgIFtpbmZvIHNldEJvdHRvbU1hcmdpbjpvcmlnaW5hbEJvdHRvbU1hcmdp
biArIF93ZWJGcmFtZS0+cGFnZSgpLT5mb290ZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSAqIHNj
YWxlXTsKKyAgICBbaW5mbyBzZXRUb3BNYXJnaW46b3JpZ2luYWxUb3BNYXJnaW4gKyBfd2ViRnJh
bWUtPnBhZ2UoKS0+aGVhZGVySGVpZ2h0KCpfd2ViRnJhbWUpICogc2NhbGVdOworICAgIFtpbmZv
IHNldEJvdHRvbU1hcmdpbjpvcmlnaW5hbEJvdHRvbU1hcmdpbiArIF93ZWJGcmFtZS0+cGFnZSgp
LT5mb290ZXJIZWlnaHQoKl93ZWJGcmFtZSkgKiBzY2FsZV07CiB9CiAKIC0gKEJPT0wpX2lzUHJp
bnRpbmdQcmV2aWV3CkBAIC02MzcsMTggKzYzNywxOCBAQCAtICh2b2lkKWRyYXdQYWdlQm9yZGVy
V2l0aFNpemU6KE5TU2l6ZSliCiAgICAgTlNTaXplIHBhcGVyU2l6ZSA9IFtwcmludEluZm8gcGFw
ZXJTaXplXTsKICAgICBDR0Zsb2F0IGhlYWRlckZvb3RlckxlZnQgPSBbcHJpbnRJbmZvIGxlZnRN
YXJnaW5dIC8gc2NhbGU7CiAgICAgQ0dGbG9hdCBoZWFkZXJGb290ZXJXaWR0aCA9IChwYXBlclNp
emUud2lkdGggLSAoW3ByaW50SW5mbyBsZWZ0TWFyZ2luXSArIFtwcmludEluZm8gcmlnaHRNYXJn
aW5dKSkgLyBzY2FsZTsKLSAgICBOU1JlY3QgZm9vdGVyUmVjdCA9IE5TTWFrZVJlY3QoaGVhZGVy
Rm9vdGVyTGVmdCwgW3ByaW50SW5mbyBib3R0b21NYXJnaW5dIC8gc2NhbGUgLSBfd2ViRnJhbWUt
PnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSksIGhlYWRlckZvb3RlcldpZHRo
LCBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSkpOwotICAg
IE5TUmVjdCBoZWFkZXJSZWN0ID0gTlNNYWtlUmVjdChoZWFkZXJGb290ZXJMZWZ0LCAocGFwZXJT
aXplLmhlaWdodCAtIFtwcmludEluZm8gdG9wTWFyZ2luXSkgLyBzY2FsZSwgaGVhZGVyRm9vdGVy
V2lkdGgsIF93ZWJGcmFtZS0+cGFnZSgpLT5oZWFkZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSk7
CisgICAgTlNSZWN0IGZvb3RlclJlY3QgPSBOU01ha2VSZWN0KGhlYWRlckZvb3RlckxlZnQsIFtw
cmludEluZm8gYm90dG9tTWFyZ2luXSAvIHNjYWxlIC0gX3dlYkZyYW1lLT5wYWdlKCktPmZvb3Rl
ckhlaWdodCgqX3dlYkZyYW1lKSwgaGVhZGVyRm9vdGVyV2lkdGgsIF93ZWJGcmFtZS0+cGFnZSgp
LT5mb290ZXJIZWlnaHQoKl93ZWJGcmFtZSkpOworICAgIE5TUmVjdCBoZWFkZXJSZWN0ID0gTlNN
YWtlUmVjdChoZWFkZXJGb290ZXJMZWZ0LCAocGFwZXJTaXplLmhlaWdodCAtIFtwcmludEluZm8g
dG9wTWFyZ2luXSkgLyBzY2FsZSwgaGVhZGVyRm9vdGVyV2lkdGgsIF93ZWJGcmFtZS0+cGFnZSgp
LT5oZWFkZXJIZWlnaHQoKl93ZWJGcmFtZSkpOwogCiAgICAgTlNHcmFwaGljc0NvbnRleHQgKmN1
cnJlbnRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICBb
Y3VycmVudENvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwogICAgIE5TUmVjdENsaXAoaGVhZGVy
UmVjdCk7Ci0gICAgX3dlYkZyYW1lLT5wYWdlKCktPmRyYXdIZWFkZXIoX3dlYkZyYW1lLmdldCgp
LCBoZWFkZXJSZWN0KTsKKyAgICBfd2ViRnJhbWUtPnBhZ2UoKS0+ZHJhd0hlYWRlcigqX3dlYkZy
YW1lLCBoZWFkZXJSZWN0KTsKICAgICBbY3VycmVudENvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3Rh
dGVdOwogCiAgICAgW2N1cnJlbnRDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKICAgICBOU1Jl
Y3RDbGlwKGZvb3RlclJlY3QpOwotICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5kcmF3Rm9vdGVyKF93
ZWJGcmFtZS5nZXQoKSwgZm9vdGVyUmVjdCk7CisgICAgX3dlYkZyYW1lLT5wYWdlKCktPmRyYXdG
b290ZXIoKl93ZWJGcmFtZSwgZm9vdGVyUmVjdCk7CiAgICAgW2N1cnJlbnRDb250ZXh0IHJlc3Rv
cmVHcmFwaGljc1N0YXRlXTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAyMjE3NjkpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsMTAgKzEzNiwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0No
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEluIGNhc2UgdGhlIFVJIGNsaWVudCBvdmVycmlk
ZXMgZ2V0V2luZG93RnJhbWUoKSwgd2UgY2FsbCBpdCBoZXJlIHRvIG1ha2Ugc3VyZSB3ZSBzZW5k
IHRoZSBhcHByb3ByaWF0ZSB3aW5kb3cgZnJhbWUuCi0gICAgRmxvYXRSZWN0IHdpbmRvd0ZyYW1l
SW5TY3JlZW5Db29yZGluYXRlcyA9IG1fdWlDbGllbnQtPndpbmRvd0ZyYW1lKHRoaXMpOwotICAg
IEZsb2F0UmVjdCB3aW5kb3dGcmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMgPSBtX3Bh
Z2VDbGllbnQuY29udmVydFRvVXNlclNwYWNlKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cyk7Ci0KLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2luZG93QW5kVmll
d0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCB3aW5kb3dGcmFt
ZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMsIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0
ZXMsIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpLCBtX3BhZ2VJRCk7CisgICAgbV91aUNs
aWVudC0+d2luZG93RnJhbWUoKnRoaXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGFjY2Vzc2liaWxpdHlWaWV3Q29v
cmRpbmF0ZXNdIChGbG9hdFJlY3Qgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzKSB7Cisg
ICAgICAgIEZsb2F0UmVjdCB3aW5kb3dGcmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMg
PSBtX3BhZ2VDbGllbnQuY29udmVydFRvVXNlclNwYWNlKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29y
ZGluYXRlcyk7CisgICAgICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5k
b3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIHdp
bmRvd0ZyYW1lSW5VbmZsaXBwZWRTY3JlZW5Db29yZGluYXRlcywgdmlld0ZyYW1lSW5XaW5kb3dD
b29yZGluYXRlcywgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyksIG1fcGFnZUlEKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldE1haW5GcmFtZUlzU2Nyb2xsYWJsZShi
b29sIGlzU2Nyb2xsYWJsZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320237</attachid>
            <date>2017-09-07 21:58:12 -0700</date>
            <delta_ts>2017-09-07 22:45:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176583-20170907215812.patch</filename>
            <type>text/plain</type>
            <size>68338</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE3NzcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE3LTA5LTA3ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIGFu
ZCBtYWtlIEFQSTo6VUlDbGllbnQgbW9yZSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjU4MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFQSTo6VUlDbGllbnQgY2FsbHMgdGhhdCBy
ZXR1cm4gdmFsdWVzIHN5bmNocm9ub3VzbHkgcmVxdWlyZSBzeW5jaHJvbm91cyBBUElzIHVubmVj
ZXNzYXJpbHkuCisgICAgICAgIEhhdmluZyB0aGVtIGNhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3
aXRoIHRoZSByZXN1bHRzIGluc3RlYWQgYWxsb3dzIHVzIHRvIG1ha2UgYXN5bmNocm9ub3VzCisg
ICAgICAgIEFQSXMsIGFuZCBleGlzdGluZyBzeW5jaHJvbm91cyBBUElzIGNhbiBqdXN0IGNhbGwg
dGhlIGNvbXBsZXRpb24gaGFuZGxlcnMgaW1tZWRpYXRlbHkuCisgICAgICAgIAorICAgICAgICBV
bmZvcnR1bmF0ZWx5IGFuIGFzc3VtcHRpb24gdGhhdCBBUEk6OlVJQ2xpZW50Ojp3aW5kb3dGcmFt
ZSByZXR1cm5zIHN5bmNocm9ub3VzbHkgaGFkIHdvcmtlZAorICAgICAgICBpdHMgd2F5IGludG8g
dGhlIFdlYkF1dG9tYXRpb25TZXNzaW9uLCB3aGljaCBjYWxscyBXZWJQYWdlUHJveHk6OmdldFdp
bmRvd0ZyYW1lLiAgTWFraW5nIGl0CisgICAgICAgIGFzeW5jaHJvbm91cyByZXF1aXJlZCBtYWtp
bmcgc29tZSBhdXRvbWF0aW9uIHByb3RvY29scyBhc3luY2hyb25vdXMgc28gdGhleSBjYW4gc2Vu
ZCB0aGVpcgorICAgICAgICByZXN1bHQgb25jZSB0aGV5IGhhdmUgdGhlIHJlc3VsdGluZyBmcmFt
ZXMgZnJvbSB0aGUgVUlDbGllbnQuCisgICAgICAgIAorICAgICAgICBObyBjaGFuZ2UgaW4gYmVo
YXZpb3VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oOgorICAgICAg
ICAoQVBJOjpVSUNsaWVudDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKEFQSTo6
VUlDbGllbnQ6Om1lbnVCYXJJc1Zpc2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0
TWVudUJhcklzVmlzaWJsZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpzdGF0dXNCYXJJc1Zp
c2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0U3RhdHVzQmFySXNWaXNpYmxlKToK
KyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmlzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OnNldFdpbmRv
d0ZyYW1lKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OndpbmRvd0ZyYW1lKToKKyAgICAgICAg
KEFQSTo6VUlDbGllbnQ6OmhlYWRlckhlaWdodCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50Ojpm
b290ZXJIZWlnaHQpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6ZHJhd0hlYWRlcik6CisgICAg
ICAgIChBUEk6OlVJQ2xpZW50OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnByaW50RnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAg
ICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb246CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldE5leHRDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtTW91c2VJbnRlcmFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAg
ICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZh
U2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb29sYmFy
c0FyZVZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldE1lbnVCYXJJ
c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zp
c2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFN0YXR1c0JhcklzVmlz
aWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNp
YmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJc1Jlc2l6YWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0SXNSZXNpemFibGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNjcmVlblRvUm9vdFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnJvb3RWaWV3VG9TY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnByaW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhlYWRl
ckhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9vdGVySGVpZ2h0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmF3SGVhZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1Zp
ZXcgaW5pdFdpdGhGcmFtZVByb3h5OnZpZXc6XSk6CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3
IF9hZGp1c3RQcmludGluZ01hcmdpbnNGb3JIZWFkZXJBbmRGb290ZXJdKToKKyAgICAgICAgKC1b
V0tQcmludGluZ1ZpZXcgZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZTpdKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6CisKIDIwMTctMDktMDcgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFVwc3RyZWFtIFFUS2l0LXJl
bGF0ZWQgV2ViS2l0U3lzdGVtSW50ZXJmYWNlIGZ1bmN0aW9ucwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQ4
LDcgKzM5NDgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oCiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFJlZlB0cjxN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpEZWxheWVkUmVwbHk+
IHJlcGx5KQordm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgUmVmPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4mJiByZXBs
eSkKIHsKICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJh
bWVJRCk7CiAgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CkBAIC0zOTYxLDcgKzM5NjEsOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdFByb21wdCh1CiAgICAgICAgICAgICBhdXRv
bWF0aW9uU2Vzc2lvbi0+d2lsbFNob3dKYXZhU2NyaXB0RGlhbG9nKCp0aGlzKTsKICAgICB9CiAK
LSAgICBtX3VpQ2xpZW50LT5ydW5KYXZhU2NyaXB0UHJvbXB0KHRoaXMsIG1lc3NhZ2UsIGRlZmF1
bHRWYWx1ZSwgZnJhbWUsIHNlY3VyaXR5T3JpZ2luLCBbcmVwbHldKGNvbnN0IFN0cmluZyYgcmVz
dWx0KSB7IHJlcGx5LT5zZW5kKHJlc3VsdCk7IH0pOworICAgIG1fdWlDbGllbnQtPnJ1bkphdmFT
Y3JpcHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBmcmFtZSwgc2VjdXJpdHlP
cmlnaW4sIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXShjb25zdCBTdHJpbmcmIHJlc3VsdCkgewor
ICAgICAgICByZXBseS0+c2VuZChyZXN1bHQpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkBAIC00MDUxLDcgKzQwNTMs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yCiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
CiB7Ci0gICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKHRoaXMsIHRvb2xiYXJz
QXJlVmlzaWJsZSk7CisgICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKCp0aGlz
LCB0b29sYmFyc0FyZVZpc2libGUpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0VG9vbGJh
cnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRUb29sYmFyc0FyZVZp
c2libGU6OkRlbGF5ZWRSZXBseT4mJiByZXBseSkKQEAgLTQwNjMsNTIgKzQwNjUsNjUgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmdldFRvb2xiYXJzQXJlVmlzaWJsZQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91
aUNsaWVudC0+c2V0TWVudUJhcklzVmlzaWJsZSh0aGlzLCBtZW51QmFySXNWaXNpYmxlKTsKKyAg
ICBtX3VpQ2xpZW50LT5zZXRNZW51QmFySXNWaXNpYmxlKCp0aGlzLCBtZW51QmFySXNWaXNpYmxl
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zpc2libGUoYm9vbCYgbWVu
dUJhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRNZW51QmFySXNWaXNpYmxlKFJl
ZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRNZW51QmFySXNWaXNpYmxlOjpEZWxheWVkUmVw
bHk+JiYgcmVwbHkpCiB7Ci0gICAgbWVudUJhcklzVmlzaWJsZSA9IG1fdWlDbGllbnQtPm1lbnVC
YXJJc1Zpc2libGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+bWVudUJhcklzVmlzaWJsZSgqdGhp
cywgW3JlcGx5ID0gV1RGTW92ZShyZXBseSldIChib29sIHZpc2libGUpIHsKKyAgICAgICAgcmVw
bHktPnNlbmQodmlzaWJsZSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRT
dGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91aUNs
aWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKHRoaXMsIHN0YXR1c0JhcklzVmlzaWJsZSk7Cisg
ICAgbV91aUNsaWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKCp0aGlzLCBzdGF0dXNCYXJJc1Zp
c2libGUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNpYmxlKGJv
b2wmIHN0YXR1c0JhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRTdGF0dXNCYXJJ
c1Zpc2libGUoUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFN0YXR1c0JhcklzVmlzaWJs
ZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHN0YXR1c0JhcklzVmlzaWJsZSA9IG1f
dWlDbGllbnQtPnN0YXR1c0JhcklzVmlzaWJsZSh0aGlzKTsKKyAgICBtX3VpQ2xpZW50LT5zdGF0
dXNCYXJJc1Zpc2libGUoKnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCB2aXNp
YmxlKSB7CisgICAgICAgIHJlcGx5LT5zZW5kKHZpc2libGUpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSkKIHsKLSAgICBt
X3VpQ2xpZW50LT5zZXRJc1Jlc2l6YWJsZSh0aGlzLCBpc1Jlc2l6YWJsZSk7CisgICAgbV91aUNs
aWVudC0+c2V0SXNSZXNpemFibGUoKnRoaXMsIGlzUmVzaXphYmxlKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmdldElzUmVzaXphYmxlKGJvb2wmIGlzUmVzaXphYmxlKQordm9pZCBXZWJQYWdl
UHJveHk6OmdldElzUmVzaXphYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRJc1Jl
c2l6YWJsZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIGlzUmVzaXphYmxlID0gbV91
aUNsaWVudC0+aXNSZXNpemFibGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+aXNSZXNpemFibGUo
KnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCByZXNpemFibGUpIHsKKyAgICAg
ICAgcmVwbHktPnNlbmQocmVzaXphYmxlKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFdpbmRvd0ZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCiB7Ci0g
ICAgbV91aUNsaWVudC0+c2V0V2luZG93RnJhbWUodGhpcywgbV9wYWdlQ2xpZW50LmNvbnZlcnRU
b0RldmljZVNwYWNlKG5ld1dpbmRvd0ZyYW1lKSk7CisgICAgbV91aUNsaWVudC0+c2V0V2luZG93
RnJhbWUoKnRoaXMsIG1fcGFnZUNsaWVudC5jb252ZXJ0VG9EZXZpY2VTcGFjZShuZXdXaW5kb3dG
cmFtZSkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2luZG93RnJhbWUoRmxvYXRSZWN0
JiBuZXdXaW5kb3dGcmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZShSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0V2luZG93RnJhbWU6OkRlbGF5ZWRSZXBseT4mJiBy
ZXBseSkKIHsKLSAgICBuZXdXaW5kb3dGcmFtZSA9IG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2Vy
U3BhY2UobV91aUNsaWVudC0+d2luZG93RnJhbWUodGhpcykpOworICAgIG1fdWlDbGllbnQtPndp
bmRvd0ZyYW1lKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBy
ZXBseSA9IFdURk1vdmUocmVwbHkpXSAoRmxvYXRSZWN0IGZyYW1lKSB7CisgICAgICAgIHJlcGx5
LT5zZW5kKG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2VyU3BhY2UoZnJhbWUpKTsKKyAgICB9KTsK
IH0KLSAgICAKLXZvaWQgV2ViUGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBv
aW50JiBzY3JlZW5Qb2ludCwgSW50UG9pbnQmIHdpbmRvd1BvaW50KQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIoRnVuY3Rpb248dm9pZChG
bG9hdFJlY3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fdWlDbGllbnQtPndpbmRv
d0ZyYW1lKCp0aGlzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBzY3JlZW5Qb2ludCwg
UmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBs
eT4mJiByZXBseSkKIHsKLSAgICB3aW5kb3dQb2ludCA9IG1fcGFnZUNsaWVudC5zY3JlZW5Ub1Jv
b3RWaWV3KHNjcmVlblBvaW50KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQuc2NyZWVu
VG9Sb290VmlldyhzY3JlZW5Qb2ludCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlUHJveHk6OnJv
b3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgdmlld1JlY3QsIEludFJlY3QmIHJlc3VsdCkK
K3ZvaWQgV2ViUGFnZVByb3h5Ojpyb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHZpZXdS
ZWN0LCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXll
ZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHJlc3VsdCA9IG1fcGFnZUNsaWVudC5yb290Vmlld1Rv
U2NyZWVuKHZpZXdSZWN0KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQucm9vdFZpZXdU
b1NjcmVlbih2aWV3UmVjdCkpOwogfQogICAgIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTQxOTQs
NyArNDIwOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmludEZyYW1lKHVpbnQ2NF90IGYKICAg
ICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJhbWVJRCk7CiAg
ICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CiAKLSAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKHRo
aXMsIGZyYW1lKTsKKyAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKCp0aGlzLCAqZnJhbWUpOwog
CiAgICAgZW5kUHJpbnRpbmcoKTsgLy8gU2VuZCBhIG1lc3NhZ2Ugc3luY2hyb25vdXNseSB3aGls
ZSBtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uIGlzIHN0aWxsIHRydWUuCiAgICAgbV9p
c1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbiA9IGZhbHNlOwpAQCAtNTkwMSwzMiArNTkxNiwz
MiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRGVzdHJveU5vdGlmaWNhdGlvCiAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpLT5kaWREZXN0cm95Tm90aWZpY2F0aW9uKHRoaXMsIG5vdGlmaWNhdGlvbklEKTsKIH0KIAot
ZmxvYXQgV2ViUGFnZVByb3h5OjpoZWFkZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitm
bG9hdCBXZWJQYWdlUHJveHk6OmhlYWRlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsK
LSAgICBpZiAoZnJhbWUtPmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1l
LmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX3VpQ2xpZW50LT5oZWFkZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3Vp
Q2xpZW50LT5oZWFkZXJIZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotZmxvYXQgV2ViUGFnZVBy
b3h5Ojpmb290ZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitmbG9hdCBXZWJQYWdlUHJv
eHk6OmZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsKLSAgICBpZiAoZnJhbWUt
PmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1lLmlzRGlzcGxheWluZ1BE
RkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3VpQ2xpZW50LT5m
b290ZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3VpQ2xpZW50LT5mb290ZXJI
ZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdIZWFkZXIo
V2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmIGZyYW1lLCBGbG9hdFJlY3QmJiByZWN0
KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKKyAgICBpZiAo
ZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
dWlDbGllbnQtPmRyYXdIZWFkZXIodGhpcywgZnJhbWUsIHJlY3QpOworICAgIG1fdWlDbGllbnQt
PmRyYXdIZWFkZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJlY3QpKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmRyYXdGb290ZXIoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmIGZy
YW1lLCBGbG9hdFJlY3QmJiByZWN0KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERG
RG9jdW1lbnQoKSkKKyAgICBpZiAoZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIodGhpcywgZnJhbWUsIHJl
Y3QpOworICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJl
Y3QpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJ1bk1vZGFsKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODA4LDEw
ICs4MDgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGNv
bnN0IFN0cmluZyYsIGJvb2wsIFdURjo6RnVuY3Rpb248dm9pZCAoQVBJOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqLCBib29sIGhhZEV4Y2VwdGlvbiwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0
YWlscyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pOwogICAgIHZv
aWQgZm9yY2VSZXBhaW50KFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiYpOwogCi0gICAgZmxvYXQgaGVh
ZGVySGVpZ2h0KFdlYkZyYW1lUHJveHkqKTsKLSAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSopOwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSYpOworICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5Jik7CisgICAg
dm9pZCBkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7Cisg
ICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBEaWN0aW9uYXJ5LgpAQCAtMTE2OCw3ICsx
MTY4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb2N1cyhib29sIGZvY3VzZWQpOwogICAg
IHZvaWQgc2V0V2luZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9p
ZCBnZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGdldFdpbmRv
d0ZyYW1lKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZTo6RGVsYXll
ZFJlcGx5PiYmKTsKKyAgICB2b2lkIGdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVy
KEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RmxvYXRSZWN0KT4mJik7CiAKICAgICBib29sIGlzUmVz
b3VyY2VDYWNoaW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzb3VyY2VDYWNoaW5n
RGlzYWJsZWQ7IH0KICAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpOwpA
QCAtMTI5Niw3ICsxMjk3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAg
dm9pZCBydW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgUmVmPE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHJ1
bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6RGVsYXllZFJlcGx5PiYmKTsKLSAgICB2b2lkIHJ1bkph
dmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4pOworICAg
IHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6RGVsYXllZFJlcGx5
PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJIaXRUZXN0UmVzdWx0RGF0YSYmLCB1aW50MzJfdCBt
b2RpZmllcnMsIFVzZXJEYXRhJiYpOwogCkBAIC0xMzEwLDEzICsxMzExLDEzIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
OwogICAgIHZvaWQgZ2V0VG9vbGJhcnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRUb29sYmFyc0FyZVZpc2libGU6OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBz
ZXRNZW51QmFySXNWaXNpYmxlKGJvb2wgbWVudUJhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRN
ZW51QmFySXNWaXNpYmxlKGJvb2wmIG1lbnVCYXJJc1Zpc2libGUpOworICAgIHZvaWQgZ2V0TWVu
dUJhcklzVmlzaWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlz
aWJsZTo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShi
b29sIHN0YXR1c0JhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRTdGF0dXNCYXJJc1Zpc2libGUo
Ym9vbCYgc3RhdHVzQmFySXNWaXNpYmxlKTsKKyAgICB2b2lkIGdldFN0YXR1c0JhcklzVmlzaWJs
ZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlOjpEZWxh
eWVkUmVwbHk+JiYpOwogICAgIHZvaWQgc2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSk7
Ci0gICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShib29sJiBpc1Jlc2l6YWJsZSk7Ci0gICAgdm9pZCBz
Y3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgV2Vi
Q29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKLSAgICB2b2lkIHJvb3RWaWV3VG9TY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld1JlY3QsIFdlYkNvcmU6OkludFJlY3QmIHJlc3Vs
dCk7CisgICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
R2V0SXNSZXNpemFibGU6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9pZCBzY3JlZW5Ub1Jvb3RW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgUmVmPE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9p
ZCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdSZWN0LCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXllZFJlcGx5PiYm
KTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgdm9pZCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2NyZWVuUG9pbnQsIFdlYkNvcmU6OkludFBv
aW50JiB3aW5kb3dQb2ludCk7CiAgICAgdm9pZCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVl
bihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3UmVjdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVz
dWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE2
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2V0UmVuZGVyVHJlZVNpemUodWlu
dDY0X3QgdHJlZVNpemUpCiAgICAgU2V0VG9vbGJhcnNBcmVWaXNpYmxlKGJvb2wgdG9vbGJhcnNB
cmVWaXNpYmxlKQogICAgIEdldFRvb2xiYXJzQXJlVmlzaWJsZSgpIC0+IChib29sIHRvb2xiYXJz
QXJlVmlzaWJsZSkgRGVsYXllZAotICAgIFNldE1lbnVCYXJJc1Zpc2libGUoYm9vbCBtZW51QmFy
SXNWaXNpYmxlKTsKLSAgICBHZXRNZW51QmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgbWVudUJhcklz
VmlzaWJsZSk7CisgICAgU2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUp
CisgICAgR2V0TWVudUJhcklzVmlzaWJsZSgpIC0+IChib29sIG1lbnVCYXJJc1Zpc2libGUpIERl
bGF5ZWQKICAgICBTZXRTdGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUp
Ci0gICAgR2V0U3RhdHVzQmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgc3RhdHVzQmFySXNWaXNpYmxl
KQorICAgIEdldFN0YXR1c0JhcklzVmlzaWJsZSgpIC0+IChib29sIHN0YXR1c0JhcklzVmlzaWJs
ZSkgRGVsYXllZAogICAgIFNldElzUmVzaXphYmxlKGJvb2wgaXNSZXNpemFibGUpCi0gICAgR2V0
SXNSZXNpemFibGUoKSAtPiAoYm9vbCBpc1Jlc2l6YWJsZSkKKyAgICBHZXRJc1Jlc2l6YWJsZSgp
IC0+IChib29sIGlzUmVzaXphYmxlKSBEZWxheWVkCiAgICAgU2V0V2luZG93RnJhbWUoV2ViQ29y
ZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQotICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNv
cmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkKLSAgICBTY3JlZW5Ub1Jvb3RWaWV3KFdlYkNvcmU6
OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29yZTo6SW50UG9pbnQgd2luZG93UG9pbnQp
Ci0gICAgUm9vdFZpZXdUb1NjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3Jl
OjpJbnRSZWN0IHNjcmVlbkZyYW1lKQorICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6
OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgRGVsYXllZAorICAgIFNjcmVlblRvUm9vdFZpZXcoV2Vi
Q29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQ
b2ludCkgRGVsYXllZAorICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0
KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgRGVsYXllZAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgU2hvd1ZhbGlkYXRpb25NZXNzYWdlKFdlYkNvcmU6OkludFJlY3QgYW5j
aG9yUmVjdCwgU3RyaW5nIG1lc3NhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAkocmV2aXNpb24gMjIxNzcxKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE2ICs5NywxNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0
OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQmKSB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCB0b29sYmFyc0FyZVZpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRp
b25IYW5kbGVyKHRydWUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJs
ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGJvb2wpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBtZW51
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
Ym9vbCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXZWJLaXQ6Oldl
YlBhZ2VQcm94eSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVz
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgYm9vbCkgeyB9Ci0gICAgdmlydHVh
bCBib29sIGlzUmVzaXphYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSos
IGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV2ViS2l0
OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWVudUJhcklzVmlz
aWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TWVudUJhcklzVmlzaWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRpb25I
YW5kbGVyKHRydWUpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpc1Jlc2l6
YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SXNSZXNpemFibGUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IHdpbmRvd0ZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gV2ViQ29yZTo6Rmxv
YXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93RnJhbWUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgd2luZG93RnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsgfQogCiAgICAgdmlydHVhbCBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJ1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5n
JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiwgRnVuY3Rpb248dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7IH0KQEAgLTEzMCwxMSArMTMwLDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qo
V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBTZWN1cml0eU9yaWdpbiosIFdlYktpdDo6Tm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QqKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gUHJpbnRp
bmcuCi0gICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkq
LCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBmbG9h
dCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpX
ZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zvb3RlcihXZWJLaXQ6OldlYlBhZ2VQ
cm94eSosIFdlYktpdDo6V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmludEZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
V2ViS2l0OjpXZWJGcmFtZVByb3h5KikgeyB9CisgICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWln
aHQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBmbG9hdCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2
b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb290
ZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBXZWJDb3Jl
OjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHByaW50RnJhbWUoV2ViS2l0OjpX
ZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJ1bk1vZGFsKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MzksNjkgKzE4MzksNjkgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBh
ZwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobV9jbGllbnQudG9vbGJhcnNBcmVWaXNp
YmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2Us
IGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUo
V2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmICghbV9jbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0
b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAg
ICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUs
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5KiBwYWdlKSBmaW5hbAorICAgICAgICB2b2lkIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50Lm1lbnVCYXJJc1Zpc2libGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubWVudUJhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2NsaWVu
dC5tZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCisgICAgICAgIHZvaWQgc2V0TWVudUJh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldE1lbnVCYXJJc1Zp
c2libGUodG9BUEkocGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgICAgICBtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgdmlz
aWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIGJv
b2wgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSogcGFnZSkgZmluYWwKKyAgICAgICAg
dm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIW1fY2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5zdGF0dXNCYXJJc1Zpc2libGUo
dG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobV9jbGllbnQuc3RhdHVzQmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN0YXR1c0Jh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAg
ICAgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZp
c2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuc2V0U3Rh
dHVzQmFySXNWaXNpYmxlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1f
Y2xpZW50LnNldFN0YXR1c0JhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNldFN0YXR1c0Jhcklz
VmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgICAgIH0KIAotICAgICAgICBib29sIGlzUmVzaXphYmxlKFdlYlBhZ2VQcm94eSogcGFn
ZSkgZmluYWwKKyAgICAgICAgdm9pZCBpc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIEZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaXNSZXNpemFibGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaXNSZXNpemFibGUodG9B
UEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIobV9jbGllbnQuaXNSZXNpemFibGUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SXNSZXNpemFibGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHJlc2l6YWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRJc1Jl
c2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgcmVzaXphYmxlKSBmaW5hbAogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNldElzUmVzaXphYmxlKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldElzUmVzaXphYmxlKHRvQVBJ
KHBhZ2UpLCByZXNpemFibGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAg
ICBtX2NsaWVudC5zZXRJc1Jlc2l6YWJsZSh0b0FQSSgmcGFnZSksIHJlc2l6YWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0V2luZG93
RnJhbWUoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lKSBmaW5hbAor
ICAgICAgICB2b2lkIHNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgRmxv
YXRSZWN0JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVu
dC5zZXRXaW5kb3dGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
IG1fY2xpZW50LnNldFdpbmRvd0ZyYW1lKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5zZXRXaW5kb3dGcmFt
ZSh0b0FQSSgmcGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0UmVjdCB3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkq
IHBhZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5JiBwYWdl
LCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZ2V0V2luZG93RnJh
bWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgICAgICAgICByZXR1cm4gdG9G
bG9hdFJlY3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkocGFnZSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbykpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodG9GbG9hdFJl
Y3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbCgpIGNvbnN0IGZpbmFsCkBAIC0xOTkwLDQ0ICsxOTkwLDQ0IEBAIHZvaWQg
V0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFByaW50aW5nLgotICAgICAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViUGFnZVByb3h5KiBw
YWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkgZmluYWwKKyAgICAgICAgZmxvYXQgaGVhZGVySGVp
Z2h0KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUpIGZpbmFsCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaGVhZGVySGVpZ2h0KQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVp
Z2h0KHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVpZ2h0KHRvQVBJKCZwYWdlKSwg
dG9BUEkoJmZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJv
eHkqIGZyYW1lKSBmaW5hbAorICAgICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5
JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5mb290ZXJIZWlnaHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkocGFnZSks
IHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkoJnBhZ2UpLCB0b0FQSSgmZnJhbWUpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBkcmF3
SGVhZGVyKFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkgZmluYWwKKyAgICAgICAgdm9pZCBkcmF3SGVhZGVyKFdl
YlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIFdlYkNvcmU6OkZsb2F0UmVj
dCYmIHJlY3QpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZHJh
d0hlYWRlcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1fY2xpZW50
LmRyYXdIZWFkZXIodG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5kcmF3SGVhZGVyKHRv
QVBJKCZwYWdlKSwgdG9BUEkoJmZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVBy
b3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiByZWN0KSBmaW5hbAorICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVByb3h5JiBwYWdl
LCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgV2ViQ29yZTo6RmxvYXRSZWN0JiYgcmVjdCkgZmluYWwK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kcmF3Rm9vdGVyKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9jbGllbnQuZHJhd0Zvb3Rlcih0b0FQ
SShwYWdlKSwgdG9BUEkoZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LmRyYXdGb290ZXIodG9BUEkoJnBhZ2UpLCB0b0FQ
SSgmZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZvaWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZy
YW1lUHJveHkqIGZyYW1lKSBmaW5hbAorICAgICAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVBy
b3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFtX2NsaWVudC5wcmludEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgbV9jbGllbnQucHJpbnRGcmFtZSh0b0FQSShwYWdlKSwgdG9BUEkoZnJh
bWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQucHJp
bnRGcmFtZSh0b0FQSSgmcGFnZSksIHRvQVBJKCZmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bk1vZGFsKCkgY29uc3QgZmlu
YWwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRVSUNsaWVudC5jcHAJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMjgg
KzUzLDI4IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdlYmtpdFdlYlZp
ZXdDcmVhdGVOZXdQYWdlKG1fd2ViVmlldywgd2luZG93RmVhdHVyZXMsICZuYXZpZ2F0aW9uQWN0
aW9uKSk7CiAgICAgfQogCi0gICAgdm9pZCBzaG93UGFnZShXZWJQYWdlUHJveHkqKSBvdmVycmlk
ZQorICAgIHZvaWQgc2hvd1BhZ2UoV2ViUGFnZVByb3h5KikgZmluYWwKICAgICB7CiAgICAgICAg
IHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UobV93ZWJWaWV3KTsKICAgICB9CiAKLSAgICB2
b2lkIGNsb3NlKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisgICAgdm9pZCBjbG9zZShXZWJQYWdl
UHJveHkqKSBmaW5hbAogICAgIHsKICAgICAgICAgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShtX3dl
YlZpZXcpOwogICAgIH0KIAotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdlYlBhZ2VQcm94
eSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpIG92ZXJyaWRlCisgICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV2ViUGFnZVByb3h5Kiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBm
aW5hbAogICAgIHsKICAgICAgICAgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChtX3dl
YlZpZXcsIG1lc3NhZ2UudXRmOCgpKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAg
ICB9CiAKLSAgICB2b2lkIHJ1bkphdmFTY3JpcHRDb25maXJtKFdlYlBhZ2VQcm94eSosIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYsIEZ1bmN0aW9uPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBv
dmVycmlkZQorICAgIHZvaWQgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViUGFnZVByb3h5KiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
ZmluYWwKICAgICB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdlYmtpdFdlYlZpZXdSdW5K
YXZhU2NyaXB0Q29uZmlybShtX3dlYlZpZXcsIG1lc3NhZ2UudXRmOCgpKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBydW5KYXZhU2NyaXB0UHJvbXB0KFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdlYkZyYW1lUHJveHkqLCBjb25z
dCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJp
bmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKKyAgICB2b2lkIHJ1bkphdmFTY3Jp
cHRQcm9tcHQoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYsIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpIGZpbmFsCiAgICAgewogICAgICAgICBDU3RyaW5nIHJlc3VsdCA9IHdlYmtpdFdlYlZp
ZXdSdW5KYXZhU2NyaXB0UHJvbXB0KG1fd2ViVmlldywgbWVzc2FnZS51dGY4KCksIGRlZmF1bHRW
YWx1ZS51dGY4KCkpOwogICAgICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKSB7CkBAIC04NSw5ICs4
NSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0cmluZzo6ZnJvbVVU
RjgocmVzdWx0LmRhdGEoKSkpOwogICAgIH0KIAotICAgIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wg
Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgdm9pZCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2ViUGFnZVByb3h5
KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpIG92ZXJyaWRlCisgICAgdm9pZCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2Vi
UGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdl
YmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0QmVmb3JlVW5sb2FkQ29uZmlybShtX3dlYlZpZXcsIG1l
c3NhZ2UudXRmOCgpKSk7CiAgICAgfQpAQCAtOTcsNDcgKzk3LDQ3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQobV93ZWJWaWV3LCBkYXRhLCBtb2Rp
ZmllcnMpOwogICAgIH0KIAotICAgIHZvaWQgdG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94
eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisg
ICAgdm9pZCB0b29sYmFyc0FyZVZpc2libGUoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdG9vbGJhcl92aXNpYmxlKHdl
YmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wgdmlz
aWJsZSkgb3ZlcnJpZGUKKyAgICB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJv
eHkmLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXaW5kb3dQcm9w
ZXJ0aWVzU2V0VG9vbGJhclZpc2libGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVy
dGllcyhtX3dlYlZpZXcpLCB2aXNpYmxlKTsKICAgICB9CiAKLSAgICBib29sIG1lbnVCYXJJc1Zp
c2libGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIG1lbnVCYXJJc1Zpc2libGUo
V2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
ZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0
X21lbnViYXJfdmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1f
d2ViVmlldykpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3ZWJraXRfd2luZG93X3Byb3Bl
cnRpZXNfZ2V0X21lbnViYXJfdmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKG1fd2ViVmlldykpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE1lbnVCYXJJc1Zpc2li
bGUoV2ViUGFnZVByb3h5KiwgYm9vbCB2aXNpYmxlKSBvdmVycmlkZQorICAgIHZvaWQgc2V0TWVu
dUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkmLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgewog
ICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0VG9vbGJhclZpc2libGUod2Via2l0X3dl
Yl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcpLCB2aXNpYmxlKTsKICAgICB9
CiAKLSAgICBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXZWJQYWdlUHJveHkqKSBvdmVycmlkZQor
ICAgIHZvaWQgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgewotICAgICAgICByZXR1cm4g
d2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNiYXJfdmlzaWJsZSh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldykpOworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcih3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxl
KHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSkpOwogICAg
IH0KIAotICAgIHZvaWQgc2V0U3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wg
dmlzaWJsZSkgb3ZlcnJpZGUKKyAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShXZWJQYWdl
UHJveHkmLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXaW5kb3dQ
cm9wZXJ0aWVzU2V0U3RhdHVzYmFyVmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19w
cm9wZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOwogICAgIH0KIAotICAgIGJvb2wgaXNSZXNp
emFibGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIGlzUmVzaXphYmxlKFdlYlBh
Z2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFs
CiAgICAgewotICAgICAgICByZXR1cm4gd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9yZXNp
emFibGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcpKTsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9y
ZXNpemFibGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcp
KSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkqLCBib29s
IHJlc2l6YWJsZSkgb3ZlcnJpZGUKKyAgICB2b2lkIHNldElzUmVzaXphYmxlKFdlYlBhZ2VQcm94
eSYsIGJvb2wgcmVzaXphYmxlKSBmaW5hbAogICAgIHsKICAgICAgICAgd2Via2l0V2luZG93UHJv
cGVydGllc1NldFJlc2l6YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVz
KG1fd2ViVmlldyksIHJlc2l6YWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRXaW5kb3dGcmFt
ZShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZyYW1lKSBvdmVycmlk
ZQorICAgIHZvaWQgc2V0V2luZG93RnJhbWUoV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBmcmFtZSkgZmluYWwKICAgICB7CiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAg
ICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSBXZWJDb3JlOjpJbnRSZWN0KGZyYW1lKTsKQEAgLTE1
Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogCi0gICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisgICAgdm9pZCB3aW5k
b3dGcmFtZShXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgewogI2lmIFBMQVRGT1JNKEdUSykKICAg
ICAgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0geyAwLCAwLCAwLCAwIH07CkBAIC0xNjEsMjEg
KzE2MSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZ3RrX3dpbmRvd19nZXRfcG9zaXRpb24o
R1RLX1dJTkRPVyh3aW5kb3cpLCAmZ2VvbWV0cnkueCwgJmdlb21ldHJ5LnkpOwogICAgICAgICAg
ICAgZ3RrX3dpbmRvd19nZXRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksICZnZW9tZXRyeS53aWR0
aCwgJmdlb21ldHJ5LmhlaWdodCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OkZsb2F0UmVjdChnZW9tZXRyeSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6
OkZsb2F0UmVjdChnZW9tZXRyeSkpOwogI2VsaWYgUExBVEZPUk0oV1BFKQogICAgICAgICAvLyBG
SVhNRTogSSBndWVzcyB0aGlzIGlzIGFjdHVhbGx5IHRoZSB2aWV3IHNpemUgaW4gV1BFLiBXZSBu
ZWVkIG1vcmUgcmVmYWN0b3JpbmcgaGVyZS4KLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUEk6OlNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZyBs
b25nIC8qY3VycmVudFF1b3RhKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmN1cnJlbnRPcmlnaW5V
c2FnZSovLCB1bnNpZ25lZCBsb25nIGxvbmcgLypjdXJyZW50RGF0YWJhc2VVc2FnZSovLCB1bnNp
Z25lZCBsb25nIGxvbmcgLypleHBlY3RlZFVzYWdlKi8sIEZ1bmN0aW9uPHZvaWQgKHVuc2lnbmVk
IGxvbmcgbG9uZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisgICAgdm9pZCBleGNl
ZWRlZERhdGFiYXNlUXVvdGEoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIEFQSTo6U2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25n
IGxvbmcgLypjdXJyZW50UXVvdGEqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qY3VycmVudE9yaWdp
blVzYWdlKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmN1cnJlbnREYXRhYmFzZVVzYWdlKi8sIHVu
c2lnbmVkIGxvbmcgbG9uZyAvKmV4cGVjdGVkVXNhZ2UqLywgRnVuY3Rpb248dm9pZCh1bnNpZ25l
ZCBsb25nIGxvbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsKICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAq
IDEyMDQ7IC8vIDUgTUIKICAgICAgICAgLy8gRklYTUU6IFByb3ZpZGUgQVBJIGZvciB0aGlzLgog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkZWZhdWx0UXVvdGEpOwogICAgIH0KIAotICAgIGJv
b2wgcnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVyKSBvdmVycmlk
ZQorICAgIGJvb2wgcnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRl
cnMqIHBhcmFtZXRlcnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVy
KSBmaW5hbAogICAgIHsKICAgICAgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+
IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFt
ZXRlcnMsIGxpc3RlbmVyKSk7CiAgICAgICAgIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJl
cXVlc3QobV93ZWJWaWV3LCByZXF1ZXN0LmdldCgpKTsKQEAgLTE4OSwxNCArMTg5LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGJvb2wgZGVjaWRl
UG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgV2ViRnJh
bWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBB
UEk6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdFByb3h5JiBwZXJtaXNzaW9uUmVxdWVzdCkgb3ZlcnJpZGUKKyAgICBib29s
IGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYs
IFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFEb2N1bWVudE9y
aWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eSYgcGVybWlzc2lvblJlcXVlc3QpIGZpbmFsCiAgICAg
ewogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0PiB1c2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdENyZWF0ZShwZXJtaXNzaW9uUmVxdWVzdCwgdXNlck1lZGlhRG9jdW1lbnRPcmln
aW4sIHRvcExldmVsRG9jdW1lbnRPcmlnaW4pKTsKICAgICAgICAgd2Via2l0V2ViVmlld01ha2VQ
ZXJtaXNzaW9uUmVxdWVzdChtX3dlYlZpZXcsIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QodXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3QuZ2V0KCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgYm9vbCBkZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdChXZWJQYWdlUHJveHkqLCBBUEk6OlNlY3VyaXR5T3JpZ2luKiwgTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3QqIHBlcm1pc3Npb25SZXF1ZXN0KSBvdmVycmlkZQorICAgIGJvb2wgZGVj
aWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5Kiwg
QVBJOjpTZWN1cml0eU9yaWdpbiosIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KiBwZXJt
aXNzaW9uUmVxdWVzdCkgZmluYWwKICAgICB7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0Tm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3Q+IG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0g
YWRvcHRHUmVmKHdlYmtpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKHBlcm1p
c3Npb25SZXF1ZXN0KSk7CiAgICAgICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVl
c3QobV93ZWJWaWV3LCBXRUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKG5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0LmdldCgpKSk7CkBAIC0yMDQsMTUgKzIwNCwxNSBAQCBwcml2YXRlOgogICAg
IH0KIAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVByb3h5
KiwgV2ViRnJhbWVQcm94eSogZnJhbWUpIG92ZXJyaWRlCisgICAgdm9pZCBwcmludEZyYW1lKFdl
YlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lKSBmaW5hbAogICAgIHsKLSAgICAgICAg
d2Via2l0V2ViVmlld1ByaW50RnJhbWUobV93ZWJWaWV3LCBmcmFtZSk7CisgICAgICAgIHdlYmtp
dFdlYlZpZXdQcmludEZyYW1lKG1fd2ViVmlldywgJmZyYW1lKTsKICAgICB9CiAjZW5kaWYKIAot
ICAgIGJvb2wgY2FuUnVuTW9kYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgYm9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IHZvaWQgcnVuTW9kYWwoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIHJ1bk1vZGFs
KFdlYlBhZ2VQcm94eSopIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXZWJWaWV3UnVuQXNN
b2RhbChtX3dlYlZpZXcpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCShyZXZpc2lvbiAyMjE3NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw4IEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RmV0Y2hlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3BlbiBicm93c2luZyBjb250ZXh0cyAod2lu
ZG93cyBhbmQgdGFicykgaW4gdGhlIGF1dG9tYXRpb24gc2Vzc2lvbi4iLAogICAgICAgICAgICAg
InJldHVybnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb250ZXh0cyIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJCcm93c2luZ0NvbnRleHQiIH0sICJkZXNj
cmlwdGlvbiI6ICJBbGwga25vd24gYnJvd3NpbmcgY29udGV4dHMgYXZhaWxhYmxlIHRvIHRoZSBz
ZXNzaW9uLiIgfQotICAgICAgICAgICAgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJh
c3luYyI6IHRydWUKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAi
Z2V0QnJvd3NpbmdDb250ZXh0IiwKQEAgLTIzNSw3ICsyMzYsOCBAQAogICAgICAgICAgICAgXSwK
ICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29u
dGV4dCIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dCIsICJkZXNjcmlwdGlvbiI6ICJUaGUgYnJv
d3NpbmcgY29udGV4dCBhdmFpbGFibGUgdG8gdGhlIHNlc3Npb24uIiB9Ci0gICAgICAgICAgICBd
CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAog
ICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJjcmVhdGVCcm93c2luZ0NvbnRleHQiLApA
QCAtMjY1LDcgKzI2Nyw4IEBACiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0
byBiZSByZXNpemVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNpemUiLCAiJHJl
ZiI6ICJTaXplIiwgImRlc2NyaXB0aW9uIjogIlRoZSBuZXcgc2l6ZSBmb3IgdGhlIGJyb3dzaW5n
IGNvbnRleHQncyB3aW5kb3cuIiB9Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAg
ICAibmFtZSI6ICJtb3ZlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiLApAQCAtMjczLDcgKzI3Niw4
IEBACiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRsZSIsICJkZXNjcmlwdGlv
biI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0byBiZSBtb3ZlZC4iIH0s
CiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvcmlnaW4iLCAiJHJlZiI6ICJQb2ludCIsICJk
ZXNjcmlwdGlvbiI6ICJUaGUgbmV3IG9yaWdpbiBmb3IgdGhlIGJyb3dzaW5nIGNvbnRleHQncyB3
aW5kb3cuIFRoZSBwb3NpdGlvbiBpcyBpbnRlcnByZXRlZCBpbiBzY3JlZW4gY29vcmRpbmF0ZSBz
cGFjZSwgcmVsYXRpdmUgdG8gdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4uIiB9
Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1
ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJuYXZpZ2F0ZUJy
b3dzaW5nQ29udGV4dCIsCkBAIC0zNjUsNyArMzY5LDggQEAKICAgICAgICAgICAgIF0sCiAgICAg
ICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvc2l0aW9u
IiwgIiRyZWYiOiAiUG9pbnQiLCAiZGVzY3JpcHRpb24iOiAiVGhlIHVwZGF0ZWQgcG9zaXRpb24g
b2YgdGhlIG1vdXNlIGN1cnNvciwgc3BlY2lmaWVkIGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzLiIg
fQotICAgICAgICAgICAgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJhc3luYyI6IHRy
dWUKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicGVyZm9ybUtl
eWJvYXJkSW50ZXJhY3Rpb25zIiwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lv
biAyMjE3NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDU2ICsyMDcsNjggQEAgU3Ry
aW5nIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpoYW5kbGVGb3JXZQogICAgIHJldHVybiBoYW5kbGVG
b3JXZWJGcmFtZUlEKHdlYkZyYW1lUHJveHkuZnJhbWVJRCgpKTsKIH0KIAotUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4gV2ViQXV0b21hdGlv
blNlc3Npb246OmJ1aWxkQnJvd3NpbmdDb250ZXh0Rm9yUGFnZShXZWJQYWdlUHJveHkmIHBhZ2Up
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2Uo
V2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZTsKLSAgICBwYWdlLmdldFdpbmRv
d0ZyYW1lKHdpbmRvd0ZyYW1lKTsKLQotICAgIGF1dG8gb3JpZ2luT2JqZWN0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRYKHdp
bmRvd0ZyYW1lLngoKSkKLSAgICAgICAgLnNldFkod2luZG93RnJhbWUueSgpKQotICAgICAgICAu
cmVsZWFzZSgpOwotCi0gICAgYXV0byBzaXplT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6U2l6ZTo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFdpZHRoKHdpbmRvd0ZyYW1l
LndpZHRoKCkpCi0gICAgICAgIC5zZXRIZWlnaHQod2luZG93RnJhbWUuaGVpZ2h0KCkpCi0gICAg
ICAgIC5yZWxlYXNlKCk7Ci0KLSAgICBTdHJpbmcgaGFuZGxlID0gaGFuZGxlRm9yV2ViUGFnZVBy
b3h5KHBhZ2UpOwotCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dDo6Y3JlYXRlKCkKLSAgICAgICAgLnNldEhhbmRsZShoYW5kbGUpCi0g
ICAgICAgIC5zZXRBY3RpdmUobV9hY3RpdmVCcm93c2luZ0NvbnRleHRIYW5kbGUgPT0gaGFuZGxl
KQotICAgICAgICAuc2V0VXJsKHBhZ2UucGFnZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpKQotICAg
ICAgICAuc2V0V2luZG93T3JpZ2luKFdURk1vdmUob3JpZ2luT2JqZWN0KSkKLSAgICAgICAgLnNl
dFdpbmRvd1NpemUoV1RGTW92ZShzaXplT2JqZWN0KSkKLSAgICAgICAgLnJlbGVhc2UoKTsKKyAg
ICBwYWdlLmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGFjdGl2ZVVSTCA9IHBhZ2UucGFnZUxvYWRTdGF0ZSgp
LmFjdGl2ZVVSTCgpLCBoYW5kbGUgPSBoYW5kbGVGb3JXZWJQYWdlUHJveHkocGFnZSksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFdlYkNvcmU6OkZsb2F0
UmVjdCB3aW5kb3dGcmFtZSkgeworICAgICAgICBhdXRvIG9yaWdpbk9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50OjpjcmVhdGUoKQorICAgICAgICAgICAgLnNl
dFgod2luZG93RnJhbWUueCgpKQorICAgICAgICAgICAgLnNldFkod2luZG93RnJhbWUueSgpKQor
ICAgICAgICAgICAgLnJlbGVhc2UoKTsKKworICAgICAgICBhdXRvIHNpemVPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTaXplOjpjcmVhdGUoKQorICAgICAgICAgICAg
LnNldFdpZHRoKHdpbmRvd0ZyYW1lLndpZHRoKCkpCisgICAgICAgICAgICAuc2V0SGVpZ2h0KHdp
bmRvd0ZyYW1lLmhlaWdodCgpKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKKworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHQ6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0SGFuZGxlKGhhbmRsZSkKKyAgICAg
ICAgICAgIC5zZXRBY3RpdmUobV9hY3RpdmVCcm93c2luZ0NvbnRleHRIYW5kbGUgPT0gaGFuZGxl
KQorICAgICAgICAgICAgLnNldFVybChhY3RpdmVVUkwpCisgICAgICAgICAgICAuc2V0V2luZG93
T3JpZ2luKFdURk1vdmUob3JpZ2luT2JqZWN0KSkKKyAgICAgICAgICAgIC5zZXRXaW5kb3dTaXpl
KFdURk1vdmUoc2l6ZU9iamVjdCkpCisgICAgICAgICAgICAucmVsZWFzZSgpKTsKKyAgICB9KTsK
IH0KIAogLy8gUGxhdGZvcm0taW5kZXBlbmRlbnQgQ29tbWFuZHMuCiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+PiYgY29udGV4dHMpCit2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXROZXh0Q29udGV4dChSZWY8V2ViQXV0b21hdGlvblNl
c3Npb24+JiYgcHJvdGVjdGVkVGhpcywgVmVjdG9yPFJlZjxXZWJQYWdlUHJveHk+PiYmIHBhZ2Vz
LCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pj4gY29udGV4dHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIGNv
bnRleHRzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pjo6Y3JlYXRlKCk7Ci0KKyAgICBpZiAocGFnZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKGNvbnRl
eHRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0byBwYWdlID0gcGFnZXMudGFr
ZUxhc3QoKTsKKyAgICBidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UocGFnZS5nZXQoKSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBwYWdlcyA9IFdURk1v
dmUocGFnZXMpLCBjb250ZXh0cyA9IFdURk1vdmUoY29udGV4dHMpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0PiYmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICBjb250ZXh0cy0+YWRkSXRl
bShXVEZNb3ZlKGNvbnRleHQpKTsKKyAgICAgICAgZ2V0TmV4dENvbnRleHQoV1RGTW92ZShwcm90
ZWN0ZWRUaGlzKSwgV1RGTW92ZShwYWdlcyksIFdURk1vdmUoY29udGV4dHMpLCBXVEZNb3ZlKGNh
bGxiYWNrKSk7CisgICAgfSk7Cit9CisgICAgCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpn
ZXRCcm93c2luZ0NvbnRleHRzKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBS
ZWY8R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYmIGNhbGxiYWNrKQoreworICAgIFZlY3Rv
cjxSZWY8V2ViUGFnZVByb3h5Pj4gcGFnZXM7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9w
cm9jZXNzUG9vbC0+cHJvY2Vzc2VzKCkpIHsKICAgICAgICAgZm9yIChhdXRvKiBwYWdlIDogcHJv
Y2Vzcy0+cGFnZXMoKSkgewogICAgICAgICAgICAgQVNTRVJUKHBhZ2UpOwogICAgICAgICAgICAg
aWYgKCFwYWdlLT5pc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24oKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgY29udGV4dHMtPmFkZEl0ZW0oYnVpbGRCcm93c2luZ0Nv
bnRleHRGb3JQYWdlKCpwYWdlKSk7CisgICAgICAgICAgICBwYWdlcy5hcHBlbmQoKnBhZ2UpOwog
ICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGdldE5leHRDb250ZXh0KG1ha2VSZWYoKnRoaXMp
LCBXVEZNb3ZlKHBhZ2VzKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pjo6Y3JlYXRlKCksIFdURk1vdmUo
Y2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdD
b250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGhhbmRsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dD4mIGNvbnRleHQpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRCcm93c2lu
Z0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgaGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKLSAgICBjb250ZXh0ID0gYnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdl
KCpwYWdlKTsKKyAgICBidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UoKnBhZ2UsIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXSAoUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkJyb3dzaW5nQ29udGV4dD4mJiBjb250ZXh0KSB7CisgICAgICAgIGNhbGxiYWNrLT5zZW5k
U3VjY2VzcyhXVEZNb3ZlKGNvbnRleHQpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBTdHJpbmcqIGhhbmRsZSkKQEAgLTMwMSw3ICszMTMsNyBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpzd2l0Y2hUb0Jyb3dzCiAgICAgcGFnZS0+cHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkZvY3VzRnJhbWUocGFnZS0+
cGFnZUlEKCksIGZyYW1lSUQudmFsdWUoKSksIDApOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpyZXNpemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JiBzaXplT2JqZWN0KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
cmVzaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgc2l6ZU9iamVjdCwgUmVmPFJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAgLTMyNCwyNyArMzM2LDI4IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd08KICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZyYW1lOwotICAgIHBhZ2UtPmdldFdpbmRvd0Zy
YW1lKG9yaWdpbmFsRnJhbWUpOworICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRp
b25IYW5kbGVyKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigq
cGFnZSksIHdpZHRoLCBoZWlnaHRdKFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZyYW1lKSBt
dXRhYmxlIHsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG5ld0ZyYW1lID0gV2ViQ29yZTo6
RmxvYXRSZWN0KG9yaWdpbmFsRnJhbWUubG9jYXRpb24oKSwgV2ViQ29yZTo6RmxvYXRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgaWYgKG5ld0ZyYW1lID09IG9yaWdpbmFsRnJhbWUpCisg
ICAgICAgICAgICByZXR1cm4gY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAKLSAgICBXZWJDb3Jl
OjpGbG9hdFJlY3QgbmV3RnJhbWUgPSBXZWJDb3JlOjpGbG9hdFJlY3Qob3JpZ2luYWxGcmFtZS5s
b2NhdGlvbigpLCBXZWJDb3JlOjpGbG9hdFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIGlmIChu
ZXdGcmFtZSA9PSBvcmlnaW5hbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwYWdlLT5z
ZXRXaW5kb3dGcmFtZShuZXdGcmFtZSk7CisgICAgICAgIHBhZ2UtPnNldFdpbmRvd0ZyYW1lKG5l
d0ZyYW1lKTsKIAotI2lmICFQTEFURk9STShHVEspCi0gICAgLy8gSWYgbm90aGluZyBjaGFuZ2Vk
IGF0IGFsbCwgaXQncyBwcm9iYWJseSBmYWlyIHRvIHJlcG9ydCB0aGF0IHNvbWV0aGluZyB3ZW50
IHdyb25nLgotICAgIC8vIChXZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgcmVxdWVzdGVkIGZyYW1l
IHNpemUgd2lsbCBiZSBob25vcmVkIGV4YWN0bHksIGhvd2V2ZXIuKQotICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCB1cGRhdGVkRnJhbWU7Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWUodXBkYXRlZEZy
YW1lKTsKLSAgICBpZiAob3JpZ2luYWxGcmFtZSA9PSB1cGRhdGVkRnJhbWUpCi0gICAgICAgIEZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUg
d2luZG93IHNpemUgd2FzIGV4cGVjdGVkIHRvIGhhdmUgY2hhbmdlZCwgYnV0IGRpZCBub3QuIik7
CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyNl
bHNlCisgICAgICAgIC8vIElmIG5vdGhpbmcgY2hhbmdlZCBhdCBhbGwsIGl0J3MgcHJvYmFibHkg
ZmFpciB0byByZXBvcnQgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4KKyAgICAgICAgLy8gKFdl
IGNhbid0IGFzc3VtZSB0aGF0IHRoZSByZXF1ZXN0ZWQgZnJhbWUgc2l6ZSB3aWxsIGJlIGhvbm9y
ZWQgZXhhY3RseSwgaG93ZXZlci4pCisgICAgICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENv
bXBsZXRpb25IYW5kbGVyKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBvcmlnaW5hbEZy
YW1lXShXZWJDb3JlOjpGbG9hdFJlY3QgdXBkYXRlZEZyYW1lKSB7CisgICAgICAgICAgICBpZiAo
b3JpZ2luYWxGcmFtZSA9PSB1cGRhdGVkRnJhbWUpCisgICAgICAgICAgICAgICAgY2FsbGJhY2st
PnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxT
KEludGVybmFsRXJyb3IsICJUaGUgd2luZG93IHNpemUgd2FzIGV4cGVjdGVkIHRvIGhhdmUgY2hh
bmdlZCwgYnV0IGRpZCBub3QuIikpOworICAgICAgICB9KTsKICNlbmRpZgorICAgIH0pOwogI2Vu
ZGlmCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBwb3NpdGlvbk9iamVj
dCkKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4
dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBwb3NpdGlvbk9iamVjdCwgUmVm
PE1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogI2lm
IFBMQVRGT1JNKElPUykKICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1l
bnRlZCk7CkBAIC0zNjgsMjMgKzM4MSwyOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpt
b3ZlV2luZG93T2ZCCiAgICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05v
dEZvdW5kKTsKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZyYW1lOwotICAgIHBh
Z2UtPmdldFdpbmRvd0ZyYW1lKG9yaWdpbmFsRnJhbWUpOworICAgIHBhZ2UtPmdldFdpbmRvd0Zy
YW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBw
YWdlID0gbWFrZVJlZigqcGFnZSksIHgsIHldKFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZy
YW1lKSBtdXRhYmxlIHsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBuZXdGcmFtZSA9IFdlYkNv
cmU6OkZsb2F0UmVjdChXZWJDb3JlOjpGbG9hdFBvaW50KHgsIHkpLCBvcmlnaW5hbEZyYW1lLnNp
emUoKSk7Ci0gICAgaWYgKG5ld0ZyYW1lID09IG9yaWdpbmFsRnJhbWUpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG5ld0ZyYW1lID0gV2ViQ29yZTo6RmxvYXRS
ZWN0KFdlYkNvcmU6OkZsb2F0UG9pbnQoeCwgeSksIG9yaWdpbmFsRnJhbWUuc2l6ZSgpKTsKKyAg
ICAgICAgaWYgKG5ld0ZyYW1lID09IG9yaWdpbmFsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4g
Y2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAKLSAgICBwYWdlLT5zZXRXaW5kb3dGcmFtZShuZXdG
cmFtZSk7CisgICAgICAgIHBhZ2UtPnNldFdpbmRvd0ZyYW1lKG5ld0ZyYW1lKTsKIAotI2lmICFQ
TEFURk9STShHVEspCi0gICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkIGF0IGFsbCwgaXQncyBwcm9i
YWJseSBmYWlyIHRvIHJlcG9ydCB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLgotICAgIC8vIChX
ZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgcmVxdWVzdGVkIGZyYW1lIHNpemUgd2lsbCBiZSBob25v
cmVkIGV4YWN0bHksIGhvd2V2ZXIuKQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB1cGRhdGVkRnJh
bWU7Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWUodXBkYXRlZEZyYW1lKTsKLSAgICBpZiAob3Jp
Z2luYWxGcmFtZSA9PSB1cGRhdGVkRnJhbWUpCi0gICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgd2luZG93IHBvc2l0aW9uIHdh
cyBleHBlY3RlZCB0byBoYXZlIGNoYW5nZWQsIGJ1dCBkaWQgbm90LiIpOworI2lmIFBMQVRGT1JN
KEdUSykKKyAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CisjZWxzZQorICAgICAgICAv
LyBJZiBub3RoaW5nIGNoYW5nZWQgYXQgYWxsLCBpdCdzIHByb2JhYmx5IGZhaXIgdG8gcmVwb3J0
IHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuCisgICAgICAgIC8vIChXZSBjYW4ndCBhc3N1bWUg
dGhhdCB0aGUgcmVxdWVzdGVkIGZyYW1lIHNpemUgd2lsbCBiZSBob25vcmVkIGV4YWN0bHksIGhv
d2V2ZXIuKQorICAgICAgICBwYWdlLT5nZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxl
cihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgb3JpZ2luYWxGcmFtZV0oV2ViQ29yZTo6
RmxvYXRSZWN0IHVwZGF0ZWRGcmFtZSkgeworICAgICAgICAgICAgaWYgKG9yaWdpbmFsRnJhbWUg
PT0gdXBkYXRlZEZyYW1lKQorICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShT
VFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9y
LCAiVGhlIHdpbmRvdyBwb3NpdGlvbiB3YXMgZXhwZWN0ZWQgdG8gaGF2ZSBjaGFuZ2VkLCBidXQg
ZGlkIG5vdC4iKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2FsbGJhY2st
PnNlbmRTdWNjZXNzKCk7CisgICAgICAgIH0pOwogI2VuZGlmCiAjZW5kaWYKKyAgICB9KTsKIH0K
IAogc3RhdGljIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
UGFnZUxvYWRTdHJhdGVneT4gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIoY29u
c3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpCkBAIC0xMjIxLDcgKzEy
MzksNyBAQCBzdGF0aWMgV2ViRXZlbnQ6Ok1vZGlmaWVycyBwcm90b2NvbE1vZGlmCiB9CiAjZW5k
aWYgLy8gVVNFKEFQUEtJVCkKIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1v
dXNlSW50ZXJhY3Rpb24oSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcmVxdWVz
dGVkUG9zaXRpb25PYmplY3QsIGNvbnN0IFN0cmluZyYgbW91c2VCdXR0b25TdHJpbmcsIGNvbnN0
IFN0cmluZyYgbW91c2VJbnRlcmFjdGlvblN0cmluZywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheSYga2V5TW9kaWZpZXJTdHJpbmdzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6UG9pbnQ+JiB1cGRhdGVkUG9zaXRpb25PYmplY3QpCit2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdCwgY29uc3QgU3RyaW5nJiBt
b3VzZUJ1dHRvblN0cmluZywgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBrZXlNb2RpZmllclN0cmluZ3MsIFJlZjxQ
ZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogI2lmICFVU0Uo
QVBQS0lUKSAmJiAhUExBVEZPUk0oR1RLKQogICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
KE5vdEltcGxlbWVudGVkKTsKQEAgLTEyMzgsNDEgKzEyNTYsNDEgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSQogICAgIGlmICghcmVxdWVzdGVkUG9zaXRpb25PYmpl
Y3QuZ2V0RG91YmxlKFdURjo6QVNDSUlMaXRlcmFsKCJ5IiksIHkpKQogICAgICAgICBGQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBh
cmFtZXRlciAneScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB3
aW5kb3dGcmFtZTsKLSAgICBwYWdlLT5nZXRXaW5kb3dGcmFtZSh3aW5kb3dGcmFtZSk7Ci0KLSAg
ICB4ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1lLnNpemUoKS53aWR0
aCgpKTsKLSAgICB5ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeSArIHBhZ2UtPnRvcENvbnRl
bnRJbnNldCgpKSwgd2luZG93RnJhbWUuc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIFdlYkNvcmU6
OkludFBvaW50IHZpZXdQb3NpdGlvbiA9IFdlYkNvcmU6OkludFBvaW50KHN0YXRpY19jYXN0PGlu
dD4oeCksIHN0YXRpY19jYXN0PGludD4oeSkpOwotCi0gICAgYXV0byBwYXJzZWRJbnRlcmFjdGlv
biA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFj
dGlvbj4obW91c2VJbnRlcmFjdGlvblN0cmluZyk7Ci0gICAgaWYgKCFwYXJzZWRJbnRlcmFjdGlv
bikKLSAgICAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxp
ZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2ludGVyYWN0aW9uJyBpcyBpbnZhbGlkLiIpOwot
Ci0gICAgYXV0byBwYXJzZWRCdXR0b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246Ok1vdXNlQnV0dG9uPihtb3VzZUJ1dHRvblN0cmluZyk7Ci0gICAgaWYgKCFwYXJz
ZWRCdXR0b24pCi0gICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdidXR0b24nIGlzIGludmFsaWQuIik7
Ci0KICAgICBXZWJFdmVudDo6TW9kaWZpZXJzIGtleU1vZGlmaWVycyA9IChXZWJFdmVudDo6TW9k
aWZpZXJzKTA7CiAgICAgZm9yIChhdXRvIGl0ID0ga2V5TW9kaWZpZXJTdHJpbmdzLmJlZ2luKCk7
IGl0ICE9IGtleU1vZGlmaWVyU3RyaW5ncy5lbmQoKTsgKytpdCkgewogICAgICAgICBTdHJpbmcg
bW9kaWZpZXJTdHJpbmc7CiAgICAgICAgIGlmICghaXQtPmdldCgpLT5hc1N0cmluZyhtb2RpZmll
clN0cmluZykpCi0gICAgICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVU
QUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnbW9kaWZpZXJzJyBpcyBpbnZh
bGlkLiIpOworICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShTVFJJTkdf
Rk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAi
VGhlIHBhcmFtZXRlciAnbW9kaWZpZXJzJyBpcyBpbnZhbGlkLiIpKTsKIAogICAgICAgICBhdXRv
IHBhcnNlZE1vZGlmaWVyID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpLZXlNb2RpZmllcj4obW9kaWZpZXJTdHJpbmcpOwogICAgICAgICBpZiAoIXBhcnNlZE1vZGlm
aWVyKQotICAgICAgICAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIkEgbW9kaWZpZXIgaW4gdGhlICdtb2RpZmllcnMnIGFycmF5IGlz
IGludmFsaWQuIik7CisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2stPnNlbmRGYWlsdXJlKFNU
UklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0
ZXIsICJBIG1vZGlmaWVyIGluIHRoZSAnbW9kaWZpZXJzJyBhcnJheSBpcyBpbnZhbGlkLiIpKTsK
ICAgICAgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBlbnVtVmFsdWUgPSBwcm90b2NvbE1vZGlmaWVy
VG9XZWJFdmVudE1vZGlmaWVyKHBhcnNlZE1vZGlmaWVyLnZhbHVlKCkpOwogICAgICAgICBrZXlN
b2RpZmllcnMgPSAoV2ViRXZlbnQ6Ok1vZGlmaWVycykoZW51bVZhbHVlIHwga2V5TW9kaWZpZXJz
KTsKICAgICB9CisgICAgCisgICAgcGFnZS0+Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhh
bmRsZXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCB4LCB5LCBtb3VzZUludGVy
YWN0aW9uU3RyaW5nLCBtb3VzZUJ1dHRvblN0cmluZywga2V5TW9kaWZpZXJzXShXZWJDb3JlOjpG
bG9hdFJlY3Qgd2luZG93RnJhbWUpIG11dGFibGUgewogCi0gICAgcGxhdGZvcm1TaW11bGF0ZU1v
dXNlSW50ZXJhY3Rpb24oKnBhZ2UsIHZpZXdQb3NpdGlvbiwgcGFyc2VkSW50ZXJhY3Rpb24udmFs
dWUoKSwgcGFyc2VkQnV0dG9uLnZhbHVlKCksIGtleU1vZGlmaWVycyk7CisgICAgICAgIHggPSBz
dGQ6Om1pbihzdGQ6Om1heCgwLjBmLCB4KSwgd2luZG93RnJhbWUuc2l6ZSgpLndpZHRoKCkpOwor
ICAgICAgICB5ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeSArIHBhZ2UtPnRvcENvbnRlbnRJ
bnNldCgpKSwgd2luZG93RnJhbWUuc2l6ZSgpLmhlaWdodCgpKTsKIAotICAgIHVwZGF0ZWRQb3Np
dGlvbk9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50OjpjcmVh
dGUoKQotICAgICAgICAuc2V0WCh4KQotICAgICAgICAuc2V0WSh5IC0gcGFnZS0+dG9wQ29udGVu
dEluc2V0KCkpCi0gICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIFdlYkNvcmU6OkludFBvaW50
IHZpZXdQb3NpdGlvbiA9IFdlYkNvcmU6OkludFBvaW50KHN0YXRpY19jYXN0PGludD4oeCksIHN0
YXRpY19jYXN0PGludD4oeSkpOworCisgICAgICAgIGF1dG8gcGFyc2VkSW50ZXJhY3Rpb24gPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJhY3Rpb24+
KG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcpOworICAgICAgICBpZiAoIXBhcnNlZEludGVyYWN0aW9u
KQorICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BS
RURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBh
cmFtZXRlciAnaW50ZXJhY3Rpb24nIGlzIGludmFsaWQuIikpOworCisgICAgICAgIGF1dG8gcGFy
c2VkQnV0dG9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3Vz
ZUJ1dHRvbj4obW91c2VCdXR0b25TdHJpbmcpOworICAgICAgICBpZiAoIXBhcnNlZEJ1dHRvbikK
KyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVE
RUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJh
bWV0ZXIgJ2J1dHRvbicgaXMgaW52YWxpZC4iKSk7CisKKyAgICAgICAgcGxhdGZvcm1TaW11bGF0
ZU1vdXNlSW50ZXJhY3Rpb24ocGFnZSwgdmlld1Bvc2l0aW9uLCBwYXJzZWRJbnRlcmFjdGlvbi52
YWx1ZSgpLCBwYXJzZWRCdXR0b24udmFsdWUoKSwga2V5TW9kaWZpZXJzKTsKKworICAgICAgICBj
YWxsYmFjay0+c2VuZFN1Y2Nlc3MoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9p
bnQ6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0WCh4KQorICAgICAgICAgICAgLnNldFkoeSAt
IHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKQorICAgICAgICAgICAgLnJlbGVhc2UoKSk7CisgICAg
fSk7CiAjZW5kaWYgLy8gVVNFKEFQUEtJVCkKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAko
cmV2aXNpb24gMjIxNzY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMjAgKzExNSwyMCBA
QCBwdWJsaWM6CiAgICAgLy8gYW5kIHRoZSAtLXBsYXRmb3JtIGFyZ3VtZW50IHBhc3NlZCB0byB0
aGUgcHJvdG9jb2wgYmluZGluZ3MgZ2VuZXJhdG9yLgogCiAgICAgLy8gUGxhdGZvcm06IEdlbmVy
aWMKLSAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QnJv
d3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiYpIG92
ZXJyaWRlOworICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0cyhJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiwgUmVmPEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mJikgZmluYWw7CisgICAgdm9p
ZCBnZXRCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7CiAgICAgdm9pZCBj
cmVhdGVCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIFN0cmluZyopIG92
ZXJyaWRlOwogICAgIHZvaWQgY2xvc2VCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3dpdGNoVG9Ccm93c2lu
Z0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVzaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgc2l6ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtb3ZlV2luZG93T2ZCcm93c2luZ0Nv
bnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcG9zaXRpb24pIG92ZXJyaWRlOworICAgIHZv
aWQgcmVzaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYg
c2l6ZSwgUmVmPFJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFs
OworICAgIHZvaWQgbW92ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIHBvc2l0aW9uLCBSZWY8TW92ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+
JiYpIGZpbmFsOwogICAgIHZvaWQgbmF2aWdhdGVCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGludCogb3B0
aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxOYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKSBvdmVycmlkZTsKICAgICB2b2lkIGdvQmFja0luQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFn
ZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwg
UmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZv
aWQgZ29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5n
LCBjb25zdCBpbnQqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29Gb3J3YXJkSW5Ccm93
c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZWxvYWRCcm93c2lu
Z0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBpbnQqIG9wdGlvbmFs
UGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92
ZXJyaWRlOwogICAgIHZvaWQgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKEluc3BlY3Rvcjo6
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneVN0cmluZywgY29uc3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVm
PFdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAgICB2
b2lkIGV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25h
bEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5JiBhcmd1bWVudHMsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0ltcGxp
Y2l0Q2FsbGJhY2tBcmd1bWVudCwgY29uc3QgaW50KiBvcHRpb25hbENhbGxiYWNrVGltZW91dCwg
UmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXZhbHVh
dGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZXJm
b3JtTW91c2VJbnRlcmFjdGlvbihJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiByZXF1ZXN0ZWRQb3Np
dGlvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUludGVy
YWN0aW9uLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBrZXlNb2RpZmllcnMsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQb2ludD4mIHVwZGF0ZWRQb3Np
dGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihJbnNwZWN0
b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1
dHRvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5JiBrZXlNb2RpZmllcnMsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNh
bGxiYWNrPiYmKSBmaW5hbDsKICAgICB2b2lkIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZElu
dGVyYWN0aW9uc0NhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIHRha2VTY3JlZW5zaG90
KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRs
ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBSZWY8VGFrZVNj
cmVlbnNob3RDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXNvbHZlQ2hpbGRGcmFt
ZUhhbmRsZShJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50
KiBvcHRpb25hbE9yZGluYWwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJh
Y2s+JiYpIG92ZXJyaWRlOwpAQCAtMTYwLDcgKzE2MCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoY29uc3QgU3RyaW5nJik7CiAg
ICAgU3RyaW5nIGhhbmRsZUZvcldlYlBhZ2VQcm94eShjb25zdCBXZWJQYWdlUHJveHkmKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
PiBidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UoV2ViUGFnZVByb3h5Jik7CisgICAgdm9pZCBi
dWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiYmKT4m
Jik7CisgICAgdm9pZCBnZXROZXh0Q29udGV4dChSZWY8V2ViQXV0b21hdGlvblNlc3Npb24+JiYs
IFZlY3RvcjxSZWY8V2ViUGFnZVByb3h5Pj4mJiwgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4+LCBS
ZWY8V2ViQXV0b21hdGlvblNlc3Npb246OkdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mJik7
CiAKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiB3ZWJGcmFtZUlERm9ySGFuZGxlKGNvbnN0
IFN0cmluZyYpOwogICAgIFN0cmluZyBoYW5kbGVGb3JXZWJGcmFtZUlEKHVpbnQ2NF90IGZyYW1l
SUQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAko
cmV2aXNpb24gMjIxNzcxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgYm9vbCBkZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdChXZWJQYWdl
UHJveHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIEFQSTo6U2VjdXJp
dHlPcmlnaW4mLCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5JikgZmluYWw7CiAgICAg
ICAgIGJvb2wgY2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdlYlBhZ2VQcm94eSYs
IFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgQVBJOjpTZWN1cml0eU9yaWdp
biYsIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JikgZmluYWw7CiAgICAgICAgIHZvaWQg
bWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFT
dGF0ZUZsYWdzKSBmaW5hbDsKLSAgICAgICAgdm9pZCBwcmludEZyYW1lKFdlYlBhZ2VQcm94eSos
IFdlYkZyYW1lUHJveHkqKSBmaW5hbDsKKyAgICAgICAgdm9pZCBwcmludEZyYW1lKFdlYlBhZ2VQ
cm94eSYsIFdlYkZyYW1lUHJveHkmKSBmaW5hbDsKICNpZiBQTEFURk9STShJT1MpCiAjaWYgSEFW
RShBUFBfTElOS1MpCiAgICAgICAgIGJvb2wgc2hvdWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9y
RWxlbWVudChfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMjIxNzcxKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtODAxLDEwICs4MDEsOCBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZWFj
aGVkQXBwbGljCiAgICAgfSkuZ2V0KCldOwogfQogCi12b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpwcmludEZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqIHdlYkZyYW1lUHJveHkp
Cit2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpwcmludEZyYW1lKFdlYlBhZ2VQcm94eSYsIFdl
YkZyYW1lUHJveHkmIHdlYkZyYW1lUHJveHkpCiB7Ci0gICAgQVNTRVJUX0FSRyh3ZWJGcmFtZVBy
b3h5LCB3ZWJGcmFtZVByb3h5KTsKLQogICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdQcmludEZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTgxMiw3ICs4
MTAsNyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpwcmludEZyYW1lKFdlCiAgICAgaWYg
KCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBwcmludEZyYW1l
OndyYXBwZXIoQVBJOjpGcmFtZUhhbmRsZTo6Y3JlYXRlKHdlYkZyYW1lUHJveHktPmZyYW1lSUQo
KSkpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUubV93ZWJWaWV3IHByaW50RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSGFuZGxl
OjpjcmVhdGUod2ViRnJhbWVQcm94eS5mcmFtZUlEKCkpKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OmNsb3NlKFdlYlBhZ2VQcm94eSopCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNpb24gMjIxNzY5KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE2MjgsNyArMTYyOCw3IEBAIE5TUHJpbnRPcGVyYXRpb24gKldlYlZpZXdJbXBsOjpwcmlu
dE9wZXIKIAogICAgIC8vIEZJWE1FOiBJZiB0aGUgZnJhbWUgY2Fubm90IGJlIHByaW50ZWQgKGUu
Zy4gaWYgaXQgY29udGFpbnMgYW4gZW5jcnlwdGVkIFBERiB0aGF0IGRpc2FsbG93cwogICAgIC8v
IHByaW50aW5nKSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIG5pbC4KLSAgICBSZXRhaW5Q
dHI8V0tQcmludGluZ1ZpZXc+IHByaW50aW5nVmlldyA9IGFkb3B0TlMoW1tXS1ByaW50aW5nVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZVByb3h5OiZmcmFtZSB2aWV3Om1fdmlldy5nZXRBdXRvcmVs
ZWFzZWQoKV0pOworICAgIFJldGFpblB0cjxXS1ByaW50aW5nVmlldz4gcHJpbnRpbmdWaWV3ID0g
YWRvcHROUyhbW1dLUHJpbnRpbmdWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lUHJveHk6ZnJhbWUg
dmlldzptX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCldKTsKICAgICAvLyBOU1ByaW50T3BlcmF0aW9u
IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgdmlldy4KICAgICBOU1ByaW50T3BlcmF0aW9uICpwcmlu
dE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIHByaW50T3BlcmF0aW9uV2l0aFZpZXc6cHJp
bnRpbmdWaWV3LmdldCgpIHByaW50SW5mbzpwcmludEluZm9dOwogICAgIFtwcmludE9wZXJhdGlv
biBzZXRDYW5TcGF3blNlcGFyYXRlVGhyZWFkOllFU107CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcuaAkocmV2aXNpb24gMjIxNzY5KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDcgKzY4LDcgQEAgQGludGVyZmFjZSBXS1ByaW50aW5nVmlldyA6IE5TVmlldyB7CiAg
ICAgTlNUaW1lciAqX2F1dG9kaXNwbGF5UmVzdW1lVGltZXI7CiB9CiAKLS0gKGlkKWluaXRXaXRo
RnJhbWVQcm94eTooV2ViS2l0OjpXZWJGcmFtZVByb3h5KilmcmFtZSB2aWV3OihOU1ZpZXcgKil3
a1ZpZXc7CistIChpZClpbml0V2l0aEZyYW1lUHJveHk6KFdlYktpdDo6V2ViRnJhbWVQcm94eSYp
ZnJhbWUgdmlldzooTlNWaWV3ICopd2tWaWV3OwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0JKHJldmlzaW9uIDIyMTc2OSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsMTMgKzUxLDEzIEBAIHN0YXRpYyBCT09MIGlzRm9yY2luZ1ByZXZpZXdV
cGRhdGU7CiAKIEBpbXBsZW1lbnRhdGlvbiBXS1ByaW50aW5nVmlldwogCi0tIChpZClpbml0V2l0
aEZyYW1lUHJveHk6KFdlYktpdDo6V2ViRnJhbWVQcm94eSopZnJhbWUgdmlldzooTlNWaWV3ICop
d2tWaWV3CistIChpZClpbml0V2l0aEZyYW1lUHJveHk6KFdlYktpdDo6V2ViRnJhbWVQcm94eSYp
ZnJhbWUgdmlldzooTlNWaWV3ICopd2tWaWV3CiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsg
Ly8gTm8gZnJhbWUgcmVjdCB0byBwYXNzIHRvIE5TVmlldy4KICAgICBpZiAoIXNlbGYpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKLSAgICBfd2ViRnJhbWUgPSBmcmFtZTsKKyAgICBfd2ViRnJhbWUg
PSAmZnJhbWU7CiAgICAgX3drVmlldyA9IHdrVmlldzsKIAogICAgIHJldHVybiBzZWxmOwpAQCAt
MTUxLDggKzE1MSw4IEBAIC0gKHZvaWQpX2FkanVzdFByaW50aW5nTWFyZ2luc0ZvckhlYWRlckEK
ICAgICB9CiAgICAgCiAgICAgQ0dGbG9hdCBzY2FsZSA9IFtpbmZvIHNjYWxpbmdGYWN0b3JdOwot
ICAgIFtpbmZvIHNldFRvcE1hcmdpbjpvcmlnaW5hbFRvcE1hcmdpbiArIF93ZWJGcmFtZS0+cGFn
ZSgpLT5oZWFkZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSAqIHNjYWxlXTsKLSAgICBbaW5mbyBz
ZXRCb3R0b21NYXJnaW46b3JpZ2luYWxCb3R0b21NYXJnaW4gKyBfd2ViRnJhbWUtPnBhZ2UoKS0+
Zm9vdGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSkgKiBzY2FsZV07CisgICAgW2luZm8gc2V0VG9w
TWFyZ2luOm9yaWdpbmFsVG9wTWFyZ2luICsgX3dlYkZyYW1lLT5wYWdlKCktPmhlYWRlckhlaWdo
dCgqX3dlYkZyYW1lKSAqIHNjYWxlXTsKKyAgICBbaW5mbyBzZXRCb3R0b21NYXJnaW46b3JpZ2lu
YWxCb3R0b21NYXJnaW4gKyBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KCpfd2ViRnJh
bWUpICogc2NhbGVdOwogfQogCiAtIChCT09MKV9pc1ByaW50aW5nUHJldmlldwpAQCAtNjM3LDE4
ICs2MzcsMTggQEAgLSAodm9pZClkcmF3UGFnZUJvcmRlcldpdGhTaXplOihOU1NpemUpYgogICAg
IE5TU2l6ZSBwYXBlclNpemUgPSBbcHJpbnRJbmZvIHBhcGVyU2l6ZV07CiAgICAgQ0dGbG9hdCBo
ZWFkZXJGb290ZXJMZWZ0ID0gW3ByaW50SW5mbyBsZWZ0TWFyZ2luXSAvIHNjYWxlOwogICAgIENH
RmxvYXQgaGVhZGVyRm9vdGVyV2lkdGggPSAocGFwZXJTaXplLndpZHRoIC0gKFtwcmludEluZm8g
bGVmdE1hcmdpbl0gKyBbcHJpbnRJbmZvIHJpZ2h0TWFyZ2luXSkpIC8gc2NhbGU7Ci0gICAgTlNS
ZWN0IGZvb3RlclJlY3QgPSBOU01ha2VSZWN0KGhlYWRlckZvb3RlckxlZnQsIFtwcmludEluZm8g
Ym90dG9tTWFyZ2luXSAvIHNjYWxlIC0gX3dlYkZyYW1lLT5wYWdlKCktPmZvb3RlckhlaWdodChf
d2ViRnJhbWUuZ2V0KCkpLCBoZWFkZXJGb290ZXJXaWR0aCwgX3dlYkZyYW1lLT5wYWdlKCktPmZv
b3RlckhlaWdodChfd2ViRnJhbWUuZ2V0KCkpKTsKLSAgICBOU1JlY3QgaGVhZGVyUmVjdCA9IE5T
TWFrZVJlY3QoaGVhZGVyRm9vdGVyTGVmdCwgKHBhcGVyU2l6ZS5oZWlnaHQgLSBbcHJpbnRJbmZv
IHRvcE1hcmdpbl0pIC8gc2NhbGUsIGhlYWRlckZvb3RlcldpZHRoLCBfd2ViRnJhbWUtPnBhZ2Uo
KS0+aGVhZGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSkpOworICAgIE5TUmVjdCBmb290ZXJSZWN0
ID0gTlNNYWtlUmVjdChoZWFkZXJGb290ZXJMZWZ0LCBbcHJpbnRJbmZvIGJvdHRvbU1hcmdpbl0g
LyBzY2FsZSAtIF93ZWJGcmFtZS0+cGFnZSgpLT5mb290ZXJIZWlnaHQoKl93ZWJGcmFtZSksIGhl
YWRlckZvb3RlcldpZHRoLCBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KCpfd2ViRnJh
bWUpKTsKKyAgICBOU1JlY3QgaGVhZGVyUmVjdCA9IE5TTWFrZVJlY3QoaGVhZGVyRm9vdGVyTGVm
dCwgKHBhcGVyU2l6ZS5oZWlnaHQgLSBbcHJpbnRJbmZvIHRvcE1hcmdpbl0pIC8gc2NhbGUsIGhl
YWRlckZvb3RlcldpZHRoLCBfd2ViRnJhbWUtPnBhZ2UoKS0+aGVhZGVySGVpZ2h0KCpfd2ViRnJh
bWUpKTsKIAogICAgIE5TR3JhcGhpY3NDb250ZXh0ICpjdXJyZW50Q29udGV4dCA9IFtOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CiAgICAgW2N1cnJlbnRDb250ZXh0IHNhdmVHcmFw
aGljc1N0YXRlXTsKICAgICBOU1JlY3RDbGlwKGhlYWRlclJlY3QpOwotICAgIF93ZWJGcmFtZS0+
cGFnZSgpLT5kcmF3SGVhZGVyKF93ZWJGcmFtZS5nZXQoKSwgaGVhZGVyUmVjdCk7CisgICAgX3dl
YkZyYW1lLT5wYWdlKCktPmRyYXdIZWFkZXIoKl93ZWJGcmFtZSwgaGVhZGVyUmVjdCk7CiAgICAg
W2N1cnJlbnRDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKIAogICAgIFtjdXJyZW50Q29u
dGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CiAgICAgTlNSZWN0Q2xpcChmb290ZXJSZWN0KTsKLSAg
ICBfd2ViRnJhbWUtPnBhZ2UoKS0+ZHJhd0Zvb3Rlcihfd2ViRnJhbWUuZ2V0KCksIGZvb3RlclJl
Y3QpOworICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5kcmF3Rm9vdGVyKCpfd2ViRnJhbWUsIGZvb3Rl
clJlY3QpOwogICAgIFtjdXJyZW50Q29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5t
bQkocmV2aXNpb24gMjIxNzY5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBh
Z2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM2LDEwICsxMzYsMTAgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OndpbmRvd0FuZFZpZXdGcmFtZXNDaAogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBJbiBjYXNlIHRoZSBVSSBjbGllbnQgb3ZlcnJpZGVzIGdldFdpbmRvd0ZyYW1lKCksIHdl
IGNhbGwgaXQgaGVyZSB0byBtYWtlIHN1cmUgd2Ugc2VuZCB0aGUgYXBwcm9wcmlhdGUgd2luZG93
IGZyYW1lLgotICAgIEZsb2F0UmVjdCB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMgPSBt
X3VpQ2xpZW50LT53aW5kb3dGcmFtZSh0aGlzKTsKLSAgICBGbG9hdFJlY3Qgd2luZG93RnJhbWVJ
blVuZmxpcHBlZFNjcmVlbkNvb3JkaW5hdGVzID0gbV9wYWdlQ2xpZW50LmNvbnZlcnRUb1VzZXJT
cGFjZSh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMpOwotCi0gICAgcHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OldpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKHdpbmRvd0Zy
YW1lSW5TY3JlZW5Db29yZGluYXRlcywgd2luZG93RnJhbWVJblVuZmxpcHBlZFNjcmVlbkNvb3Jk
aW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBhY2Nlc3NpYmlsaXR5Vmlld0Nv
b3JkaW5hdGVzKSwgbV9wYWdlSUQpOworICAgIG1fdWlDbGllbnQtPndpbmRvd0ZyYW1lKCp0aGlz
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB2aWV3RnJhbWVJbldpbmRv
d0Nvb3JkaW5hdGVzLCBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzXSAoRmxvYXRSZWN0IHdp
bmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcykgeworICAgICAgICBGbG9hdFJlY3Qgd2luZG93
RnJhbWVJblVuZmxpcHBlZFNjcmVlbkNvb3JkaW5hdGVzID0gbV9wYWdlQ2xpZW50LmNvbnZlcnRU
b1VzZXJTcGFjZSh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMpOworICAgICAgICBwcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQo
d2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCB3aW5kb3dGcmFtZUluVW5mbGlwcGVkU2Ny
ZWVuQ29vcmRpbmF0ZXMsIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGFjY2Vzc2liaWxp
dHlWaWV3Q29vcmRpbmF0ZXMpLCBtX3BhZ2VJRCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRNYWluRnJhbWVJc1Njcm9sbGFibGUoYm9vbCBpc1Njcm9sbGFibGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320242</attachid>
            <date>2017-09-07 22:45:22 -0700</date>
            <delta_ts>2017-09-08 10:06:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176583-20170907224521.patch</filename>
            <type>text/plain</type>
            <size>68183</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE3NzcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE3LTA5LTA3ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIGFu
ZCBtYWtlIEFQSTo6VUlDbGllbnQgbW9yZSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjU4MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFQSTo6VUlDbGllbnQgY2FsbHMgdGhhdCBy
ZXR1cm4gdmFsdWVzIHN5bmNocm9ub3VzbHkgcmVxdWlyZSBzeW5jaHJvbm91cyBBUElzIHVubmVj
ZXNzYXJpbHkuCisgICAgICAgIEhhdmluZyB0aGVtIGNhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3
aXRoIHRoZSByZXN1bHRzIGluc3RlYWQgYWxsb3dzIHVzIHRvIG1ha2UgYXN5bmNocm9ub3VzCisg
ICAgICAgIEFQSXMsIGFuZCBleGlzdGluZyBzeW5jaHJvbm91cyBBUElzIGNhbiBqdXN0IGNhbGwg
dGhlIGNvbXBsZXRpb24gaGFuZGxlcnMgaW1tZWRpYXRlbHkuCisgICAgICAgIAorICAgICAgICBV
bmZvcnR1bmF0ZWx5IGFuIGFzc3VtcHRpb24gdGhhdCBBUEk6OlVJQ2xpZW50Ojp3aW5kb3dGcmFt
ZSByZXR1cm5zIHN5bmNocm9ub3VzbHkgaGFkIHdvcmtlZAorICAgICAgICBpdHMgd2F5IGludG8g
dGhlIFdlYkF1dG9tYXRpb25TZXNzaW9uLCB3aGljaCBjYWxscyBXZWJQYWdlUHJveHk6OmdldFdp
bmRvd0ZyYW1lLiAgTWFraW5nIGl0CisgICAgICAgIGFzeW5jaHJvbm91cyByZXF1aXJlZCBtYWtp
bmcgc29tZSBhdXRvbWF0aW9uIHByb3RvY29scyBhc3luY2hyb25vdXMgc28gdGhleSBjYW4gc2Vu
ZCB0aGVpcgorICAgICAgICByZXN1bHQgb25jZSB0aGV5IGhhdmUgdGhlIHJlc3VsdGluZyBmcmFt
ZXMgZnJvbSB0aGUgVUlDbGllbnQuCisgICAgICAgIAorICAgICAgICBObyBjaGFuZ2UgaW4gYmVo
YXZpb3VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oOgorICAgICAg
ICAoQVBJOjpVSUNsaWVudDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKEFQSTo6
VUlDbGllbnQ6Om1lbnVCYXJJc1Zpc2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0
TWVudUJhcklzVmlzaWJsZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpzdGF0dXNCYXJJc1Zp
c2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0U3RhdHVzQmFySXNWaXNpYmxlKToK
KyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmlzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OnNldFdpbmRv
d0ZyYW1lKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OndpbmRvd0ZyYW1lKToKKyAgICAgICAg
KEFQSTo6VUlDbGllbnQ6OmhlYWRlckhlaWdodCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50Ojpm
b290ZXJIZWlnaHQpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6ZHJhd0hlYWRlcik6CisgICAg
ICAgIChBUEk6OlVJQ2xpZW50OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnByaW50RnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAg
ICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb246CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldE5leHRDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtTW91c2VJbnRlcmFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAg
ICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZh
U2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb29sYmFy
c0FyZVZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldE1lbnVCYXJJ
c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zp
c2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFN0YXR1c0JhcklzVmlz
aWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNp
YmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJc1Jlc2l6YWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0SXNSZXNpemFibGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNjcmVlblRvUm9vdFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnJvb3RWaWV3VG9TY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnByaW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhlYWRl
ckhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9vdGVySGVpZ2h0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmF3SGVhZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1Zp
ZXcgaW5pdFdpdGhGcmFtZVByb3h5OnZpZXc6XSk6CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3
IF9hZGp1c3RQcmludGluZ01hcmdpbnNGb3JIZWFkZXJBbmRGb290ZXJdKToKKyAgICAgICAgKC1b
V0tQcmludGluZ1ZpZXcgZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZTpdKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6CisKIDIwMTctMDktMDcgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFVwc3RyZWFtIFFUS2l0LXJl
bGF0ZWQgV2ViS2l0U3lzdGVtSW50ZXJmYWNlIGZ1bmN0aW9ucwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQ4
LDcgKzM5NDgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oCiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFJlZlB0cjxN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpEZWxheWVkUmVwbHk+
IHJlcGx5KQordm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgUmVmPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4mJiByZXBs
eSkKIHsKICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJh
bWVJRCk7CiAgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CkBAIC0zOTYxLDcgKzM5NjEsOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdFByb21wdCh1CiAgICAgICAgICAgICBhdXRv
bWF0aW9uU2Vzc2lvbi0+d2lsbFNob3dKYXZhU2NyaXB0RGlhbG9nKCp0aGlzKTsKICAgICB9CiAK
LSAgICBtX3VpQ2xpZW50LT5ydW5KYXZhU2NyaXB0UHJvbXB0KHRoaXMsIG1lc3NhZ2UsIGRlZmF1
bHRWYWx1ZSwgZnJhbWUsIHNlY3VyaXR5T3JpZ2luLCBbcmVwbHldKGNvbnN0IFN0cmluZyYgcmVz
dWx0KSB7IHJlcGx5LT5zZW5kKHJlc3VsdCk7IH0pOworICAgIG1fdWlDbGllbnQtPnJ1bkphdmFT
Y3JpcHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBmcmFtZSwgc2VjdXJpdHlP
cmlnaW4sIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXShjb25zdCBTdHJpbmcmIHJlc3VsdCkgewor
ICAgICAgICByZXBseS0+c2VuZChyZXN1bHQpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkBAIC00MDUxLDcgKzQwNTMs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yCiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
CiB7Ci0gICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKHRoaXMsIHRvb2xiYXJz
QXJlVmlzaWJsZSk7CisgICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKCp0aGlz
LCB0b29sYmFyc0FyZVZpc2libGUpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0VG9vbGJh
cnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRUb29sYmFyc0FyZVZp
c2libGU6OkRlbGF5ZWRSZXBseT4mJiByZXBseSkKQEAgLTQwNjMsNTIgKzQwNjUsNjUgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmdldFRvb2xiYXJzQXJlVmlzaWJsZQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91
aUNsaWVudC0+c2V0TWVudUJhcklzVmlzaWJsZSh0aGlzLCBtZW51QmFySXNWaXNpYmxlKTsKKyAg
ICBtX3VpQ2xpZW50LT5zZXRNZW51QmFySXNWaXNpYmxlKCp0aGlzLCBtZW51QmFySXNWaXNpYmxl
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zpc2libGUoYm9vbCYgbWVu
dUJhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRNZW51QmFySXNWaXNpYmxlKFJl
ZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRNZW51QmFySXNWaXNpYmxlOjpEZWxheWVkUmVw
bHk+JiYgcmVwbHkpCiB7Ci0gICAgbWVudUJhcklzVmlzaWJsZSA9IG1fdWlDbGllbnQtPm1lbnVC
YXJJc1Zpc2libGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+bWVudUJhcklzVmlzaWJsZSgqdGhp
cywgW3JlcGx5ID0gV1RGTW92ZShyZXBseSldIChib29sIHZpc2libGUpIHsKKyAgICAgICAgcmVw
bHktPnNlbmQodmlzaWJsZSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRT
dGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91aUNs
aWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKHRoaXMsIHN0YXR1c0JhcklzVmlzaWJsZSk7Cisg
ICAgbV91aUNsaWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKCp0aGlzLCBzdGF0dXNCYXJJc1Zp
c2libGUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNpYmxlKGJv
b2wmIHN0YXR1c0JhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRTdGF0dXNCYXJJ
c1Zpc2libGUoUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFN0YXR1c0JhcklzVmlzaWJs
ZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHN0YXR1c0JhcklzVmlzaWJsZSA9IG1f
dWlDbGllbnQtPnN0YXR1c0JhcklzVmlzaWJsZSh0aGlzKTsKKyAgICBtX3VpQ2xpZW50LT5zdGF0
dXNCYXJJc1Zpc2libGUoKnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCB2aXNp
YmxlKSB7CisgICAgICAgIHJlcGx5LT5zZW5kKHZpc2libGUpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSkKIHsKLSAgICBt
X3VpQ2xpZW50LT5zZXRJc1Jlc2l6YWJsZSh0aGlzLCBpc1Jlc2l6YWJsZSk7CisgICAgbV91aUNs
aWVudC0+c2V0SXNSZXNpemFibGUoKnRoaXMsIGlzUmVzaXphYmxlKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmdldElzUmVzaXphYmxlKGJvb2wmIGlzUmVzaXphYmxlKQordm9pZCBXZWJQYWdl
UHJveHk6OmdldElzUmVzaXphYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRJc1Jl
c2l6YWJsZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIGlzUmVzaXphYmxlID0gbV91
aUNsaWVudC0+aXNSZXNpemFibGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+aXNSZXNpemFibGUo
KnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCByZXNpemFibGUpIHsKKyAgICAg
ICAgcmVwbHktPnNlbmQocmVzaXphYmxlKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFdpbmRvd0ZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCiB7Ci0g
ICAgbV91aUNsaWVudC0+c2V0V2luZG93RnJhbWUodGhpcywgbV9wYWdlQ2xpZW50LmNvbnZlcnRU
b0RldmljZVNwYWNlKG5ld1dpbmRvd0ZyYW1lKSk7CisgICAgbV91aUNsaWVudC0+c2V0V2luZG93
RnJhbWUoKnRoaXMsIG1fcGFnZUNsaWVudC5jb252ZXJ0VG9EZXZpY2VTcGFjZShuZXdXaW5kb3dG
cmFtZSkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2luZG93RnJhbWUoRmxvYXRSZWN0
JiBuZXdXaW5kb3dGcmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZShSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0V2luZG93RnJhbWU6OkRlbGF5ZWRSZXBseT4mJiBy
ZXBseSkKIHsKLSAgICBuZXdXaW5kb3dGcmFtZSA9IG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2Vy
U3BhY2UobV91aUNsaWVudC0+d2luZG93RnJhbWUodGhpcykpOworICAgIG1fdWlDbGllbnQtPndp
bmRvd0ZyYW1lKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBy
ZXBseSA9IFdURk1vdmUocmVwbHkpXSAoRmxvYXRSZWN0IGZyYW1lKSB7CisgICAgICAgIHJlcGx5
LT5zZW5kKG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2VyU3BhY2UoZnJhbWUpKTsKKyAgICB9KTsK
IH0KLSAgICAKLXZvaWQgV2ViUGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBv
aW50JiBzY3JlZW5Qb2ludCwgSW50UG9pbnQmIHdpbmRvd1BvaW50KQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIoRnVuY3Rpb248dm9pZChG
bG9hdFJlY3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fdWlDbGllbnQtPndpbmRv
d0ZyYW1lKCp0aGlzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBzY3JlZW5Qb2ludCwg
UmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBs
eT4mJiByZXBseSkKIHsKLSAgICB3aW5kb3dQb2ludCA9IG1fcGFnZUNsaWVudC5zY3JlZW5Ub1Jv
b3RWaWV3KHNjcmVlblBvaW50KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQuc2NyZWVu
VG9Sb290VmlldyhzY3JlZW5Qb2ludCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlUHJveHk6OnJv
b3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgdmlld1JlY3QsIEludFJlY3QmIHJlc3VsdCkK
K3ZvaWQgV2ViUGFnZVByb3h5Ojpyb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHZpZXdS
ZWN0LCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXll
ZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHJlc3VsdCA9IG1fcGFnZUNsaWVudC5yb290Vmlld1Rv
U2NyZWVuKHZpZXdSZWN0KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQucm9vdFZpZXdU
b1NjcmVlbih2aWV3UmVjdCkpOwogfQogICAgIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTQxOTQs
NyArNDIwOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmludEZyYW1lKHVpbnQ2NF90IGYKICAg
ICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJhbWVJRCk7CiAg
ICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CiAKLSAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKHRo
aXMsIGZyYW1lKTsKKyAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKCp0aGlzLCAqZnJhbWUpOwog
CiAgICAgZW5kUHJpbnRpbmcoKTsgLy8gU2VuZCBhIG1lc3NhZ2Ugc3luY2hyb25vdXNseSB3aGls
ZSBtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uIGlzIHN0aWxsIHRydWUuCiAgICAgbV9p
c1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbiA9IGZhbHNlOwpAQCAtNTkwMSwzMiArNTkxNiwz
MiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRGVzdHJveU5vdGlmaWNhdGlvCiAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpLT5kaWREZXN0cm95Tm90aWZpY2F0aW9uKHRoaXMsIG5vdGlmaWNhdGlvbklEKTsKIH0KIAot
ZmxvYXQgV2ViUGFnZVByb3h5OjpoZWFkZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitm
bG9hdCBXZWJQYWdlUHJveHk6OmhlYWRlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsK
LSAgICBpZiAoZnJhbWUtPmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1l
LmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX3VpQ2xpZW50LT5oZWFkZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3Vp
Q2xpZW50LT5oZWFkZXJIZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotZmxvYXQgV2ViUGFnZVBy
b3h5Ojpmb290ZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitmbG9hdCBXZWJQYWdlUHJv
eHk6OmZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsKLSAgICBpZiAoZnJhbWUt
PmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1lLmlzRGlzcGxheWluZ1BE
RkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3VpQ2xpZW50LT5m
b290ZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3VpQ2xpZW50LT5mb290ZXJI
ZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdIZWFkZXIo
V2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmIGZyYW1lLCBGbG9hdFJlY3QmJiByZWN0
KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKKyAgICBpZiAo
ZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
dWlDbGllbnQtPmRyYXdIZWFkZXIodGhpcywgZnJhbWUsIHJlY3QpOworICAgIG1fdWlDbGllbnQt
PmRyYXdIZWFkZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJlY3QpKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmRyYXdGb290ZXIoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmIGZy
YW1lLCBGbG9hdFJlY3QmJiByZWN0KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERG
RG9jdW1lbnQoKSkKKyAgICBpZiAoZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIodGhpcywgZnJhbWUsIHJl
Y3QpOworICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJl
Y3QpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJ1bk1vZGFsKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODA4LDEw
ICs4MDgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGNv
bnN0IFN0cmluZyYsIGJvb2wsIFdURjo6RnVuY3Rpb248dm9pZCAoQVBJOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqLCBib29sIGhhZEV4Y2VwdGlvbiwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0
YWlscyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pOwogICAgIHZv
aWQgZm9yY2VSZXBhaW50KFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiYpOwogCi0gICAgZmxvYXQgaGVh
ZGVySGVpZ2h0KFdlYkZyYW1lUHJveHkqKTsKLSAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSopOwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSYpOworICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5Jik7CisgICAg
dm9pZCBkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7Cisg
ICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBEaWN0aW9uYXJ5LgpAQCAtMTE2OCw3ICsx
MTY4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb2N1cyhib29sIGZvY3VzZWQpOwogICAg
IHZvaWQgc2V0V2luZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9p
ZCBnZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGdldFdpbmRv
d0ZyYW1lKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZTo6RGVsYXll
ZFJlcGx5PiYmKTsKKyAgICB2b2lkIGdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVy
KEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RmxvYXRSZWN0KT4mJik7CiAKICAgICBib29sIGlzUmVz
b3VyY2VDYWNoaW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzb3VyY2VDYWNoaW5n
RGlzYWJsZWQ7IH0KICAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpOwpA
QCAtMTI5Niw3ICsxMjk3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAg
dm9pZCBydW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgUmVmPE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHJ1
bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6RGVsYXllZFJlcGx5PiYmKTsKLSAgICB2b2lkIHJ1bkph
dmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4pOworICAg
IHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6RGVsYXllZFJlcGx5
PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJIaXRUZXN0UmVzdWx0RGF0YSYmLCB1aW50MzJfdCBt
b2RpZmllcnMsIFVzZXJEYXRhJiYpOwogCkBAIC0xMzEwLDEzICsxMzExLDEzIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
OwogICAgIHZvaWQgZ2V0VG9vbGJhcnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRUb29sYmFyc0FyZVZpc2libGU6OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBz
ZXRNZW51QmFySXNWaXNpYmxlKGJvb2wgbWVudUJhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRN
ZW51QmFySXNWaXNpYmxlKGJvb2wmIG1lbnVCYXJJc1Zpc2libGUpOworICAgIHZvaWQgZ2V0TWVu
dUJhcklzVmlzaWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlz
aWJsZTo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShi
b29sIHN0YXR1c0JhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRTdGF0dXNCYXJJc1Zpc2libGUo
Ym9vbCYgc3RhdHVzQmFySXNWaXNpYmxlKTsKKyAgICB2b2lkIGdldFN0YXR1c0JhcklzVmlzaWJs
ZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlOjpEZWxh
eWVkUmVwbHk+JiYpOwogICAgIHZvaWQgc2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSk7
Ci0gICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShib29sJiBpc1Jlc2l6YWJsZSk7Ci0gICAgdm9pZCBz
Y3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgV2Vi
Q29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKLSAgICB2b2lkIHJvb3RWaWV3VG9TY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld1JlY3QsIFdlYkNvcmU6OkludFJlY3QmIHJlc3Vs
dCk7CisgICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
R2V0SXNSZXNpemFibGU6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9pZCBzY3JlZW5Ub1Jvb3RW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgUmVmPE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9p
ZCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdSZWN0LCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXllZFJlcGx5PiYm
KTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgdm9pZCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2NyZWVuUG9pbnQsIFdlYkNvcmU6OkludFBv
aW50JiB3aW5kb3dQb2ludCk7CiAgICAgdm9pZCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVl
bihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3UmVjdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVz
dWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE2
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2V0UmVuZGVyVHJlZVNpemUodWlu
dDY0X3QgdHJlZVNpemUpCiAgICAgU2V0VG9vbGJhcnNBcmVWaXNpYmxlKGJvb2wgdG9vbGJhcnNB
cmVWaXNpYmxlKQogICAgIEdldFRvb2xiYXJzQXJlVmlzaWJsZSgpIC0+IChib29sIHRvb2xiYXJz
QXJlVmlzaWJsZSkgRGVsYXllZAotICAgIFNldE1lbnVCYXJJc1Zpc2libGUoYm9vbCBtZW51QmFy
SXNWaXNpYmxlKTsKLSAgICBHZXRNZW51QmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgbWVudUJhcklz
VmlzaWJsZSk7CisgICAgU2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUp
CisgICAgR2V0TWVudUJhcklzVmlzaWJsZSgpIC0+IChib29sIG1lbnVCYXJJc1Zpc2libGUpIERl
bGF5ZWQKICAgICBTZXRTdGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUp
Ci0gICAgR2V0U3RhdHVzQmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgc3RhdHVzQmFySXNWaXNpYmxl
KQorICAgIEdldFN0YXR1c0JhcklzVmlzaWJsZSgpIC0+IChib29sIHN0YXR1c0JhcklzVmlzaWJs
ZSkgRGVsYXllZAogICAgIFNldElzUmVzaXphYmxlKGJvb2wgaXNSZXNpemFibGUpCi0gICAgR2V0
SXNSZXNpemFibGUoKSAtPiAoYm9vbCBpc1Jlc2l6YWJsZSkKKyAgICBHZXRJc1Jlc2l6YWJsZSgp
IC0+IChib29sIGlzUmVzaXphYmxlKSBEZWxheWVkCiAgICAgU2V0V2luZG93RnJhbWUoV2ViQ29y
ZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQotICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNv
cmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkKLSAgICBTY3JlZW5Ub1Jvb3RWaWV3KFdlYkNvcmU6
OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29yZTo6SW50UG9pbnQgd2luZG93UG9pbnQp
Ci0gICAgUm9vdFZpZXdUb1NjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3Jl
OjpJbnRSZWN0IHNjcmVlbkZyYW1lKQorICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6
OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgRGVsYXllZAorICAgIFNjcmVlblRvUm9vdFZpZXcoV2Vi
Q29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQ
b2ludCkgRGVsYXllZAorICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0
KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgRGVsYXllZAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgU2hvd1ZhbGlkYXRpb25NZXNzYWdlKFdlYkNvcmU6OkludFJlY3QgYW5j
aG9yUmVjdCwgU3RyaW5nIG1lc3NhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAkocmV2aXNpb24gMjIxNzcxKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE2ICs5NywxNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0
OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQmKSB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCB0b29sYmFyc0FyZVZpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRp
b25IYW5kbGVyKHRydWUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJs
ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGJvb2wpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBtZW51
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
Ym9vbCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXZWJLaXQ6Oldl
YlBhZ2VQcm94eSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVz
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgYm9vbCkgeyB9Ci0gICAgdmlydHVh
bCBib29sIGlzUmVzaXphYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSos
IGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV2ViS2l0
OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWVudUJhcklzVmlz
aWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TWVudUJhcklzVmlzaWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRpb25I
YW5kbGVyKHRydWUpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpc1Jlc2l6
YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SXNSZXNpemFibGUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IHdpbmRvd0ZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gV2ViQ29yZTo6Rmxv
YXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93RnJhbWUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgd2luZG93RnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsgfQogCiAgICAgdmlydHVhbCBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJ1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5n
JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiwgRnVuY3Rpb248dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7IH0KQEAgLTEzMCwxMSArMTMwLDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qo
V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBTZWN1cml0eU9yaWdpbiosIFdlYktpdDo6Tm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QqKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gUHJpbnRp
bmcuCi0gICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkq
LCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBmbG9h
dCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpX
ZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zvb3RlcihXZWJLaXQ6OldlYlBhZ2VQ
cm94eSosIFdlYktpdDo6V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmludEZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
V2ViS2l0OjpXZWJGcmFtZVByb3h5KikgeyB9CisgICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWln
aHQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBmbG9hdCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2
b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb290
ZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBXZWJDb3Jl
OjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHByaW50RnJhbWUoV2ViS2l0OjpX
ZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJ1bk1vZGFsKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MzksNjkgKzE4MzksNjkgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBh
ZwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobV9jbGllbnQudG9vbGJhcnNBcmVWaXNp
YmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2Us
IGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUo
V2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmICghbV9jbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0
b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAg
ICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUs
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5KiBwYWdlKSBmaW5hbAorICAgICAgICB2b2lkIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50Lm1lbnVCYXJJc1Zpc2libGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubWVudUJhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2NsaWVu
dC5tZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCisgICAgICAgIHZvaWQgc2V0TWVudUJh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldE1lbnVCYXJJc1Zp
c2libGUodG9BUEkocGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgICAgICBtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgdmlz
aWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIGJv
b2wgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSogcGFnZSkgZmluYWwKKyAgICAgICAg
dm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIW1fY2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5zdGF0dXNCYXJJc1Zpc2libGUo
dG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobV9jbGllbnQuc3RhdHVzQmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN0YXR1c0Jh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAg
ICAgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZp
c2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuc2V0U3Rh
dHVzQmFySXNWaXNpYmxlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1f
Y2xpZW50LnNldFN0YXR1c0JhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNldFN0YXR1c0Jhcklz
VmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgICAgIH0KIAotICAgICAgICBib29sIGlzUmVzaXphYmxlKFdlYlBhZ2VQcm94eSogcGFn
ZSkgZmluYWwKKyAgICAgICAgdm9pZCBpc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIEZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaXNSZXNpemFibGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaXNSZXNpemFibGUodG9B
UEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIobV9jbGllbnQuaXNSZXNpemFibGUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SXNSZXNpemFibGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHJlc2l6YWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRJc1Jl
c2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgcmVzaXphYmxlKSBmaW5hbAogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNldElzUmVzaXphYmxlKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldElzUmVzaXphYmxlKHRvQVBJ
KHBhZ2UpLCByZXNpemFibGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAg
ICBtX2NsaWVudC5zZXRJc1Jlc2l6YWJsZSh0b0FQSSgmcGFnZSksIHJlc2l6YWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0V2luZG93
RnJhbWUoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lKSBmaW5hbAor
ICAgICAgICB2b2lkIHNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgRmxv
YXRSZWN0JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVu
dC5zZXRXaW5kb3dGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
IG1fY2xpZW50LnNldFdpbmRvd0ZyYW1lKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5zZXRXaW5kb3dGcmFt
ZSh0b0FQSSgmcGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0UmVjdCB3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkq
IHBhZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5JiBwYWdl
LCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZ2V0V2luZG93RnJh
bWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgICAgICAgICByZXR1cm4gdG9G
bG9hdFJlY3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkocGFnZSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbykpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodG9GbG9hdFJl
Y3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbCgpIGNvbnN0IGZpbmFsCkBAIC0xOTkwLDQ0ICsxOTkwLDQ0IEBAIHZvaWQg
V0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFByaW50aW5nLgotICAgICAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViUGFnZVByb3h5KiBw
YWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkgZmluYWwKKyAgICAgICAgZmxvYXQgaGVhZGVySGVp
Z2h0KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUpIGZpbmFsCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaGVhZGVySGVpZ2h0KQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVp
Z2h0KHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVpZ2h0KHRvQVBJKCZwYWdlKSwg
dG9BUEkoJmZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJv
eHkqIGZyYW1lKSBmaW5hbAorICAgICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5
JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5mb290ZXJIZWlnaHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkocGFnZSks
IHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkoJnBhZ2UpLCB0b0FQSSgmZnJhbWUpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBkcmF3
SGVhZGVyKFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkgZmluYWwKKyAgICAgICAgdm9pZCBkcmF3SGVhZGVyKFdl
YlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIFdlYkNvcmU6OkZsb2F0UmVj
dCYmIHJlY3QpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZHJh
d0hlYWRlcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1fY2xpZW50
LmRyYXdIZWFkZXIodG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5kcmF3SGVhZGVyKHRv
QVBJKCZwYWdlKSwgdG9BUEkoJmZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVBy
b3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiByZWN0KSBmaW5hbAorICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVByb3h5JiBwYWdl
LCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgV2ViQ29yZTo6RmxvYXRSZWN0JiYgcmVjdCkgZmluYWwK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kcmF3Rm9vdGVyKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9jbGllbnQuZHJhd0Zvb3Rlcih0b0FQ
SShwYWdlKSwgdG9BUEkoZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LmRyYXdGb290ZXIodG9BUEkoJnBhZ2UpLCB0b0FQ
SSgmZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZvaWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZy
YW1lUHJveHkqIGZyYW1lKSBmaW5hbAorICAgICAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVBy
b3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFtX2NsaWVudC5wcmludEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgbV9jbGllbnQucHJpbnRGcmFtZSh0b0FQSShwYWdlKSwgdG9BUEkoZnJh
bWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQucHJp
bnRGcmFtZSh0b0FQSSgmcGFnZSksIHRvQVBJKCZmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bk1vZGFsKCkgY29uc3QgZmlu
YWwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRVSUNsaWVudC5jcHAJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMjgg
KzUzLDI4IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdlYmtpdFdlYlZp
ZXdDcmVhdGVOZXdQYWdlKG1fd2ViVmlldywgd2luZG93RmVhdHVyZXMsICZuYXZpZ2F0aW9uQWN0
aW9uKSk7CiAgICAgfQogCi0gICAgdm9pZCBzaG93UGFnZShXZWJQYWdlUHJveHkqKSBvdmVycmlk
ZQorICAgIHZvaWQgc2hvd1BhZ2UoV2ViUGFnZVByb3h5KikgZmluYWwKICAgICB7CiAgICAgICAg
IHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UobV93ZWJWaWV3KTsKICAgICB9CiAKLSAgICB2
b2lkIGNsb3NlKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisgICAgdm9pZCBjbG9zZShXZWJQYWdl
UHJveHkqKSBmaW5hbAogICAgIHsKICAgICAgICAgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShtX3dl
YlZpZXcpOwogICAgIH0KIAotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdlYlBhZ2VQcm94
eSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpIG92ZXJyaWRlCisgICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV2ViUGFnZVByb3h5Kiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBm
aW5hbAogICAgIHsKICAgICAgICAgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChtX3dl
YlZpZXcsIG1lc3NhZ2UudXRmOCgpKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAg
ICB9CiAKLSAgICB2b2lkIHJ1bkphdmFTY3JpcHRDb25maXJtKFdlYlBhZ2VQcm94eSosIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYsIEZ1bmN0aW9uPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBv
dmVycmlkZQorICAgIHZvaWQgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViUGFnZVByb3h5KiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
ZmluYWwKICAgICB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdlYmtpdFdlYlZpZXdSdW5K
YXZhU2NyaXB0Q29uZmlybShtX3dlYlZpZXcsIG1lc3NhZ2UudXRmOCgpKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBydW5KYXZhU2NyaXB0UHJvbXB0KFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdlYkZyYW1lUHJveHkqLCBjb25z
dCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJp
bmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKKyAgICB2b2lkIHJ1bkphdmFTY3Jp
cHRQcm9tcHQoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYsIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpIGZpbmFsCiAgICAgewogICAgICAgICBDU3RyaW5nIHJlc3VsdCA9IHdlYmtpdFdlYlZp
ZXdSdW5KYXZhU2NyaXB0UHJvbXB0KG1fd2ViVmlldywgbWVzc2FnZS51dGY4KCksIGRlZmF1bHRW
YWx1ZS51dGY4KCkpOwogICAgICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKSB7CkBAIC04NSw5ICs4
NSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0cmluZzo6ZnJvbVVU
RjgocmVzdWx0LmRhdGEoKSkpOwogICAgIH0KIAotICAgIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wg
Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgdm9pZCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2ViUGFnZVByb3h5
KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpIG92ZXJyaWRlCisgICAgdm9pZCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2Vi
UGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdl
YmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0QmVmb3JlVW5sb2FkQ29uZmlybShtX3dlYlZpZXcsIG1l
c3NhZ2UudXRmOCgpKSk7CiAgICAgfQpAQCAtOTcsNDcgKzk3LDQ3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQobV93ZWJWaWV3LCBkYXRhLCBtb2Rp
ZmllcnMpOwogICAgIH0KIAotICAgIHZvaWQgdG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94
eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisg
ICAgdm9pZCB0b29sYmFyc0FyZVZpc2libGUoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdG9vbGJhcl92aXNpYmxlKHdl
YmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wgdmlz
aWJsZSkgb3ZlcnJpZGUKKyAgICB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJv
eHkmLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXaW5kb3dQcm9w
ZXJ0aWVzU2V0VG9vbGJhclZpc2libGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVy
dGllcyhtX3dlYlZpZXcpLCB2aXNpYmxlKTsKICAgICB9CiAKLSAgICBib29sIG1lbnVCYXJJc1Zp
c2libGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIG1lbnVCYXJJc1Zpc2libGUo
V2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
ZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0
X21lbnViYXJfdmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1f
d2ViVmlldykpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3ZWJraXRfd2luZG93X3Byb3Bl
cnRpZXNfZ2V0X21lbnViYXJfdmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKG1fd2ViVmlldykpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE1lbnVCYXJJc1Zpc2li
bGUoV2ViUGFnZVByb3h5KiwgYm9vbCB2aXNpYmxlKSBvdmVycmlkZQorICAgIHZvaWQgc2V0TWVu
dUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkmLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgewog
ICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0VG9vbGJhclZpc2libGUod2Via2l0X3dl
Yl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcpLCB2aXNpYmxlKTsKICAgICB9
CiAKLSAgICBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXZWJQYWdlUHJveHkqKSBvdmVycmlkZQor
ICAgIHZvaWQgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgewotICAgICAgICByZXR1cm4g
d2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNiYXJfdmlzaWJsZSh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldykpOworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcih3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxl
KHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSkpOwogICAg
IH0KIAotICAgIHZvaWQgc2V0U3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wg
dmlzaWJsZSkgb3ZlcnJpZGUKKyAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShXZWJQYWdl
UHJveHkmLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXaW5kb3dQ
cm9wZXJ0aWVzU2V0U3RhdHVzYmFyVmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19w
cm9wZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOwogICAgIH0KIAotICAgIGJvb2wgaXNSZXNp
emFibGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIGlzUmVzaXphYmxlKFdlYlBh
Z2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFs
CiAgICAgewotICAgICAgICByZXR1cm4gd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9yZXNp
emFibGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcpKTsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9y
ZXNpemFibGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcp
KSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkqLCBib29s
IHJlc2l6YWJsZSkgb3ZlcnJpZGUKKyAgICB2b2lkIHNldElzUmVzaXphYmxlKFdlYlBhZ2VQcm94
eSYsIGJvb2wgcmVzaXphYmxlKSBmaW5hbAogICAgIHsKICAgICAgICAgd2Via2l0V2luZG93UHJv
cGVydGllc1NldFJlc2l6YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVz
KG1fd2ViVmlldyksIHJlc2l6YWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRXaW5kb3dGcmFt
ZShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZyYW1lKSBvdmVycmlk
ZQorICAgIHZvaWQgc2V0V2luZG93RnJhbWUoV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBmcmFtZSkgZmluYWwKICAgICB7CiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAg
ICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSBXZWJDb3JlOjpJbnRSZWN0KGZyYW1lKTsKQEAgLTE1
Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogCi0gICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisgICAgdm9pZCB3aW5k
b3dGcmFtZShXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgewogI2lmIFBMQVRGT1JNKEdUSykKICAg
ICAgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0geyAwLCAwLCAwLCAwIH07CkBAIC0xNjEsMjEg
KzE2MSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZ3RrX3dpbmRvd19nZXRfcG9zaXRpb24o
R1RLX1dJTkRPVyh3aW5kb3cpLCAmZ2VvbWV0cnkueCwgJmdlb21ldHJ5LnkpOwogICAgICAgICAg
ICAgZ3RrX3dpbmRvd19nZXRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksICZnZW9tZXRyeS53aWR0
aCwgJmdlb21ldHJ5LmhlaWdodCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OkZsb2F0UmVjdChnZW9tZXRyeSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6
OkZsb2F0UmVjdChnZW9tZXRyeSkpOwogI2VsaWYgUExBVEZPUk0oV1BFKQogICAgICAgICAvLyBG
SVhNRTogSSBndWVzcyB0aGlzIGlzIGFjdHVhbGx5IHRoZSB2aWV3IHNpemUgaW4gV1BFLiBXZSBu
ZWVkIG1vcmUgcmVmYWN0b3JpbmcgaGVyZS4KLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUEk6OlNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZyBs
b25nIC8qY3VycmVudFF1b3RhKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmN1cnJlbnRPcmlnaW5V
c2FnZSovLCB1bnNpZ25lZCBsb25nIGxvbmcgLypjdXJyZW50RGF0YWJhc2VVc2FnZSovLCB1bnNp
Z25lZCBsb25nIGxvbmcgLypleHBlY3RlZFVzYWdlKi8sIEZ1bmN0aW9uPHZvaWQgKHVuc2lnbmVk
IGxvbmcgbG9uZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisgICAgdm9pZCBleGNl
ZWRlZERhdGFiYXNlUXVvdGEoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIEFQSTo6U2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25n
IGxvbmcgLypjdXJyZW50UXVvdGEqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qY3VycmVudE9yaWdp
blVzYWdlKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmN1cnJlbnREYXRhYmFzZVVzYWdlKi8sIHVu
c2lnbmVkIGxvbmcgbG9uZyAvKmV4cGVjdGVkVXNhZ2UqLywgRnVuY3Rpb248dm9pZCh1bnNpZ25l
ZCBsb25nIGxvbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsKICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAq
IDEyMDQ7IC8vIDUgTUIKICAgICAgICAgLy8gRklYTUU6IFByb3ZpZGUgQVBJIGZvciB0aGlzLgog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkZWZhdWx0UXVvdGEpOwogICAgIH0KIAotICAgIGJv
b2wgcnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVyKSBvdmVycmlk
ZQorICAgIGJvb2wgcnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRl
cnMqIHBhcmFtZXRlcnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVy
KSBmaW5hbAogICAgIHsKICAgICAgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+
IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFt
ZXRlcnMsIGxpc3RlbmVyKSk7CiAgICAgICAgIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJl
cXVlc3QobV93ZWJWaWV3LCByZXF1ZXN0LmdldCgpKTsKQEAgLTE4OSwxNCArMTg5LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGJvb2wgZGVjaWRl
UG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgV2ViRnJh
bWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBB
UEk6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdFByb3h5JiBwZXJtaXNzaW9uUmVxdWVzdCkgb3ZlcnJpZGUKKyAgICBib29s
IGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYs
IFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFEb2N1bWVudE9y
aWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eSYgcGVybWlzc2lvblJlcXVlc3QpIGZpbmFsCiAgICAg
ewogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0PiB1c2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdENyZWF0ZShwZXJtaXNzaW9uUmVxdWVzdCwgdXNlck1lZGlhRG9jdW1lbnRPcmln
aW4sIHRvcExldmVsRG9jdW1lbnRPcmlnaW4pKTsKICAgICAgICAgd2Via2l0V2ViVmlld01ha2VQ
ZXJtaXNzaW9uUmVxdWVzdChtX3dlYlZpZXcsIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QodXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3QuZ2V0KCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgYm9vbCBkZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdChXZWJQYWdlUHJveHkqLCBBUEk6OlNlY3VyaXR5T3JpZ2luKiwgTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3QqIHBlcm1pc3Npb25SZXF1ZXN0KSBvdmVycmlkZQorICAgIGJvb2wgZGVj
aWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5Kiwg
QVBJOjpTZWN1cml0eU9yaWdpbiosIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KiBwZXJt
aXNzaW9uUmVxdWVzdCkgZmluYWwKICAgICB7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0Tm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3Q+IG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0g
YWRvcHRHUmVmKHdlYmtpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKHBlcm1p
c3Npb25SZXF1ZXN0KSk7CiAgICAgICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVl
c3QobV93ZWJWaWV3LCBXRUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKG5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0LmdldCgpKSk7CkBAIC0yMDQsMTUgKzIwNCwxNSBAQCBwcml2YXRlOgogICAg
IH0KIAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVByb3h5
KiwgV2ViRnJhbWVQcm94eSogZnJhbWUpIG92ZXJyaWRlCisgICAgdm9pZCBwcmludEZyYW1lKFdl
YlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lKSBmaW5hbAogICAgIHsKLSAgICAgICAg
d2Via2l0V2ViVmlld1ByaW50RnJhbWUobV93ZWJWaWV3LCBmcmFtZSk7CisgICAgICAgIHdlYmtp
dFdlYlZpZXdQcmludEZyYW1lKG1fd2ViVmlldywgJmZyYW1lKTsKICAgICB9CiAjZW5kaWYKIAot
ICAgIGJvb2wgY2FuUnVuTW9kYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgYm9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IHZvaWQgcnVuTW9kYWwoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIHJ1bk1vZGFs
KFdlYlBhZ2VQcm94eSopIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXZWJWaWV3UnVuQXNN
b2RhbChtX3dlYlZpZXcpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCShyZXZpc2lvbiAyMjE3NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw4IEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RmV0Y2hlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3BlbiBicm93c2luZyBjb250ZXh0cyAod2lu
ZG93cyBhbmQgdGFicykgaW4gdGhlIGF1dG9tYXRpb24gc2Vzc2lvbi4iLAogICAgICAgICAgICAg
InJldHVybnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb250ZXh0cyIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJCcm93c2luZ0NvbnRleHQiIH0sICJkZXNj
cmlwdGlvbiI6ICJBbGwga25vd24gYnJvd3NpbmcgY29udGV4dHMgYXZhaWxhYmxlIHRvIHRoZSBz
ZXNzaW9uLiIgfQotICAgICAgICAgICAgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJh
c3luYyI6IHRydWUKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAi
Z2V0QnJvd3NpbmdDb250ZXh0IiwKQEAgLTIzNSw3ICsyMzYsOCBAQAogICAgICAgICAgICAgXSwK
ICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29u
dGV4dCIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dCIsICJkZXNjcmlwdGlvbiI6ICJUaGUgYnJv
d3NpbmcgY29udGV4dCBhdmFpbGFibGUgdG8gdGhlIHNlc3Npb24uIiB9Ci0gICAgICAgICAgICBd
CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAog
ICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJjcmVhdGVCcm93c2luZ0NvbnRleHQiLApA
QCAtMjY1LDcgKzI2Nyw4IEBACiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0
byBiZSByZXNpemVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNpemUiLCAiJHJl
ZiI6ICJTaXplIiwgImRlc2NyaXB0aW9uIjogIlRoZSBuZXcgc2l6ZSBmb3IgdGhlIGJyb3dzaW5n
IGNvbnRleHQncyB3aW5kb3cuIiB9Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAg
ICAibmFtZSI6ICJtb3ZlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiLApAQCAtMjczLDcgKzI3Niw4
IEBACiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRsZSIsICJkZXNjcmlwdGlv
biI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0byBiZSBtb3ZlZC4iIH0s
CiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvcmlnaW4iLCAiJHJlZiI6ICJQb2ludCIsICJk
ZXNjcmlwdGlvbiI6ICJUaGUgbmV3IG9yaWdpbiBmb3IgdGhlIGJyb3dzaW5nIGNvbnRleHQncyB3
aW5kb3cuIFRoZSBwb3NpdGlvbiBpcyBpbnRlcnByZXRlZCBpbiBzY3JlZW4gY29vcmRpbmF0ZSBz
cGFjZSwgcmVsYXRpdmUgdG8gdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4uIiB9
Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1
ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJuYXZpZ2F0ZUJy
b3dzaW5nQ29udGV4dCIsCkBAIC0zNjUsNyArMzY5LDggQEAKICAgICAgICAgICAgIF0sCiAgICAg
ICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvc2l0aW9u
IiwgIiRyZWYiOiAiUG9pbnQiLCAiZGVzY3JpcHRpb24iOiAiVGhlIHVwZGF0ZWQgcG9zaXRpb24g
b2YgdGhlIG1vdXNlIGN1cnNvciwgc3BlY2lmaWVkIGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzLiIg
fQotICAgICAgICAgICAgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJhc3luYyI6IHRy
dWUKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicGVyZm9ybUtl
eWJvYXJkSW50ZXJhY3Rpb25zIiwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lv
biAyMjE3NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDU2ICsyMDcsNjggQEAgU3Ry
aW5nIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpoYW5kbGVGb3JXZQogICAgIHJldHVybiBoYW5kbGVG
b3JXZWJGcmFtZUlEKHdlYkZyYW1lUHJveHkuZnJhbWVJRCgpKTsKIH0KIAotUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4gV2ViQXV0b21hdGlv
blNlc3Npb246OmJ1aWxkQnJvd3NpbmdDb250ZXh0Rm9yUGFnZShXZWJQYWdlUHJveHkmIHBhZ2Up
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2Uo
V2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZTsKLSAgICBwYWdlLmdldFdpbmRv
d0ZyYW1lKHdpbmRvd0ZyYW1lKTsKLQotICAgIGF1dG8gb3JpZ2luT2JqZWN0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRYKHdp
bmRvd0ZyYW1lLngoKSkKLSAgICAgICAgLnNldFkod2luZG93RnJhbWUueSgpKQotICAgICAgICAu
cmVsZWFzZSgpOwotCi0gICAgYXV0byBzaXplT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6U2l6ZTo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFdpZHRoKHdpbmRvd0ZyYW1l
LndpZHRoKCkpCi0gICAgICAgIC5zZXRIZWlnaHQod2luZG93RnJhbWUuaGVpZ2h0KCkpCi0gICAg
ICAgIC5yZWxlYXNlKCk7Ci0KLSAgICBTdHJpbmcgaGFuZGxlID0gaGFuZGxlRm9yV2ViUGFnZVBy
b3h5KHBhZ2UpOwotCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dDo6Y3JlYXRlKCkKLSAgICAgICAgLnNldEhhbmRsZShoYW5kbGUpCi0g
ICAgICAgIC5zZXRBY3RpdmUobV9hY3RpdmVCcm93c2luZ0NvbnRleHRIYW5kbGUgPT0gaGFuZGxl
KQotICAgICAgICAuc2V0VXJsKHBhZ2UucGFnZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpKQotICAg
ICAgICAuc2V0V2luZG93T3JpZ2luKFdURk1vdmUob3JpZ2luT2JqZWN0KSkKLSAgICAgICAgLnNl
dFdpbmRvd1NpemUoV1RGTW92ZShzaXplT2JqZWN0KSkKLSAgICAgICAgLnJlbGVhc2UoKTsKKyAg
ICBwYWdlLmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGFjdGl2ZVVSTCA9IHBhZ2UucGFnZUxvYWRTdGF0ZSgp
LmFjdGl2ZVVSTCgpLCBoYW5kbGUgPSBoYW5kbGVGb3JXZWJQYWdlUHJveHkocGFnZSksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFdlYkNvcmU6OkZsb2F0
UmVjdCB3aW5kb3dGcmFtZSkgeworICAgICAgICBhdXRvIG9yaWdpbk9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50OjpjcmVhdGUoKQorICAgICAgICAgICAgLnNl
dFgod2luZG93RnJhbWUueCgpKQorICAgICAgICAgICAgLnNldFkod2luZG93RnJhbWUueSgpKQor
ICAgICAgICAgICAgLnJlbGVhc2UoKTsKKworICAgICAgICBhdXRvIHNpemVPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTaXplOjpjcmVhdGUoKQorICAgICAgICAgICAg
LnNldFdpZHRoKHdpbmRvd0ZyYW1lLndpZHRoKCkpCisgICAgICAgICAgICAuc2V0SGVpZ2h0KHdp
bmRvd0ZyYW1lLmhlaWdodCgpKQorICAgICAgICAgICAgLnJlbGVhc2UoKTsKKworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHQ6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0SGFuZGxlKGhhbmRsZSkKKyAgICAg
ICAgICAgIC5zZXRBY3RpdmUobV9hY3RpdmVCcm93c2luZ0NvbnRleHRIYW5kbGUgPT0gaGFuZGxl
KQorICAgICAgICAgICAgLnNldFVybChhY3RpdmVVUkwpCisgICAgICAgICAgICAuc2V0V2luZG93
T3JpZ2luKFdURk1vdmUob3JpZ2luT2JqZWN0KSkKKyAgICAgICAgICAgIC5zZXRXaW5kb3dTaXpl
KFdURk1vdmUoc2l6ZU9iamVjdCkpCisgICAgICAgICAgICAucmVsZWFzZSgpKTsKKyAgICB9KTsK
IH0KIAogLy8gUGxhdGZvcm0taW5kZXBlbmRlbnQgQ29tbWFuZHMuCiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+PiYgY29udGV4dHMpCit2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXROZXh0Q29udGV4dChSZWY8V2ViQXV0b21hdGlvblNl
c3Npb24+JiYgcHJvdGVjdGVkVGhpcywgVmVjdG9yPFJlZjxXZWJQYWdlUHJveHk+PiYmIHBhZ2Vz
LCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pj4gY29udGV4dHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIGNv
bnRleHRzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pjo6Y3JlYXRlKCk7Ci0KKyAgICBpZiAocGFnZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKGNvbnRl
eHRzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0byBwYWdlID0gcGFnZXMudGFr
ZUxhc3QoKTsKKyAgICBidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UocGFnZS5nZXQoKSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBwYWdlcyA9IFdURk1v
dmUocGFnZXMpLCBjb250ZXh0cyA9IFdURk1vdmUoY29udGV4dHMpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0PiYmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICBjb250ZXh0cy0+YWRkSXRl
bShXVEZNb3ZlKGNvbnRleHQpKTsKKyAgICAgICAgZ2V0TmV4dENvbnRleHQoV1RGTW92ZShwcm90
ZWN0ZWRUaGlzKSwgV1RGTW92ZShwYWdlcyksIFdURk1vdmUoY29udGV4dHMpLCBXVEZNb3ZlKGNh
bGxiYWNrKSk7CisgICAgfSk7Cit9CisgICAgCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpn
ZXRCcm93c2luZ0NvbnRleHRzKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBS
ZWY8R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYmIGNhbGxiYWNrKQoreworICAgIFZlY3Rv
cjxSZWY8V2ViUGFnZVByb3h5Pj4gcGFnZXM7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9w
cm9jZXNzUG9vbC0+cHJvY2Vzc2VzKCkpIHsKICAgICAgICAgZm9yIChhdXRvKiBwYWdlIDogcHJv
Y2Vzcy0+cGFnZXMoKSkgewogICAgICAgICAgICAgQVNTRVJUKHBhZ2UpOwogICAgICAgICAgICAg
aWYgKCFwYWdlLT5pc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24oKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgY29udGV4dHMtPmFkZEl0ZW0oYnVpbGRCcm93c2luZ0Nv
bnRleHRGb3JQYWdlKCpwYWdlKSk7CisgICAgICAgICAgICBwYWdlcy5hcHBlbmQoKnBhZ2UpOwog
ICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGdldE5leHRDb250ZXh0KG1ha2VSZWYoKnRoaXMp
LCBXVEZNb3ZlKHBhZ2VzKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pjo6Y3JlYXRlKCksIFdURk1vdmUo
Y2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdD
b250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGhhbmRsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dD4mIGNvbnRleHQpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRCcm93c2lu
Z0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgaGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKLSAgICBjb250ZXh0ID0gYnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdl
KCpwYWdlKTsKKyAgICBidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UoKnBhZ2UsIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXSAoUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkJyb3dzaW5nQ29udGV4dD4mJiBjb250ZXh0KSB7CisgICAgICAgIGNhbGxiYWNrLT5zZW5k
U3VjY2VzcyhXVEZNb3ZlKGNvbnRleHQpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBTdHJpbmcqIGhhbmRsZSkKQEAgLTMwMSw3ICszMTMsNyBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpzd2l0Y2hUb0Jyb3dzCiAgICAgcGFnZS0+cHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkZvY3VzRnJhbWUocGFnZS0+
cGFnZUlEKCksIGZyYW1lSUQudmFsdWUoKSksIDApOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpyZXNpemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JiBzaXplT2JqZWN0KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
cmVzaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgc2l6ZU9iamVjdCwgUmVmPFJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAgLTMyNCwyNyArMzM2LDI4IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd08KICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZyYW1lOwotICAgIHBhZ2UtPmdldFdpbmRvd0Zy
YW1lKG9yaWdpbmFsRnJhbWUpOworICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRp
b25IYW5kbGVyKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigq
cGFnZSksIHdpZHRoLCBoZWlnaHRdKFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZyYW1lKSBt
dXRhYmxlIHsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG5ld0ZyYW1lID0gV2ViQ29yZTo6
RmxvYXRSZWN0KG9yaWdpbmFsRnJhbWUubG9jYXRpb24oKSwgV2ViQ29yZTo6RmxvYXRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgaWYgKG5ld0ZyYW1lID09IG9yaWdpbmFsRnJhbWUpCisg
ICAgICAgICAgICByZXR1cm4gY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAKLSAgICBXZWJDb3Jl
OjpGbG9hdFJlY3QgbmV3RnJhbWUgPSBXZWJDb3JlOjpGbG9hdFJlY3Qob3JpZ2luYWxGcmFtZS5s
b2NhdGlvbigpLCBXZWJDb3JlOjpGbG9hdFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIGlmIChu
ZXdGcmFtZSA9PSBvcmlnaW5hbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwYWdlLT5z
ZXRXaW5kb3dGcmFtZShuZXdGcmFtZSk7CisgICAgICAgIHBhZ2UtPnNldFdpbmRvd0ZyYW1lKG5l
d0ZyYW1lKTsKIAotI2lmICFQTEFURk9STShHVEspCi0gICAgLy8gSWYgbm90aGluZyBjaGFuZ2Vk
IGF0IGFsbCwgaXQncyBwcm9iYWJseSBmYWlyIHRvIHJlcG9ydCB0aGF0IHNvbWV0aGluZyB3ZW50
IHdyb25nLgotICAgIC8vIChXZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgcmVxdWVzdGVkIGZyYW1l
IHNpemUgd2lsbCBiZSBob25vcmVkIGV4YWN0bHksIGhvd2V2ZXIuKQotICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCB1cGRhdGVkRnJhbWU7Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWUodXBkYXRlZEZy
YW1lKTsKLSAgICBpZiAob3JpZ2luYWxGcmFtZSA9PSB1cGRhdGVkRnJhbWUpCi0gICAgICAgIEZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUg
d2luZG93IHNpemUgd2FzIGV4cGVjdGVkIHRvIGhhdmUgY2hhbmdlZCwgYnV0IGRpZCBub3QuIik7
CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyNl
bHNlCisgICAgICAgIC8vIElmIG5vdGhpbmcgY2hhbmdlZCBhdCBhbGwsIGl0J3MgcHJvYmFibHkg
ZmFpciB0byByZXBvcnQgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4KKyAgICAgICAgLy8gKFdl
IGNhbid0IGFzc3VtZSB0aGF0IHRoZSByZXF1ZXN0ZWQgZnJhbWUgc2l6ZSB3aWxsIGJlIGhvbm9y
ZWQgZXhhY3RseSwgaG93ZXZlci4pCisgICAgICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENv
bXBsZXRpb25IYW5kbGVyKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBvcmlnaW5hbEZy
YW1lXShXZWJDb3JlOjpGbG9hdFJlY3QgdXBkYXRlZEZyYW1lKSB7CisgICAgICAgICAgICBpZiAo
b3JpZ2luYWxGcmFtZSA9PSB1cGRhdGVkRnJhbWUpCisgICAgICAgICAgICAgICAgY2FsbGJhY2st
PnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxT
KEludGVybmFsRXJyb3IsICJUaGUgd2luZG93IHNpemUgd2FzIGV4cGVjdGVkIHRvIGhhdmUgY2hh
bmdlZCwgYnV0IGRpZCBub3QuIikpOworICAgICAgICB9KTsKICNlbmRpZgorICAgIH0pOwogI2Vu
ZGlmCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBwb3NpdGlvbk9iamVj
dCkKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4
dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBwb3NpdGlvbk9iamVjdCwgUmVm
PE1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogI2lm
IFBMQVRGT1JNKElPUykKICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1l
bnRlZCk7CkBAIC0zNjgsMjIgKzM4MSwyNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpt
b3ZlV2luZG93T2ZCCiAgICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05v
dEZvdW5kKTsKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZyYW1lOwotICAgIHBh
Z2UtPmdldFdpbmRvd0ZyYW1lKG9yaWdpbmFsRnJhbWUpOworICAgIHBhZ2UtPmdldFdpbmRvd0Zy
YW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBw
YWdlID0gbWFrZVJlZigqcGFnZSksIHgsIHldKFdlYkNvcmU6OkZsb2F0UmVjdCBvcmlnaW5hbEZy
YW1lKSBtdXRhYmxlIHsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBuZXdGcmFtZSA9IFdlYkNv
cmU6OkZsb2F0UmVjdChXZWJDb3JlOjpGbG9hdFBvaW50KHgsIHkpLCBvcmlnaW5hbEZyYW1lLnNp
emUoKSk7Ci0gICAgaWYgKG5ld0ZyYW1lID09IG9yaWdpbmFsRnJhbWUpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG5ld0ZyYW1lID0gV2ViQ29yZTo6RmxvYXRS
ZWN0KFdlYkNvcmU6OkZsb2F0UG9pbnQoeCwgeSksIG9yaWdpbmFsRnJhbWUuc2l6ZSgpKTsKKyAg
ICAgICAgaWYgKG5ld0ZyYW1lID09IG9yaWdpbmFsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4g
Y2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAKLSAgICBwYWdlLT5zZXRXaW5kb3dGcmFtZShuZXdG
cmFtZSk7CisgICAgICAgIHBhZ2UtPnNldFdpbmRvd0ZyYW1lKG5ld0ZyYW1lKTsKIAotI2lmICFQ
TEFURk9STShHVEspCi0gICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkIGF0IGFsbCwgaXQncyBwcm9i
YWJseSBmYWlyIHRvIHJlcG9ydCB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLgotICAgIC8vIChX
ZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgcmVxdWVzdGVkIGZyYW1lIHNpemUgd2lsbCBiZSBob25v
cmVkIGV4YWN0bHksIGhvd2V2ZXIuKQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB1cGRhdGVkRnJh
bWU7Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWUodXBkYXRlZEZyYW1lKTsKLSAgICBpZiAob3Jp
Z2luYWxGcmFtZSA9PSB1cGRhdGVkRnJhbWUpCi0gICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgd2luZG93IHBvc2l0aW9uIHdh
cyBleHBlY3RlZCB0byBoYXZlIGNoYW5nZWQsIGJ1dCBkaWQgbm90LiIpOworI2lmIFBMQVRGT1JN
KEdUSykKKyAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CisjZWxzZQorICAgICAgICAv
LyBJZiBub3RoaW5nIGNoYW5nZWQgYXQgYWxsLCBpdCdzIHByb2JhYmx5IGZhaXIgdG8gcmVwb3J0
IHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuCisgICAgICAgIC8vIChXZSBjYW4ndCBhc3N1bWUg
dGhhdCB0aGUgcmVxdWVzdGVkIGZyYW1lIHNpemUgd2lsbCBiZSBob25vcmVkIGV4YWN0bHksIGhv
d2V2ZXIuKQorICAgICAgICBwYWdlLT5nZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxl
cihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgb3JpZ2luYWxGcmFtZV0oV2ViQ29yZTo6
RmxvYXRSZWN0IHVwZGF0ZWRGcmFtZSkgeworICAgICAgICAgICAgaWYgKG9yaWdpbmFsRnJhbWUg
PT0gdXBkYXRlZEZyYW1lKQorICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShT
VFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9y
LCAiVGhlIHdpbmRvdyBwb3NpdGlvbiB3YXMgZXhwZWN0ZWQgdG8gaGF2ZSBjaGFuZ2VkLCBidXQg
ZGlkIG5vdC4iKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2FsbGJhY2st
PnNlbmRTdWNjZXNzKCk7CisgICAgICAgIH0pOwogI2VuZGlmCisgICAgfSk7CiAjZW5kaWYKIH0K
IApAQCAtMTIyMSw3ICsxMjM5LDcgQEAgc3RhdGljIFdlYkV2ZW50OjpNb2RpZmllcnMgcHJvdG9j
b2xNb2RpZgogfQogI2VuZGlmIC8vIFVTRShBUFBLSVQpCiAKLXZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1vdXNlQnV0
dG9uU3RyaW5nLCBjb25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGtleU1vZGlmaWVyU3RyaW5ncywgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50PiYgdXBkYXRlZFBvc2l0aW9uT2JqZWN0
KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oSW5z
cGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcmVxdWVzdGVkUG9zaXRpb25PYmplY3Qs
IGNvbnN0IFN0cmluZyYgbW91c2VCdXR0b25TdHJpbmcsIGNvbnN0IFN0cmluZyYgbW91c2VJbnRl
cmFjdGlvblN0cmluZywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYga2V5TW9kaWZp
ZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFj
aykKIHsKICNpZiAhVVNFKEFQUEtJVCkgJiYgIVBMQVRGT1JNKEdUSykKICAgICBGQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1lbnRlZCk7CkBAIC0xMjM4LDQxICsxMjU2LDQxIEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUkKICAgICBpZiAoIXJlcXVl
c3RlZFBvc2l0aW9uT2JqZWN0LmdldERvdWJsZShXVEY6OkFTQ0lJTGl0ZXJhbCgieSIpLCB5KSkK
ICAgICAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1Bh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3knIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBXZWJD
b3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWU7Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWUod2lu
ZG93RnJhbWUpOwotCi0gICAgeCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHgpLCB3aW5kb3dG
cmFtZS5zaXplKCkud2lkdGgoKSk7Ci0gICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkg
KyBwYWdlLT50b3BDb250ZW50SW5zZXQoKSksIHdpbmRvd0ZyYW1lLnNpemUoKS5oZWlnaHQoKSk7
Ci0KLSAgICBXZWJDb3JlOjpJbnRQb2ludCB2aWV3UG9zaXRpb24gPSBXZWJDb3JlOjpJbnRQb2lu
dChzdGF0aWNfY2FzdDxpbnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkpKTsKLQotICAgIGF1dG8g
cGFyc2VkSW50ZXJhY3Rpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVy
czo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246Ok1vdXNlSW50ZXJhY3Rpb24+KG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcpOwotICAgIGlmICgh
cGFyc2VkSW50ZXJhY3Rpb24pCi0gICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnRlcmFjdGlvbicg
aXMgaW52YWxpZC4iKTsKLQotICAgIGF1dG8gcGFyc2VkQnV0dG9uID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbj4obW91c2VCdXR0b25TdHJpbmcp
OwotICAgIGlmICghcGFyc2VkQnV0dG9uKQotICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnYnV0dG9u
JyBpcyBpbnZhbGlkLiIpOwotCiAgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBrZXlNb2RpZmllcnMg
PSAoV2ViRXZlbnQ6Ok1vZGlmaWVycykwOwogICAgIGZvciAoYXV0byBpdCA9IGtleU1vZGlmaWVy
U3RyaW5ncy5iZWdpbigpOyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3MuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgU3RyaW5nIG1vZGlmaWVyU3RyaW5nOwogICAgICAgICBpZiAoIWl0LT5nZXQoKS0+
YXNTdHJpbmcobW9kaWZpZXJTdHJpbmcpKQotICAgICAgICAgICAgRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ21v
ZGlmaWVycycgaXMgaW52YWxpZC4iKTsKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay0+c2Vu
ZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoSW52
YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ21vZGlmaWVycycgaXMgaW52YWxpZC4iKSk7
CiAKICAgICAgICAgYXV0byBwYXJzZWRNb2RpZmllciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6S2V5TW9kaWZpZXI+KG1vZGlmaWVyU3RyaW5nKTsKICAgICAgICAg
aWYgKCFwYXJzZWRNb2RpZmllcikKLSAgICAgICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBIG1vZGlmaWVyIGluIHRoZSAnbW9k
aWZpZXJzJyBhcnJheSBpcyBpbnZhbGlkLiIpOworICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNr
LT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlM
UyhJbnZhbGlkUGFyYW1ldGVyLCAiQSBtb2RpZmllciBpbiB0aGUgJ21vZGlmaWVycycgYXJyYXkg
aXMgaW52YWxpZC4iKSk7CiAgICAgICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgZW51bVZhbHVlID0g
cHJvdG9jb2xNb2RpZmllclRvV2ViRXZlbnRNb2RpZmllcihwYXJzZWRNb2RpZmllci52YWx1ZSgp
KTsKICAgICAgICAga2V5TW9kaWZpZXJzID0gKFdlYkV2ZW50OjpNb2RpZmllcnMpKGVudW1WYWx1
ZSB8IGtleU1vZGlmaWVycyk7CiAgICAgfQorICAgIAorICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1l
V2l0aENvbXBsZXRpb25IYW5kbGVyKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwg
eCwgeSwgbW91c2VJbnRlcmFjdGlvblN0cmluZywgbW91c2VCdXR0b25TdHJpbmcsIGtleU1vZGlm
aWVyc10oV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKSBtdXRhYmxlIHsKIAotICAgIHBs
YXRmb3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKCpwYWdlLCB2aWV3UG9zaXRpb24sIHBhcnNl
ZEludGVyYWN0aW9uLnZhbHVlKCksIHBhcnNlZEJ1dHRvbi52YWx1ZSgpLCBrZXlNb2RpZmllcnMp
OworICAgICAgICB4ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1lLnNp
emUoKS53aWR0aCgpKTsKKyAgICAgICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkgKyBw
YWdlLT50b3BDb250ZW50SW5zZXQoKSksIHdpbmRvd0ZyYW1lLnNpemUoKS5oZWlnaHQoKSk7CiAK
LSAgICB1cGRhdGVkUG9zaXRpb25PYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpQb2ludDo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFgoeCkKLSAgICAgICAgLnNldFkoeSAt
IHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKQotICAgICAgICAucmVsZWFzZSgpOworICAgICAgICBX
ZWJDb3JlOjpJbnRQb2ludCB2aWV3UG9zaXRpb24gPSBXZWJDb3JlOjpJbnRQb2ludChzdGF0aWNf
Y2FzdDxpbnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkpKTsKKworICAgICAgICBhdXRvIHBhcnNl
ZEludGVyYWN0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpN
b3VzZUludGVyYWN0aW9uPihtb3VzZUludGVyYWN0aW9uU3RyaW5nKTsKKyAgICAgICAgaWYgKCFw
YXJzZWRJbnRlcmFjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay0+c2VuZEZhaWx1
cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2ludGVyYWN0aW9uJyBpcyBpbnZhbGlkLiIpKTsKKwor
ICAgICAgICBhdXRvIHBhcnNlZEJ1dHRvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6TW91c2VCdXR0b24+KG1vdXNlQnV0dG9uU3RyaW5nKTsKKyAgICAgICAgaWYg
KCFwYXJzZWRCdXR0b24pCisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2stPnNlbmRGYWlsdXJl
KFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKEludmFsaWRQYXJh
bWV0ZXIsICJUaGUgcGFyYW1ldGVyICdidXR0b24nIGlzIGludmFsaWQuIikpOworCisgICAgICAg
IHBsYXRmb3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKHBhZ2UsIHZpZXdQb3NpdGlvbiwgcGFy
c2VkSW50ZXJhY3Rpb24udmFsdWUoKSwgcGFyc2VkQnV0dG9uLnZhbHVlKCksIGtleU1vZGlmaWVy
cyk7CisKKyAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OlBvaW50OjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFgoeCkKKyAgICAg
ICAgICAgIC5zZXRZKHkgLSBwYWdlLT50b3BDb250ZW50SW5zZXQoKSkKKyAgICAgICAgICAgIC5y
ZWxlYXNlKCkpOworICAgIH0pOwogI2VuZGlmIC8vIFVTRShBUFBLSVQpCiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmgJKHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDIwICsxMTUsMjAgQEAgcHVibGljOgogICAgIC8vIGFuZCB0aGUgLS1wbGF0Zm9ybSBhcmd1
bWVudCBwYXNzZWQgdG8gdGhlIHByb3RvY29sIGJpbmRpbmdzIGdlbmVyYXRvci4KIAogICAgIC8v
IFBsYXRmb3JtOiBHZW5lcmljCi0gICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHRzKEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pj4mKSBvdmVycmlkZTsK
LSAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dz
aW5nQ29udGV4dD4mKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoSW5z
cGVjdG9yOjpFcnJvclN0cmluZyYsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRzQ2FsbGJhY2s+JiYp
IGZpbmFsOworICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZp
bmFsOwogICAgIHZvaWQgY3JlYXRlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmLCBTdHJpbmcqKSBvdmVycmlkZTsKICAgICB2b2lkIGNsb3NlQnJvd3NpbmdDb250ZXh0KElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lk
IHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1l
SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHNpemUpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdp
bmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHBvc2l0aW9uKSBv
dmVycmlkZTsKKyAgICB2b2lkIHJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QmIHNpemUsIFJlZjxSZXNpemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmKSBmaW5hbDsKKyAgICB2b2lkIG1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBwb3NpdGlvbiwgUmVmPE1vdmVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKICAgICB2b2lkIG5hdmlnYXRlQnJvd3NpbmdDb250
ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5n
LCBjb25zdCBpbnQqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5n
Q29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGludCogb3B0aW9uYWxQ
YWdlTG9hZFRpbWVvdXQsIFJlZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBv
dmVycmlkZTsKICAgICB2b2lkIGdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneVN0cmluZywgY29uc3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVm
PEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZv
aWQgcmVsb2FkQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29u
c3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4
dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21w
bGV0ZShJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGludCogb3B0aW9uYWxQYWdl
TG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgYXJndW1lbnRzLCBjb25zdCBib29sKiBvcHRp
b25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNvbnN0IGludCogb3B0aW9uYWxD
YWxsYmFja1RpbWVvdXQsIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+JiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgcmVxdWVzdGVkUG9zaXRpb24sIGNvbnN0IFN0cmluZyYgbW91c2VCdXR0b24sIGNvbnN0IFN0
cmluZyYgbW91c2VJbnRlcmFjdGlvbiwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYg
a2V5TW9kaWZpZXJzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9p
bnQ+JiB1cGRhdGVkUG9zaXRpb24pIG92ZXJyaWRlOworICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50
ZXJhY3Rpb24oSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcmVxdWVzdGVkUG9zaXRpb24sIGNvbnN0
IFN0cmluZyYgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgbW91c2VJbnRlcmFjdGlvbiwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYga2V5TW9kaWZpZXJzLCBSZWY8UGVyZm9ybU1v
dXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJikgZmluYWw7CiAgICAgdm9pZCBwZXJmb3JtS2V5Ym9h
cmRJbnRlcmFjdGlvbnMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFu
ZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbnRlcmFjdGlvbnMsIFJlZjxQ
ZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCB0YWtlU2NyZWVuc2hvdChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbE5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5l
ZWRlZCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQg
cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVI
YW5kbGUsIGNvbnN0IGludCogb3B0aW9uYWxPcmRpbmFsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
TmFtZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZlQ2hpbGRG
cmFtZUhhbmRsZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKQEAgLTE2MCw3ICsxNjAsOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGNv
bnN0IFN0cmluZyYpOwogICAgIFN0cmluZyBoYW5kbGVGb3JXZWJQYWdlUHJveHkoY29uc3QgV2Vi
UGFnZVByb3h5Jik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dD4gYnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKFdlYlBhZ2VQcm94
eSYpOworICAgIHZvaWQgYnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKFdlYlBhZ2VQcm94eSYs
IEZ1bmN0aW9uPHZvaWQoUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dz
aW5nQ29udGV4dD4mJik+JiYpOworICAgIHZvaWQgZ2V0TmV4dENvbnRleHQoUmVmPFdlYkF1dG9t
YXRpb25TZXNzaW9uPiYmLCBWZWN0b3I8UmVmPFdlYlBhZ2VQcm94eT4+JiYsIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93
c2luZ0NvbnRleHQ+PiwgUmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uOjpHZXRCcm93c2luZ0NvbnRl
eHRzQ2FsbGJhY2s+JiYpOwogCiAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gd2ViRnJhbWVJ
REZvckhhbmRsZShjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgaGFuZGxlRm9yV2ViRnJhbWVJ
RCh1aW50NjRfdCBmcmFtZUlEKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1VJRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9VSURlbGVnYXRlLmgJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1VJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGJvb2wgZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3QoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmln
aW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94
eSYpIGZpbmFsOwogICAgICAgICBib29sIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvck9yaWdp
bihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIEFQ
STo6U2VjdXJpdHlPcmlnaW4mLCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYpIGZpbmFs
OwogICAgICAgICB2b2lkIG1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKFdlYkNvcmU6Ok1lZGlh
UHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncykgZmluYWw7Ci0gICAgICAgIHZvaWQgcHJpbnRGcmFt
ZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KikgZmluYWw7CisgICAgICAgIHZvaWQgcHJp
bnRGcmFtZShXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JikgZmluYWw7CiAjaWYgUExBVEZP
Uk0oSU9TKQogI2lmIEhBVkUoQVBQX0xJTktTKQogICAgICAgICBib29sIHNob3VsZEluY2x1ZGVB
cHBMaW5rQWN0aW9uc0ZvckVsZW1lbnQoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikgZmluYWw7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0JKHJl
dmlzaW9uIDIyMTc3MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdh
dGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTgwMSwxMCArODAxLDggQEAgdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6cmVhY2hlZEFwcGxpYwogICAgIH0pLmdldCgpXTsKIH0KIAotdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5
KiB3ZWJGcmFtZVByb3h5KQordm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZShX
ZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiB3ZWJGcmFtZVByb3h5KQogewotICAgIEFTU0VS
VF9BUkcod2ViRnJhbWVQcm94eSwgd2ViRnJhbWVQcm94eSk7Ci0KICAgICBpZiAoIW1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UHJpbnRGcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC04MTIsNyArODEwLDcgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRG
cmFtZShXZQogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dl
YlZpZXcgcHJpbnRGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZSh3ZWJGcmFt
ZVByb3h5LT5mcmFtZUlEKCkpKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVs
ZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBwcmludEZyYW1lOndyYXBwZXIo
QVBJOjpGcmFtZUhhbmRsZTo6Y3JlYXRlKHdlYkZyYW1lUHJveHkuZnJhbWVJRCgpKSldOwogfQog
CiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjbG9zZShXZWJQYWdlUHJveHkqKQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9u
IDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjI4LDcgKzE2MjgsNyBAQCBOU1ByaW50T3BlcmF0aW9uICpX
ZWJWaWV3SW1wbDo6cHJpbnRPcGVyCiAKICAgICAvLyBGSVhNRTogSWYgdGhlIGZyYW1lIGNhbm5v
dCBiZSBwcmludGVkIChlLmcuIGlmIGl0IGNvbnRhaW5zIGFuIGVuY3J5cHRlZCBQREYgdGhhdCBk
aXNhbGxvd3MKICAgICAvLyBwcmludGluZyksIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBu
aWwuCi0gICAgUmV0YWluUHRyPFdLUHJpbnRpbmdWaWV3PiBwcmludGluZ1ZpZXcgPSBhZG9wdE5T
KFtbV0tQcmludGluZ1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWVQcm94eTomZnJhbWUgdmlldzpt
X3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCldKTsKKyAgICBSZXRhaW5QdHI8V0tQcmludGluZ1ZpZXc+
IHByaW50aW5nVmlldyA9IGFkb3B0TlMoW1tXS1ByaW50aW5nVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZVByb3h5OmZyYW1lIHZpZXc6bV92aWV3LmdldEF1dG9yZWxlYXNlZCgpXSk7CiAgICAgLy8g
TlNQcmludE9wZXJhdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHZpZXcuCiAgICAgTlNQcmlu
dE9wZXJhdGlvbiAqcHJpbnRPcGVyYXRpb24gPSBbTlNQcmludE9wZXJhdGlvbiBwcmludE9wZXJh
dGlvbldpdGhWaWV3OnByaW50aW5nVmlldy5nZXQoKSBwcmludEluZm86cHJpbnRJbmZvXTsKICAg
ICBbcHJpbnRPcGVyYXRpb24gc2V0Q2FuU3Bhd25TZXBhcmF0ZVRocmVhZDpZRVNdOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgJKHJldmlzaW9u
IDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIEBpbnRlcmZhY2UgV0tQcmludGluZ1Zp
ZXcgOiBOU1ZpZXcgewogICAgIE5TVGltZXIgKl9hdXRvZGlzcGxheVJlc3VtZVRpbWVyOwogfQog
Ci0tIChpZClpbml0V2l0aEZyYW1lUHJveHk6KFdlYktpdDo6V2ViRnJhbWVQcm94eSopZnJhbWUg
dmlldzooTlNWaWV3ICopd2tWaWV3OworLSAoaWQpaW5pdFdpdGhGcmFtZVByb3h5OihXZWJLaXQ6
OldlYkZyYW1lUHJveHkmKWZyYW1lIHZpZXc6KE5TVmlldyAqKXdrVmlldzsKIAogQGVuZAogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCShy
ZXZpc2lvbiAyMjE3NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGlu
Z1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDEzICs1MSwxMyBAQCBzdGF0aWMgQk9PTCBp
c0ZvcmNpbmdQcmV2aWV3VXBkYXRlOwogCiBAaW1wbGVtZW50YXRpb24gV0tQcmludGluZ1ZpZXcK
IAotLSAoaWQpaW5pdFdpdGhGcmFtZVByb3h5OihXZWJLaXQ6OldlYkZyYW1lUHJveHkqKWZyYW1l
IHZpZXc6KE5TVmlldyAqKXdrVmlldworLSAoaWQpaW5pdFdpdGhGcmFtZVByb3h5OihXZWJLaXQ6
OldlYkZyYW1lUHJveHkmKWZyYW1lIHZpZXc6KE5TVmlldyAqKXdrVmlldwogewogICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07IC8vIE5vIGZyYW1lIHJlY3QgdG8gcGFzcyB0byBOU1ZpZXcuCiAgICAg
aWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgX3dlYkZyYW1lID0gZnJhbWU7
CisgICAgX3dlYkZyYW1lID0gJmZyYW1lOwogICAgIF93a1ZpZXcgPSB3a1ZpZXc7CiAKICAgICBy
ZXR1cm4gc2VsZjsKQEAgLTE1MSw4ICsxNTEsOCBAQCAtICh2b2lkKV9hZGp1c3RQcmludGluZ01h
cmdpbnNGb3JIZWFkZXJBCiAgICAgfQogICAgIAogICAgIENHRmxvYXQgc2NhbGUgPSBbaW5mbyBz
Y2FsaW5nRmFjdG9yXTsKLSAgICBbaW5mbyBzZXRUb3BNYXJnaW46b3JpZ2luYWxUb3BNYXJnaW4g
KyBfd2ViRnJhbWUtPnBhZ2UoKS0+aGVhZGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSkgKiBzY2Fs
ZV07Ci0gICAgW2luZm8gc2V0Qm90dG9tTWFyZ2luOm9yaWdpbmFsQm90dG9tTWFyZ2luICsgX3dl
YkZyYW1lLT5wYWdlKCktPmZvb3RlckhlaWdodChfd2ViRnJhbWUuZ2V0KCkpICogc2NhbGVdOwor
ICAgIFtpbmZvIHNldFRvcE1hcmdpbjpvcmlnaW5hbFRvcE1hcmdpbiArIF93ZWJGcmFtZS0+cGFn
ZSgpLT5oZWFkZXJIZWlnaHQoKl93ZWJGcmFtZSkgKiBzY2FsZV07CisgICAgW2luZm8gc2V0Qm90
dG9tTWFyZ2luOm9yaWdpbmFsQm90dG9tTWFyZ2luICsgX3dlYkZyYW1lLT5wYWdlKCktPmZvb3Rl
ckhlaWdodCgqX3dlYkZyYW1lKSAqIHNjYWxlXTsKIH0KIAogLSAoQk9PTClfaXNQcmludGluZ1By
ZXZpZXcKQEAgLTYzNywxOCArNjM3LDE4IEBAIC0gKHZvaWQpZHJhd1BhZ2VCb3JkZXJXaXRoU2l6
ZTooTlNTaXplKWIKICAgICBOU1NpemUgcGFwZXJTaXplID0gW3ByaW50SW5mbyBwYXBlclNpemVd
OwogICAgIENHRmxvYXQgaGVhZGVyRm9vdGVyTGVmdCA9IFtwcmludEluZm8gbGVmdE1hcmdpbl0g
LyBzY2FsZTsKICAgICBDR0Zsb2F0IGhlYWRlckZvb3RlcldpZHRoID0gKHBhcGVyU2l6ZS53aWR0
aCAtIChbcHJpbnRJbmZvIGxlZnRNYXJnaW5dICsgW3ByaW50SW5mbyByaWdodE1hcmdpbl0pKSAv
IHNjYWxlOwotICAgIE5TUmVjdCBmb290ZXJSZWN0ID0gTlNNYWtlUmVjdChoZWFkZXJGb290ZXJM
ZWZ0LCBbcHJpbnRJbmZvIGJvdHRvbU1hcmdpbl0gLyBzY2FsZSAtIF93ZWJGcmFtZS0+cGFnZSgp
LT5mb290ZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSwgaGVhZGVyRm9vdGVyV2lkdGgsIF93ZWJG
cmFtZS0+cGFnZSgpLT5mb290ZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSk7Ci0gICAgTlNSZWN0
IGhlYWRlclJlY3QgPSBOU01ha2VSZWN0KGhlYWRlckZvb3RlckxlZnQsIChwYXBlclNpemUuaGVp
Z2h0IC0gW3ByaW50SW5mbyB0b3BNYXJnaW5dKSAvIHNjYWxlLCBoZWFkZXJGb290ZXJXaWR0aCwg
X3dlYkZyYW1lLT5wYWdlKCktPmhlYWRlckhlaWdodChfd2ViRnJhbWUuZ2V0KCkpKTsKKyAgICBO
U1JlY3QgZm9vdGVyUmVjdCA9IE5TTWFrZVJlY3QoaGVhZGVyRm9vdGVyTGVmdCwgW3ByaW50SW5m
byBib3R0b21NYXJnaW5dIC8gc2NhbGUgLSBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0
KCpfd2ViRnJhbWUpLCBoZWFkZXJGb290ZXJXaWR0aCwgX3dlYkZyYW1lLT5wYWdlKCktPmZvb3Rl
ckhlaWdodCgqX3dlYkZyYW1lKSk7CisgICAgTlNSZWN0IGhlYWRlclJlY3QgPSBOU01ha2VSZWN0
KGhlYWRlckZvb3RlckxlZnQsIChwYXBlclNpemUuaGVpZ2h0IC0gW3ByaW50SW5mbyB0b3BNYXJn
aW5dKSAvIHNjYWxlLCBoZWFkZXJGb290ZXJXaWR0aCwgX3dlYkZyYW1lLT5wYWdlKCktPmhlYWRl
ckhlaWdodCgqX3dlYkZyYW1lKSk7CiAKICAgICBOU0dyYXBoaWNzQ29udGV4dCAqY3VycmVudENv
bnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOwogICAgIFtjdXJyZW50
Q29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CiAgICAgTlNSZWN0Q2xpcChoZWFkZXJSZWN0KTsK
LSAgICBfd2ViRnJhbWUtPnBhZ2UoKS0+ZHJhd0hlYWRlcihfd2ViRnJhbWUuZ2V0KCksIGhlYWRl
clJlY3QpOworICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5kcmF3SGVhZGVyKCpfd2ViRnJhbWUsIGhl
YWRlclJlY3QpOwogICAgIFtjdXJyZW50Q29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CiAK
ICAgICBbY3VycmVudENvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwogICAgIE5TUmVjdENsaXAo
Zm9vdGVyUmVjdCk7Ci0gICAgX3dlYkZyYW1lLT5wYWdlKCktPmRyYXdGb290ZXIoX3dlYkZyYW1l
LmdldCgpLCBmb290ZXJSZWN0KTsKKyAgICBfd2ViRnJhbWUtPnBhZ2UoKS0+ZHJhd0Zvb3Rlcigq
X3dlYkZyYW1lLCBmb290ZXJSZWN0KTsKICAgICBbY3VycmVudENvbnRleHQgcmVzdG9yZUdyYXBo
aWNzU3RhdGVdOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFn
ZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJQYWdlUHJveHlNYWMubW0JKHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNiwxMCAr
MTM2LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2gKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gSW4gY2FzZSB0aGUgVUkgY2xpZW50IG92ZXJyaWRlcyBnZXRX
aW5kb3dGcmFtZSgpLCB3ZSBjYWxsIGl0IGhlcmUgdG8gbWFrZSBzdXJlIHdlIHNlbmQgdGhlIGFw
cHJvcHJpYXRlIHdpbmRvdyBmcmFtZS4KLSAgICBGbG9hdFJlY3Qgd2luZG93RnJhbWVJblNjcmVl
bkNvb3JkaW5hdGVzID0gbV91aUNsaWVudC0+d2luZG93RnJhbWUodGhpcyk7Ci0gICAgRmxvYXRS
ZWN0IHdpbmRvd0ZyYW1lSW5VbmZsaXBwZWRTY3JlZW5Db29yZGluYXRlcyA9IG1fcGFnZUNsaWVu
dC5jb252ZXJ0VG9Vc2VyU3BhY2Uod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzKTsKLQot
ICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dBbmRWaWV3RnJhbWVz
Q2hhbmdlZCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIHdpbmRvd0ZyYW1lSW5VbmZs
aXBwZWRTY3JlZW5Db29yZGluYXRlcywgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgYWNj
ZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyksIG1fcGFnZUlEKTsKKyAgICBtX3VpQ2xpZW50LT53
aW5kb3dGcmFtZSgqdGhpcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
dmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRl
c10gKEZsb2F0UmVjdCB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAg
RmxvYXRSZWN0IHdpbmRvd0ZyYW1lSW5VbmZsaXBwZWRTY3JlZW5Db29yZGluYXRlcyA9IG1fcGFn
ZUNsaWVudC5jb252ZXJ0VG9Vc2VyU3BhY2Uod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVz
KTsKKyAgICAgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OldpbmRvd0FuZFZp
ZXdGcmFtZXNDaGFuZ2VkKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgd2luZG93RnJh
bWVJblVuZmxpcHBlZFNjcmVlbkNvb3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5h
dGVzLCBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKSwgbV9wYWdlSUQpOworICAgIH0pOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TWFpbkZyYW1lSXNTY3JvbGxhYmxlKGJvb2wgaXNT
Y3JvbGxhYmxlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320271</attachid>
            <date>2017-09-08 10:06:28 -0700</date>
            <delta_ts>2017-09-11 15:24:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176583-20170908100627.patch</filename>
            <type>text/plain</type>
            <size>67767</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE3NzcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE3LTA5LTA3ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIGFu
ZCBtYWtlIEFQSTo6VUlDbGllbnQgbW9yZSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjU4MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFQSTo6VUlDbGllbnQgY2FsbHMgdGhhdCBy
ZXR1cm4gdmFsdWVzIHN5bmNocm9ub3VzbHkgcmVxdWlyZSBzeW5jaHJvbm91cyBBUElzIHVubmVj
ZXNzYXJpbHkuCisgICAgICAgIEhhdmluZyB0aGVtIGNhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3
aXRoIHRoZSByZXN1bHRzIGluc3RlYWQgYWxsb3dzIHVzIHRvIG1ha2UgYXN5bmNocm9ub3VzCisg
ICAgICAgIEFQSXMsIGFuZCBleGlzdGluZyBzeW5jaHJvbm91cyBBUElzIGNhbiBqdXN0IGNhbGwg
dGhlIGNvbXBsZXRpb24gaGFuZGxlcnMgaW1tZWRpYXRlbHkuCisgICAgICAgIAorICAgICAgICBV
bmZvcnR1bmF0ZWx5IGFuIGFzc3VtcHRpb24gdGhhdCBBUEk6OlVJQ2xpZW50Ojp3aW5kb3dGcmFt
ZSByZXR1cm5zIHN5bmNocm9ub3VzbHkgaGFkIHdvcmtlZAorICAgICAgICBpdHMgd2F5IGludG8g
dGhlIFdlYkF1dG9tYXRpb25TZXNzaW9uLCB3aGljaCBjYWxscyBXZWJQYWdlUHJveHk6OmdldFdp
bmRvd0ZyYW1lLiAgTWFraW5nIGl0CisgICAgICAgIGFzeW5jaHJvbm91cyByZXF1aXJlZCBtYWtp
bmcgc29tZSBhdXRvbWF0aW9uIHByb3RvY29scyBhc3luY2hyb25vdXMgc28gdGhleSBjYW4gc2Vu
ZCB0aGVpcgorICAgICAgICByZXN1bHQgb25jZSB0aGV5IGhhdmUgdGhlIHJlc3VsdGluZyBmcmFt
ZXMgZnJvbSB0aGUgVUlDbGllbnQuCisgICAgICAgIAorICAgICAgICBObyBjaGFuZ2UgaW4gYmVo
YXZpb3VyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oOgorICAgICAg
ICAoQVBJOjpVSUNsaWVudDo6c2V0VG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAgICAgKEFQSTo6
VUlDbGllbnQ6Om1lbnVCYXJJc1Zpc2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0
TWVudUJhcklzVmlzaWJsZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpzdGF0dXNCYXJJc1Zp
c2libGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0U3RhdHVzQmFySXNWaXNpYmxlKToK
KyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmlzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OnNldFdpbmRv
d0ZyYW1lKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OndpbmRvd0ZyYW1lKToKKyAgICAgICAg
KEFQSTo6VUlDbGllbnQ6OmhlYWRlckhlaWdodCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50Ojpm
b290ZXJIZWlnaHQpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6ZHJhd0hlYWRlcik6CisgICAg
ICAgIChBUEk6OlVJQ2xpZW50OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnByaW50RnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAg
ICAgICAoV0tQYWdlU2V0UGFnZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb246CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldE5leHRDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246Om1vdmVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtTW91c2VJbnRlcmFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAg
ICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZh
U2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb29sYmFy
c0FyZVZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldE1lbnVCYXJJ
c1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zp
c2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFN0YXR1c0JhcklzVmlz
aWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNp
YmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJc1Jlc2l6YWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0SXNSZXNpemFibGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNjcmVlblRvUm9vdFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnJvb3RWaWV3VG9TY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnByaW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhlYWRl
ckhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9vdGVySGVpZ2h0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmF3SGVhZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1Zp
ZXcgaW5pdFdpdGhGcmFtZVByb3h5OnZpZXc6XSk6CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3
IF9hZGp1c3RQcmludGluZ01hcmdpbnNGb3JIZWFkZXJBbmRGb290ZXJdKToKKyAgICAgICAgKC1b
V0tQcmludGluZ1ZpZXcgZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZTpdKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6CisKIDIwMTctMDktMDcgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFVwc3RyZWFtIFFUS2l0LXJl
bGF0ZWQgV2ViS2l0U3lzdGVtSW50ZXJmYWNlIGZ1bmN0aW9ucwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQ4
LDcgKzM5NDgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oCiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFJlZlB0cjxN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpEZWxheWVkUmVwbHk+
IHJlcGx5KQordm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgUmVmPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4mJiByZXBs
eSkKIHsKICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJh
bWVJRCk7CiAgICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CkBAIC0zOTYxLDcgKzM5NjEsOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdFByb21wdCh1CiAgICAgICAgICAgICBhdXRv
bWF0aW9uU2Vzc2lvbi0+d2lsbFNob3dKYXZhU2NyaXB0RGlhbG9nKCp0aGlzKTsKICAgICB9CiAK
LSAgICBtX3VpQ2xpZW50LT5ydW5KYXZhU2NyaXB0UHJvbXB0KHRoaXMsIG1lc3NhZ2UsIGRlZmF1
bHRWYWx1ZSwgZnJhbWUsIHNlY3VyaXR5T3JpZ2luLCBbcmVwbHldKGNvbnN0IFN0cmluZyYgcmVz
dWx0KSB7IHJlcGx5LT5zZW5kKHJlc3VsdCk7IH0pOworICAgIG1fdWlDbGllbnQtPnJ1bkphdmFT
Y3JpcHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBmcmFtZSwgc2VjdXJpdHlP
cmlnaW4sIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXShjb25zdCBTdHJpbmcmIHJlc3VsdCkgewor
ICAgICAgICByZXBseS0+c2VuZChyZXN1bHQpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkBAIC00MDUxLDcgKzQwNTMs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yCiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
CiB7Ci0gICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKHRoaXMsIHRvb2xiYXJz
QXJlVmlzaWJsZSk7CisgICAgbV91aUNsaWVudC0+c2V0VG9vbGJhcnNBcmVWaXNpYmxlKCp0aGlz
LCB0b29sYmFyc0FyZVZpc2libGUpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0VG9vbGJh
cnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRUb29sYmFyc0FyZVZp
c2libGU6OkRlbGF5ZWRSZXBseT4mJiByZXBseSkKQEAgLTQwNjMsNTIgKzQwNjUsNjUgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmdldFRvb2xiYXJzQXJlVmlzaWJsZQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91
aUNsaWVudC0+c2V0TWVudUJhcklzVmlzaWJsZSh0aGlzLCBtZW51QmFySXNWaXNpYmxlKTsKKyAg
ICBtX3VpQ2xpZW50LT5zZXRNZW51QmFySXNWaXNpYmxlKCp0aGlzLCBtZW51QmFySXNWaXNpYmxl
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zpc2libGUoYm9vbCYgbWVu
dUJhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRNZW51QmFySXNWaXNpYmxlKFJl
ZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRNZW51QmFySXNWaXNpYmxlOjpEZWxheWVkUmVw
bHk+JiYgcmVwbHkpCiB7Ci0gICAgbWVudUJhcklzVmlzaWJsZSA9IG1fdWlDbGllbnQtPm1lbnVC
YXJJc1Zpc2libGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+bWVudUJhcklzVmlzaWJsZSgqdGhp
cywgW3JlcGx5ID0gV1RGTW92ZShyZXBseSldIChib29sIHZpc2libGUpIHsKKyAgICAgICAgcmVw
bHktPnNlbmQodmlzaWJsZSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRT
dGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUpCiB7Ci0gICAgbV91aUNs
aWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKHRoaXMsIHN0YXR1c0JhcklzVmlzaWJsZSk7Cisg
ICAgbV91aUNsaWVudC0+c2V0U3RhdHVzQmFySXNWaXNpYmxlKCp0aGlzLCBzdGF0dXNCYXJJc1Zp
c2libGUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U3RhdHVzQmFySXNWaXNpYmxlKGJv
b2wmIHN0YXR1c0JhcklzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRTdGF0dXNCYXJJ
c1Zpc2libGUoUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFN0YXR1c0JhcklzVmlzaWJs
ZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHN0YXR1c0JhcklzVmlzaWJsZSA9IG1f
dWlDbGllbnQtPnN0YXR1c0JhcklzVmlzaWJsZSh0aGlzKTsKKyAgICBtX3VpQ2xpZW50LT5zdGF0
dXNCYXJJc1Zpc2libGUoKnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCB2aXNp
YmxlKSB7CisgICAgICAgIHJlcGx5LT5zZW5kKHZpc2libGUpOworICAgIH0pOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSkKIHsKLSAgICBt
X3VpQ2xpZW50LT5zZXRJc1Jlc2l6YWJsZSh0aGlzLCBpc1Jlc2l6YWJsZSk7CisgICAgbV91aUNs
aWVudC0+c2V0SXNSZXNpemFibGUoKnRoaXMsIGlzUmVzaXphYmxlKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmdldElzUmVzaXphYmxlKGJvb2wmIGlzUmVzaXphYmxlKQordm9pZCBXZWJQYWdl
UHJveHk6OmdldElzUmVzaXphYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRJc1Jl
c2l6YWJsZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAgIGlzUmVzaXphYmxlID0gbV91
aUNsaWVudC0+aXNSZXNpemFibGUodGhpcyk7CisgICAgbV91aUNsaWVudC0+aXNSZXNpemFibGUo
KnRoaXMsIFtyZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYm9vbCByZXNpemFibGUpIHsKKyAgICAg
ICAgcmVwbHktPnNlbmQocmVzaXphYmxlKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFdpbmRvd0ZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCiB7Ci0g
ICAgbV91aUNsaWVudC0+c2V0V2luZG93RnJhbWUodGhpcywgbV9wYWdlQ2xpZW50LmNvbnZlcnRU
b0RldmljZVNwYWNlKG5ld1dpbmRvd0ZyYW1lKSk7CisgICAgbV91aUNsaWVudC0+c2V0V2luZG93
RnJhbWUoKnRoaXMsIG1fcGFnZUNsaWVudC5jb252ZXJ0VG9EZXZpY2VTcGFjZShuZXdXaW5kb3dG
cmFtZSkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2luZG93RnJhbWUoRmxvYXRSZWN0
JiBuZXdXaW5kb3dGcmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZShSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0V2luZG93RnJhbWU6OkRlbGF5ZWRSZXBseT4mJiBy
ZXBseSkKIHsKLSAgICBuZXdXaW5kb3dGcmFtZSA9IG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2Vy
U3BhY2UobV91aUNsaWVudC0+d2luZG93RnJhbWUodGhpcykpOworICAgIG1fdWlDbGllbnQtPndp
bmRvd0ZyYW1lKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBy
ZXBseSA9IFdURk1vdmUocmVwbHkpXSAoRmxvYXRSZWN0IGZyYW1lKSB7CisgICAgICAgIHJlcGx5
LT5zZW5kKG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2VyU3BhY2UoZnJhbWUpKTsKKyAgICB9KTsK
IH0KLSAgICAKLXZvaWQgV2ViUGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBv
aW50JiBzY3JlZW5Qb2ludCwgSW50UG9pbnQmIHdpbmRvd1BvaW50KQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIoRnVuY3Rpb248dm9pZChG
bG9hdFJlY3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fdWlDbGllbnQtPndpbmRv
d0ZyYW1lKCp0aGlzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBzY3JlZW5Qb2ludCwg
UmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBs
eT4mJiByZXBseSkKIHsKLSAgICB3aW5kb3dQb2ludCA9IG1fcGFnZUNsaWVudC5zY3JlZW5Ub1Jv
b3RWaWV3KHNjcmVlblBvaW50KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQuc2NyZWVu
VG9Sb290VmlldyhzY3JlZW5Qb2ludCkpOwogfQogICAgIAotdm9pZCBXZWJQYWdlUHJveHk6OnJv
b3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgdmlld1JlY3QsIEludFJlY3QmIHJlc3VsdCkK
K3ZvaWQgV2ViUGFnZVByb3h5Ojpyb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHZpZXdS
ZWN0LCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXll
ZFJlcGx5PiYmIHJlcGx5KQogewotICAgIHJlc3VsdCA9IG1fcGFnZUNsaWVudC5yb290Vmlld1Rv
U2NyZWVuKHZpZXdSZWN0KTsKKyAgICByZXBseS0+c2VuZChtX3BhZ2VDbGllbnQucm9vdFZpZXdU
b1NjcmVlbih2aWV3UmVjdCkpOwogfQogICAgIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTQxOTQs
NyArNDIwOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmludEZyYW1lKHVpbnQ2NF90IGYKICAg
ICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IG1fcHJvY2Vzcy0+d2ViRnJhbWUoZnJhbWVJRCk7CiAg
ICAgTUVTU0FHRV9DSEVDSyhmcmFtZSk7CiAKLSAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKHRo
aXMsIGZyYW1lKTsKKyAgICBtX3VpQ2xpZW50LT5wcmludEZyYW1lKCp0aGlzLCAqZnJhbWUpOwog
CiAgICAgZW5kUHJpbnRpbmcoKTsgLy8gU2VuZCBhIG1lc3NhZ2Ugc3luY2hyb25vdXNseSB3aGls
ZSBtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uIGlzIHN0aWxsIHRydWUuCiAgICAgbV9p
c1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbiA9IGZhbHNlOwpAQCAtNTkwMSwzMiArNTkxNiwz
MiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRGVzdHJveU5vdGlmaWNhdGlvCiAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
PigpLT5kaWREZXN0cm95Tm90aWZpY2F0aW9uKHRoaXMsIG5vdGlmaWNhdGlvbklEKTsKIH0KIAot
ZmxvYXQgV2ViUGFnZVByb3h5OjpoZWFkZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitm
bG9hdCBXZWJQYWdlUHJveHk6OmhlYWRlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsK
LSAgICBpZiAoZnJhbWUtPmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1l
LmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX3VpQ2xpZW50LT5oZWFkZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3Vp
Q2xpZW50LT5oZWFkZXJIZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotZmxvYXQgV2ViUGFnZVBy
b3h5Ojpmb290ZXJIZWlnaHQoV2ViRnJhbWVQcm94eSogZnJhbWUpCitmbG9hdCBXZWJQYWdlUHJv
eHk6OmZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5JiBmcmFtZSkKIHsKLSAgICBpZiAoZnJhbWUt
PmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKGZyYW1lLmlzRGlzcGxheWluZ1BE
RkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3VpQ2xpZW50LT5m
b290ZXJIZWlnaHQodGhpcywgZnJhbWUpOworICAgIHJldHVybiBtX3VpQ2xpZW50LT5mb290ZXJI
ZWlnaHQoKnRoaXMsIGZyYW1lKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdIZWFkZXIo
V2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmIGZyYW1lLCBGbG9hdFJlY3QmJiByZWN0
KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKKyAgICBpZiAo
ZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
dWlDbGllbnQtPmRyYXdIZWFkZXIodGhpcywgZnJhbWUsIHJlY3QpOworICAgIG1fdWlDbGllbnQt
PmRyYXdIZWFkZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJlY3QpKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmRyYXdGb290ZXIoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmIGZy
YW1lLCBGbG9hdFJlY3QmJiByZWN0KQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERG
RG9jdW1lbnQoKSkKKyAgICBpZiAoZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIodGhpcywgZnJhbWUsIHJl
Y3QpOworICAgIG1fdWlDbGllbnQtPmRyYXdGb290ZXIoKnRoaXMsIGZyYW1lLCBXVEZNb3ZlKHJl
Y3QpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJ1bk1vZGFsKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODA4LDEw
ICs4MDgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGNv
bnN0IFN0cmluZyYsIGJvb2wsIFdURjo6RnVuY3Rpb248dm9pZCAoQVBJOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqLCBib29sIGhhZEV4Y2VwdGlvbiwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0
YWlscyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pOwogICAgIHZv
aWQgZm9yY2VSZXBhaW50KFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiYpOwogCi0gICAgZmxvYXQgaGVh
ZGVySGVpZ2h0KFdlYkZyYW1lUHJveHkqKTsKLSAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSopOwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSYpOworICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5Jik7CisgICAg
dm9pZCBkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7Cisg
ICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJik7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBEaWN0aW9uYXJ5LgpAQCAtMTE2OCw3ICsx
MTY4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb2N1cyhib29sIGZvY3VzZWQpOwogICAg
IHZvaWQgc2V0V2luZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9p
ZCBnZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGdldFdpbmRv
d0ZyYW1lKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZTo6RGVsYXll
ZFJlcGx5PiYmKTsKKyAgICB2b2lkIGdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVy
KEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RmxvYXRSZWN0KT4mJik7CiAKICAgICBib29sIGlzUmVz
b3VyY2VDYWNoaW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzb3VyY2VDYWNoaW5n
RGlzYWJsZWQ7IH0KICAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpOwpA
QCAtMTI5Niw3ICsxMjk3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAg
dm9pZCBydW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgUmVmPE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHJ1
bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6RGVsYXllZFJlcGx5PiYmKTsKLSAgICB2b2lkIHJ1bkph
dmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4pOworICAg
IHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6RGVsYXllZFJlcGx5
PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJIaXRUZXN0UmVzdWx0RGF0YSYmLCB1aW50MzJfdCBt
b2RpZmllcnMsIFVzZXJEYXRhJiYpOwogCkBAIC0xMzEwLDEzICsxMzExLDEzIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUp
OwogICAgIHZvaWQgZ2V0VG9vbGJhcnNBcmVWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRUb29sYmFyc0FyZVZpc2libGU6OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBz
ZXRNZW51QmFySXNWaXNpYmxlKGJvb2wgbWVudUJhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRN
ZW51QmFySXNWaXNpYmxlKGJvb2wmIG1lbnVCYXJJc1Zpc2libGUpOworICAgIHZvaWQgZ2V0TWVu
dUJhcklzVmlzaWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlz
aWJsZTo6RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShi
b29sIHN0YXR1c0JhcklzVmlzaWJsZSk7Ci0gICAgdm9pZCBnZXRTdGF0dXNCYXJJc1Zpc2libGUo
Ym9vbCYgc3RhdHVzQmFySXNWaXNpYmxlKTsKKyAgICB2b2lkIGdldFN0YXR1c0JhcklzVmlzaWJs
ZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlOjpEZWxh
eWVkUmVwbHk+JiYpOwogICAgIHZvaWQgc2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSk7
Ci0gICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShib29sJiBpc1Jlc2l6YWJsZSk7Ci0gICAgdm9pZCBz
Y3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgV2Vi
Q29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKLSAgICB2b2lkIHJvb3RWaWV3VG9TY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld1JlY3QsIFdlYkNvcmU6OkludFJlY3QmIHJlc3Vs
dCk7CisgICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
R2V0SXNSZXNpemFibGU6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9pZCBzY3JlZW5Ub1Jvb3RW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgUmVmPE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNjcmVlblRvUm9vdFZpZXc6OkRlbGF5ZWRSZXBseT4mJik7CisgICAgdm9p
ZCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdSZWN0LCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Um9vdFZpZXdUb1NjcmVlbjo6RGVsYXllZFJlcGx5PiYm
KTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgdm9pZCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2NyZWVuUG9pbnQsIFdlYkNvcmU6OkludFBv
aW50JiB3aW5kb3dQb2ludCk7CiAgICAgdm9pZCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVl
bihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3UmVjdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVz
dWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE2
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2V0UmVuZGVyVHJlZVNpemUodWlu
dDY0X3QgdHJlZVNpemUpCiAgICAgU2V0VG9vbGJhcnNBcmVWaXNpYmxlKGJvb2wgdG9vbGJhcnNB
cmVWaXNpYmxlKQogICAgIEdldFRvb2xiYXJzQXJlVmlzaWJsZSgpIC0+IChib29sIHRvb2xiYXJz
QXJlVmlzaWJsZSkgRGVsYXllZAotICAgIFNldE1lbnVCYXJJc1Zpc2libGUoYm9vbCBtZW51QmFy
SXNWaXNpYmxlKTsKLSAgICBHZXRNZW51QmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgbWVudUJhcklz
VmlzaWJsZSk7CisgICAgU2V0TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUp
CisgICAgR2V0TWVudUJhcklzVmlzaWJsZSgpIC0+IChib29sIG1lbnVCYXJJc1Zpc2libGUpIERl
bGF5ZWQKICAgICBTZXRTdGF0dXNCYXJJc1Zpc2libGUoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUp
Ci0gICAgR2V0U3RhdHVzQmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgc3RhdHVzQmFySXNWaXNpYmxl
KQorICAgIEdldFN0YXR1c0JhcklzVmlzaWJsZSgpIC0+IChib29sIHN0YXR1c0JhcklzVmlzaWJs
ZSkgRGVsYXllZAogICAgIFNldElzUmVzaXphYmxlKGJvb2wgaXNSZXNpemFibGUpCi0gICAgR2V0
SXNSZXNpemFibGUoKSAtPiAoYm9vbCBpc1Jlc2l6YWJsZSkKKyAgICBHZXRJc1Jlc2l6YWJsZSgp
IC0+IChib29sIGlzUmVzaXphYmxlKSBEZWxheWVkCiAgICAgU2V0V2luZG93RnJhbWUoV2ViQ29y
ZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQotICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNv
cmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkKLSAgICBTY3JlZW5Ub1Jvb3RWaWV3KFdlYkNvcmU6
OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29yZTo6SW50UG9pbnQgd2luZG93UG9pbnQp
Ci0gICAgUm9vdFZpZXdUb1NjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3Jl
OjpJbnRSZWN0IHNjcmVlbkZyYW1lKQorICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6
OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgRGVsYXllZAorICAgIFNjcmVlblRvUm9vdFZpZXcoV2Vi
Q29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQ
b2ludCkgRGVsYXllZAorICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0
KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgRGVsYXllZAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgU2hvd1ZhbGlkYXRpb25NZXNzYWdlKFdlYkNvcmU6OkludFJlY3QgYW5j
aG9yUmVjdCwgU3RyaW5nIG1lc3NhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaAkocmV2aXNpb24gMjIxNzcxKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE2ICs5NywxNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0
OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQmKSB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCB0b29sYmFyc0FyZVZpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRp
b25IYW5kbGVyKHRydWUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJs
ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGJvb2wpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBtZW51
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
Ym9vbCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXZWJLaXQ6Oldl
YlBhZ2VQcm94eSopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVz
QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgYm9vbCkgeyB9Ci0gICAgdmlydHVh
bCBib29sIGlzUmVzaXphYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSos
IGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV2ViS2l0
OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbWVudUJhcklzVmlz
aWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TWVudUJhcklzVmlzaWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRpb25I
YW5kbGVyKHRydWUpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpc1Jlc2l6
YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SXNSZXNpemFibGUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBib29sKSB7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IHdpbmRvd0ZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gV2ViQ29yZTo6Rmxv
YXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93RnJhbWUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgd2luZG93RnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsgfQogCiAgICAgdmlydHVhbCBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJ1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5n
JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiwgRnVuY3Rpb248dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7IH0KQEAgLTEzMCwxMSArMTMwLDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qo
V2ViS2l0OjpXZWJQYWdlUHJveHkqLCBTZWN1cml0eU9yaWdpbiosIFdlYktpdDo6Tm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QqKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gUHJpbnRp
bmcuCi0gICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkq
LCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBmbG9h
dCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpX
ZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zvb3RlcihXZWJLaXQ6OldlYlBhZ2VQ
cm94eSosIFdlYktpdDo6V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBwcmludEZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5Kiwg
V2ViS2l0OjpXZWJGcmFtZVByb3h5KikgeyB9CisgICAgdmlydHVhbCBmbG9hdCBoZWFkZXJIZWln
aHQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBmbG9hdCBmb290ZXJIZWlnaHQoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2
b2lkIGRyYXdIZWFkZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkmLCBXZWJDb3JlOjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb290
ZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBXZWJDb3Jl
OjpGbG9hdFJlY3QmJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHByaW50RnJhbWUoV2ViS2l0OjpX
ZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJ1bk1vZGFsKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MzksNjkgKzE4MzksNjkgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBh
ZwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobV9jbGllbnQudG9vbGJhcnNBcmVWaXNp
YmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2Us
IGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUo
V2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmICghbV9jbGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0
b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAg
ICAgIG1fY2xpZW50LnNldFRvb2xiYXJzQXJlVmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUs
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICBib29sIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5KiBwYWdlKSBmaW5hbAorICAgICAgICB2b2lkIG1l
bnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50Lm1lbnVCYXJJc1Zpc2libGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubWVudUJhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2NsaWVu
dC5tZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHZpc2libGUpIGZpbmFsCisgICAgICAgIHZvaWQgc2V0TWVudUJh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldE1lbnVCYXJJc1Zp
c2libGUodG9BUEkocGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgICAgICBtX2NsaWVudC5zZXRNZW51QmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgdmlz
aWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIGJv
b2wgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSogcGFnZSkgZmluYWwKKyAgICAgICAg
dm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIW1fY2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5zdGF0dXNCYXJJc1Zpc2libGUo
dG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobV9jbGllbnQuc3RhdHVzQmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN0YXR1c0Jh
cklzVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKKyAgICAg
ICAgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5JiBwYWdlLCBib29sIHZp
c2libGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuc2V0U3Rh
dHVzQmFySXNWaXNpYmxlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1f
Y2xpZW50LnNldFN0YXR1c0JhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwgdmlzaWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNldFN0YXR1c0Jhcklz
VmlzaWJsZSh0b0FQSSgmcGFnZSksIHZpc2libGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgICAgIH0KIAotICAgICAgICBib29sIGlzUmVzaXphYmxlKFdlYlBhZ2VQcm94eSogcGFn
ZSkgZmluYWwKKyAgICAgICAgdm9pZCBpc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIEZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaXNSZXNpemFibGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaXNSZXNpemFibGUodG9B
UEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIobV9jbGllbnQuaXNSZXNpemFibGUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0SXNSZXNpemFibGUoV2ViUGFn
ZVByb3h5KiBwYWdlLCBib29sIHJlc2l6YWJsZSkgZmluYWwKKyAgICAgICAgdm9pZCBzZXRJc1Jl
c2l6YWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgcmVzaXphYmxlKSBmaW5hbAogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNldElzUmVzaXphYmxlKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fY2xpZW50LnNldElzUmVzaXphYmxlKHRvQVBJ
KHBhZ2UpLCByZXNpemFibGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAg
ICBtX2NsaWVudC5zZXRJc1Jlc2l6YWJsZSh0b0FQSSgmcGFnZSksIHJlc2l6YWJsZSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0V2luZG93
RnJhbWUoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lKSBmaW5hbAor
ICAgICAgICB2b2lkIHNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgRmxv
YXRSZWN0JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVu
dC5zZXRXaW5kb3dGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
IG1fY2xpZW50LnNldFdpbmRvd0ZyYW1lKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5zZXRXaW5kb3dGcmFt
ZSh0b0FQSSgmcGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0UmVjdCB3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkq
IHBhZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5JiBwYWdl
LCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZ2V0V2luZG93RnJh
bWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgICAgICAgICByZXR1cm4gdG9G
bG9hdFJlY3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkocGFnZSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbykpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodG9GbG9hdFJl
Y3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbCgpIGNvbnN0IGZpbmFsCkBAIC0xOTkwLDQ0ICsxOTkwLDQ0IEBAIHZvaWQg
V0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWcKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFByaW50aW5nLgotICAgICAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViUGFnZVByb3h5KiBw
YWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkgZmluYWwKKyAgICAgICAgZmxvYXQgaGVhZGVySGVp
Z2h0KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUpIGZpbmFsCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuaGVhZGVySGVpZ2h0KQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVp
Z2h0KHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQuaGVhZGVySGVpZ2h0KHRvQVBJKCZwYWdlKSwg
dG9BUEkoJmZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJv
eHkqIGZyYW1lKSBmaW5hbAorICAgICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5
JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5mb290ZXJIZWlnaHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkocGFnZSks
IHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkoJnBhZ2UpLCB0b0FQSSgmZnJhbWUpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBkcmF3
SGVhZGVyKFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkgZmluYWwKKyAgICAgICAgdm9pZCBkcmF3SGVhZGVyKFdl
YlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIFdlYkNvcmU6OkZsb2F0UmVj
dCYmIHJlY3QpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZHJh
d0hlYWRlcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1fY2xpZW50
LmRyYXdIZWFkZXIodG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBtX2NsaWVudC5kcmF3SGVhZGVyKHRv
QVBJKCZwYWdlKSwgdG9BUEkoJmZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVBy
b3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiByZWN0KSBmaW5hbAorICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVByb3h5JiBwYWdl
LCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgV2ViQ29yZTo6RmxvYXRSZWN0JiYgcmVjdCkgZmluYWwK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kcmF3Rm9vdGVyKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9jbGllbnQuZHJhd0Zvb3Rlcih0b0FQ
SShwYWdlKSwgdG9BUEkoZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LmRyYXdGb290ZXIodG9BUEkoJnBhZ2UpLCB0b0FQ
SSgmZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZvaWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZy
YW1lUHJveHkqIGZyYW1lKSBmaW5hbAorICAgICAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVBy
b3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFtX2NsaWVudC5wcmludEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgbV9jbGllbnQucHJpbnRGcmFtZSh0b0FQSShwYWdlKSwgdG9BUEkoZnJh
bWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQucHJp
bnRGcmFtZSh0b0FQSSgmcGFnZSksIHRvQVBJKCZmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblJ1bk1vZGFsKCkgY29uc3QgZmlu
YWwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRVSUNsaWVudC5jcHAJKHJldmlzaW9uIDIyMTc3MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMjgg
KzUzLDI4IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdlYmtpdFdlYlZp
ZXdDcmVhdGVOZXdQYWdlKG1fd2ViVmlldywgd2luZG93RmVhdHVyZXMsICZuYXZpZ2F0aW9uQWN0
aW9uKSk7CiAgICAgfQogCi0gICAgdm9pZCBzaG93UGFnZShXZWJQYWdlUHJveHkqKSBvdmVycmlk
ZQorICAgIHZvaWQgc2hvd1BhZ2UoV2ViUGFnZVByb3h5KikgZmluYWwKICAgICB7CiAgICAgICAg
IHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UobV93ZWJWaWV3KTsKICAgICB9CiAKLSAgICB2
b2lkIGNsb3NlKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisgICAgdm9pZCBjbG9zZShXZWJQYWdl
UHJveHkqKSBmaW5hbAogICAgIHsKICAgICAgICAgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShtX3dl
YlZpZXcpOwogICAgIH0KIAotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdlYlBhZ2VQcm94
eSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpIG92ZXJyaWRlCisgICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV2ViUGFnZVByb3h5Kiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBm
aW5hbAogICAgIHsKICAgICAgICAgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChtX3dl
YlZpZXcsIG1lc3NhZ2UudXRmOCgpKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAg
ICB9CiAKLSAgICB2b2lkIHJ1bkphdmFTY3JpcHRDb25maXJtKFdlYlBhZ2VQcm94eSosIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYsIEZ1bmN0aW9uPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBv
dmVycmlkZQorICAgIHZvaWQgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViUGFnZVByb3h5KiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
ZmluYWwKICAgICB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdlYmtpdFdlYlZpZXdSdW5K
YXZhU2NyaXB0Q29uZmlybShtX3dlYlZpZXcsIG1lc3NhZ2UudXRmOCgpKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBydW5KYXZhU2NyaXB0UHJvbXB0KFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdlYkZyYW1lUHJveHkqLCBjb25z
dCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJp
bmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKKyAgICB2b2lkIHJ1bkphdmFTY3Jp
cHRQcm9tcHQoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYsIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpIGZpbmFsCiAgICAgewogICAgICAgICBDU3RyaW5nIHJlc3VsdCA9IHdlYmtpdFdlYlZp
ZXdSdW5KYXZhU2NyaXB0UHJvbXB0KG1fd2ViVmlldywgbWVzc2FnZS51dGY4KCksIGRlZmF1bHRW
YWx1ZS51dGY4KCkpOwogICAgICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKSB7CkBAIC04NSw5ICs4
NSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0cmluZzo6ZnJvbVVU
RjgocmVzdWx0LmRhdGEoKSkpOwogICAgIH0KIAotICAgIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wg
Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgdm9pZCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2ViUGFnZVByb3h5
KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpIG92ZXJyaWRlCisgICAgdm9pZCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2Vi
UGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdl
YmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0QmVmb3JlVW5sb2FkQ29uZmlybShtX3dlYlZpZXcsIG1l
c3NhZ2UudXRmOCgpKSk7CiAgICAgfQpAQCAtOTcsNDcgKzk3LDQ3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQobV93ZWJWaWV3LCBkYXRhLCBtb2Rp
ZmllcnMpOwogICAgIH0KIAotICAgIHZvaWQgdG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94
eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisg
ICAgdm9pZCB0b29sYmFyc0FyZVZpc2libGUoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdG9vbGJhcl92aXNpYmxlKHdl
YmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wgdmlz
aWJsZSkgb3ZlcnJpZGUKKyAgICB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJv
eHkmLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXaW5kb3dQcm9w
ZXJ0aWVzU2V0VG9vbGJhclZpc2libGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVy
dGllcyhtX3dlYlZpZXcpLCB2aXNpYmxlKTsKICAgICB9CiAKLSAgICBib29sIG1lbnVCYXJJc1Zp
c2libGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIG1lbnVCYXJJc1Zpc2libGUo
V2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
ZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0
X21lbnViYXJfdmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1f
d2ViVmlldykpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3ZWJraXRfd2luZG93X3Byb3Bl
cnRpZXNfZ2V0X21lbnViYXJfdmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKG1fd2ViVmlldykpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE1lbnVCYXJJc1Zpc2li
bGUoV2ViUGFnZVByb3h5KiwgYm9vbCB2aXNpYmxlKSBvdmVycmlkZQorICAgIHZvaWQgc2V0TWVu
dUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkmLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgewog
ICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0VG9vbGJhclZpc2libGUod2Via2l0X3dl
Yl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcpLCB2aXNpYmxlKTsKICAgICB9
CiAKLSAgICBib29sIHN0YXR1c0JhcklzVmlzaWJsZShXZWJQYWdlUHJveHkqKSBvdmVycmlkZQor
ICAgIHZvaWQgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgewotICAgICAgICByZXR1cm4g
d2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNiYXJfdmlzaWJsZSh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldykpOworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcih3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxl
KHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSkpOwogICAg
IH0KIAotICAgIHZvaWQgc2V0U3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wg
dmlzaWJsZSkgb3ZlcnJpZGUKKyAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShXZWJQYWdl
UHJveHkmLCBib29sIHZpc2libGUpIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXaW5kb3dQ
cm9wZXJ0aWVzU2V0U3RhdHVzYmFyVmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19w
cm9wZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOwogICAgIH0KIAotICAgIGJvb2wgaXNSZXNp
emFibGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIGlzUmVzaXphYmxlKFdlYlBh
Z2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFs
CiAgICAgewotICAgICAgICByZXR1cm4gd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9yZXNp
emFibGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcpKTsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9y
ZXNpemFibGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZpZXcp
KSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkqLCBib29s
IHJlc2l6YWJsZSkgb3ZlcnJpZGUKKyAgICB2b2lkIHNldElzUmVzaXphYmxlKFdlYlBhZ2VQcm94
eSYsIGJvb2wgcmVzaXphYmxlKSBmaW5hbAogICAgIHsKICAgICAgICAgd2Via2l0V2luZG93UHJv
cGVydGllc1NldFJlc2l6YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVz
KG1fd2ViVmlldyksIHJlc2l6YWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRXaW5kb3dGcmFt
ZShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZyYW1lKSBvdmVycmlk
ZQorICAgIHZvaWQgc2V0V2luZG93RnJhbWUoV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBmcmFtZSkgZmluYWwKICAgICB7CiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAg
ICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSBXZWJDb3JlOjpJbnRSZWN0KGZyYW1lKTsKQEAgLTE1
Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogCi0gICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisgICAgdm9pZCB3aW5k
b3dGcmFtZShXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgewogI2lmIFBMQVRGT1JNKEdUSykKICAg
ICAgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0geyAwLCAwLCAwLCAwIH07CkBAIC0xNjEsMjEg
KzE2MSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZ3RrX3dpbmRvd19nZXRfcG9zaXRpb24o
R1RLX1dJTkRPVyh3aW5kb3cpLCAmZ2VvbWV0cnkueCwgJmdlb21ldHJ5LnkpOwogICAgICAgICAg
ICAgZ3RrX3dpbmRvd19nZXRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksICZnZW9tZXRyeS53aWR0
aCwgJmdlb21ldHJ5LmhlaWdodCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OkZsb2F0UmVjdChnZW9tZXRyeSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6
OkZsb2F0UmVjdChnZW9tZXRyeSkpOwogI2VsaWYgUExBVEZPUk0oV1BFKQogICAgICAgICAvLyBG
SVhNRTogSSBndWVzcyB0aGlzIGlzIGFjdHVhbGx5IHRoZSB2aWV3IHNpemUgaW4gV1BFLiBXZSBu
ZWVkIG1vcmUgcmVmYWN0b3JpbmcgaGVyZS4KLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUEk6OlNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZyBs
b25nIC8qY3VycmVudFF1b3RhKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmN1cnJlbnRPcmlnaW5V
c2FnZSovLCB1bnNpZ25lZCBsb25nIGxvbmcgLypjdXJyZW50RGF0YWJhc2VVc2FnZSovLCB1bnNp
Z25lZCBsb25nIGxvbmcgLypleHBlY3RlZFVzYWdlKi8sIEZ1bmN0aW9uPHZvaWQgKHVuc2lnbmVk
IGxvbmcgbG9uZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisgICAgdm9pZCBleGNl
ZWRlZERhdGFiYXNlUXVvdGEoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIEFQSTo6U2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25n
IGxvbmcgLypjdXJyZW50UXVvdGEqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qY3VycmVudE9yaWdp
blVzYWdlKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmN1cnJlbnREYXRhYmFzZVVzYWdlKi8sIHVu
c2lnbmVkIGxvbmcgbG9uZyAvKmV4cGVjdGVkVXNhZ2UqLywgRnVuY3Rpb248dm9pZCh1bnNpZ25l
ZCBsb25nIGxvbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsKICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAq
IDEyMDQ7IC8vIDUgTUIKICAgICAgICAgLy8gRklYTUU6IFByb3ZpZGUgQVBJIGZvciB0aGlzLgog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkZWZhdWx0UXVvdGEpOwogICAgIH0KIAotICAgIGJv
b2wgcnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVyKSBvdmVycmlk
ZQorICAgIGJvb2wgcnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRl
cnMqIHBhcmFtZXRlcnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVy
KSBmaW5hbAogICAgIHsKICAgICAgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+
IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFt
ZXRlcnMsIGxpc3RlbmVyKSk7CiAgICAgICAgIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJl
cXVlc3QobV93ZWJWaWV3LCByZXF1ZXN0LmdldCgpKTsKQEAgLTE4OSwxNCArMTg5LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGJvb2wgZGVjaWRl
UG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgV2ViRnJh
bWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBB
UEk6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdFByb3h5JiBwZXJtaXNzaW9uUmVxdWVzdCkgb3ZlcnJpZGUKKyAgICBib29s
IGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYs
IFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFEb2N1bWVudE9y
aWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eSYgcGVybWlzc2lvblJlcXVlc3QpIGZpbmFsCiAgICAg
ewogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0PiB1c2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdENyZWF0ZShwZXJtaXNzaW9uUmVxdWVzdCwgdXNlck1lZGlhRG9jdW1lbnRPcmln
aW4sIHRvcExldmVsRG9jdW1lbnRPcmlnaW4pKTsKICAgICAgICAgd2Via2l0V2ViVmlld01ha2VQ
ZXJtaXNzaW9uUmVxdWVzdChtX3dlYlZpZXcsIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QodXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3QuZ2V0KCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgYm9vbCBkZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdChXZWJQYWdlUHJveHkqLCBBUEk6OlNlY3VyaXR5T3JpZ2luKiwgTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3QqIHBlcm1pc3Npb25SZXF1ZXN0KSBvdmVycmlkZQorICAgIGJvb2wgZGVj
aWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5Kiwg
QVBJOjpTZWN1cml0eU9yaWdpbiosIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KiBwZXJt
aXNzaW9uUmVxdWVzdCkgZmluYWwKICAgICB7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0Tm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3Q+IG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0g
YWRvcHRHUmVmKHdlYmtpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKHBlcm1p
c3Npb25SZXF1ZXN0KSk7CiAgICAgICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVl
c3QobV93ZWJWaWV3LCBXRUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKG5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0LmdldCgpKSk7CkBAIC0yMDQsMTUgKzIwNCwxNSBAQCBwcml2YXRlOgogICAg
IH0KIAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVByb3h5
KiwgV2ViRnJhbWVQcm94eSogZnJhbWUpIG92ZXJyaWRlCisgICAgdm9pZCBwcmludEZyYW1lKFdl
YlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lKSBmaW5hbAogICAgIHsKLSAgICAgICAg
d2Via2l0V2ViVmlld1ByaW50RnJhbWUobV93ZWJWaWV3LCBmcmFtZSk7CisgICAgICAgIHdlYmtp
dFdlYlZpZXdQcmludEZyYW1lKG1fd2ViVmlldywgJmZyYW1lKTsKICAgICB9CiAjZW5kaWYKIAot
ICAgIGJvb2wgY2FuUnVuTW9kYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgYm9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IHZvaWQgcnVuTW9kYWwoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIHJ1bk1vZGFs
KFdlYlBhZ2VQcm94eSopIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXZWJWaWV3UnVuQXNN
b2RhbChtX3dlYlZpZXcpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCShyZXZpc2lvbiAyMjE3NjkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw4IEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RmV0Y2hlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3BlbiBicm93c2luZyBjb250ZXh0cyAod2lu
ZG93cyBhbmQgdGFicykgaW4gdGhlIGF1dG9tYXRpb24gc2Vzc2lvbi4iLAogICAgICAgICAgICAg
InJldHVybnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb250ZXh0cyIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJCcm93c2luZ0NvbnRleHQiIH0sICJkZXNj
cmlwdGlvbiI6ICJBbGwga25vd24gYnJvd3NpbmcgY29udGV4dHMgYXZhaWxhYmxlIHRvIHRoZSBz
ZXNzaW9uLiIgfQotICAgICAgICAgICAgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJh
c3luYyI6IHRydWUKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAi
Z2V0QnJvd3NpbmdDb250ZXh0IiwKQEAgLTIzNSw3ICsyMzYsOCBAQAogICAgICAgICAgICAgXSwK
ICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29u
dGV4dCIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dCIsICJkZXNjcmlwdGlvbiI6ICJUaGUgYnJv
d3NpbmcgY29udGV4dCBhdmFpbGFibGUgdG8gdGhlIHNlc3Npb24uIiB9Ci0gICAgICAgICAgICBd
CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAog
ICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJjcmVhdGVCcm93c2luZ0NvbnRleHQiLApA
QCAtMjY1LDcgKzI2Nyw4IEBACiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0
byBiZSByZXNpemVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNpemUiLCAiJHJl
ZiI6ICJTaXplIiwgImRlc2NyaXB0aW9uIjogIlRoZSBuZXcgc2l6ZSBmb3IgdGhlIGJyb3dzaW5n
IGNvbnRleHQncyB3aW5kb3cuIiB9Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAg
ICAibmFtZSI6ICJtb3ZlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiLApAQCAtMjczLDcgKzI3Niw4
IEBACiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRsZSIsICJkZXNjcmlwdGlv
biI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0byBiZSBtb3ZlZC4iIH0s
CiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvcmlnaW4iLCAiJHJlZiI6ICJQb2ludCIsICJk
ZXNjcmlwdGlvbiI6ICJUaGUgbmV3IG9yaWdpbiBmb3IgdGhlIGJyb3dzaW5nIGNvbnRleHQncyB3
aW5kb3cuIFRoZSBwb3NpdGlvbiBpcyBpbnRlcnByZXRlZCBpbiBzY3JlZW4gY29vcmRpbmF0ZSBz
cGFjZSwgcmVsYXRpdmUgdG8gdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4uIiB9
Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1
ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJuYXZpZ2F0ZUJy
b3dzaW5nQ29udGV4dCIsCkBAIC0zNjUsNyArMzY5LDggQEAKICAgICAgICAgICAgIF0sCiAgICAg
ICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvc2l0aW9u
IiwgIiRyZWYiOiAiUG9pbnQiLCAiZGVzY3JpcHRpb24iOiAiVGhlIHVwZGF0ZWQgcG9zaXRpb24g
b2YgdGhlIG1vdXNlIGN1cnNvciwgc3BlY2lmaWVkIGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzLiIg
fQotICAgICAgICAgICAgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJhc3luYyI6IHRy
dWUKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicGVyZm9ybUtl
eWJvYXJkSW50ZXJhY3Rpb25zIiwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lv
biAyMjE3NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDU2ICsyMDcsNjggQEAgU3Ry
aW5nIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpoYW5kbGVGb3JXZQogICAgIHJldHVybiBoYW5kbGVG
b3JXZWJGcmFtZUlEKHdlYkZyYW1lUHJveHkuZnJhbWVJRCgpKTsKIH0KIAotUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4gV2ViQXV0b21hdGlv
blNlc3Npb246OmJ1aWxkQnJvd3NpbmdDb250ZXh0Rm9yUGFnZShXZWJQYWdlUHJveHkmIHBhZ2Up
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2Uo
UmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uPiYmIHByb3RlY3RlZFRoaXMsIFdlYlBhZ2VQcm94eSYg
cGFnZSwgRnVuY3Rpb248dm9pZChSZWY8V2ViQXV0b21hdGlvblNlc3Npb24+JiYsIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZTsKLSAg
ICBwYWdlLmdldFdpbmRvd0ZyYW1lKHdpbmRvd0ZyYW1lKTsKLQotICAgIGF1dG8gb3JpZ2luT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0ZSgpCi0g
ICAgICAgIC5zZXRYKHdpbmRvd0ZyYW1lLngoKSkKLSAgICAgICAgLnNldFkod2luZG93RnJhbWUu
eSgpKQotICAgICAgICAucmVsZWFzZSgpOwotCi0gICAgYXV0byBzaXplT2JqZWN0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2l6ZTo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFdp
ZHRoKHdpbmRvd0ZyYW1lLndpZHRoKCkpCi0gICAgICAgIC5zZXRIZWlnaHQod2luZG93RnJhbWUu
aGVpZ2h0KCkpCi0gICAgICAgIC5yZWxlYXNlKCk7Ci0KLSAgICBTdHJpbmcgaGFuZGxlID0gaGFu
ZGxlRm9yV2ViUGFnZVByb3h5KHBhZ2UpOwotCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dDo6Y3JlYXRlKCkKLSAgICAgICAgLnNldEhh
bmRsZShoYW5kbGUpCi0gICAgICAgIC5zZXRBY3RpdmUobV9hY3RpdmVCcm93c2luZ0NvbnRleHRI
YW5kbGUgPT0gaGFuZGxlKQotICAgICAgICAuc2V0VXJsKHBhZ2UucGFnZUxvYWRTdGF0ZSgpLmFj
dGl2ZVVSTCgpKQotICAgICAgICAuc2V0V2luZG93T3JpZ2luKFdURk1vdmUob3JpZ2luT2JqZWN0
KSkKLSAgICAgICAgLnNldFdpbmRvd1NpemUoV1RGTW92ZShzaXplT2JqZWN0KSkKLSAgICAgICAg
LnJlbGVhc2UoKTsKKyAgICBwYWdlLmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVy
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgYWN0aXZlVVJM
ID0gcGFnZS5wYWdlTG9hZFN0YXRlKCkuYWN0aXZlVVJMKCksIGhhbmRsZSA9IGhhbmRsZUZvcldl
YlBhZ2VQcm94eShwYWdlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKSBtdXRhYmxlIHsKKyAgICAg
ICAgYXV0byBvcmlnaW5PYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQ
b2ludDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRYKHdpbmRvd0ZyYW1lLngoKSkKKyAgICAg
ICAgICAgIC5zZXRZKHdpbmRvd0ZyYW1lLnkoKSkKKyAgICAgICAgICAgIC5yZWxlYXNlKCk7CisK
KyAgICAgICAgYXV0byBzaXplT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6U2l6ZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRXaWR0aCh3aW5kb3dGcmFtZS53aWR0
aCgpKQorICAgICAgICAgICAgLnNldEhlaWdodCh3aW5kb3dGcmFtZS5oZWlnaHQoKSkKKyAgICAg
ICAgICAgIC5yZWxlYXNlKCk7CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShw
cm90ZWN0ZWRUaGlzKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0OjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldEhhbmRsZShoYW5kbGUpCisgICAgICAg
ICAgICAuc2V0QWN0aXZlKG1fYWN0aXZlQnJvd3NpbmdDb250ZXh0SGFuZGxlID09IGhhbmRsZSkK
KyAgICAgICAgICAgIC5zZXRVcmwoYWN0aXZlVVJMKQorICAgICAgICAgICAgLnNldFdpbmRvd09y
aWdpbihXVEZNb3ZlKG9yaWdpbk9iamVjdCkpCisgICAgICAgICAgICAuc2V0V2luZG93U2l6ZShX
VEZNb3ZlKHNpemVPYmplY3QpKQorICAgICAgICAgICAgLnJlbGVhc2UoKSk7CisgICAgfSk7CiB9
CiAKIC8vIFBsYXRmb3JtLWluZGVwZW5kZW50IENvbW1hbmRzLgogCi12b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpnZXRCcm93c2luZ0NvbnRleHRzKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pj4mIGNvbnRleHRzKQordm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0TmV4dENvbnRleHQoUmVmPFdlYkF1dG9tYXRpb25TZXNz
aW9uPiYmIHByb3RlY3RlZFRoaXMsIFZlY3RvcjxSZWY8V2ViUGFnZVByb3h5Pj4mJiBwYWdlcywg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dD4+IGNvbnRleHRzLCBSZWY8V2ViQXV0b21hdGlvblNlc3Np
b246OkdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKLSAgICBjb250
ZXh0cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD46OmNyZWF0ZSgpOwotCisgICAgaWYgKHBhZ2VzLmlz
RW1wdHkoKSkgeworICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShjb250ZXh0
cykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8gcGFnZSA9IHBhZ2VzLnRha2VM
YXN0KCk7CisgICAgYnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIHBhZ2UuZ2V0KCksIFt0aGlzLCBwYWdlcyA9IFdURk1vdmUocGFnZXMpLCBjb250ZXh0
cyA9IFdURk1vdmUoY29udGV4dHMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWY8
V2ViQXV0b21hdGlvblNlc3Npb24+JiYgcHJvdGVjdGVkVGhpcywgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4mJiBjb250ZXh0KSBtdXRhYmxlIHsK
KyAgICAgICAgY29udGV4dHMtPmFkZEl0ZW0oV1RGTW92ZShjb250ZXh0KSk7CisgICAgICAgIGdl
dE5leHRDb250ZXh0KFdURk1vdmUocHJvdGVjdGVkVGhpcyksIFdURk1vdmUocGFnZXMpLCBXVEZN
b3ZlKGNvbnRleHRzKSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIH0pOworfQorICAgIAordm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0cyhJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmPEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4m
JiBjYWxsYmFjaykKK3sKKyAgICBWZWN0b3I8UmVmPFdlYlBhZ2VQcm94eT4+IHBhZ2VzOwogICAg
IGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc1Bvb2wtPnByb2Nlc3NlcygpKSB7CiAgICAg
ICAgIGZvciAoYXV0byogcGFnZSA6IHByb2Nlc3MtPnBhZ2VzKCkpIHsKICAgICAgICAgICAgIEFT
U0VSVChwYWdlKTsKICAgICAgICAgICAgIGlmICghcGFnZS0+aXNDb250cm9sbGVkQnlBdXRvbWF0
aW9uKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNvbnRleHRz
LT5hZGRJdGVtKGJ1aWxkQnJvd3NpbmdDb250ZXh0Rm9yUGFnZSgqcGFnZSkpOworICAgICAgICAg
ICAgcGFnZXMuYXBwZW5kKCpwYWdlKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBnZXRO
ZXh0Q29udGV4dChtYWtlUmVmKCp0aGlzKSwgV1RGTW92ZShwYWdlcyksIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dD46OmNyZWF0ZSgpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+JiBjb250ZXh0KQordm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPEdldEJyb3dzaW5nQ29udGV4
dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBh
Z2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgY29udGV4dCA9IGJ1
aWxkQnJvd3NpbmdDb250ZXh0Rm9yUGFnZSgqcGFnZSk7CisgICAgYnVpbGRCcm93c2luZ0NvbnRl
eHRGb3JQYWdlKG1ha2VSZWYoKnRoaXMpLCAqcGFnZSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldIChSZWY8V2ViQXV0b21hdGlvblNlc3Npb24+JiYsIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+JiYgY29udGV4dCkgeworICAgICAgICBj
YWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShjb250ZXh0KSk7CisgICAgfSk7CiB9CiAKIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBoYW5kbGUpCkBAIC0zMDEsNyArMzEz
LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93cwogICAgIHBhZ2Ut
PnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpGb2N1
c0ZyYW1lKHBhZ2UtPnBhZ2VJRCgpLCBmcmFtZUlELnZhbHVlKCkpLCAwKTsKIH0KIAotdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoSW5zcGVj
dG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgc2l6ZU9iamVjdCkKK3ZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIHNpemVPYmplY3QsIFJlZjxSZXNpemVXaW5kb3dPZkJyb3dz
aW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogI2lmIFBMQVRGT1JNKElPUykKICAg
ICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1lbnRlZCk7CkBAIC0zMjQsMjcg
KzMzNiwzMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNpemVXaW5kb3dPCiAgICAg
aWYgKCFwYWdlKQogICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RG
b3VuZCk7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgb3JpZ2luYWxGcmFtZTsKLSAgICBwYWdl
LT5nZXRXaW5kb3dGcmFtZShvcmlnaW5hbEZyYW1lKTsKKyAgICBwYWdlLT5nZXRXaW5kb3dGcmFt
ZVdpdGhDb21wbGV0aW9uSGFuZGxlcihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFn
ZSA9IG1ha2VSZWYoKnBhZ2UpLCB3aWR0aCwgaGVpZ2h0XShXZWJDb3JlOjpGbG9hdFJlY3Qgb3Jp
Z2luYWxGcmFtZSkgbXV0YWJsZSB7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBuZXdGcmFt
ZSA9IFdlYkNvcmU6OkZsb2F0UmVjdChvcmlnaW5hbEZyYW1lLmxvY2F0aW9uKCksIFdlYkNvcmU6
OkZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGlmIChuZXdGcmFtZSA9PSBvcmln
aW5hbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwog
Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG5ld0ZyYW1lID0gV2ViQ29yZTo6RmxvYXRSZWN0KG9y
aWdpbmFsRnJhbWUubG9jYXRpb24oKSwgV2ViQ29yZTo6RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQp
KTsKLSAgICBpZiAobmV3RnJhbWUgPT0gb3JpZ2luYWxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcGFnZS0+c2V0V2luZG93RnJhbWUobmV3RnJhbWUpOworICAgICAgICBwYWdlLT5zZXRX
aW5kb3dGcmFtZShuZXdGcmFtZSk7CiAKLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIC8vIElmIG5v
dGhpbmcgY2hhbmdlZCBhdCBhbGwsIGl0J3MgcHJvYmFibHkgZmFpciB0byByZXBvcnQgdGhhdCBz
b21ldGhpbmcgd2VudCB3cm9uZy4KLSAgICAvLyAoV2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlIHJl
cXVlc3RlZCBmcmFtZSBzaXplIHdpbGwgYmUgaG9ub3JlZCBleGFjdGx5LCBob3dldmVyLikKLSAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgdXBkYXRlZEZyYW1lOwotICAgIHBhZ2UtPmdldFdpbmRvd0Zy
YW1lKHVwZGF0ZWRGcmFtZSk7Ci0gICAgaWYgKG9yaWdpbmFsRnJhbWUgPT0gdXBkYXRlZEZyYW1l
KQotICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5h
bEVycm9yLCAiVGhlIHdpbmRvdyBzaXplIHdhcyBleHBlY3RlZCB0byBoYXZlIGNoYW5nZWQsIGJ1
dCBkaWQgbm90LiIpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgY2FsbGJhY2stPnNlbmRT
dWNjZXNzKCk7CisjZWxzZQorICAgICAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQgYXQgYWxsLCBp
dCdzIHByb2JhYmx5IGZhaXIgdG8gcmVwb3J0IHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuCisg
ICAgICAgIC8vIChXZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgcmVxdWVzdGVkIGZyYW1lIHNpemUg
d2lsbCBiZSBob25vcmVkIGV4YWN0bHksIGhvd2V2ZXIuKQorICAgICAgICBwYWdlLT5nZXRXaW5k
b3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgb3JpZ2luYWxGcmFtZV0oV2ViQ29yZTo6RmxvYXRSZWN0IHVwZGF0ZWRGcmFtZSkgeworICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsRnJhbWUgPT0gdXBkYXRlZEZyYW1lKQorICAgICAgICAgICAg
ICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFN
RV9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHdpbmRvdyBzaXplIHdhcyBleHBlY3Rl
ZCB0byBoYXZlIGNoYW5nZWQsIGJ1dCBkaWQgbm90LiIpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyAgICAgICAgfSk7CiAjZW5k
aWYKKyAgICB9KTsKICNlbmRpZgogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptb3Zl
V2luZG93T2ZCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgcG9zaXRpb25PYmplY3QpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptb3ZlV2luZG93
T2ZCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcG9z
aXRpb25PYmplY3QsIFJlZjxNb3ZlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1IoTm90SW1wbGVtZW50ZWQpOwpAQCAtMzY4LDIyICszODMsMjcgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6bW92ZVdpbmRvd09mQgogICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgb3JpZ2lu
YWxGcmFtZTsKLSAgICBwYWdlLT5nZXRXaW5kb3dGcmFtZShvcmlnaW5hbEZyYW1lKTsKKyAgICBw
YWdlLT5nZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcihbY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgcGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCB4LCB5XShXZWJDb3JlOjpGbG9h
dFJlY3Qgb3JpZ2luYWxGcmFtZSkgbXV0YWJsZSB7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
bmV3RnJhbWUgPSBXZWJDb3JlOjpGbG9hdFJlY3QoV2ViQ29yZTo6RmxvYXRQb2ludCh4LCB5KSwg
b3JpZ2luYWxGcmFtZS5zaXplKCkpOwotICAgIGlmIChuZXdGcmFtZSA9PSBvcmlnaW5hbEZyYW1l
KQotICAgICAgICByZXR1cm47CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBuZXdGcmFtZSA9
IFdlYkNvcmU6OkZsb2F0UmVjdChXZWJDb3JlOjpGbG9hdFBvaW50KHgsIHkpLCBvcmlnaW5hbEZy
YW1lLnNpemUoKSk7CisgICAgICAgIGlmIChuZXdGcmFtZSA9PSBvcmlnaW5hbEZyYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogCi0gICAgcGFnZS0+c2V0
V2luZG93RnJhbWUobmV3RnJhbWUpOworICAgICAgICBwYWdlLT5zZXRXaW5kb3dGcmFtZShuZXdG
cmFtZSk7CiAKLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIC8vIElmIG5vdGhpbmcgY2hhbmdlZCBh
dCBhbGwsIGl0J3MgcHJvYmFibHkgZmFpciB0byByZXBvcnQgdGhhdCBzb21ldGhpbmcgd2VudCB3
cm9uZy4KLSAgICAvLyAoV2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlcXVlc3RlZCBmcmFtZSBz
aXplIHdpbGwgYmUgaG9ub3JlZCBleGFjdGx5LCBob3dldmVyLikKLSAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgdXBkYXRlZEZyYW1lOwotICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lKHVwZGF0ZWRGcmFt
ZSk7Ci0gICAgaWYgKG9yaWdpbmFsRnJhbWUgPT0gdXBkYXRlZEZyYW1lKQotICAgICAgICBGQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHdp
bmRvdyBwb3NpdGlvbiB3YXMgZXhwZWN0ZWQgdG8gaGF2ZSBjaGFuZ2VkLCBidXQgZGlkIG5vdC4i
KTsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwor
I2Vsc2UKKyAgICAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkIGF0IGFsbCwgaXQncyBwcm9iYWJs
eSBmYWlyIHRvIHJlcG9ydCB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLgorICAgICAgICAvLyAo
V2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlcXVlc3RlZCBmcmFtZSBzaXplIHdpbGwgYmUgaG9u
b3JlZCBleGFjdGx5LCBob3dldmVyLikKKyAgICAgICAgcGFnZS0+Z2V0V2luZG93RnJhbWVXaXRo
Q29tcGxldGlvbkhhbmRsZXIoW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIG9yaWdpbmFs
RnJhbWVdKFdlYkNvcmU6OkZsb2F0UmVjdCB1cGRhdGVkRnJhbWUpIHsKKyAgICAgICAgICAgIGlm
IChvcmlnaW5hbEZyYW1lID09IHVwZGF0ZWRGcmFtZSkKKyAgICAgICAgICAgICAgICBjYWxsYmFj
ay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJ
TFMoSW50ZXJuYWxFcnJvciwgIlRoZSB3aW5kb3cgcG9zaXRpb24gd2FzIGV4cGVjdGVkIHRvIGhh
dmUgY2hhbmdlZCwgYnV0IGRpZCBub3QuIikpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOworICAgICAgICB9KTsKICNlbmRpZgorICAg
IH0pOwogI2VuZGlmCiB9CiAKQEAgLTEyMjEsNyArMTI0MSw3IEBAIHN0YXRpYyBXZWJFdmVudDo6
TW9kaWZpZXJzIHByb3RvY29sTW9kaWYKIH0KICNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCi12b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdCwgY29uc3Qg
U3RyaW5nJiBtb3VzZUJ1dHRvblN0cmluZywgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9u
U3RyaW5nLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBrZXlNb2RpZmllclN0cmlu
Z3MsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQb2ludD4mIHVwZGF0
ZWRQb3NpdGlvbk9iamVjdCkKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3Vz
ZUludGVyYWN0aW9uKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHJlcXVlc3Rl
ZFBvc2l0aW9uT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1vdXNlQnV0dG9uU3RyaW5nLCBjb25zdCBT
dHJpbmcmIG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXkmIGtleU1vZGlmaWVyU3RyaW5ncywgUmVmPFBlcmZvcm1Nb3VzZUludGVyYWN0aW9uQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgIVVTRShBUFBLSVQpICYmICFQTEFURk9STShHVEsp
CiAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1wbGVtZW50ZWQpOwpAQCAtMTIz
OCwyMiArMTI1OCw2IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUkK
ICAgICBpZiAoIXJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0LmdldERvdWJsZShXVEY6OkFTQ0lJTGl0
ZXJhbCgieSIpLCB5KSkKICAgICAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3knIHdhcyBub3QgZm91bmQu
Iik7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWU7Ci0gICAgcGFnZS0+Z2V0
V2luZG93RnJhbWUod2luZG93RnJhbWUpOwotCi0gICAgeCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAu
MGYsIHgpLCB3aW5kb3dGcmFtZS5zaXplKCkud2lkdGgoKSk7Ci0gICAgeSA9IHN0ZDo6bWluKHN0
ZDo6bWF4KDAuMGYsIHkgKyBwYWdlLT50b3BDb250ZW50SW5zZXQoKSksIHdpbmRvd0ZyYW1lLnNp
emUoKS5oZWlnaHQoKSk7Ci0KLSAgICBXZWJDb3JlOjpJbnRQb2ludCB2aWV3UG9zaXRpb24gPSBX
ZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkp
KTsKLQotICAgIGF1dG8gcGFyc2VkSW50ZXJhY3Rpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJhY3Rpb24+KG1vdXNlSW50ZXJhY3Rpb25TdHJp
bmcpOwotICAgIGlmICghcGFyc2VkSW50ZXJhY3Rpb24pCi0gICAgICAgIEZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVy
ICdpbnRlcmFjdGlvbicgaXMgaW52YWxpZC4iKTsKLQotICAgIGF1dG8gcGFyc2VkQnV0dG9uID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbj4obW91
c2VCdXR0b25TdHJpbmcpOwotICAgIGlmICghcGFyc2VkQnV0dG9uKQotICAgICAgICBGQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBh
cmFtZXRlciAnYnV0dG9uJyBpcyBpbnZhbGlkLiIpOwotCiAgICAgV2ViRXZlbnQ6Ok1vZGlmaWVy
cyBrZXlNb2RpZmllcnMgPSAoV2ViRXZlbnQ6Ok1vZGlmaWVycykwOwogICAgIGZvciAoYXV0byBp
dCA9IGtleU1vZGlmaWVyU3RyaW5ncy5iZWdpbigpOyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3Mu
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgU3RyaW5nIG1vZGlmaWVyU3RyaW5nOwpAQCAtMTI2Niwx
MyArMTI3MCwyOSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJCiAg
ICAgICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgZW51bVZhbHVlID0gcHJvdG9jb2xNb2RpZmllclRv
V2ViRXZlbnRNb2RpZmllcihwYXJzZWRNb2RpZmllci52YWx1ZSgpKTsKICAgICAgICAga2V5TW9k
aWZpZXJzID0gKFdlYkV2ZW50OjpNb2RpZmllcnMpKGVudW1WYWx1ZSB8IGtleU1vZGlmaWVycyk7
CiAgICAgfQorICAgIAorICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5k
bGVyKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgeCwgeSwgbW91c2VJbnRlcmFj
dGlvblN0cmluZywgbW91c2VCdXR0b25TdHJpbmcsIGtleU1vZGlmaWVyc10oV2ViQ29yZTo6Rmxv
YXRSZWN0IHdpbmRvd0ZyYW1lKSBtdXRhYmxlIHsKIAotICAgIHBsYXRmb3JtU2ltdWxhdGVNb3Vz
ZUludGVyYWN0aW9uKCpwYWdlLCB2aWV3UG9zaXRpb24sIHBhcnNlZEludGVyYWN0aW9uLnZhbHVl
KCksIHBhcnNlZEJ1dHRvbi52YWx1ZSgpLCBrZXlNb2RpZmllcnMpOworICAgICAgICB4ID0gc3Rk
OjptaW4oc3RkOjptYXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1lLnNpemUoKS53aWR0aCgpKTsKKyAg
ICAgICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkgKyBwYWdlLT50b3BDb250ZW50SW5z
ZXQoKSksIHdpbmRvd0ZyYW1lLnNpemUoKS5oZWlnaHQoKSk7CiAKLSAgICB1cGRhdGVkUG9zaXRp
b25PYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQb2ludDo6Y3JlYXRl
KCkKLSAgICAgICAgLnNldFgoeCkKLSAgICAgICAgLnNldFkoeSAtIHBhZ2UtPnRvcENvbnRlbnRJ
bnNldCgpKQotICAgICAgICAucmVsZWFzZSgpOworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCB2
aWV3UG9zaXRpb24gPSBXZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHgpLCBzdGF0
aWNfY2FzdDxpbnQ+KHkpKTsKKworICAgICAgICBhdXRvIHBhcnNlZEludGVyYWN0aW9uID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uPiht
b3VzZUludGVyYWN0aW9uU3RyaW5nKTsKKyAgICAgICAgaWYgKCFwYXJzZWRJbnRlcmFjdGlvbikK
KyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVE
RUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJh
bWV0ZXIgJ2ludGVyYWN0aW9uJyBpcyBpbnZhbGlkLiIpKTsKKworICAgICAgICBhdXRvIHBhcnNl
ZEJ1dHRvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VC
dXR0b24+KG1vdXNlQnV0dG9uU3RyaW5nKTsKKyAgICAgICAgaWYgKCFwYXJzZWRCdXR0b24pCisg
ICAgICAgICAgICByZXR1cm4gY2FsbGJhY2stPnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVG
SU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1l
dGVyICdidXR0b24nIGlzIGludmFsaWQuIikpOworCisgICAgICAgIHBsYXRmb3JtU2ltdWxhdGVN
b3VzZUludGVyYWN0aW9uKHBhZ2UsIHZpZXdQb3NpdGlvbiwgcGFyc2VkSW50ZXJhY3Rpb24udmFs
dWUoKSwgcGFyc2VkQnV0dG9uLnZhbHVlKCksIGtleU1vZGlmaWVycyk7CisKKyAgICAgICAgY2Fs
bGJhY2stPnNlbmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50
OjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFgoeCkKKyAgICAgICAgICAgIC5zZXRZKHkgLSBw
YWdlLT50b3BDb250ZW50SW5zZXQoKSkKKyAgICAgICAgICAgIC5yZWxlYXNlKCkpOworICAgIH0p
OwogI2VuZGlmIC8vIFVTRShBUFBLSVQpCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgJKHJl
dmlzaW9uIDIyMTc2OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDIwICsxMTUsMjAgQEAg
cHVibGljOgogICAgIC8vIGFuZCB0aGUgLS1wbGF0Zm9ybSBhcmd1bWVudCBwYXNzZWQgdG8gdGhl
IHByb3RvY29sIGJpbmRpbmdzIGdlbmVyYXRvci4KIAogICAgIC8vIFBsYXRmb3JtOiBHZW5lcmlj
Ci0gICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHRzKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pj4mKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEJyb3dz
aW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4mKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyYsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRzQ2FsbGJhY2s+JiYpIGZpbmFsOworICAgIHZvaWQg
Z2V0QnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwogICAgIHZvaWQgY3Jl
YXRlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBTdHJpbmcqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGNsb3NlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN3aXRjaFRvQnJvd3NpbmdD
b250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlKSBvdmVycmlkZTsK
LSAgICB2b2lkIHJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIHNpemUpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdpbmRvd09mQnJvd3NpbmdDb250
ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHBvc2l0aW9uKSBvdmVycmlkZTsKKyAgICB2b2lk
IHJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHNp
emUsIFJlZjxSZXNpemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsK
KyAgICB2b2lkIG1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0JiBwb3NpdGlvbiwgUmVmPE1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYm
KSBmaW5hbDsKICAgICB2b2lkIG5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBpbnQqIG9wdGlv
bmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VM
b2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGludCogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJl
ZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAgICB2b2lk
IGdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywg
Y29uc3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVsb2FkQnJvd3NpbmdD
b250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgaW50KiBvcHRpb25hbFBh
Z2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVy
cmlkZTsKICAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2Fk
U3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGludCogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxX
YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxG
cmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JBcnJheSYgYXJndW1lbnRzLCBjb25zdCBib29sKiBvcHRpb25hbEV4cGVjdHNJbXBsaWNp
dENhbGxiYWNrQXJndW1lbnQsIGNvbnN0IGludCogb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQsIFJl
ZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV2YWx1YXRl
SmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcGVyZm9y
bU1vdXNlSW50ZXJhY3Rpb24oSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
aGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcmVxdWVzdGVkUG9zaXRp
b24sIGNvbnN0IFN0cmluZyYgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgbW91c2VJbnRlcmFj
dGlvbiwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYga2V5TW9kaWZpZXJzLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ+JiB1cGRhdGVkUG9zaXRp
b24pIG92ZXJyaWRlOworICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oSW5zcGVjdG9y
OjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgcmVxdWVzdGVkUG9zaXRpb24sIGNvbnN0IFN0cmluZyYgbW91c2VCdXR0
b24sIGNvbnN0IFN0cmluZyYgbW91c2VJbnRlcmFjdGlvbiwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JBcnJheSYga2V5TW9kaWZpZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxs
YmFjaz4mJikgZmluYWw7CiAgICAgdm9pZCBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoSW5z
cGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5JiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRl
cmFjdGlvbnNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB0YWtlU2NyZWVuc2hvdChJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmlu
Zyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUs
IGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgUmVmPFRha2VTY3Jl
ZW5zaG90Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzb2x2ZUNoaWxkRnJhbWVI
YW5kbGUoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IGludCog
b3B0aW9uYWxPcmRpbmFsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTmFtZSwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZUNhbGxiYWNr
PiYmKSBvdmVycmlkZTsKQEAgLTE2MCw3ICsxNjAsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGNvbnN0IFN0cmluZyYpOwogICAg
IFN0cmluZyBoYW5kbGVGb3JXZWJQYWdlUHJveHkoY29uc3QgV2ViUGFnZVByb3h5Jik7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD4g
YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKFdlYlBhZ2VQcm94eSYpOworICAgIHZvaWQgYnVp
bGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4mJiwgV2Vi
UGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChSZWY8V2ViQXV0b21hdGlvblNlc3Npb24+JiYsIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+JiYpPiYm
KTsKKyAgICB2b2lkIGdldE5leHRDb250ZXh0KFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4mJiwg
VmVjdG9yPFJlZjxXZWJQYWdlUHJveHk+PiYmLCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pj4sIFJl
ZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYmKTsK
IAogICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHdlYkZyYW1lSURGb3JIYW5kbGUoY29uc3Qg
U3RyaW5nJik7CiAgICAgU3RyaW5nIGhhbmRsZUZvcldlYkZyYW1lSUQodWludDY0X3QgZnJhbWVJ
RCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCShy
ZXZpc2lvbiAyMjE3NzEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVn
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgICAg
ICBib29sIGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQ
cm94eSYsIFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgQVBJOjpTZWN1cml0
eU9yaWdpbiYsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkmKSBmaW5hbDsKICAgICAg
ICAgYm9vbCBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4oV2ViUGFnZVByb3h5Jiwg
V2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2lu
JiwgVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmKSBmaW5hbDsKICAgICAgICAgdm9pZCBt
ZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZShXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0
YXRlRmxhZ3MpIGZpbmFsOwotICAgICAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVByb3h5Kiwg
V2ViRnJhbWVQcm94eSopIGZpbmFsOworICAgICAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVBy
b3h5JiwgV2ViRnJhbWVQcm94eSYpIGZpbmFsOwogI2lmIFBMQVRGT1JNKElPUykKICNpZiBIQVZF
KEFQUF9MSU5LUykKICAgICAgICAgYm9vbCBzaG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNGb3JF
bGVtZW50KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopIGZpbmFsOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCShyZXZpc2lvbiAyMjE3NzEpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC04MDEsMTAgKzgwMSw4IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlYWNo
ZWRBcHBsaWMKICAgICB9KS5nZXQoKV07CiB9CiAKLXZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnByaW50RnJhbWUoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSogd2ViRnJhbWVQcm94eSkK
K3ZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByaW50RnJhbWUoV2ViUGFnZVByb3h5JiwgV2Vi
RnJhbWVQcm94eSYgd2ViRnJhbWVQcm94eSkKIHsKLSAgICBBU1NFUlRfQVJHKHdlYkZyYW1lUHJv
eHksIHdlYkZyYW1lUHJveHkpOwotCiAgICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld1ByaW50RnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtODEyLDcgKzgx
MCw3IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByaW50RnJhbWUoV2UKICAgICBpZiAo
IWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHByaW50RnJhbWU6
d3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUod2ViRnJhbWVQcm94eS0+ZnJhbWVJRCgp
KSldOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcHJpbnRGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVIYW5kbGU6
OmNyZWF0ZSh3ZWJGcmFtZVByb3h5LmZyYW1lSUQoKSkpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6Y2xvc2UoV2ViUGFnZVByb3h5KikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCShyZXZpc2lvbiAyMjE3NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTYyOCw3ICsxNjI4LDcgQEAgTlNQcmludE9wZXJhdGlvbiAqV2ViVmlld0ltcGw6OnByaW50
T3BlcgogCiAgICAgLy8gRklYTUU6IElmIHRoZSBmcmFtZSBjYW5ub3QgYmUgcHJpbnRlZCAoZS5n
LiBpZiBpdCBjb250YWlucyBhbiBlbmNyeXB0ZWQgUERGIHRoYXQgZGlzYWxsb3dzCiAgICAgLy8g
cHJpbnRpbmcpLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gbmlsLgotICAgIFJldGFpblB0
cjxXS1ByaW50aW5nVmlldz4gcHJpbnRpbmdWaWV3ID0gYWRvcHROUyhbW1dLUHJpbnRpbmdWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lUHJveHk6JmZyYW1lIHZpZXc6bV92aWV3LmdldEF1dG9yZWxl
YXNlZCgpXSk7CisgICAgUmV0YWluUHRyPFdLUHJpbnRpbmdWaWV3PiBwcmludGluZ1ZpZXcgPSBh
ZG9wdE5TKFtbV0tQcmludGluZ1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWVQcm94eTpmcmFtZSB2
aWV3Om1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKV0pOwogICAgIC8vIE5TUHJpbnRPcGVyYXRpb24g
dGFrZXMgb3duZXJzaGlwIG9mIHRoZSB2aWV3LgogICAgIE5TUHJpbnRPcGVyYXRpb24gKnByaW50
T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gcHJpbnRPcGVyYXRpb25XaXRoVmlldzpwcmlu
dGluZ1ZpZXcuZ2V0KCkgcHJpbnRJbmZvOnByaW50SW5mb107CiAgICAgW3ByaW50T3BlcmF0aW9u
IHNldENhblNwYXduU2VwYXJhdGVUaHJlYWQ6WUVTXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5oCShyZXZpc2lvbiAyMjE3NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgsNyArNjgsNyBAQCBAaW50ZXJmYWNlIFdLUHJpbnRpbmdWaWV3IDogTlNWaWV3IHsKICAg
ICBOU1RpbWVyICpfYXV0b2Rpc3BsYXlSZXN1bWVUaW1lcjsKIH0KIAotLSAoaWQpaW5pdFdpdGhG
cmFtZVByb3h5OihXZWJLaXQ6OldlYkZyYW1lUHJveHkqKWZyYW1lIHZpZXc6KE5TVmlldyAqKXdr
VmlldzsKKy0gKGlkKWluaXRXaXRoRnJhbWVQcm94eTooV2ViS2l0OjpXZWJGcmFtZVByb3h5Jilm
cmFtZSB2aWV3OihOU1ZpZXcgKil3a1ZpZXc7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQkocmV2aXNpb24gMjIxNzY5KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxMyArNTEsMTMgQEAgc3RhdGljIEJPT0wgaXNGb3JjaW5nUHJldmlld1Vw
ZGF0ZTsKIAogQGltcGxlbWVudGF0aW9uIFdLUHJpbnRpbmdWaWV3CiAKLS0gKGlkKWluaXRXaXRo
RnJhbWVQcm94eTooV2ViS2l0OjpXZWJGcmFtZVByb3h5KilmcmFtZSB2aWV3OihOU1ZpZXcgKil3
a1ZpZXcKKy0gKGlkKWluaXRXaXRoRnJhbWVQcm94eTooV2ViS2l0OjpXZWJGcmFtZVByb3h5Jilm
cmFtZSB2aWV3OihOU1ZpZXcgKil3a1ZpZXcKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOyAv
LyBObyBmcmFtZSByZWN0IHRvIHBhc3MgdG8gTlNWaWV3LgogICAgIGlmICghc2VsZikKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgIF93ZWJGcmFtZSA9IGZyYW1lOworICAgIF93ZWJGcmFtZSA9
ICZmcmFtZTsKICAgICBfd2tWaWV3ID0gd2tWaWV3OwogCiAgICAgcmV0dXJuIHNlbGY7CkBAIC0x
NTEsOCArMTUxLDggQEAgLSAodm9pZClfYWRqdXN0UHJpbnRpbmdNYXJnaW5zRm9ySGVhZGVyQQog
ICAgIH0KICAgICAKICAgICBDR0Zsb2F0IHNjYWxlID0gW2luZm8gc2NhbGluZ0ZhY3Rvcl07Ci0g
ICAgW2luZm8gc2V0VG9wTWFyZ2luOm9yaWdpbmFsVG9wTWFyZ2luICsgX3dlYkZyYW1lLT5wYWdl
KCktPmhlYWRlckhlaWdodChfd2ViRnJhbWUuZ2V0KCkpICogc2NhbGVdOwotICAgIFtpbmZvIHNl
dEJvdHRvbU1hcmdpbjpvcmlnaW5hbEJvdHRvbU1hcmdpbiArIF93ZWJGcmFtZS0+cGFnZSgpLT5m
b290ZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSAqIHNjYWxlXTsKKyAgICBbaW5mbyBzZXRUb3BN
YXJnaW46b3JpZ2luYWxUb3BNYXJnaW4gKyBfd2ViRnJhbWUtPnBhZ2UoKS0+aGVhZGVySGVpZ2h0
KCpfd2ViRnJhbWUpICogc2NhbGVdOworICAgIFtpbmZvIHNldEJvdHRvbU1hcmdpbjpvcmlnaW5h
bEJvdHRvbU1hcmdpbiArIF93ZWJGcmFtZS0+cGFnZSgpLT5mb290ZXJIZWlnaHQoKl93ZWJGcmFt
ZSkgKiBzY2FsZV07CiB9CiAKIC0gKEJPT0wpX2lzUHJpbnRpbmdQcmV2aWV3CkBAIC02MzcsMTgg
KzYzNywxOCBAQCAtICh2b2lkKWRyYXdQYWdlQm9yZGVyV2l0aFNpemU6KE5TU2l6ZSliCiAgICAg
TlNTaXplIHBhcGVyU2l6ZSA9IFtwcmludEluZm8gcGFwZXJTaXplXTsKICAgICBDR0Zsb2F0IGhl
YWRlckZvb3RlckxlZnQgPSBbcHJpbnRJbmZvIGxlZnRNYXJnaW5dIC8gc2NhbGU7CiAgICAgQ0dG
bG9hdCBoZWFkZXJGb290ZXJXaWR0aCA9IChwYXBlclNpemUud2lkdGggLSAoW3ByaW50SW5mbyBs
ZWZ0TWFyZ2luXSArIFtwcmludEluZm8gcmlnaHRNYXJnaW5dKSkgLyBzY2FsZTsKLSAgICBOU1Jl
Y3QgZm9vdGVyUmVjdCA9IE5TTWFrZVJlY3QoaGVhZGVyRm9vdGVyTGVmdCwgW3ByaW50SW5mbyBi
b3R0b21NYXJnaW5dIC8gc2NhbGUgLSBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KF93
ZWJGcmFtZS5nZXQoKSksIGhlYWRlckZvb3RlcldpZHRoLCBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9v
dGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSkpOwotICAgIE5TUmVjdCBoZWFkZXJSZWN0ID0gTlNN
YWtlUmVjdChoZWFkZXJGb290ZXJMZWZ0LCAocGFwZXJTaXplLmhlaWdodCAtIFtwcmludEluZm8g
dG9wTWFyZ2luXSkgLyBzY2FsZSwgaGVhZGVyRm9vdGVyV2lkdGgsIF93ZWJGcmFtZS0+cGFnZSgp
LT5oZWFkZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSk7CisgICAgTlNSZWN0IGZvb3RlclJlY3Qg
PSBOU01ha2VSZWN0KGhlYWRlckZvb3RlckxlZnQsIFtwcmludEluZm8gYm90dG9tTWFyZ2luXSAv
IHNjYWxlIC0gX3dlYkZyYW1lLT5wYWdlKCktPmZvb3RlckhlaWdodCgqX3dlYkZyYW1lKSwgaGVh
ZGVyRm9vdGVyV2lkdGgsIF93ZWJGcmFtZS0+cGFnZSgpLT5mb290ZXJIZWlnaHQoKl93ZWJGcmFt
ZSkpOworICAgIE5TUmVjdCBoZWFkZXJSZWN0ID0gTlNNYWtlUmVjdChoZWFkZXJGb290ZXJMZWZ0
LCAocGFwZXJTaXplLmhlaWdodCAtIFtwcmludEluZm8gdG9wTWFyZ2luXSkgLyBzY2FsZSwgaGVh
ZGVyRm9vdGVyV2lkdGgsIF93ZWJGcmFtZS0+cGFnZSgpLT5oZWFkZXJIZWlnaHQoKl93ZWJGcmFt
ZSkpOwogCiAgICAgTlNHcmFwaGljc0NvbnRleHQgKmN1cnJlbnRDb250ZXh0ID0gW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICBbY3VycmVudENvbnRleHQgc2F2ZUdyYXBo
aWNzU3RhdGVdOwogICAgIE5TUmVjdENsaXAoaGVhZGVyUmVjdCk7Ci0gICAgX3dlYkZyYW1lLT5w
YWdlKCktPmRyYXdIZWFkZXIoX3dlYkZyYW1lLmdldCgpLCBoZWFkZXJSZWN0KTsKKyAgICBfd2Vi
RnJhbWUtPnBhZ2UoKS0+ZHJhd0hlYWRlcigqX3dlYkZyYW1lLCBoZWFkZXJSZWN0KTsKICAgICBb
Y3VycmVudENvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogCiAgICAgW2N1cnJlbnRDb250
ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKICAgICBOU1JlY3RDbGlwKGZvb3RlclJlY3QpOwotICAg
IF93ZWJGcmFtZS0+cGFnZSgpLT5kcmF3Rm9vdGVyKF93ZWJGcmFtZS5nZXQoKSwgZm9vdGVyUmVj
dCk7CisgICAgX3dlYkZyYW1lLT5wYWdlKCktPmRyYXdGb290ZXIoKl93ZWJGcmFtZSwgZm9vdGVy
UmVjdCk7CiAgICAgW2N1cnJlbnRDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1t
CShyZXZpc2lvbiAyMjE3NjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFn
ZVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMTAgKzEzNiwxMCBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0NoCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEluIGNhc2UgdGhlIFVJIGNsaWVudCBvdmVycmlkZXMgZ2V0V2luZG93RnJhbWUoKSwgd2Ug
Y2FsbCBpdCBoZXJlIHRvIG1ha2Ugc3VyZSB3ZSBzZW5kIHRoZSBhcHByb3ByaWF0ZSB3aW5kb3cg
ZnJhbWUuCi0gICAgRmxvYXRSZWN0IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcyA9IG1f
dWlDbGllbnQtPndpbmRvd0ZyYW1lKHRoaXMpOwotICAgIEZsb2F0UmVjdCB3aW5kb3dGcmFtZUlu
VW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMgPSBtX3BhZ2VDbGllbnQuY29udmVydFRvVXNlclNw
YWNlKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcyk7Ci0KLSAgICBwcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6V2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJh
bWVJblNjcmVlbkNvb3JkaW5hdGVzLCB3aW5kb3dGcmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRp
bmF0ZXMsIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGFjY2Vzc2liaWxpdHlWaWV3Q29v
cmRpbmF0ZXMpLCBtX3BhZ2VJRCk7CisgICAgbV91aUNsaWVudC0+d2luZG93RnJhbWUoKnRoaXMs
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMsIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXNdIChGbG9hdFJlY3Qgd2lu
ZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzKSB7CisgICAgICAgIEZsb2F0UmVjdCB3aW5kb3dG
cmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMgPSBtX3BhZ2VDbGllbnQuY29udmVydFRv
VXNlclNwYWNlKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcyk7CisgICAgICAgIHByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCh3
aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIHdpbmRvd0ZyYW1lSW5VbmZsaXBwZWRTY3Jl
ZW5Db29yZGluYXRlcywgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgYWNjZXNzaWJpbGl0
eVZpZXdDb29yZGluYXRlcyksIG1fcGFnZUlEKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OnNldE1haW5GcmFtZUlzU2Nyb2xsYWJsZShib29sIGlzU2Nyb2xsYWJsZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320486</attachid>
            <date>2017-09-11 15:24:04 -0700</date>
            <delta_ts>2017-09-11 15:50:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176583-20170911152404.patch</filename>
            <type>text/plain</type>
            <size>66251</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE4NzMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE3LTA5LTExICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIGFu
ZCBtYWtlIEFQSTo6VUlDbGllbnQgbW9yZSBhc3luY2hyb25vdXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjU4MworCisgICAgICAgIFJldmlld2Vk
IGJ5IEJyaWFuIEJ1cmcuCisKKyAgICAgICAgQVBJOjpVSUNsaWVudCBjYWxscyB0aGF0IHJldHVy
biB2YWx1ZXMgc3luY2hyb25vdXNseSByZXF1aXJlIHN5bmNocm9ub3VzIEFQSXMgdW5uZWNlc3Nh
cmlseS4KKyAgICAgICAgSGF2aW5nIHRoZW0gY2FsbCBjb21wbGV0aW9uIGhhbmRsZXJzIHdpdGgg
dGhlIHJlc3VsdHMgaW5zdGVhZCBhbGxvd3MgdXMgdG8gbWFrZSBhc3luY2hyb25vdXMKKyAgICAg
ICAgQVBJcywgYW5kIGV4aXN0aW5nIHN5bmNocm9ub3VzIEFQSXMgY2FuIGp1c3QgY2FsbCB0aGUg
Y29tcGxldGlvbiBoYW5kbGVycyBpbW1lZGlhdGVseS4KKyAgICAgICAgCisgICAgICAgIFVuZm9y
dHVuYXRlbHkgYW4gYXNzdW1wdGlvbiB0aGF0IEFQSTo6VUlDbGllbnQ6OndpbmRvd0ZyYW1lIHJl
dHVybnMgc3luY2hyb25vdXNseSBoYWQgd29ya2VkCisgICAgICAgIGl0cyB3YXkgaW50byB0aGUg
V2ViQXV0b21hdGlvblNlc3Npb24sIHdoaWNoIGNhbGxzIFdlYlBhZ2VQcm94eTo6Z2V0V2luZG93
RnJhbWUuICBNYWtpbmcgaXQKKyAgICAgICAgYXN5bmNocm9ub3VzIHJlcXVpcmVkIG1ha2luZyBz
b21lIGF1dG9tYXRpb24gcHJvdG9jb2xzIGFzeW5jaHJvbm91cyBzbyB0aGV5IGNhbiBzZW5kIHRo
ZWlyCisgICAgICAgIHJlc3VsdCBvbmNlIHRoZXkgaGF2ZSB0aGUgcmVzdWx0aW5nIGZyYW1lcyBm
cm9tIHRoZSBVSUNsaWVudC4KKyAgICAgICAgCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlv
dXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50Lmg6CisgICAgICAgIChB
UEk6OlVJQ2xpZW50OjpzZXRUb29sYmFyc0FyZVZpc2libGUpOgorICAgICAgICAoQVBJOjpVSUNs
aWVudDo6bWVudUJhcklzVmlzaWJsZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpzZXRNZW51
QmFySXNWaXNpYmxlKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OnN0YXR1c0JhcklzVmlzaWJs
ZSk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpzZXRTdGF0dXNCYXJJc1Zpc2libGUpOgorICAg
ICAgICAoQVBJOjpVSUNsaWVudDo6aXNSZXNpemFibGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVu
dDo6c2V0SXNSZXNpemFibGUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6c2V0V2luZG93RnJh
bWUpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6d2luZG93RnJhbWUpOgorICAgICAgICAoQVBJ
OjpVSUNsaWVudDo6aGVhZGVySGVpZ2h0KToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmZvb3Rl
ckhlaWdodCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50OjpkcmF3SGVhZGVyKToKKyAgICAgICAg
KEFQSTo6VUlDbGllbnQ6OmRyYXdGb290ZXIpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6cHJp
bnRGcmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAg
IChXS1BhZ2VTZXRQYWdlVUlDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9u
L0F1dG9tYXRpb24uanNvbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjpidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6Z2V0TmV4dENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkF1dG9tYXRpb25TZXNzaW9uOjpnZXRCcm93c2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bW92ZVdpbmRvd09mQnJvd3Np
bmdDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZv
cm1Nb3VzZUludGVyYWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRl
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW06CisgICAgICAgIChX
ZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpwcmludEZyYW1lKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpwcmludE9wZXJhdGlvbldpdGhQcmludEluZm8pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3Jp
cHRQcm9tcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFRvb2xiYXJzQXJl
VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0TWVudUJhcklzVmlz
aWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0TWVudUJhcklzVmlzaWJs
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U3RhdHVzQmFySXNWaXNpYmxl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRTdGF0dXNCYXJJc1Zpc2libGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldElzUmVzaXphYmxlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRJc1Jlc2l6YWJsZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6c2V0V2luZG93RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmdldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpnZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6c2NyZWVuVG9Sb290Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cm9vdFZpZXdUb1NjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6cHJpbnRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGVhZGVySGVp
Z2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpmb290ZXJIZWlnaHQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRyYXdIZWFkZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmRyYXdGb290ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBp
bml0V2l0aEZyYW1lUHJveHk6dmlldzpdKToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX2Fk
anVzdFByaW50aW5nTWFyZ2luc0ZvckhlYWRlckFuZEZvb3Rlcl0pOgorICAgICAgICAoLVtXS1By
aW50aW5nVmlldyBkcmF3UGFnZUJvcmRlcldpdGhTaXplOl0pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKToKKwogMjAxNy0wOS0xMSAgQWxleCBDaHJpc3Rl
bnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBXS1VJRGVsZWdh
dGVQcml2YXRlIGVxdWl2YWxlbnQgb2YgV0tQYWdlVUlDbGllbnQncyBkZWNpZGVQb2xpY3lGb3JH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDIyMTg3MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NTksNyArMzk1OSw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0Q29uZmlybSgKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJ
RCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgUmVmUHRyPE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OkRlbGF5ZWRSZXBseT4gcmVwbHkpCit2
b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFtZUlELCBj
b25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewogICAg
IFdlYkZyYW1lUHJveHkqIGZyYW1lID0gbV9wcm9jZXNzLT53ZWJGcmFtZShmcmFtZUlEKTsKICAg
ICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKQEAgLTM5NzIsNyArMzk3Miw5IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0KHUKICAgICAgICAgICAgIGF1dG9tYXRpb25TZXNz
aW9uLT53aWxsU2hvd0phdmFTY3JpcHREaWFsb2coKnRoaXMpOwogICAgIH0KIAotICAgIG1fdWlD
bGllbnQtPnJ1bkphdmFTY3JpcHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBm
cmFtZSwgc2VjdXJpdHlPcmlnaW4sIFtyZXBseV0oY29uc3QgU3RyaW5nJiByZXN1bHQpIHsgcmVw
bHktPnNlbmQocmVzdWx0KTsgfSk7CisgICAgbV91aUNsaWVudC0+cnVuSmF2YVNjcmlwdFByb21w
dCh0aGlzLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsIGZyYW1lLCBzZWN1cml0eU9yaWdpbiwgW3Jl
cGx5ID0gV1RGTW92ZShyZXBseSldKGNvbnN0IFN0cmluZyYgcmVzdWx0KSB7CisgICAgICAgIHJl
cGx5LT5zZW5kKHJlc3VsdCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRT
dGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKQEAgLTQwNjIsNyArNDA2NCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpyZXNvbHZlV2ViR0xQb2xpY3lGb3IKIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldFRvb2xiYXJzQXJlVmlzaWJsZShib29sIHRvb2xiYXJzQXJlVmlzaWJsZSkKIHsKLSAgICBt
X3VpQ2xpZW50LT5zZXRUb29sYmFyc0FyZVZpc2libGUodGhpcywgdG9vbGJhcnNBcmVWaXNpYmxl
KTsKKyAgICBtX3VpQ2xpZW50LT5zZXRUb29sYmFyc0FyZVZpc2libGUoKnRoaXMsIHRvb2xiYXJz
QXJlVmlzaWJsZSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRUb29sYmFyc0FyZVZpc2li
bGUoUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFRvb2xiYXJzQXJlVmlzaWJsZTo6RGVs
YXllZFJlcGx5PiYmIHJlcGx5KQpAQCAtNDA3NCw1MiArNDA3Niw2NSBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0VG9vbGJhcnNBcmVWaXNpYmxlCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRNZW51
QmFySXNWaXNpYmxlKGJvb2wgbWVudUJhcklzVmlzaWJsZSkKIHsKLSAgICBtX3VpQ2xpZW50LT5z
ZXRNZW51QmFySXNWaXNpYmxlKHRoaXMsIG1lbnVCYXJJc1Zpc2libGUpOworICAgIG1fdWlDbGll
bnQtPnNldE1lbnVCYXJJc1Zpc2libGUoKnRoaXMsIG1lbnVCYXJJc1Zpc2libGUpOwogfQogCi12
b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TWVudUJhcklzVmlzaWJsZShib29sJiBtZW51QmFySXNWaXNp
YmxlKQordm9pZCBXZWJQYWdlUHJveHk6OmdldE1lbnVCYXJJc1Zpc2libGUoUmVmPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkdldE1lbnVCYXJJc1Zpc2libGU6OkRlbGF5ZWRSZXBseT4mJiByZXBs
eSkKIHsKLSAgICBtZW51QmFySXNWaXNpYmxlID0gbV91aUNsaWVudC0+bWVudUJhcklzVmlzaWJs
ZSh0aGlzKTsKKyAgICBtX3VpQ2xpZW50LT5tZW51QmFySXNWaXNpYmxlKCp0aGlzLCBbcmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KV0gKGJvb2wgdmlzaWJsZSkgeworICAgICAgICByZXBseS0+c2VuZCh2
aXNpYmxlKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFN0YXR1c0Jhcklz
VmlzaWJsZShib29sIHN0YXR1c0JhcklzVmlzaWJsZSkKIHsKLSAgICBtX3VpQ2xpZW50LT5zZXRT
dGF0dXNCYXJJc1Zpc2libGUodGhpcywgc3RhdHVzQmFySXNWaXNpYmxlKTsKKyAgICBtX3VpQ2xp
ZW50LT5zZXRTdGF0dXNCYXJJc1Zpc2libGUoKnRoaXMsIHN0YXR1c0JhcklzVmlzaWJsZSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpnZXRTdGF0dXNCYXJJc1Zpc2libGUoYm9vbCYgc3RhdHVz
QmFySXNWaXNpYmxlKQordm9pZCBXZWJQYWdlUHJveHk6OmdldFN0YXR1c0JhcklzVmlzaWJsZShS
ZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlOjpEZWxheWVk
UmVwbHk+JiYgcmVwbHkpCiB7Ci0gICAgc3RhdHVzQmFySXNWaXNpYmxlID0gbV91aUNsaWVudC0+
c3RhdHVzQmFySXNWaXNpYmxlKHRoaXMpOworICAgIG1fdWlDbGllbnQtPnN0YXR1c0JhcklzVmlz
aWJsZSgqdGhpcywgW3JlcGx5ID0gV1RGTW92ZShyZXBseSldIChib29sIHZpc2libGUpIHsKKyAg
ICAgICAgcmVwbHktPnNlbmQodmlzaWJsZSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRJc1Jlc2l6YWJsZShib29sIGlzUmVzaXphYmxlKQogewotICAgIG1fdWlDbGllbnQt
PnNldElzUmVzaXphYmxlKHRoaXMsIGlzUmVzaXphYmxlKTsKKyAgICBtX3VpQ2xpZW50LT5zZXRJ
c1Jlc2l6YWJsZSgqdGhpcywgaXNSZXNpemFibGUpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
Z2V0SXNSZXNpemFibGUoYm9vbCYgaXNSZXNpemFibGUpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0
SXNSZXNpemFibGUoUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldElzUmVzaXphYmxlOjpE
ZWxheWVkUmVwbHk+JiYgcmVwbHkpCiB7Ci0gICAgaXNSZXNpemFibGUgPSBtX3VpQ2xpZW50LT5p
c1Jlc2l6YWJsZSh0aGlzKTsKKyAgICBtX3VpQ2xpZW50LT5pc1Jlc2l6YWJsZSgqdGhpcywgW3Jl
cGx5ID0gV1RGTW92ZShyZXBseSldIChib29sIHJlc2l6YWJsZSkgeworICAgICAgICByZXBseS0+
c2VuZChyZXNpemFibGUpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0V2lu
ZG93RnJhbWUoY29uc3QgRmxvYXRSZWN0JiBuZXdXaW5kb3dGcmFtZSkKIHsKLSAgICBtX3VpQ2xp
ZW50LT5zZXRXaW5kb3dGcmFtZSh0aGlzLCBtX3BhZ2VDbGllbnQuY29udmVydFRvRGV2aWNlU3Bh
Y2UobmV3V2luZG93RnJhbWUpKTsKKyAgICBtX3VpQ2xpZW50LT5zZXRXaW5kb3dGcmFtZSgqdGhp
cywgbV9wYWdlQ2xpZW50LmNvbnZlcnRUb0RldmljZVNwYWNlKG5ld1dpbmRvd0ZyYW1lKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZShGbG9hdFJlY3QmIG5ld1dpbmRv
d0ZyYW1lKQordm9pZCBXZWJQYWdlUHJveHk6OmdldFdpbmRvd0ZyYW1lKFJlZjxNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZTo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewot
ICAgIG5ld1dpbmRvd0ZyYW1lID0gbV9wYWdlQ2xpZW50LmNvbnZlcnRUb1VzZXJTcGFjZShtX3Vp
Q2xpZW50LT53aW5kb3dGcmFtZSh0aGlzKSk7CisgICAgbV91aUNsaWVudC0+d2luZG93RnJhbWUo
KnRoaXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHJlcGx5ID0gV1RG
TW92ZShyZXBseSldIChGbG9hdFJlY3QgZnJhbWUpIHsKKyAgICAgICAgcmVwbHktPnNlbmQobV9w
YWdlQ2xpZW50LmNvbnZlcnRUb1VzZXJTcGFjZShmcmFtZSkpOworICAgIH0pOwogfQotICAgIAot
dm9pZCBXZWJQYWdlUHJveHk6OnNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHNjcmVl
blBvaW50LCBJbnRQb2ludCYgd2luZG93UG9pbnQpCisKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRX
aW5kb3dGcmFtZVdpdGhDYWxsYmFjayhGdW5jdGlvbjx2b2lkKEZsb2F0UmVjdCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgbV91aUNsaWVudC0+d2luZG93RnJhbWUoKnRoaXMsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnNjcmVlblRv
Um9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHNjcmVlblBvaW50LCBSZWY8TWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U2NyZWVuVG9Sb290Vmlldzo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewotICAg
IHdpbmRvd1BvaW50ID0gbV9wYWdlQ2xpZW50LnNjcmVlblRvUm9vdFZpZXcoc2NyZWVuUG9pbnQp
OworICAgIHJlcGx5LT5zZW5kKG1fcGFnZUNsaWVudC5zY3JlZW5Ub1Jvb3RWaWV3KHNjcmVlblBv
aW50KSk7CiB9CiAgICAgCi12b2lkIFdlYlBhZ2VQcm94eTo6cm9vdFZpZXdUb1NjcmVlbihjb25z
dCBJbnRSZWN0JiB2aWV3UmVjdCwgSW50UmVjdCYgcmVzdWx0KQordm9pZCBXZWJQYWdlUHJveHk6
OnJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgdmlld1JlY3QsIFJlZjxNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpSb290Vmlld1RvU2NyZWVuOjpEZWxheWVkUmVwbHk+JiYgcmVwbHkpCiB7
Ci0gICAgcmVzdWx0ID0gbV9wYWdlQ2xpZW50LnJvb3RWaWV3VG9TY3JlZW4odmlld1JlY3QpOwor
ICAgIHJlcGx5LT5zZW5kKG1fcGFnZUNsaWVudC5yb290Vmlld1RvU2NyZWVuKHZpZXdSZWN0KSk7
CiB9CiAgICAgCiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtNDIwNSw3ICs0MjIwLDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnByaW50RnJhbWUodWludDY0X3QgZgogICAgIFdlYkZyYW1lUHJveHkqIGZy
YW1lID0gbV9wcm9jZXNzLT53ZWJGcmFtZShmcmFtZUlEKTsKICAgICBNRVNTQUdFX0NIRUNLKGZy
YW1lKTsKIAotICAgIG1fdWlDbGllbnQtPnByaW50RnJhbWUodGhpcywgZnJhbWUpOworICAgIG1f
dWlDbGllbnQtPnByaW50RnJhbWUoKnRoaXMsICpmcmFtZSk7CiAKICAgICBlbmRQcmludGluZygp
OyAvLyBTZW5kIGEgbWVzc2FnZSBzeW5jaHJvbm91c2x5IHdoaWxlIG1faXNQZXJmb3JtaW5nRE9N
UHJpbnRPcGVyYXRpb24gaXMgc3RpbGwgdHJ1ZS4KICAgICBtX2lzUGVyZm9ybWluZ0RPTVByaW50
T3BlcmF0aW9uID0gZmFsc2U7CkBAIC01OTEyLDMyICs1OTI3LDMyIEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWREZXN0cm95Tm90aWZpY2F0aW8KICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
c3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCktPmRpZERlc3Ryb3lOb3Rp
ZmljYXRpb24odGhpcywgbm90aWZpY2F0aW9uSUQpOwogfQogCi1mbG9hdCBXZWJQYWdlUHJveHk6
OmhlYWRlckhlaWdodChXZWJGcmFtZVByb3h5KiBmcmFtZSkKK2Zsb2F0IFdlYlBhZ2VQcm94eTo6
aGVhZGVySGVpZ2h0KFdlYkZyYW1lUHJveHkmIGZyYW1lKQogewotICAgIGlmIChmcmFtZS0+aXNE
aXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKKyAgICBpZiAoZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9j
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fdWlDbGllbnQtPmhlYWRl
ckhlaWdodCh0aGlzLCBmcmFtZSk7CisgICAgcmV0dXJuIG1fdWlDbGllbnQtPmhlYWRlckhlaWdo
dCgqdGhpcywgZnJhbWUpOwogfQogCi1mbG9hdCBXZWJQYWdlUHJveHk6OmZvb3RlckhlaWdodChX
ZWJGcmFtZVByb3h5KiBmcmFtZSkKK2Zsb2F0IFdlYlBhZ2VQcm94eTo6Zm9vdGVySGVpZ2h0KFdl
YkZyYW1lUHJveHkmIGZyYW1lKQogewotICAgIGlmIChmcmFtZS0+aXNEaXNwbGF5aW5nUERGRG9j
dW1lbnQoKSkKKyAgICBpZiAoZnJhbWUuaXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fdWlDbGllbnQtPmZvb3RlckhlaWdodCh0aGlzLCBm
cmFtZSk7CisgICAgcmV0dXJuIG1fdWlDbGllbnQtPmZvb3RlckhlaWdodCgqdGhpcywgZnJhbWUp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBXZWJQYWdlUHJveHk6OmRyYXdIZWFkZXIo
V2ViRnJhbWVQcm94eSYgZnJhbWUsIEZsb2F0UmVjdCYmIHJlY3QpCiB7Ci0gICAgaWYgKGZyYW1l
LT5pc0Rpc3BsYXlpbmdQREZEb2N1bWVudCgpKQorICAgIGlmIChmcmFtZS5pc0Rpc3BsYXlpbmdQ
REZEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV91aUNsaWVudC0+ZHJhd0hlYWRl
cih0aGlzLCBmcmFtZSwgcmVjdCk7CisgICAgbV91aUNsaWVudC0+ZHJhd0hlYWRlcigqdGhpcywg
ZnJhbWUsIFdURk1vdmUocmVjdCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd0Zvb3Rl
cihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBXZWJQ
YWdlUHJveHk6OmRyYXdGb290ZXIoV2ViRnJhbWVQcm94eSYgZnJhbWUsIEZsb2F0UmVjdCYmIHJl
Y3QpCiB7Ci0gICAgaWYgKGZyYW1lLT5pc0Rpc3BsYXlpbmdQREZEb2N1bWVudCgpKQorICAgIGlm
IChmcmFtZS5pc0Rpc3BsYXlpbmdQREZEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
bV91aUNsaWVudC0+ZHJhd0Zvb3Rlcih0aGlzLCBmcmFtZSwgcmVjdCk7CisgICAgbV91aUNsaWVu
dC0+ZHJhd0Zvb3RlcigqdGhpcywgZnJhbWUsIFdURk1vdmUocmVjdCkpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6cnVuTW9kYWwoKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgJKHJldmlzaW9uIDIyMTg3MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MDgsMTAgKzgwOCwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoY29uc3QgU3RyaW5nJiwgYm9vbCwg
V1RGOjpGdW5jdGlvbjx2b2lkIChBUEk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSosIGJvb2wgaGFk
RXhjZXB0aW9uLCBjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzJiwgQ2FsbGJhY2tCYXNl
OjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbik7CiAgICAgdm9pZCBmb3JjZVJlcGFpbnQoUmVm
UHRyPFZvaWRDYWxsYmFjaz4mJik7CiAKLSAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViRnJhbWVQ
cm94eSopOwotICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5Kik7Ci0gICAgdm9p
ZCBkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
LSAgICB2b2lkIGRyYXdGb290ZXIoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpOworICAgIGZsb2F0IGhlYWRlckhlaWdodChXZWJGcmFtZVByb3h5Jik7CisgICAgZmxv
YXQgZm9vdGVySGVpZ2h0KFdlYkZyYW1lUHJveHkmKTsKKyAgICB2b2lkIGRyYXdIZWFkZXIoV2Vi
RnJhbWVQcm94eSYsIFdlYkNvcmU6OkZsb2F0UmVjdCYmKTsKKyAgICB2b2lkIGRyYXdGb290ZXIo
V2ViRnJhbWVQcm94eSYsIFdlYkNvcmU6OkZsb2F0UmVjdCYmKTsKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIC8vIERpY3Rpb25hcnkuCkBAIC0xMTY4LDcgKzExNjgsOCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldEZvY3VzKGJvb2wgZm9jdXNlZCk7CiAgICAgdm9pZCBzZXRXaW5kb3dGcmFt
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGdldFdpbmRvd0ZyYW1lKFdl
YkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgZ2V0V2luZG93RnJhbWUoUmVmPE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkdldFdpbmRvd0ZyYW1lOjpEZWxheWVkUmVwbHk+JiYpOworICAgIHZv
aWQgZ2V0V2luZG93RnJhbWVXaXRoQ2FsbGJhY2soRnVuY3Rpb248dm9pZChXZWJDb3JlOjpGbG9h
dFJlY3QpPiYmKTsKIAogICAgIGJvb2wgaXNSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZDsgfQogICAgIHZvaWQgc2V0UmVz
b3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCk7CkBAIC0xMjk2LDcgKzEyOTcsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2hvd1BhZ2UoKTsKICAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydCh1aW50
NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBT
dHJpbmcmLCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpE
ZWxheWVkUmVwbHk+JiYpOwogICAgIHZvaWQgcnVuSmF2YVNjcmlwdENvbmZpcm0odWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5n
JiwgUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJtOjpEZWxh
eWVkUmVwbHk+JiYpOwotICAgIHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFt
ZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmLCBSZWZQdHI8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlw
dFByb21wdDo6RGVsYXllZFJlcGx5Pik7CisgICAgdm9pZCBydW5KYXZhU2NyaXB0UHJvbXB0KHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5K
YXZhU2NyaXB0UHJvbXB0OjpEZWxheWVkUmVwbHk+JiYpOwogICAgIHZvaWQgc2V0U3RhdHVzVGV4
dChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYkhp
dFRlc3RSZXN1bHREYXRhJiYsIHVpbnQzMl90IG1vZGlmaWVycywgVXNlckRhdGEmJik7CiAKQEAg
LTEzMTAsMTMgKzEzMTEsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFRvb2xiYXJzQXJlVmlz
aWJsZShib29sIHRvb2xiYXJzQXJlVmlzaWJsZSk7CiAgICAgdm9pZCBnZXRUb29sYmFyc0FyZVZp
c2libGUoUmVmPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFRvb2xiYXJzQXJlVmlzaWJsZTo6
RGVsYXllZFJlcGx5PiYmKTsKICAgICB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoYm9vbCBtZW51
QmFySXNWaXNpYmxlKTsKLSAgICB2b2lkIGdldE1lbnVCYXJJc1Zpc2libGUoYm9vbCYgbWVudUJh
cklzVmlzaWJsZSk7CisgICAgdm9pZCBnZXRNZW51QmFySXNWaXNpYmxlKFJlZjxNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpHZXRNZW51QmFySXNWaXNpYmxlOjpEZWxheWVkUmVwbHk+JiYpOwogICAg
IHZvaWQgc2V0U3RhdHVzQmFySXNWaXNpYmxlKGJvb2wgc3RhdHVzQmFySXNWaXNpYmxlKTsKLSAg
ICB2b2lkIGdldFN0YXR1c0JhcklzVmlzaWJsZShib29sJiBzdGF0dXNCYXJJc1Zpc2libGUpOwor
ICAgIHZvaWQgZ2V0U3RhdHVzQmFySXNWaXNpYmxlKFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpHZXRTdGF0dXNCYXJJc1Zpc2libGU6OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBzZXRJ
c1Jlc2l6YWJsZShib29sIGlzUmVzaXphYmxlKTsKLSAgICB2b2lkIGdldElzUmVzaXphYmxlKGJv
b2wmIGlzUmVzaXphYmxlKTsKLSAgICB2b2lkIHNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHNjcmVlblBvaW50LCBXZWJDb3JlOjpJbnRQb2ludCYgd2luZG93UG9pbnQp
OwotICAgIHZvaWQgcm9vdFZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3
UmVjdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVzdWx0KTsKKyAgICB2b2lkIGdldElzUmVzaXphYmxl
KFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRJc1Jlc2l6YWJsZTo6RGVsYXllZFJlcGx5
PiYmKTsKKyAgICB2b2lkIHNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IHNjcmVlblBvaW50LCBSZWY8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2NyZWVuVG9Sb290Vmll
dzo6RGVsYXllZFJlcGx5PiYmKTsKKyAgICB2b2lkIHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgdmlld1JlY3QsIFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSb290
Vmlld1RvU2NyZWVuOjpEZWxheWVkUmVwbHk+JiYpOwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2
b2lkIGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBzY3JlZW5Qb2ludCwgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKICAgICB2b2lk
IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZp
ZXdSZWN0LCBXZWJDb3JlOjpJbnRSZWN0JiByZXN1bHQpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjIxODcy
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC01MiwxNiArNTIsMTYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5
IHsKICAgICBTZXRSZW5kZXJUcmVlU2l6ZSh1aW50NjRfdCB0cmVlU2l6ZSkKICAgICBTZXRUb29s
YmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZpc2libGUpCiAgICAgR2V0VG9vbGJhcnNB
cmVWaXNpYmxlKCkgLT4gKGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxlKSBEZWxheWVkCi0gICAgU2V0
TWVudUJhcklzVmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUpOwotICAgIEdldE1lbnVCYXJJ
c1Zpc2libGUoKSAtPiAoYm9vbCBtZW51QmFySXNWaXNpYmxlKTsKKyAgICBTZXRNZW51QmFySXNW
aXNpYmxlKGJvb2wgbWVudUJhcklzVmlzaWJsZSkKKyAgICBHZXRNZW51QmFySXNWaXNpYmxlKCkg
LT4gKGJvb2wgbWVudUJhcklzVmlzaWJsZSkgRGVsYXllZAogICAgIFNldFN0YXR1c0JhcklzVmlz
aWJsZShib29sIHN0YXR1c0JhcklzVmlzaWJsZSkKLSAgICBHZXRTdGF0dXNCYXJJc1Zpc2libGUo
KSAtPiAoYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUpCisgICAgR2V0U3RhdHVzQmFySXNWaXNpYmxl
KCkgLT4gKGJvb2wgc3RhdHVzQmFySXNWaXNpYmxlKSBEZWxheWVkCiAgICAgU2V0SXNSZXNpemFi
bGUoYm9vbCBpc1Jlc2l6YWJsZSkKLSAgICBHZXRJc1Jlc2l6YWJsZSgpIC0+IChib29sIGlzUmVz
aXphYmxlKQorICAgIEdldElzUmVzaXphYmxlKCkgLT4gKGJvb2wgaXNSZXNpemFibGUpIERlbGF5
ZWQKICAgICBTZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpCi0g
ICAgR2V0V2luZG93RnJhbWUoKSAtPiAoV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQot
ICAgIFNjcmVlblRvUm9vdFZpZXcoV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChX
ZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQb2ludCkKLSAgICBSb290Vmlld1RvU2NyZWVuKFdlYkNv
cmU6OkludFJlY3QgcmVjdCkgLT4gKFdlYkNvcmU6OkludFJlY3Qgc2NyZWVuRnJhbWUpCisgICAg
R2V0V2luZG93RnJhbWUoKSAtPiAoV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKSBEZWxh
eWVkCisgICAgU2NyZWVuVG9Sb290VmlldyhXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Qb2ludCkg
LT4gKFdlYkNvcmU6OkludFBvaW50IHdpbmRvd1BvaW50KSBEZWxheWVkCisgICAgUm9vdFZpZXdU
b1NjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3JlOjpJbnRSZWN0IHNjcmVl
bkZyYW1lKSBEZWxheWVkCiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBTaG93VmFsaWRhdGlv
bk1lc3NhZ2UoV2ViQ29yZTo6SW50UmVjdCBhbmNob3JSZWN0LCBTdHJpbmcgbWVzc2FnZSkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oCShyZXZpc2lvbiAy
MjE4NzMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtOTksMTYgKzk5LDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkTm90SGFuZGxlV2hlZWxFdmVudChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdlYktp
dDo6TmF0aXZlV2ViV2hlZWxFdmVudCYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHRvb2xiYXJz
QXJlVmlzaWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgYm9v
bCkgeyB9Ci0gICAgdmlydHVhbCBib29sIG1lbnVCYXJJc1Zpc2libGUoV2ViS2l0OjpXZWJQYWdl
UHJveHkqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE1lbnVCYXJJc1Zp
c2libGUoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBib29sKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c3RhdHVzQmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV2ViS2l0OjpXZWJQYWdl
UHJveHkqLCBib29sKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZXNpemFibGUoV2ViS2l0OjpX
ZWJQYWdlUHJveHkqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldElzUmVz
aXphYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBtZW51QmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5Jiwg
RnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgeyBjb21wbGV0aW9uSGFu
ZGxlcih0cnVlKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdlYktp
dDo6V2ViUGFnZVByb3h5JiwgYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0YXR1c0Jhcklz
VmlzaWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U3RhdHVzQmFySXNWaXNpYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgYm9vbCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGlzUmVzaXphYmxlKFdlYktpdDo6V2ViUGFnZVByb3h5Jiwg
RnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgeyBjb21wbGV0aW9uSGFu
ZGxlcih0cnVlKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJLaXQ6Oldl
YlBhZ2VQcm94eSYsIGJvb2wpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd0ZyYW1l
KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgeyB9Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUoV2ViS2l0OjpXZWJQYWdl
UHJveHkqKSB7IHJldHVybiBXZWJDb3JlOjpGbG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRXaW5kb3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGcmFtZShXZWJLaXQ6OldlYlBh
Z2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RmxvYXRSZWN0KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgeyBjb21wbGV0aW9uSGFuZGxlcih7IH0pOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKFdlYktpdDo6V2Vi
UGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkIChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikgeyBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsgfQpAQCAtMTMy
LDExICsxMzIsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBkZWNpZGVQb2xpY3lGb3JO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIFNlY3Vy
aXR5T3JpZ2luKiwgV2ViS2l0OjpOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdCopIHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICAvLyBQcmludGluZy4KLSAgICB2aXJ0dWFsIGZsb2F0IGhlYWRl
ckhlaWdodChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIFdlYktpdDo6V2ViRnJhbWVQcm94eSopIHsg
cmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGZvb3RlckhlaWdodChXZWJLaXQ6OldlYlBh
Z2VQcm94eSosIFdlYktpdDo6V2ViRnJhbWVQcm94eSopIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZHJhd0hlYWRlcihXZWJLaXQ6OldlYlBhZ2VQcm94eSosIFdlYktpdDo6V2ViRnJh
bWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3Rm9vdGVyKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5
KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHByaW50
RnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqKSB7IH0K
KyAgICB2aXJ0dWFsIGZsb2F0IGhlYWRlckhlaWdodChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdl
YktpdDo6V2ViRnJhbWVQcm94eSYpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGZv
b3RlckhlaWdodChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYp
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0hlYWRlcihXZWJLaXQ6OldlYlBh
Z2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYsIFdlYkNvcmU6OkZsb2F0UmVjdCYmKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zvb3RlcihXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdl
YktpdDo6V2ViRnJhbWVQcm94eSYsIFdlYkNvcmU6OkZsb2F0UmVjdCYmKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcHJpbnRGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJh
bWVQcm94eSYpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGNhblJ1bk1vZGFsKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWwoV2ViS2l0OjpXZWJQYWdl
UHJveHkqKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cAkocmV2aXNpb24gMjIxODczKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzOSw2OSArMTgzOSw2OSBAQCB2b2lkIFdLUGFn
ZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYgcGFnCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihtX2NsaWVudC50b29sYmFyc0FyZVZpc2libGUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0VG9vbGJhcnNB
cmVWaXNpYmxlKFdlYlBhZ2VQcm94eSogcGFnZSwgYm9vbCB2aXNpYmxlKSBmaW5hbAorICAgICAg
ICB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgdmlz
aWJsZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5zZXRUb29s
YmFyc0FyZVZpc2libGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbV9j
bGllbnQuc2V0VG9vbGJhcnNBcmVWaXNpYmxlKHRvQVBJKHBhZ2UpLCB2aXNpYmxlLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQuc2V0VG9vbGJhcnNBcmVW
aXNpYmxlKHRvQVBJKCZwYWdlKSwgdmlzaWJsZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGJvb2wgbWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkq
IHBhZ2UpIGZpbmFsCisgICAgICAgIHZvaWQgbWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkm
IHBhZ2UsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQubWVudUJhcklzVmlzaWJsZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5t
ZW51QmFySXNWaXNpYmxlKHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKKyAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fY2xpZW50Lm1lbnVCYXJJc1Zpc2libGUodG9BUEkoJnBh
Z2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKTsKICAgICAgICAgfQogCi0gICAgICAgIHZv
aWQgc2V0TWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkqIHBhZ2UsIGJvb2wgdmlzaWJsZSkg
ZmluYWwKKyAgICAgICAgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSYgcGFn
ZSwgYm9vbCB2aXNpYmxlKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xp
ZW50LnNldE1lbnVCYXJJc1Zpc2libGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgbV9jbGllbnQuc2V0TWVudUJhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwgdmlzaWJsZSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNldE1lbnVC
YXJJc1Zpc2libGUodG9BUEkoJnBhZ2UpLCB2aXNpYmxlLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFn
ZVByb3h5KiBwYWdlKSBmaW5hbAorICAgICAgICB2b2lkIHN0YXR1c0JhcklzVmlzaWJsZShXZWJQ
YWdlUHJveHkmIHBhZ2UsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuc3RhdHVzQmFySXNW
aXNpYmxlKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJu
IG1fY2xpZW50LnN0YXR1c0JhcklzVmlzaWJsZSh0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIodHJ1
ZSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2NsaWVudC5zdGF0dXNCYXJJc1Zp
c2libGUodG9BUEkoJnBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKTsKICAgICAgICAg
fQogCi0gICAgICAgIHZvaWQgc2V0U3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSogcGFn
ZSwgYm9vbCB2aXNpYmxlKSBmaW5hbAorICAgICAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJs
ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGJvb2wgdmlzaWJsZSkgZmluYWwKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKCFtX2NsaWVudC5zZXRTdGF0dXNCYXJJc1Zpc2libGUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbV9jbGllbnQuc2V0U3RhdHVzQmFySXNWaXNpYmxl
KHRvQVBJKHBhZ2UpLCB2aXNpYmxlLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAg
ICAgICAgbV9jbGllbnQuc2V0U3RhdHVzQmFySXNWaXNpYmxlKHRvQVBJKCZwYWdlKSwgdmlzaWJs
ZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIGJvb2wg
aXNSZXNpemFibGUoV2ViUGFnZVByb3h5KiBwYWdlKSBmaW5hbAorICAgICAgICB2b2lkIGlzUmVz
aXphYmxlKFdlYlBhZ2VQcm94eSYgcGFnZSwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5p
c1Jlc2l6YWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudC5pc1Jlc2l6YWJsZSh0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7
CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtX2NsaWVudC5pc1Jlc2l6YWJsZSh0b0FQ
SSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpOwogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkqIHBhZ2UsIGJvb2wgcmVzaXphYmxl
KSBmaW5hbAorICAgICAgICB2b2lkIHNldElzUmVzaXphYmxlKFdlYlBhZ2VQcm94eSYgcGFnZSwg
Ym9vbCByZXNpemFibGUpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGll
bnQuc2V0SXNSZXNpemFibGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
bV9jbGllbnQuc2V0SXNSZXNpemFibGUodG9BUEkocGFnZSksIHJlc2l6YWJsZSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNldElzUmVzaXphYmxlKHRv
QVBJKCZwYWdlKSwgcmVzaXphYmxlLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAg
ICB9CiAKLSAgICAgICAgdm9pZCBzZXRXaW5kb3dGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZnJhbWUpIGZpbmFsCisgICAgICAgIHZvaWQgc2V0V2luZG93RnJhbWUo
V2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lKSBmaW5hbAogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNldFdpbmRvd0ZyYW1lKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9jbGllbnQuc2V0V2luZG93RnJhbWUodG9B
UEkocGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAg
ICAgICAgIG1fY2xpZW50LnNldFdpbmRvd0ZyYW1lKHRvQVBJKCZwYWdlKSwgdG9BUEkoZnJhbWUp
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRS
ZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSogcGFnZSkgZmluYWwKKyAgICAgICAgdm9pZCB3
aW5kb3dGcmFtZShXZWJQYWdlUHJveHkmIHBhZ2UsIEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6Rmxv
YXRSZWN0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5nZXRXaW5kb3dGcmFtZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsg
fSk7CiAKLSAgICAgICAgICAgIHJldHVybiB0b0Zsb2F0UmVjdChtX2NsaWVudC5nZXRXaW5kb3dG
cmFtZSh0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih0b0Zsb2F0UmVjdChtX2NsaWVudC5nZXRXaW5kb3dGcmFtZSh0
b0FQSSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QgZmluYWwK
QEAgLTE5ODksNDQgKzE5ODksNDQgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdl
UmVmIHBhZwogICAgICAgICB9CiAKICAgICAgICAgLy8gUHJpbnRpbmcuCi0gICAgICAgIGZsb2F0
IGhlYWRlckhlaWdodChXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lKSBm
aW5hbAorICAgICAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJG
cmFtZVByb3h5JiBmcmFtZSkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2Ns
aWVudC5oZWFkZXJIZWlnaHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAg
ICAgIHJldHVybiBtX2NsaWVudC5oZWFkZXJIZWlnaHQodG9BUEkocGFnZSksIHRvQVBJKGZyYW1l
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBtX2NsaWVu
dC5oZWFkZXJIZWlnaHQodG9BUEkoJnBhZ2UpLCB0b0FQSSgmZnJhbWUpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgZmxvYXQgZm9vdGVySGVpZ2h0KFdl
YlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUpIGZpbmFsCisgICAgICAgIGZs
b2F0IGZvb3RlckhlaWdodChXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkmIGZyYW1l
KSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmZvb3RlckhlaWdo
dCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgcmV0dXJuIG1fY2xp
ZW50LmZvb3RlckhlaWdodCh0b0FQSShwYWdlKSwgdG9BUEkoZnJhbWUpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50LmZvb3RlckhlaWdodCh0
b0FQSSgmcGFnZSksIHRvQVBJKCZmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAg
ICAgICAgIH0KIAotICAgICAgICB2b2lkIGRyYXdIZWFkZXIoV2ViUGFnZVByb3h5KiBwYWdlLCBX
ZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KSBmaW5h
bAorICAgICAgICB2b2lkIGRyYXdIZWFkZXIoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVBy
b3h5JiBmcmFtZSwgV2ViQ29yZTo6RmxvYXRSZWN0JiYgcmVjdCkgZmluYWwKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kcmF3SGVhZGVyKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICAgICAgbV9jbGllbnQuZHJhd0hlYWRlcih0b0FQSShwYWdlKSwgdG9B
UEkoZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAg
ICAgICAgIG1fY2xpZW50LmRyYXdIZWFkZXIodG9BUEkoJnBhZ2UpLCB0b0FQSSgmZnJhbWUpLCB0
b0FQSShyZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHZvaWQgZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZy
YW1lLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpIGZpbmFsCisgICAgICAgIHZvaWQg
ZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBXZWJD
b3JlOjpGbG9hdFJlY3QmJiByZWN0KSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
IW1fY2xpZW50LmRyYXdGb290ZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
ICAgICBtX2NsaWVudC5kcmF3Rm9vdGVyKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIHRvQVBJ
KHJlY3QpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQu
ZHJhd0Zvb3Rlcih0b0FQSSgmcGFnZSksIHRvQVBJKCZmcmFtZSksIHRvQVBJKHJlY3QpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBwcmludEZy
YW1lKFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUpIGZpbmFsCisgICAg
ICAgIHZvaWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkmIGZy
YW1lKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnByaW50RnJh
bWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBtX2NsaWVudC5wcmlu
dEZyYW1lKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7CisgICAgICAgICAgICBtX2NsaWVudC5wcmludEZyYW1lKHRvQVBJKCZwYWdlKSwgdG9BUEko
JmZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCiAgICAgICAg
IGJvb2wgY2FuUnVuTW9kYWwoKSBjb25zdCBmaW5hbApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcAkocmV2aXNpb24gMjIx
ODczKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywyOCArNTMsMjggQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlKG1fd2ViVmlldywgd2luZG93RmVhdHVy
ZXMsICZuYXZpZ2F0aW9uQWN0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIHNob3dQYWdlKFdlYlBh
Z2VQcm94eSopIG92ZXJyaWRlCisgICAgdm9pZCBzaG93UGFnZShXZWJQYWdlUHJveHkqKSBmaW5h
bAogICAgIHsKICAgICAgICAgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShtX3dlYlZpZXcp
OwogICAgIH0KIAotICAgIHZvaWQgY2xvc2UoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2
b2lkIGNsb3NlKFdlYlBhZ2VQcm94eSopIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXZWJW
aWV3Q2xvc2VQYWdlKG1fd2ViVmlldyk7CiAgICAgfQogCi0gICAgdm9pZCBydW5KYXZhU2NyaXB0
QWxlcnQoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5
KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZCAoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKKyAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVy
dChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXZWJWaWV3UnVuSmF2
YVNjcmlwdEFsZXJ0KG1fd2ViVmlldywgbWVzc2FnZS51dGY4KCkpOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogICAgIH0KIAotICAgIHZvaWQgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2Vi
UGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZCAoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisgICAgdm9pZCBydW5KYXZhU2NyaXB0Q29uZmlybShX
ZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkqLCBjb25z
dCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
d2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKG1fd2ViVmlldywgbWVzc2FnZS51dGY4
KCkpKTsKICAgICB9CiAKLSAgICB2b2lkIHJ1bkphdmFTY3JpcHRQcm9tcHQoV2ViUGFnZVByb3h5
KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgV2Vi
RnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIEZ1bmN0aW9u
PHZvaWQgKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBvdmVycmlkZQorICAg
IHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBXZWJGcmFtZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7CiAgICAgICAgIENTdHJpbmcgcmVz
dWx0ID0gd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQobV93ZWJWaWV3LCBtZXNzYWdl
LnV0ZjgoKSwgZGVmYXVsdFZhbHVlLnV0ZjgoKSk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOdWxs
KCkpIHsKQEAgLTg1LDkgKzg1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQuZGF0YSgpKSk7CiAgICAgfQogCi0gICAgYm9vbCBj
YW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisgICAgYm9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkq
LCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkIChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKKyAgICB2b2lkIHJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdlYkZy
YW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIod2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRCZWZvcmVVbmxvYWRDb25m
aXJtKG1fd2ViVmlldywgbWVzc2FnZS51dGY4KCkpKTsKICAgICB9CkBAIC05Nyw0NyArOTcsNDcg
QEAgcHJpdmF0ZToKICAgICAgICAgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChtX3dl
YlZpZXcsIGRhdGEsIG1vZGlmaWVycyk7CiAgICAgfQogCi0gICAgdm9pZCB0b29sYmFyc0FyZVZp
c2libGUoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikgb3ZlcnJpZGUKKyAgICB2b2lkIHRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkm
LCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90
b29sYmFyX3Zpc2libGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dl
YlZpZXcpKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV2ViUGFn
ZVByb3h5KiwgYm9vbCB2aXNpYmxlKSBvdmVycmlkZQorICAgIHZvaWQgc2V0VG9vbGJhcnNBcmVW
aXNpYmxlKFdlYlBhZ2VQcm94eSYsIGJvb2wgdmlzaWJsZSkgZmluYWwKICAgICB7CiAgICAgICAg
IHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOwogICAgIH0KIAotICAg
IGJvb2wgbWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkqKSBvdmVycmlkZQorICAgIHZvaWQg
bWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuIHdlYmtpdF93aW5k
b3dfcHJvcGVydGllc19nZXRfbWVudWJhcl92aXNpYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2lu
ZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdl
YmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbWVudWJhcl92aXNpYmxlKHdlYmtpdF93ZWJfdmll
d19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSkpOwogICAgIH0KIAotICAgIHZvaWQg
c2V0TWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkqLCBib29sIHZpc2libGUpIG92ZXJyaWRl
CisgICAgdm9pZCBzZXRNZW51QmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSYsIGJvb2wgdmlzaWJs
ZSkgZmluYWwKICAgICB7CiAgICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFy
VmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldyks
IHZpc2libGUpOwogICAgIH0KIAotICAgIGJvb2wgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQ
cm94eSopIG92ZXJyaWRlCisgICAgdm9pZCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5
JiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7
Ci0gICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92
aXNpYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSk7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRf
c3RhdHVzYmFyX3Zpc2libGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyht
X3dlYlZpZXcpKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRTdGF0dXNCYXJJc1Zpc2libGUoV2Vi
UGFnZVByb3h5KiwgYm9vbCB2aXNpYmxlKSBvdmVycmlkZQorICAgIHZvaWQgc2V0U3RhdHVzQmFy
SXNWaXNpYmxlKFdlYlBhZ2VQcm94eSYsIGJvb2wgdmlzaWJsZSkgZmluYWwKICAgICB7CiAgICAg
ICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRTdGF0dXNiYXJWaXNpYmxlKHdlYmtpdF93ZWJf
dmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSwgdmlzaWJsZSk7CiAgICAgfQog
Ci0gICAgYm9vbCBpc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkqKSBvdmVycmlkZQorICAgIHZvaWQg
aXNSZXNpemFibGUoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3By
b3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0
aWVzKG1fd2ViVmlldykpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3ZWJraXRfd2luZG93
X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKG1fd2ViVmlldykpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldElzUmVzaXphYmxlKFdl
YlBhZ2VQcm94eSosIGJvb2wgcmVzaXphYmxlKSBvdmVycmlkZQorICAgIHZvaWQgc2V0SXNSZXNp
emFibGUoV2ViUGFnZVByb3h5JiwgYm9vbCByZXNpemFibGUpIGZpbmFsCiAgICAgewogICAgICAg
ICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0UmVzaXphYmxlKHdlYmtpdF93ZWJfdmlld19nZXRf
d2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSwgcmVzaXphYmxlKTsKICAgICB9CiAKLSAgICB2
b2lkIHNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgZnJhbWUpIG92ZXJyaWRlCisgICAgdm9pZCBzZXRXaW5kb3dGcmFtZShXZWJQYWdlUHJveHkm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZyYW1lKSBmaW5hbAogICAgIHsKICNpZiBQTEFU
Rk9STShHVEspCiAgICAgICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeSA9IFdlYkNvcmU6OkludFJl
Y3QoZnJhbWUpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAK
LSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5Kikgb3ZlcnJp
ZGUKKyAgICB2b2lkIHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoV2Vi
Q29yZTo6RmxvYXRSZWN0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7CiAjaWYg
UExBVEZPUk0oR1RLKQogICAgICAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7IDAsIDAsIDAs
IDAgfTsKQEAgLTE2MSwyMSArMTYxLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBndGtfd2lu
ZG93X2dldF9wb3NpdGlvbihHVEtfV0lORE9XKHdpbmRvdyksICZnZW9tZXRyeS54LCAmZ2VvbWV0
cnkueSk7CiAgICAgICAgICAgICBndGtfd2luZG93X2dldF9zaXplKEdUS19XSU5ET1cod2luZG93
KSwgJmdlb21ldHJ5LndpZHRoLCAmZ2VvbWV0cnkuaGVpZ2h0KTsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0KGdlb21ldHJ5KTsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV2ViQ29yZTo6RmxvYXRSZWN0KGdlb21ldHJ5KSk7CiAjZWxpZiBQTEFURk9STShX
UEUpCiAgICAgICAgIC8vIEZJWE1FOiBJIGd1ZXNzIHRoaXMgaXMgYWN0dWFsbHkgdGhlIHZpZXcg
c2l6ZSBpbiBXUEUuIFdlIG5lZWQgbW9yZSByZWZhY3RvcmluZyBoZXJlLgotICAgICAgICByZXR1
cm4geyB9OworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogI2VuZGlmCiAgICAgfQog
Ci0gICAgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQ
cm94eSosIEFQSTo6U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCBsb25nIGxvbmcgLypjdXJyZW50UXVvdGEqLywgdW5zaWduZWQgbG9uZyBsb25n
IC8qY3VycmVudE9yaWdpblVzYWdlKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmN1cnJlbnREYXRh
YmFzZVVzYWdlKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmV4cGVjdGVkVXNhZ2UqLywgRnVuY3Rp
b248dm9pZCAodW5zaWduZWQgbG9uZyBsb25nKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJp
ZGUKKyAgICB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJQYWdlUHJveHkqLCBXZWJGcmFt
ZVByb3h5KiwgQVBJOjpTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmN1cnJlbnRRdW90YSovLCB1bnNpZ25lZCBsb25nIGxv
bmcgLypjdXJyZW50T3JpZ2luVXNhZ2UqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qY3VycmVudERh
dGFiYXNlVXNhZ2UqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qZXhwZWN0ZWRVc2FnZSovLCBGdW5j
dGlvbjx2b2lkKHVuc2lnbmVkIGxvbmcgbG9uZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFs
CiAgICAgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRR
dW90YSA9IDUgKiAxMDI0ICogMTIwNDsgLy8gNSBNQgogICAgICAgICAvLyBGSVhNRTogUHJvdmlk
ZSBBUEkgZm9yIHRoaXMuCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRlZmF1bHRRdW90YSk7
CiAgICAgfQogCi0gICAgYm9vbCBydW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQ
cm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIEFQSTo6T3BlblBhbmVs
UGFyYW1ldGVycyogcGFyYW1ldGVycywgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSog
bGlzdGVuZXIpIG92ZXJyaWRlCisgICAgYm9vbCBydW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5Kiwg
V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIEFQSTo6
T3BlblBhbmVsUGFyYW1ldGVycyogcGFyYW1ldGVycywgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXJQcm94eSogbGlzdGVuZXIpIGZpbmFsCiAgICAgewogICAgICAgICBHUmVmUHRyPFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRGaWxlQ2hvb3NlclJl
cXVlc3RDcmVhdGUocGFyYW1ldGVycywgbGlzdGVuZXIpKTsKICAgICAgICAgd2Via2l0V2ViVmll
d1J1bkZpbGVDaG9vc2VyUmVxdWVzdChtX3dlYlZpZXcsIHJlcXVlc3QuZ2V0KCkpOwpAQCAtMTg4
LDE0ICsxODgsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgd2Via2l0V2ViVmlld01ha2VQZXJtaXNz
aW9uUmVxdWVzdChtX3dlYlZpZXcsIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QoZ2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdC5nZXQoKSkpOwogICAgIH0KIAotICAgIGJvb2wgZGVjaWRlUG9s
aWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQ
cm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBBUEk6
OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdFByb3h5JiBwZXJtaXNzaW9uUmVxdWVzdCkgb3ZlcnJpZGUKKyAgICBib29sIGRl
Y2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYsIFdl
YkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdp
biwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RQcm94eSYgcGVybWlzc2lvblJlcXVlc3QpIGZpbmFsCiAgICAgewog
ICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0PiB1c2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdENyZWF0ZShwZXJtaXNzaW9uUmVxdWVzdCwgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4s
IHRvcExldmVsRG9jdW1lbnRPcmlnaW4pKTsKICAgICAgICAgd2Via2l0V2ViVmlld01ha2VQZXJt
aXNzaW9uUmVxdWVzdChtX3dlYlZpZXcsIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QodXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3QuZ2V0KCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgYm9vbCBkZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dChXZWJQYWdlUHJveHkqLCBBUEk6OlNlY3VyaXR5T3JpZ2luKiwgTm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3QqIHBlcm1pc3Npb25SZXF1ZXN0KSBvdmVycmlkZQorICAgIGJvb2wgZGVjaWRl
UG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5KiwgQVBJ
OjpTZWN1cml0eU9yaWdpbiosIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KiBwZXJtaXNz
aW9uUmVxdWVzdCkgZmluYWwKICAgICB7CiAgICAgICAgIEdSZWZQdHI8V2ViS2l0Tm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3Q+IG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0gYWRv
cHRHUmVmKHdlYmtpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Q3JlYXRlKHBlcm1pc3Np
b25SZXF1ZXN0KSk7CiAgICAgICAgIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVlc3Qo
bV93ZWJWaWV3LCBXRUJLSVRfUEVSTUlTU0lPTl9SRVFVRVNUKG5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0LmdldCgpKSk7CkBAIC0yMDMsMTUgKzIwMywxNSBAQCBwcml2YXRlOgogICAgIH0K
IAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHByaW50RnJhbWUoV2ViUGFnZVByb3h5Kiwg
V2ViRnJhbWVQcm94eSogZnJhbWUpIG92ZXJyaWRlCisgICAgdm9pZCBwcmludEZyYW1lKFdlYlBh
Z2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lKSBmaW5hbAogICAgIHsKLSAgICAgICAgd2Vi
a2l0V2ViVmlld1ByaW50RnJhbWUobV93ZWJWaWV3LCBmcmFtZSk7CisgICAgICAgIHdlYmtpdFdl
YlZpZXdQcmludEZyYW1lKG1fd2ViVmlldywgJmZyYW1lKTsKICAgICB9CiAjZW5kaWYKIAotICAg
IGJvb2wgY2FuUnVuTW9kYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAg
Ym9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZv
aWQgcnVuTW9kYWwoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAgICB2b2lkIHJ1bk1vZGFsKFdl
YlBhZ2VQcm94eSopIGZpbmFsCiAgICAgewogICAgICAgICB3ZWJraXRXZWJWaWV3UnVuQXNNb2Rh
bChtX3dlYlZpZXcpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vQXV0b21hdGlvbi5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCShyZXZpc2lvbiAyMjE4NzIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgkod29ya2luZyBj
b3B5KQpAQCAtMjI1LDcgKzIyNSw4IEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmV0
Y2hlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3BlbiBicm93c2luZyBjb250ZXh0cyAod2luZG93
cyBhbmQgdGFicykgaW4gdGhlIGF1dG9tYXRpb24gc2Vzc2lvbi4iLAogICAgICAgICAgICAgInJl
dHVybnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb250ZXh0cyIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJCcm93c2luZ0NvbnRleHQiIH0sICJkZXNjcmlw
dGlvbiI6ICJBbGwga25vd24gYnJvd3NpbmcgY29udGV4dHMgYXZhaWxhYmxlIHRvIHRoZSBzZXNz
aW9uLiIgfQotICAgICAgICAgICAgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJhc3lu
YyI6IHRydWUKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiZ2V0
QnJvd3NpbmdDb250ZXh0IiwKQEAgLTIzNSw3ICsyMzYsOCBAQAogICAgICAgICAgICAgXSwKICAg
ICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29udGV4
dCIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dCIsICJkZXNjcmlwdGlvbiI6ICJUaGUgYnJvd3Np
bmcgY29udGV4dCBhdmFpbGFibGUgdG8gdGhlIHNlc3Npb24uIiB9Ci0gICAgICAgICAgICBdCisg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAogICAg
ICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJjcmVhdGVCcm93c2luZ0NvbnRleHQiLApAQCAt
MjY1LDcgKzI2Nyw4IEBACiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRsZSIs
ICJkZXNjcmlwdGlvbiI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0byBi
ZSByZXNpemVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNpemUiLCAiJHJlZiI6
ICJTaXplIiwgImRlc2NyaXB0aW9uIjogIlRoZSBuZXcgc2l6ZSBmb3IgdGhlIGJyb3dzaW5nIGNv
bnRleHQncyB3aW5kb3cuIiB9Ci0gICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgImFzeW5jIjogdHJ1ZQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAi
bmFtZSI6ICJtb3ZlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiLApAQCAtMjczLDcgKzI3Niw4IEBA
CiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRsZSIsICJkZXNjcmlwdGlvbiI6
ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0byBiZSBtb3ZlZC4iIH0sCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvcmlnaW4iLCAiJHJlZiI6ICJQb2ludCIsICJkZXNj
cmlwdGlvbiI6ICJUaGUgbmV3IG9yaWdpbiBmb3IgdGhlIGJyb3dzaW5nIGNvbnRleHQncyB3aW5k
b3cuIFRoZSBwb3NpdGlvbiBpcyBpbnRlcnByZXRlZCBpbiBzY3JlZW4gY29vcmRpbmF0ZSBzcGFj
ZSwgcmVsYXRpdmUgdG8gdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4uIiB9Ci0g
ICAgICAgICAgICBdCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZQog
ICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJuYXZpZ2F0ZUJyb3dz
aW5nQ29udGV4dCIsCkBAIC0zNjUsNyArMzY5LDggQEAKICAgICAgICAgICAgIF0sCiAgICAgICAg
ICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvc2l0aW9uIiwg
IiRyZWYiOiAiUG9pbnQiLCAiZGVzY3JpcHRpb24iOiAiVGhlIHVwZGF0ZWQgcG9zaXRpb24gb2Yg
dGhlIG1vdXNlIGN1cnNvciwgc3BlY2lmaWVkIGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzLiIgfQot
ICAgICAgICAgICAgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUK
ICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicGVyZm9ybUtleWJv
YXJkSW50ZXJhY3Rpb25zIiwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAy
MjE4NzIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDExICsyMDcsOCBAQCBTdHJpbmcg
V2ViQXV0b21hdGlvblNlc3Npb246OmhhbmRsZUZvcldlCiAgICAgcmV0dXJuIGhhbmRsZUZvcldl
YkZyYW1lSUQod2ViRnJhbWVQcm94eS5mcmFtZUlEKCkpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKFdlYlBhZ2VQcm94eSYgcGFnZSkKK1Jl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+IFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UoV2ViUGFnZVByb3h5
JiBwYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpCiB7Ci0gICAgV2ViQ29yZTo6
RmxvYXRSZWN0IHdpbmRvd0ZyYW1lOwotICAgIHBhZ2UuZ2V0V2luZG93RnJhbWUod2luZG93RnJh
bWUpOwotCiAgICAgYXV0byBvcmlnaW5PYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpQb2ludDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFgod2luZG93RnJhbWUueCgpKQog
ICAgICAgICAuc2V0WSh3aW5kb3dGcmFtZS55KCkpCkBAIC0yMzUsMjggKzIzMiw0NCBAQCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6CiAKIC8vIFBsYXRmb3JtLWluZGVw
ZW5kZW50IENvbW1hbmRzLgogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRCcm93c2lu
Z0NvbnRleHRzKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0Pj4mIGNvbnRleHRzKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
Z2V0TmV4dENvbnRleHQoUmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uPiYmIHByb3RlY3RlZFRoaXMs
IFZlY3RvcjxSZWY8V2ViUGFnZVByb3h5Pj4mJiBwYWdlcywgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dD4+IGNvbnRleHRzLCBSZWY8V2ViQXV0b21hdGlvblNlc3Npb246OkdldEJyb3dzaW5nQ29udGV4
dHNDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKLSAgICBjb250ZXh0cyA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dD46OmNyZWF0ZSgpOwotCisgICAgaWYgKHBhZ2VzLmlzRW1wdHkoKSkgeworICAgICAgICBj
YWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShjb250ZXh0cykpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGF1dG8gcGFnZSA9IHBhZ2VzLnRha2VMYXN0KCk7CisgICAgYXV0byYgd2Vi
UGFnZVByb3h5ID0gcGFnZS5nZXQoKTsKKyAgICB3ZWJQYWdlUHJveHkuZ2V0V2luZG93RnJhbWVX
aXRoQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlcyA9IFdURk1vdmUocGFnZXMpLCBj
b250ZXh0cyA9IFdURk1vdmUoY29udGV4dHMpLCBwYWdlID0gV1RGTW92ZShwYWdlKV0oV2ViQ29y
ZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKSBtdXRhYmxlIHsKKyAgICAgICAgY29udGV4dHMtPmFk
ZEl0ZW0ocHJvdGVjdGVkVGhpcy0+YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKHBhZ2UuZ2V0
KCksIHdpbmRvd0ZyYW1lKSk7CisgICAgICAgIGdldE5leHRDb250ZXh0KFdURk1vdmUocHJvdGVj
dGVkVGhpcyksIFdURk1vdmUocGFnZXMpLCBXVEZNb3ZlKGNvbnRleHRzKSwgV1RGTW92ZShjYWxs
YmFjaykpOworICAgIH0pOworfQorICAgIAordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0
QnJvd3NpbmdDb250ZXh0cyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVm
PEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3sKKyAgICBWZWN0b3I8
UmVmPFdlYlBhZ2VQcm94eT4+IHBhZ2VzOwogICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJv
Y2Vzc1Bvb2wtPnByb2Nlc3NlcygpKSB7CiAgICAgICAgIGZvciAoYXV0byogcGFnZSA6IHByb2Nl
c3MtPnBhZ2VzKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChwYWdlKTsKICAgICAgICAgICAgIGlm
ICghcGFnZS0+aXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIGNvbnRleHRzLT5hZGRJdGVtKGJ1aWxkQnJvd3NpbmdDb250
ZXh0Rm9yUGFnZSgqcGFnZSkpOworICAgICAgICAgICAgcGFnZXMuYXBwZW5kKCpwYWdlKTsKICAg
ICAgICAgfQogICAgIH0KKyAgICAKKyAgICBnZXROZXh0Q29udGV4dChtYWtlUmVmKCp0aGlzKSwg
V1RGTW92ZShwYWdlcyksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD46OmNyZWF0ZSgpLCBXVEZNb3ZlKGNh
bGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29u
dGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBo
YW5kbGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHQ+JiBjb250ZXh0KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdD
b250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGhhbmRsZSwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewog
ICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwog
ICAgIGlmICghcGFnZSkKICAgICAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93
Tm90Rm91bmQpOwogCi0gICAgY29udGV4dCA9IGJ1aWxkQnJvd3NpbmdDb250ZXh0Rm9yUGFnZSgq
cGFnZSk7CisgICAgcGFnZS0+Z2V0V2luZG93RnJhbWVXaXRoQ2FsbGJhY2soW3Byb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgcGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpIG11dGFibGUg
eworICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MocHJvdGVjdGVkVGhpcy0+YnVpbGRCcm93
c2luZ0NvbnRleHRGb3JQYWdlKHBhZ2UuZ2V0KCksIHdpbmRvd0ZyYW1lKSk7CisgICAgfSk7CiB9
CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChJbnNw
ZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBoYW5kbGUpCkBAIC0zMDEs
NyArMzE0LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93cwogICAg
IHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5
OjpGb2N1c0ZyYW1lKHBhZ2UtPnBhZ2VJRCgpLCBmcmFtZUlELnZhbHVlKCkpLCAwKTsKIH0KIAot
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQo
SW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgc2l6ZU9iamVjdCkKK3ZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHNpemVPYmplY3QsIFJlZjxSZXNpemVXaW5kb3dP
ZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogI2lmIFBMQVRGT1JNKElP
UykKICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1lbnRlZCk7CkBAIC0z
MjQsMjcgKzMzNywzMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNpemVXaW5kb3dP
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgb3JpZ2luYWxGcmFtZTsKLSAg
ICBwYWdlLT5nZXRXaW5kb3dGcmFtZShvcmlnaW5hbEZyYW1lKTsKLQotICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBuZXdGcmFtZSA9IFdlYkNvcmU6OkZsb2F0UmVjdChvcmlnaW5hbEZyYW1lLmxvY2F0
aW9uKCksIFdlYkNvcmU6OkZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgaWYgKG5ld0Zy
YW1lID09IG9yaWdpbmFsRnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICBwYWdlLT5nZXRXaW5k
b3dGcmFtZVdpdGhDYWxsYmFjayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9
IG1ha2VSZWYoKnBhZ2UpLCB3aWR0aCwgaGVpZ2h0XShXZWJDb3JlOjpGbG9hdFJlY3Qgb3JpZ2lu
YWxGcmFtZSkgbXV0YWJsZSB7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBuZXdGcmFtZSA9
IFdlYkNvcmU6OkZsb2F0UmVjdChvcmlnaW5hbEZyYW1lLmxvY2F0aW9uKCksIFdlYkNvcmU6OkZs
b2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGlmIChuZXdGcmFtZSA9PSBvcmlnaW5h
bEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogCi0g
ICAgcGFnZS0+c2V0V2luZG93RnJhbWUobmV3RnJhbWUpOworICAgICAgICBwYWdlLT5zZXRXaW5k
b3dGcmFtZShuZXdGcmFtZSk7CiAKLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIC8vIElmIG5vdGhp
bmcgY2hhbmdlZCBhdCBhbGwsIGl0J3MgcHJvYmFibHkgZmFpciB0byByZXBvcnQgdGhhdCBzb21l
dGhpbmcgd2VudCB3cm9uZy4KLSAgICAvLyAoV2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlcXVl
c3RlZCBmcmFtZSBzaXplIHdpbGwgYmUgaG9ub3JlZCBleGFjdGx5LCBob3dldmVyLikKLSAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgdXBkYXRlZEZyYW1lOwotICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1l
KHVwZGF0ZWRGcmFtZSk7Ci0gICAgaWYgKG9yaWdpbmFsRnJhbWUgPT0gdXBkYXRlZEZyYW1lKQot
ICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVy
cm9yLCAiVGhlIHdpbmRvdyBzaXplIHdhcyBleHBlY3RlZCB0byBoYXZlIGNoYW5nZWQsIGJ1dCBk
aWQgbm90LiIpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNj
ZXNzKCk7CisjZWxzZQorICAgICAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQgYXQgYWxsLCBpdCdz
IHByb2JhYmx5IGZhaXIgdG8gcmVwb3J0IHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuCisgICAg
ICAgIC8vIChXZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgcmVxdWVzdGVkIGZyYW1lIHNpemUgd2ls
bCBiZSBob25vcmVkIGV4YWN0bHksIGhvd2V2ZXIuKQorICAgICAgICBwYWdlLT5nZXRXaW5kb3dG
cmFtZVdpdGhDYWxsYmFjayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgb3JpZ2luYWxG
cmFtZV0oV2ViQ29yZTo6RmxvYXRSZWN0IHVwZGF0ZWRGcmFtZSkgeworICAgICAgICAgICAgaWYg
KG9yaWdpbmFsRnJhbWUgPT0gdXBkYXRlZEZyYW1lKQorICAgICAgICAgICAgICAgIGNhbGxiYWNr
LT5zZW5kRmFpbHVyZShTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlM
UyhJbnRlcm5hbEVycm9yLCAiVGhlIHdpbmRvdyBzaXplIHdhcyBleHBlY3RlZCB0byBoYXZlIGNo
YW5nZWQsIGJ1dCBkaWQgbm90LiIpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyAgICAgICAgfSk7CiAjZW5kaWYKKyAgICB9KTsK
ICNlbmRpZgogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptb3ZlV2luZG93T2ZCcm93
c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcG9zaXRpb25P
YmplY3QpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptb3ZlV2luZG93T2ZCcm93c2luZ0Nv
bnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
aGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcG9zaXRpb25PYmplY3Qs
IFJlZjxNb3ZlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsK
ICNpZiBQTEFURk9STShJT1MpCiAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1w
bGVtZW50ZWQpOwpAQCAtMzY4LDIyICszODQsMjcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6bW92ZVdpbmRvd09mQgogICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgb3JpZ2luYWxGcmFtZTsKLSAg
ICBwYWdlLT5nZXRXaW5kb3dGcmFtZShvcmlnaW5hbEZyYW1lKTsKKyAgICBwYWdlLT5nZXRXaW5k
b3dGcmFtZVdpdGhDYWxsYmFjayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9
IG1ha2VSZWYoKnBhZ2UpLCB4LCB5XShXZWJDb3JlOjpGbG9hdFJlY3Qgb3JpZ2luYWxGcmFtZSkg
bXV0YWJsZSB7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbmV3RnJhbWUgPSBXZWJDb3JlOjpG
bG9hdFJlY3QoV2ViQ29yZTo6RmxvYXRQb2ludCh4LCB5KSwgb3JpZ2luYWxGcmFtZS5zaXplKCkp
OwotICAgIGlmIChuZXdGcmFtZSA9PSBvcmlnaW5hbEZyYW1lKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBuZXdGcmFtZSA9IFdlYkNvcmU6OkZsb2F0UmVjdChX
ZWJDb3JlOjpGbG9hdFBvaW50KHgsIHkpLCBvcmlnaW5hbEZyYW1lLnNpemUoKSk7CisgICAgICAg
IGlmIChuZXdGcmFtZSA9PSBvcmlnaW5hbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxi
YWNrLT5zZW5kU3VjY2VzcygpOwogCi0gICAgcGFnZS0+c2V0V2luZG93RnJhbWUobmV3RnJhbWUp
OworICAgICAgICBwYWdlLT5zZXRXaW5kb3dGcmFtZShuZXdGcmFtZSk7CiAKLSNpZiAhUExBVEZP
Uk0oR1RLKQotICAgIC8vIElmIG5vdGhpbmcgY2hhbmdlZCBhdCBhbGwsIGl0J3MgcHJvYmFibHkg
ZmFpciB0byByZXBvcnQgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4KLSAgICAvLyAoV2UgY2Fu
J3QgYXNzdW1lIHRoYXQgdGhlIHJlcXVlc3RlZCBmcmFtZSBzaXplIHdpbGwgYmUgaG9ub3JlZCBl
eGFjdGx5LCBob3dldmVyLikKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdXBkYXRlZEZyYW1lOwot
ICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lKHVwZGF0ZWRGcmFtZSk7Ci0gICAgaWYgKG9yaWdpbmFs
RnJhbWUgPT0gdXBkYXRlZEZyYW1lKQotICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHdpbmRvdyBwb3NpdGlvbiB3YXMgZXhw
ZWN0ZWQgdG8gaGF2ZSBjaGFuZ2VkLCBidXQgZGlkIG5vdC4iKTsKKyNpZiBQTEFURk9STShHVEsp
CisgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOworI2Vsc2UKKyAgICAgICAgLy8gSWYg
bm90aGluZyBjaGFuZ2VkIGF0IGFsbCwgaXQncyBwcm9iYWJseSBmYWlyIHRvIHJlcG9ydCB0aGF0
IHNvbWV0aGluZyB3ZW50IHdyb25nLgorICAgICAgICAvLyAoV2UgY2FuJ3QgYXNzdW1lIHRoYXQg
dGhlIHJlcXVlc3RlZCBmcmFtZSBzaXplIHdpbGwgYmUgaG9ub3JlZCBleGFjdGx5LCBob3dldmVy
LikKKyAgICAgICAgcGFnZS0+Z2V0V2luZG93RnJhbWVXaXRoQ2FsbGJhY2soW2NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayksIG9yaWdpbmFsRnJhbWVdKFdlYkNvcmU6OkZsb2F0UmVjdCB1cGRh
dGVkRnJhbWUpIHsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbEZyYW1lID09IHVwZGF0ZWRGcmFt
ZSkKKyAgICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVE
RUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSB3aW5kb3cg
cG9zaXRpb24gd2FzIGV4cGVjdGVkIHRvIGhhdmUgY2hhbmdlZCwgYnV0IGRpZCBub3QuIikpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2Vzcygp
OworICAgICAgICB9KTsKICNlbmRpZgorICAgIH0pOwogI2VuZGlmCiB9CiAKQEAgLTEyMjEsNyAr
MTI0Miw3IEBAIHN0YXRpYyBXZWJFdmVudDo6TW9kaWZpZXJzIHByb3RvY29sTW9kaWYKIH0KICNl
bmRpZiAvLyBVU0UoQVBQS0lUKQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3Jt
TW91c2VJbnRlcmFjdGlvbihJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiByZXF1
ZXN0ZWRQb3NpdGlvbk9iamVjdCwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1dHRvblN0cmluZywgY29u
c3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5JiBrZXlNb2RpZmllclN0cmluZ3MsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpQb2ludD4mIHVwZGF0ZWRQb3NpdGlvbk9iamVjdCkKK3ZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKEluc3BlY3Rvcjo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0LCBjb25zdCBTdHJpbmcm
IG1vdXNlQnV0dG9uU3RyaW5nLCBjb25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGtleU1vZGlmaWVyU3RyaW5ncywgUmVm
PFBlcmZvcm1Nb3VzZUludGVyYWN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgIVVT
RShBUFBLSVQpICYmICFQTEFURk9STShHVEspCiAgICAgRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1IoTm90SW1wbGVtZW50ZWQpOwpAQCAtMTIzOCwyMiArMTI1OSw2IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUkKICAgICBpZiAoIXJlcXVlc3RlZFBvc2l0aW9uT2Jq
ZWN0LmdldERvdWJsZShXVEY6OkFTQ0lJTGl0ZXJhbCgieSIpLCB5KSkKICAgICAgICAgRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBw
YXJhbWV0ZXIgJ3knIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
d2luZG93RnJhbWU7Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWUod2luZG93RnJhbWUpOwotCi0g
ICAgeCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHgpLCB3aW5kb3dGcmFtZS5zaXplKCkud2lk
dGgoKSk7Ci0gICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkgKyBwYWdlLT50b3BDb250
ZW50SW5zZXQoKSksIHdpbmRvd0ZyYW1lLnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBXZWJDb3Jl
OjpJbnRQb2ludCB2aWV3UG9zaXRpb24gPSBXZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxp
bnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkpKTsKLQotICAgIGF1dG8gcGFyc2VkSW50ZXJhY3Rp
b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJh
Y3Rpb24+KG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcpOwotICAgIGlmICghcGFyc2VkSW50ZXJhY3Rp
b24pCi0gICAgICAgIEZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFs
aWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnRlcmFjdGlvbicgaXMgaW52YWxpZC4iKTsK
LQotICAgIGF1dG8gcGFyc2VkQnV0dG9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpNb3VzZUJ1dHRvbj4obW91c2VCdXR0b25TdHJpbmcpOwotICAgIGlmICghcGFy
c2VkQnV0dG9uKQotICAgICAgICBGQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlM
UyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnYnV0dG9uJyBpcyBpbnZhbGlkLiIp
OwotCiAgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBrZXlNb2RpZmllcnMgPSAoV2ViRXZlbnQ6Ok1v
ZGlmaWVycykwOwogICAgIGZvciAoYXV0byBpdCA9IGtleU1vZGlmaWVyU3RyaW5ncy5iZWdpbigp
OyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3MuZW5kKCk7ICsraXQpIHsKICAgICAgICAgU3RyaW5n
IG1vZGlmaWVyU3RyaW5nOwpAQCAtMTI2NiwxMyArMTI3MSwyOSBAQCB2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpwZXJmb3JtTW91c2VJCiAgICAgICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgZW51
bVZhbHVlID0gcHJvdG9jb2xNb2RpZmllclRvV2ViRXZlbnRNb2RpZmllcihwYXJzZWRNb2RpZmll
ci52YWx1ZSgpKTsKICAgICAgICAga2V5TW9kaWZpZXJzID0gKFdlYkV2ZW50OjpNb2RpZmllcnMp
KGVudW1WYWx1ZSB8IGtleU1vZGlmaWVycyk7CiAgICAgfQorICAgIAorICAgIHBhZ2UtPmdldFdp
bmRvd0ZyYW1lV2l0aENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwg
eCwgeSwgbW91c2VJbnRlcmFjdGlvblN0cmluZywgbW91c2VCdXR0b25TdHJpbmcsIGtleU1vZGlm
aWVyc10oV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKSBtdXRhYmxlIHsKIAotICAgIHBs
YXRmb3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKCpwYWdlLCB2aWV3UG9zaXRpb24sIHBhcnNl
ZEludGVyYWN0aW9uLnZhbHVlKCksIHBhcnNlZEJ1dHRvbi52YWx1ZSgpLCBrZXlNb2RpZmllcnMp
OworICAgICAgICB4ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1lLnNp
emUoKS53aWR0aCgpKTsKKyAgICAgICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkgKyBw
YWdlLT50b3BDb250ZW50SW5zZXQoKSksIHdpbmRvd0ZyYW1lLnNpemUoKS5oZWlnaHQoKSk7CiAK
LSAgICB1cGRhdGVkUG9zaXRpb25PYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpQb2ludDo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFgoeCkKLSAgICAgICAgLnNldFkoeSAt
IHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKQotICAgICAgICAucmVsZWFzZSgpOworICAgICAgICBX
ZWJDb3JlOjpJbnRQb2ludCB2aWV3UG9zaXRpb24gPSBXZWJDb3JlOjpJbnRQb2ludChzdGF0aWNf
Y2FzdDxpbnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkpKTsKKworICAgICAgICBhdXRvIHBhcnNl
ZEludGVyYWN0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpN
b3VzZUludGVyYWN0aW9uPihtb3VzZUludGVyYWN0aW9uU3RyaW5nKTsKKyAgICAgICAgaWYgKCFw
YXJzZWRJbnRlcmFjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay0+c2VuZEZhaWx1
cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2ludGVyYWN0aW9uJyBpcyBpbnZhbGlkLiIpKTsKKwor
ICAgICAgICBhdXRvIHBhcnNlZEJ1dHRvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6TW91c2VCdXR0b24+KG1vdXNlQnV0dG9uU3RyaW5nKTsKKyAgICAgICAgaWYg
KCFwYXJzZWRCdXR0b24pCisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2stPnNlbmRGYWlsdXJl
KFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKEludmFsaWRQYXJh
bWV0ZXIsICJUaGUgcGFyYW1ldGVyICdidXR0b24nIGlzIGludmFsaWQuIikpOworCisgICAgICAg
IHBsYXRmb3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKHBhZ2UsIHZpZXdQb3NpdGlvbiwgcGFy
c2VkSW50ZXJhY3Rpb24udmFsdWUoKSwgcGFyc2VkQnV0dG9uLnZhbHVlKCksIGtleU1vZGlmaWVy
cyk7CisKKyAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OlBvaW50OjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFgoeCkKKyAgICAg
ICAgICAgIC5zZXRZKHkgLSBwYWdlLT50b3BDb250ZW50SW5zZXQoKSkKKyAgICAgICAgICAgIC5y
ZWxlYXNlKCkpOworICAgIH0pOwogI2VuZGlmIC8vIFVTRShBUFBLSVQpCiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmgJKHJldmlzaW9uIDIyMTg3MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDIwICsxMTUsMjAgQEAgcHVibGljOgogICAgIC8vIGFuZCB0aGUgLS1wbGF0Zm9ybSBhcmd1
bWVudCBwYXNzZWQgdG8gdGhlIHByb3RvY29sIGJpbmRpbmdzIGdlbmVyYXRvci4KIAogICAgIC8v
IFBsYXRmb3JtOiBHZW5lcmljCi0gICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHRzKEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pj4mKSBvdmVycmlkZTsK
LSAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dz
aW5nQ29udGV4dD4mKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoSW5z
cGVjdG9yOjpFcnJvclN0cmluZyYsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRzQ2FsbGJhY2s+JiYp
IGZpbmFsOworICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZp
bmFsOwogICAgIHZvaWQgY3JlYXRlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmLCBTdHJpbmcqKSBvdmVycmlkZTsKICAgICB2b2lkIGNsb3NlQnJvd3NpbmdDb250ZXh0KElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lk
IHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1l
SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHNpemUpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdp
bmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHBvc2l0aW9uKSBv
dmVycmlkZTsKKyAgICB2b2lkIHJlc2l6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QmIHNpemUsIFJlZjxSZXNpemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmKSBmaW5hbDsKKyAgICB2b2lkIG1vdmVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBwb3NpdGlvbiwgUmVmPE1vdmVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKICAgICB2b2lkIG5hdmlnYXRlQnJvd3NpbmdDb250
ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5n
LCBjb25zdCBpbnQqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5n
Q29udGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGludCogb3B0aW9uYWxQ
YWdlTG9hZFRpbWVvdXQsIFJlZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBv
dmVycmlkZTsKICAgICB2b2lkIGdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneVN0cmluZywgY29uc3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVm
PEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZv
aWQgcmVsb2FkQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29u
c3QgaW50KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4
dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21w
bGV0ZShJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGludCogb3B0aW9uYWxQYWdl
TG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgYXJndW1lbnRzLCBjb25zdCBib29sKiBvcHRp
b25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNvbnN0IGludCogb3B0aW9uYWxD
YWxsYmFja1RpbWVvdXQsIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+JiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgcmVxdWVzdGVkUG9zaXRpb24sIGNvbnN0IFN0cmluZyYgbW91c2VCdXR0b24sIGNvbnN0IFN0
cmluZyYgbW91c2VJbnRlcmFjdGlvbiwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYg
a2V5TW9kaWZpZXJzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9p
bnQ+JiB1cGRhdGVkUG9zaXRpb24pIG92ZXJyaWRlOworICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50
ZXJhY3Rpb24oSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgcmVxdWVzdGVkUG9zaXRpb24sIGNvbnN0
IFN0cmluZyYgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgbW91c2VJbnRlcmFjdGlvbiwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYga2V5TW9kaWZpZXJzLCBSZWY8UGVyZm9ybU1v
dXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJikgZmluYWw7CiAgICAgdm9pZCBwZXJmb3JtS2V5Ym9h
cmRJbnRlcmFjdGlvbnMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaGFu
ZGxlLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbnRlcmFjdGlvbnMsIFJlZjxQ
ZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCB0YWtlU2NyZWVuc2hvdChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbE5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5l
ZWRlZCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQg
cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVI
YW5kbGUsIGNvbnN0IGludCogb3B0aW9uYWxPcmRpbmFsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
TmFtZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZlQ2hpbGRG
cmFtZUhhbmRsZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKQEAgLTE2MCw3ICsxNjAsOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGNv
bnN0IFN0cmluZyYpOwogICAgIFN0cmluZyBoYW5kbGVGb3JXZWJQYWdlUHJveHkoY29uc3QgV2Vi
UGFnZVByb3h5Jik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dD4gYnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKFdlYlBhZ2VQcm94
eSYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHQ+IGJ1aWxkQnJvd3NpbmdDb250ZXh0Rm9yUGFnZShXZWJQYWdlUHJveHkmLCBXZWJDb3Jl
OjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpOworICAgIHZvaWQgZ2V0TmV4dENvbnRleHQoUmVmPFdl
YkF1dG9tYXRpb25TZXNzaW9uPiYmLCBWZWN0b3I8UmVmPFdlYlBhZ2VQcm94eT4+JiYsIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHQ+PiwgUmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uOjpHZXRCcm93c2lu
Z0NvbnRleHRzQ2FsbGJhY2s+JiYpOwogCiAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gd2Vi
RnJhbWVJREZvckhhbmRsZShjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgaGFuZGxlRm9yV2Vi
RnJhbWVJRCh1aW50NjRfdCBmcmFtZUlEKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1VJRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9VSURlbGVnYXRlLmgJKHJldmlzaW9uIDIyMTg3MykKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzEx
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJp
dHlPcmlnaW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RQcm94eSYpIGZpbmFsOwogICAgICAgICBib29sIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZv
ck9yaWdpbihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdp
biYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYp
IGZpbmFsOwogICAgICAgICB2b2lkIG1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKFdlYkNvcmU6
Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncykgZmluYWw7Ci0gICAgICAgIHZvaWQgcHJp
bnRGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KikgZmluYWw7CisgICAgICAgIHZv
aWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JikgZmluYWw7CiAjaWYg
UExBVEZPUk0oSU9TKQogI2lmIEhBVkUoQVBQX0xJTktTKQogICAgICAgICBib29sIHNob3VsZElu
Y2x1ZGVBcHBMaW5rQWN0aW9uc0ZvckVsZW1lbnQoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikg
ZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUu
bW0JKHJldmlzaW9uIDIyMTg3MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJ
RGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTg1MSwxMCArODUxLDggQEAgdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6cmVhY2hlZEFwcGxpYwogICAgIH0pLmdldCgpXTsKIH0KIAotdm9p
ZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFt
ZVByb3h5KiB3ZWJGcmFtZVByb3h5KQordm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRG
cmFtZShXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiB3ZWJGcmFtZVByb3h5KQogewotICAg
IEFTU0VSVF9BUkcod2ViRnJhbWVQcm94eSwgd2ViRnJhbWVQcm94eSk7Ci0KICAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UHJpbnRGcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC04NjIsNyArODYwLDcgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6
cHJpbnRGcmFtZShXZQogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS5tX3dlYlZpZXcgcHJpbnRGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZSh3
ZWJGcmFtZVByb3h5LT5mcmFtZUlEKCkpKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBwcmludEZyYW1lOndy
YXBwZXIoQVBJOjpGcmFtZUhhbmRsZTo6Y3JlYXRlKHdlYkZyYW1lUHJveHkuZnJhbWVJRCgpKSld
OwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjbG9zZShXZWJQYWdlUHJveHkqKQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJl
dmlzaW9uIDIyMTg3MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjI4LDcgKzE2MjgsNyBAQCBOU1ByaW50T3BlcmF0
aW9uICpXZWJWaWV3SW1wbDo6cHJpbnRPcGVyCiAKICAgICAvLyBGSVhNRTogSWYgdGhlIGZyYW1l
IGNhbm5vdCBiZSBwcmludGVkIChlLmcuIGlmIGl0IGNvbnRhaW5zIGFuIGVuY3J5cHRlZCBQREYg
dGhhdCBkaXNhbGxvd3MKICAgICAvLyBwcmludGluZyksIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJl
dHVybiBuaWwuCi0gICAgUmV0YWluUHRyPFdLUHJpbnRpbmdWaWV3PiBwcmludGluZ1ZpZXcgPSBh
ZG9wdE5TKFtbV0tQcmludGluZ1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWVQcm94eTomZnJhbWUg
dmlldzptX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCldKTsKKyAgICBSZXRhaW5QdHI8V0tQcmludGlu
Z1ZpZXc+IHByaW50aW5nVmlldyA9IGFkb3B0TlMoW1tXS1ByaW50aW5nVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZVByb3h5OmZyYW1lIHZpZXc6bV92aWV3LmdldEF1dG9yZWxlYXNlZCgpXSk7CiAg
ICAgLy8gTlNQcmludE9wZXJhdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHZpZXcuCiAgICAg
TlNQcmludE9wZXJhdGlvbiAqcHJpbnRPcGVyYXRpb24gPSBbTlNQcmludE9wZXJhdGlvbiBwcmlu
dE9wZXJhdGlvbldpdGhWaWV3OnByaW50aW5nVmlldy5nZXQoKSBwcmludEluZm86cHJpbnRJbmZv
XTsKICAgICBbcHJpbnRPcGVyYXRpb24gc2V0Q2FuU3Bhd25TZXBhcmF0ZVRocmVhZDpZRVNdOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgJKHJl
dmlzaW9uIDIyMTg3MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5n
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIEBpbnRlcmZhY2UgV0tQcmlu
dGluZ1ZpZXcgOiBOU1ZpZXcgewogICAgIE5TVGltZXIgKl9hdXRvZGlzcGxheVJlc3VtZVRpbWVy
OwogfQogCi0tIChpZClpbml0V2l0aEZyYW1lUHJveHk6KFdlYktpdDo6V2ViRnJhbWVQcm94eSop
ZnJhbWUgdmlldzooTlNWaWV3ICopd2tWaWV3OworLSAoaWQpaW5pdFdpdGhGcmFtZVByb3h5OihX
ZWJLaXQ6OldlYkZyYW1lUHJveHkmKWZyYW1lIHZpZXc6KE5TVmlldyAqKXdrVmlldzsKIAogQGVu
ZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3
Lm1tCShyZXZpc2lvbiAyMjE4NzIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQ
cmludGluZ1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDEzICs1MSwxMyBAQCBzdGF0aWMg
Qk9PTCBpc0ZvcmNpbmdQcmV2aWV3VXBkYXRlOwogCiBAaW1wbGVtZW50YXRpb24gV0tQcmludGlu
Z1ZpZXcKIAotLSAoaWQpaW5pdFdpdGhGcmFtZVByb3h5OihXZWJLaXQ6OldlYkZyYW1lUHJveHkq
KWZyYW1lIHZpZXc6KE5TVmlldyAqKXdrVmlldworLSAoaWQpaW5pdFdpdGhGcmFtZVByb3h5OihX
ZWJLaXQ6OldlYkZyYW1lUHJveHkmKWZyYW1lIHZpZXc6KE5TVmlldyAqKXdrVmlldwogewogICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07IC8vIE5vIGZyYW1lIHJlY3QgdG8gcGFzcyB0byBOU1ZpZXcu
CiAgICAgaWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgX3dlYkZyYW1lID0g
ZnJhbWU7CisgICAgX3dlYkZyYW1lID0gJmZyYW1lOwogICAgIF93a1ZpZXcgPSB3a1ZpZXc7CiAK
ICAgICByZXR1cm4gc2VsZjsKQEAgLTE1MSw4ICsxNTEsOCBAQCAtICh2b2lkKV9hZGp1c3RQcmlu
dGluZ01hcmdpbnNGb3JIZWFkZXJBCiAgICAgfQogICAgIAogICAgIENHRmxvYXQgc2NhbGUgPSBb
aW5mbyBzY2FsaW5nRmFjdG9yXTsKLSAgICBbaW5mbyBzZXRUb3BNYXJnaW46b3JpZ2luYWxUb3BN
YXJnaW4gKyBfd2ViRnJhbWUtPnBhZ2UoKS0+aGVhZGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSkg
KiBzY2FsZV07Ci0gICAgW2luZm8gc2V0Qm90dG9tTWFyZ2luOm9yaWdpbmFsQm90dG9tTWFyZ2lu
ICsgX3dlYkZyYW1lLT5wYWdlKCktPmZvb3RlckhlaWdodChfd2ViRnJhbWUuZ2V0KCkpICogc2Nh
bGVdOworICAgIFtpbmZvIHNldFRvcE1hcmdpbjpvcmlnaW5hbFRvcE1hcmdpbiArIF93ZWJGcmFt
ZS0+cGFnZSgpLT5oZWFkZXJIZWlnaHQoKl93ZWJGcmFtZSkgKiBzY2FsZV07CisgICAgW2luZm8g
c2V0Qm90dG9tTWFyZ2luOm9yaWdpbmFsQm90dG9tTWFyZ2luICsgX3dlYkZyYW1lLT5wYWdlKCkt
PmZvb3RlckhlaWdodCgqX3dlYkZyYW1lKSAqIHNjYWxlXTsKIH0KIAogLSAoQk9PTClfaXNQcmlu
dGluZ1ByZXZpZXcKQEAgLTYzNywxOCArNjM3LDE4IEBAIC0gKHZvaWQpZHJhd1BhZ2VCb3JkZXJX
aXRoU2l6ZTooTlNTaXplKWIKICAgICBOU1NpemUgcGFwZXJTaXplID0gW3ByaW50SW5mbyBwYXBl
clNpemVdOwogICAgIENHRmxvYXQgaGVhZGVyRm9vdGVyTGVmdCA9IFtwcmludEluZm8gbGVmdE1h
cmdpbl0gLyBzY2FsZTsKICAgICBDR0Zsb2F0IGhlYWRlckZvb3RlcldpZHRoID0gKHBhcGVyU2l6
ZS53aWR0aCAtIChbcHJpbnRJbmZvIGxlZnRNYXJnaW5dICsgW3ByaW50SW5mbyByaWdodE1hcmdp
bl0pKSAvIHNjYWxlOwotICAgIE5TUmVjdCBmb290ZXJSZWN0ID0gTlNNYWtlUmVjdChoZWFkZXJG
b290ZXJMZWZ0LCBbcHJpbnRJbmZvIGJvdHRvbU1hcmdpbl0gLyBzY2FsZSAtIF93ZWJGcmFtZS0+
cGFnZSgpLT5mb290ZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSwgaGVhZGVyRm9vdGVyV2lkdGgs
IF93ZWJGcmFtZS0+cGFnZSgpLT5mb290ZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSk7Ci0gICAg
TlNSZWN0IGhlYWRlclJlY3QgPSBOU01ha2VSZWN0KGhlYWRlckZvb3RlckxlZnQsIChwYXBlclNp
emUuaGVpZ2h0IC0gW3ByaW50SW5mbyB0b3BNYXJnaW5dKSAvIHNjYWxlLCBoZWFkZXJGb290ZXJX
aWR0aCwgX3dlYkZyYW1lLT5wYWdlKCktPmhlYWRlckhlaWdodChfd2ViRnJhbWUuZ2V0KCkpKTsK
KyAgICBOU1JlY3QgZm9vdGVyUmVjdCA9IE5TTWFrZVJlY3QoaGVhZGVyRm9vdGVyTGVmdCwgW3By
aW50SW5mbyBib3R0b21NYXJnaW5dIC8gc2NhbGUgLSBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVy
SGVpZ2h0KCpfd2ViRnJhbWUpLCBoZWFkZXJGb290ZXJXaWR0aCwgX3dlYkZyYW1lLT5wYWdlKCkt
PmZvb3RlckhlaWdodCgqX3dlYkZyYW1lKSk7CisgICAgTlNSZWN0IGhlYWRlclJlY3QgPSBOU01h
a2VSZWN0KGhlYWRlckZvb3RlckxlZnQsIChwYXBlclNpemUuaGVpZ2h0IC0gW3ByaW50SW5mbyB0
b3BNYXJnaW5dKSAvIHNjYWxlLCBoZWFkZXJGb290ZXJXaWR0aCwgX3dlYkZyYW1lLT5wYWdlKCkt
PmhlYWRlckhlaWdodCgqX3dlYkZyYW1lKSk7CiAKICAgICBOU0dyYXBoaWNzQ29udGV4dCAqY3Vy
cmVudENvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOwogICAgIFtj
dXJyZW50Q29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CiAgICAgTlNSZWN0Q2xpcChoZWFkZXJS
ZWN0KTsKLSAgICBfd2ViRnJhbWUtPnBhZ2UoKS0+ZHJhd0hlYWRlcihfd2ViRnJhbWUuZ2V0KCks
IGhlYWRlclJlY3QpOworICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5kcmF3SGVhZGVyKCpfd2ViRnJh
bWUsIGhlYWRlclJlY3QpOwogICAgIFtjdXJyZW50Q29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0
ZV07CiAKICAgICBbY3VycmVudENvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwogICAgIE5TUmVj
dENsaXAoZm9vdGVyUmVjdCk7Ci0gICAgX3dlYkZyYW1lLT5wYWdlKCktPmRyYXdGb290ZXIoX3dl
YkZyYW1lLmdldCgpLCBmb290ZXJSZWN0KTsKKyAgICBfd2ViRnJhbWUtPnBhZ2UoKS0+ZHJhd0Zv
b3RlcigqX3dlYkZyYW1lLCBmb290ZXJSZWN0KTsKICAgICBbY3VycmVudENvbnRleHQgcmVzdG9y
ZUdyYXBoaWNzU3RhdGVdOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHJldmlzaW9uIDIyMTg3MikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEz
NiwxMCArMTM2LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2gK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSW4gY2FzZSB0aGUgVUkgY2xpZW50IG92ZXJyaWRl
cyBnZXRXaW5kb3dGcmFtZSgpLCB3ZSBjYWxsIGl0IGhlcmUgdG8gbWFrZSBzdXJlIHdlIHNlbmQg
dGhlIGFwcHJvcHJpYXRlIHdpbmRvdyBmcmFtZS4KLSAgICBGbG9hdFJlY3Qgd2luZG93RnJhbWVJ
blNjcmVlbkNvb3JkaW5hdGVzID0gbV91aUNsaWVudC0+d2luZG93RnJhbWUodGhpcyk7Ci0gICAg
RmxvYXRSZWN0IHdpbmRvd0ZyYW1lSW5VbmZsaXBwZWRTY3JlZW5Db29yZGluYXRlcyA9IG1fcGFn
ZUNsaWVudC5jb252ZXJ0VG9Vc2VyU3BhY2Uod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVz
KTsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dBbmRWaWV3
RnJhbWVzQ2hhbmdlZCh3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIHdpbmRvd0ZyYW1l
SW5VbmZsaXBwZWRTY3JlZW5Db29yZGluYXRlcywgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRl
cywgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyksIG1fcGFnZUlEKTsKKyAgICBtX3VpQ2xp
ZW50LT53aW5kb3dGcmFtZSgqdGhpcywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgYWNjZXNzaWJpbGl0eVZpZXdDb29y
ZGluYXRlc10gKEZsb2F0UmVjdCB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMpIHsKKyAg
ICAgICAgRmxvYXRSZWN0IHdpbmRvd0ZyYW1lSW5VbmZsaXBwZWRTY3JlZW5Db29yZGluYXRlcyA9
IG1fcGFnZUNsaWVudC5jb252ZXJ0VG9Vc2VyU3BhY2Uod2luZG93RnJhbWVJblNjcmVlbkNvb3Jk
aW5hdGVzKTsKKyAgICAgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OldpbmRv
d0FuZFZpZXdGcmFtZXNDaGFuZ2VkKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgd2lu
ZG93RnJhbWVJblVuZmxpcHBlZFNjcmVlbkNvb3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nv
b3JkaW5hdGVzLCBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKSwgbV9wYWdlSUQpOworICAg
IH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TWFpbkZyYW1lSXNTY3JvbGxhYmxlKGJv
b2wgaXNTY3JvbGxhYmxlKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>