<?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>192936</bug_id>
          
          <creation_ts>2018-12-20 09:08:59 -0800</creation_ts>
          <short_desc>[iOS] Replace &quot;node assistance&quot; terminology in WebKit with &quot;focused element&quot;</short_desc>
          <delta_ts>2018-12-20 10:43:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enrica</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1489861</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-12-20 09:08:59 -0800</bug_when>
    <thetext>We use &quot;node assistance&quot; terminology in many places in WebKit to mean &quot;focused element&quot;, but this is strange and confusing to anyone new to this code (e.g. the StartAssistingNode/StopAssistingNode IPC messages). WebPage also has methods like &quot;elementDidFocus&quot; and &quot;elementDidBlur&quot; that currently take Node*, but should really take Element&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489876</commentid>
    <comment_count>1</comment_count>
      <attachid>357819</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-12-20 09:40:01 -0800</bug_when>
    <thetext>Created attachment 357819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489878</commentid>
    <comment_count>2</comment_count>
      <attachid>357820</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-12-20 09:42:37 -0800</bug_when>
    <thetext>Created attachment 357820
Update a Copyright year</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489888</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-20 09:47:27 -0800</bug_when>
    <thetext>Attachment 357820 did not pass style-queue:


ERROR: Source/WebKit/Shared/FocusedElementInformation.h:48:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 1 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489890</commentid>
    <comment_count>4</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-12-20 09:50:30 -0800</bug_when>
    <thetext>(In reply to Build Bot from comment #3)
&gt; Attachment 357820 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WebKit/Shared/FocusedElementInformation.h:48:  enum members
&gt; should use InterCaps with an initial capital letter or initial &apos;k&apos; for
&gt; C-style enums.  [readability/enum_casing] [4]
&gt; Total errors found: 1 in 32 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

I feel like there should be an exception to this rule for certain acronyms (in this case, URL). I think InputType::URL certainly reads more cleanly than InputType::UniformResourceLocator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489919</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-12-20 10:26:04 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #4)
&gt; (In reply to Build Bot from comment #3)
&gt; &gt; Attachment 357820 [details] did not pass style-queue:
&gt; &gt; 
&gt; &gt; 
&gt; &gt; ERROR: Source/WebKit/Shared/FocusedElementInformation.h:48:  enum members
&gt; &gt; should use InterCaps with an initial capital letter or initial &apos;k&apos; for
&gt; &gt; C-style enums.  [readability/enum_casing] [4]
&gt; &gt; Total errors found: 1 in 32 files
&gt; &gt; 
&gt; &gt; 
&gt; &gt; If any of these errors are false positives, please file a bug against
&gt; &gt; check-webkit-style.
&gt; 
&gt; I feel like there should be an exception to this rule for certain acronyms
&gt; (in this case, URL). I think InputType::URL certainly reads more cleanly
&gt; than InputType::UniformResourceLocator.

Agreed, so ignore it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489921</commentid>
    <comment_count>6</comment_count>
      <attachid>357820</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-12-20 10:27:11 -0800</bug_when>
    <thetext>Comment on attachment 357820
Update a Copyright year

rs=me (but strongly agree with the name change)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489930</commentid>
    <comment_count>7</comment_count>
      <attachid>357820</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-20 10:42:53 -0800</bug_when>
    <thetext>Comment on attachment 357820
Update a Copyright year

Clearing flags on attachment: 357820

Committed r239454: &lt;https://trac.webkit.org/changeset/239454&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489931</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-20 10:42:55 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489932</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-12-20 10:43:35 -0800</bug_when>
    <thetext>&lt;rdar://problem/46876214&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357819</attachid>
            <date>2018-12-20 09:40:01 -0800</date>
            <delta_ts>2018-12-20 09:42:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192936-20181220094000.patch</filename>
            <type>text/plain</type>
            <size>204426</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU5ZTIzZmI2ZGI5YTE3Yjcz
ZDgyZTgwNzYwY2RhNzdjNmI2MTVhZGQuLjJhOWQ3MTE0ZmQ2YzY4ZTA1MTQxZDcxZDVkZTJhZjk4
ZWZmODNiZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjU2IEBACisyMDE4LTEyLTIwICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFJlcGxhY2Ug
Im5vZGUgYXNzaXN0YW5jZSIgdGVybWlub2xvZ3kgaW4gV2ViS2l0IHdpdGggImZvY3VzZWQgZWxl
bWVudCIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MjkzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmFtZXMgYSBmZXcgbWV0aG9kcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGluIFdlYktpdCwgdG8gcmVm
ZXIgdG8gImZvY3VzZWQgZWxlbWVudHMiIHJhdGhlciB0aGFuICJhc3Npc3RlZCBub2RlcyI7Cisg
ICAgICAgIHNlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLiBObyBuZXcgdGVzdHMsIGJlY2F1c2Ug
dGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFNoYXJl
ZC9Gb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcC4KKyAgICAgICAgKFdlYktpdDo6
T3B0aW9uSXRlbTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3B0aW9uSXRlbTo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbjo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbjo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
aC4KKworICAgICAgICBSZW5hbWUgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gdG8gRm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbi4gQWRkaXRpb25hbGx5LCBpbnRyb2R1Y2UgYSBuYW1lZCB0eXBlIGZv
ciB0aGUKKyAgICAgICAgZm9jdXNlZEVsZW1lbnRJZGVudGlmaWVyICh3aGljaCBpcyBjdXJyZW50
bHkganVzdCBhIGB1aW50NjRfdGApLgorCisgICAgICAgIChXZWJLaXQ6Ok9wdGlvbkl0ZW06Ok9w
dGlvbkl0ZW0pOgorICAgICAgICAqIFNoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24uaDoKKyAgICAgICAgKiBTaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb246OmRlY29kZSk6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zaG91bGRVcGRhdGVLZXlib2FyZFdpdGhJbmZvOl0pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vz
c0V4aXRlZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorCisgICAgICAg
IFJlbmFtZSBOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyB0byBFbGVtZW50RGlkRm9jdXNBcmd1bWVu
dHMgKGFuZCBhbHNvIGFkZCBhIEZJWE1FIGZvciByZW1vdmluZyB0aGlzIG1lY2hhbmlzbQorICAg
ICAgICBldmVudHVhbGx5KS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZvY3Vz
TmV4dEZvY3VzZWRFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpmb2N1
c05leHRBc3Npc3RlZE5vZGUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW46CisKKyAgICAgICAgUmVuYW1lIFN0YXJ0QXNzaXN0aW5nTm9kZSB0
byBFbGVtZW50RGlkRm9jdXMsIGFuZCBTdG9wQXNzaXN0aW5nTm9kZSB0byBFbGVtZW50RGlkQmx1
ci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6ZWxlbWVudERpZEZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudEltcGw6OmlzRm9jdXNpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmVsZW1lbnREaWRCbHVyKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OnN0YXJ0QXNzaXN0aW5nTm9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjppc0Fzc2lzdGluZ05vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6c3RvcEFzc2lzdGluZ05vZGUpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc0ZvY3VzaW5nRWxlbWVu
dF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9kaWRDb21taXRMb2FkRm9yTWFpbkZyYW1l
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaXNBc3Npc3RpbmdOb2RlXSk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tGb2N1c2VkRWxlbWVudEluZm8gaW5pdFdpdGhGb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uOmlzVXNlckluaXRpYXRlZDp1c2VyT2JqZWN0Ol0pOgorICAgICAgICAoaGFzRm9jdXNlZEVs
ZW1lbnQpOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNsZWFudXBJbnRlcmFjdGlvbl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNob3VsZEhpZGVTZWxlY3Rpb25XaGVuU2Nyb2xsaW5n
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJGb3JXZWJW
aWV3XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RpZEdldFRhcEhpZ2hsaWdodEZvclJl
cXVlc3Q6Y29sb3I6cXVhZHM6dG9wTGVmdFJhZGl1czp0b3BSaWdodFJhZGl1czpib3R0b21MZWZ0
UmFkaXVzOmJvdHRvbVJpZ2h0UmFkaXVzOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9y
ZXF1aXJlc0tleWJvYXJkV2hlbkZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgX3pvb21Ub1JldmVhbEZvY3VzZWRFbGVtZW50XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgaW5wdXRWaWV3XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NlbGVjdGlvbkNs
aXBSZWN0XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZ2VzdHVyZVJlY29nbml6ZXJTaG91
bGRCZWdpbjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyB0ZXh0SW50ZXJhY3Rpb25HZXN0
dXJlOnNob3VsZEJlZ2luQXRQb2ludDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjbGVh
clNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcXVpcmVzQWNjZXNzb3J5
Vmlld10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNhblBlcmZvcm1BY3Rpb25Gb3JXZWJW
aWV3OndpdGhTZW5kZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2lzSW50ZXJhY3Rp
bmdXaXRoRm9jdXNlZEVsZW1lbnRdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjaGFuZ2VT
ZWxlY3Rpb25XaXRoR2VzdHVyZUF0OndpdGhHZXN0dXJlOndpdGhTdGF0ZTp3aXRoRmxhZ3M6XSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2VsZWN0UG9zaXRpb25BdFBvaW50OmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVjdFBvc2l0aW9uQXRC
b3VuZGFyeTppbkRpcmVjdGlvbjpmcm9tUG9pbnQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgc2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eTphdFBvaW50OmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHVwZGF0ZVNlbGVj
dGlvbldpdGhFeHRlbnRQb2ludDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyB1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQ6d2l0aEJvdW5kYXJ5OmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjY2Vzc29yeVRh
YjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRo
U2VsZWN0aW9uTW92aW5nRm9yd2FyZDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBhY2Nlc3NvcnlDbGVhcl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IF91cGRhdGVBY2Nlc3NvcnldKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpbnNlcnRUZXh0
U3VnZ2VzdGlvbjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXRTZWxlY3RlZFRleHRS
YW5nZTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyB0ZXh0SW5wdXRUcmFpdHNdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBpc1Njcm9sbGFibGVGb3JLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBmb2N1c2VkRWxlbWVudEluZm9y
bWF0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRP
cHRpb25zXSk6CisgICAgICAgIChyZWN0VG9SZXZlYWxXaGVuWm9vbWluZ1RvRm9jdXNlZEVsZW1l
bnQpOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9lbGVtZW50RGlkRm9jdXM6dXNlcklzSW50
ZXJhY3Rpbmc6Ymx1clByZXZpb3VzTm9kZTpjaGFuZ2luZ0FjdGl2aXR5U3RhdGU6dXNlck9iamVj
dDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZWxlbWVudERpZEJsdXJdKToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBfZGlkUmVjZWl2ZUVkaXRvclN0YXRlVXBkYXRlQWZ0ZXJGb2N1
c10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHVwZGF0ZUN1cnJlbnRGb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHByZXNlbnRWaWV3Q29u
dHJvbGxlckZvckN1cnJlbnRGb2N1c2VkRWxlbWVudF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IGZvY3VzZWRGb3JtQ29udHJvbFZpZXdEaWRTdWJtaXQ6XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgZm9jdXNlZEZvcm1Db250cm9sVmlld0RpZENhbmNlbDpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBmb2N1c2VkRm9ybUNvbnRyb2xWaWV3RGlkQmVnaW5FZGl0aW5nOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlY3RGb3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3Ol0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG5leHRSZWN0Rm9yRm9jdXNlZEZvcm1Db250cm9s
VmlldzpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBwcmV2aW91c1JlY3RGb3JGb2N1c2Vk
Rm9ybUNvbnRyb2xWaWV3Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjdGlvbk5hbWVG
b3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGZv
Y3VzZWRGb3JtQ29udHJvbFZpZXdEaWRSZXF1ZXN0TmV4dE5vZGU6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgZm9jdXNlZEZvcm1Db250cm9sVmlld0RpZFJlcXVlc3RQcmV2aW91c05vZGU6
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaGFzTmV4dE5vZGVGb3JGb2N1c2VkRm9ybUNv
bnRyb2xWaWV3Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGhhc1ByZXZpb3VzTm9kZUZv
ckZvY3VzZWRGb3JtQ29udHJvbFZpZXc6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2Vs
ZWN0TWVudTpkaWRTZWxlY3RJdGVtQXRJbmRleDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBudW1iZXJPZkl0ZW1zSW5TZWxlY3RNZW51Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IHNlbGVjdE1lbnU6ZGlzcGxheVRleHRGb3JJdGVtQXRJbmRleDpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBzZWxlY3RNZW51OmRpZENoZWNrSXRlbUF0SW5kZXg6Y2hlY2tlZDpdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBzZWxlY3RNZW51VXNlc011bHRpcGxlU2VsZWN0aW9uOl0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVjdE1lbnU6aGFzU2VsZWN0ZWRPcHRpb25B
dEluZGV4Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0
aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hdXRvZmlsbENvbnRleHRdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBkaXNtaXNzUXVpY2tib2FyZFZpZXdDb250cm9sbGVyQW5k
UmV2ZWFsRm9jdXNlZEZvcm1PdmVybGF5SWZOZWNlc3Nhcnk6XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgYWxsb3dzTGFuZ3VhZ2VTZWxlY3Rpb25NZW51Rm9yTGlzdFZpZXdDb250cm9sbGVy
Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGlucHV0TGFiZWxUZXh0Rm9yVmlld0NvbnRy
b2xsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaW5pdGlhbFZhbHVlRm9yVmlld0Nv
bnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2hvdWxkRGlzcGxheUlucHV0
Q29udGV4dFZpZXdGb3JMaXN0Vmlld0NvbnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgbnVtZXJpY0lucHV0TW9kZUZvckxpc3RWaWV3Q29udHJvbGxlcjpdKToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyB0ZXh0Q29udGVudFR5cGVGb3JMaXN0Vmlld0NvbnRyb2xsZXI6XSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWxsb3dzRGljdGF0aW9uSW5wdXRGb3JMaXN0Vmll
d0NvbnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLRm9jdXNlZEVsZW1lbnRJbmZvIGluaXRXaXRo
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246aXNVc2VySW5pdGlhdGVkOnVzZXJPYmplY3Q6XSk6IERl
bGV0ZWQuCisgICAgICAgIChoYXNBc3Npc3RlZE5vZGUpOiBEZWxldGVkLgorCisgICAgICAgIFJl
cGxhY2VkIHdpdGggaGFzRm9jdXNlZEVsZW1lbnQuCisKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBfaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBhc3Npc3RlZE5vZGVJbmZvcm1hdGlvbl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc3RhcnRBc3Npc3RpbmdOb2RlOnVzZXJJc0ludGVy
YWN0aW5nOmJsdXJQcmV2aW91c05vZGU6Y2hhbmdpbmdBY3Rpdml0eVN0YXRlOnVzZXJPYmplY3Q6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3N0b3BBc3Npc3RpbmdOb2Rl
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgdXBkYXRlQ3VycmVudEFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IHByZXNlbnRWaWV3Q29udHJvbGxlckZvckN1cnJlbnRBc3Npc3RlZE5vZGVdKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklP
Uy5tbToKKyAgICAgICAgKC1bV0tEYXRhTGlzdFN1Z2dlc3Rpb25zQ29udHJvbCB0ZXh0QWxpZ25t
ZW50XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXF1ZXN0Rm9jdXNlZEVsZW1l
bnRJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29tcHV0ZUN1
c3RvbUZpeGVkUG9zaXRpb25SZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkaWRDb21taXRMYXllclRyZWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNlbGVjdFdpdGhHZXN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZWxl
Y3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2lu
dEFuZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpibHVyRm9jdXNl
ZEVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmVsZW1lbnREaWRGb2N1
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRGb2N1c2VkRWxlbWVudFZhbHVlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRGb2N1c2VkRWxlbWVudFZhbHVlQXNOdW1i
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEZvY3VzZWRFbGVtZW50U2Vs
ZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb25DYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cmVxdWVzdEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpibHVyQXNzaXN0ZWROb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BBc3Npc3RpbmdOb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpmb2N1c05leHRBc3Npc3RlZE5vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFzc2lzdGVkTm9k
ZVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBc3Np
c3RlZE5vZGVWYWx1ZUFzTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybUNvbG9yUGlja2VyLm1tOgorICAgICAgICAoLVtX
S0NvbG9yUGlja2VyIGluaXRXaXRoVmlldzpdKToKKyAgICAgICAgKC1bV0tDb2xvclBpY2tlciBz
ZXRDb250cm9sVmFsdWVGcm9tVUlDb2xvcjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Zv
cm1zL1dLRm9ybUlucHV0Q29udHJvbC5tbToKKyAgICAgICAgKC1bV0tEYXRlVGltZVBpY2tlciBp
bml0V2l0aFZpZXc6ZGF0ZVBpY2tlck1vZGU6XSk6CisgICAgICAgICgtW1dLRGF0ZVRpbWVQaWNr
ZXIgc2hvdWxkUHJlc2VudEdyZWdvcmlhbkNhbGVuZGFyOl0pOgorICAgICAgICAoLVtXS0RhdGVU
aW1lUGlja2VyIF9kYXRlQ2hhbmdlZFNldEFzTnVtYmVyXSk6CisgICAgICAgICgtW1dLRGF0ZVRp
bWVQaWNrZXIgX2RhdGVDaGFuZ2VkU2V0QXNTdHJpbmddKToKKyAgICAgICAgKC1bV0tEYXRlVGlt
ZVBpY2tlciBjb250cm9sQmVnaW5FZGl0aW5nXSk6CisgICAgICAgICgtW1dLRm9ybUlucHV0Q29u
dHJvbCBpbml0V2l0aFZpZXc6XSk6CisgICAgICAgICgtW1dLRGF0ZVRpbWVQb3BvdmVyIGNsZWFy
Ol0pOgorICAgICAgICAoLVtXS0RhdGVUaW1lUG9wb3ZlciBpbml0V2l0aFZpZXc6ZGF0ZVBpY2tl
ck1vZGU6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1Qb3BvdmVyLm1t
OgorICAgICAgICAoLVtXS1JvdGF0aW5nUG9wb3ZlciBwcmVzZW50UG9wb3ZlckFuaW1hdGVkOl0p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0Q29udHJvbC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0Q29udHJvbC5tbToKKyAg
ICAgICAgKC1bV0tGb3JtU2VsZWN0Q29udHJvbCBpbml0V2l0aFZpZXc6XSk6CisgICAgICAgICog
VUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQaWNrZXIubW06CisgICAgICAgICgtW1dL
TXVsdGlwbGVTZWxlY3RQaWNrZXIgaW5pdFdpdGhWaWV3Ol0pOgorICAgICAgICAoLVtXS011bHRp
cGxlU2VsZWN0UGlja2VyIHBpY2tlclZpZXc6dmlld0ZvclJvdzpmb3JDb21wb25lbnQ6cmV1c2lu
Z1ZpZXc6XSk6CisgICAgICAgICgtW1dLTXVsdGlwbGVTZWxlY3RQaWNrZXIgcGlja2VyVmlldzpu
dW1iZXJPZlJvd3NJbkNvbXBvbmVudDpdKToKKyAgICAgICAgKC1bV0tNdWx0aXBsZVNlbGVjdFBp
Y2tlciBmaW5kSXRlbUluZGV4QXQ6XSk6CisgICAgICAgICgtW1dLTXVsdGlwbGVTZWxlY3RQaWNr
ZXIgcGlja2VyVmlldzpyb3c6Y29sdW1uOmNoZWNrZWQ6XSk6CisgICAgICAgICgtW1dLU2VsZWN0
U2luZ2xlUGlja2VyIGluaXRXaXRoVmlldzpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RTaW5nbGVQ
aWNrZXIgY29udHJvbEVuZEVkaXRpbmddKToKKyAgICAgICAgKC1bV0tTZWxlY3RTaW5nbGVQaWNr
ZXIgcGlja2VyVmlldzpudW1iZXJPZlJvd3NJbkNvbXBvbmVudDpdKToKKyAgICAgICAgKC1bV0tT
ZWxlY3RTaW5nbGVQaWNrZXIgcGlja2VyVmlldzphdHRyaWJ1dGVkVGl0bGVGb3JSb3c6Zm9yQ29t
cG9uZW50Ol0pOgorICAgICAgICAoLVtXS1NlbGVjdFNpbmdsZVBpY2tlciBwaWNrZXJWaWV3OmRp
ZFNlbGVjdFJvdzppbkNvbXBvbmVudDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Zvcm1z
L1dLRm9ybVNlbGVjdFBvcG92ZXIubW06CisgICAgICAgICgtW1dLU2VsZWN0VGFibGVWaWV3Q29u
dHJvbGxlciBpbml0V2l0aFZpZXc6aGFzR3JvdXBzOl0pOgorICAgICAgICAoLVtXS1NlbGVjdFRh
YmxlVmlld0NvbnRyb2xsZXIgdGFibGVWaWV3Om51bWJlck9mUm93c0luU2VjdGlvbjpdKToKKyAg
ICAgICAgKC1bV0tTZWxlY3RUYWJsZVZpZXdDb250cm9sbGVyIHRhYmxlVmlldzp0aXRsZUZvckhl
YWRlckluU2VjdGlvbjpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RUYWJsZVZpZXdDb250cm9sbGVy
IGZpbmRJdGVtSW5kZXhBdDpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RUYWJsZVZpZXdDb250cm9s
bGVyIGZpbmRJdGVtQXQ6XSk6CisgICAgICAgICgtW1dLU2VsZWN0VGFibGVWaWV3Q29udHJvbGxl
ciB0YWJsZVZpZXc6Y2VsbEZvclJvd0F0SW5kZXhQYXRoOl0pOgorICAgICAgICAoLVtXS1NlbGVj
dFRhYmxlVmlld0NvbnRyb2xsZXIgdGFibGVWaWV3OmRpZFNlbGVjdFJvd0F0SW5kZXhQYXRoOl0p
OgorICAgICAgICAoLVtXS1NlbGVjdFBvcG92ZXIgaW5pdFdpdGhWaWV3Omhhc0dyb3VwczpdKToK
KyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6ZWxlbWVudERpZEZvY3VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2hyb21lQ2xpZW50OjplbGVtZW50RGlkUmVmb2N1cyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNocm9tZUNsaWVudDo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkU3RhcnRQ
YWdlVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFRleHRBc3luYyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlc2V0Rm9jdXNlZEVsZW1lbnRGb3JGcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVsZW1lbnREaWRSZWZvY3VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6ZWxlbWVudERpZEZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRDb21t
aXRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVzZXRBc3Npc3RlZE5vZGVGb3JG
cmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KworICAgICAgICBSZWZhY3RvciBlbGVtZW50RGlke1JlZm9jdXN8Rm9jdXN8Qmx1cn0gdG8gdGFr
ZSBgRWxlbWVudCZgIHJhdGhlciB0aGFuIGBOb2RlKmAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW06CisKKyAgICAgICAgUmVwbGFjZSBtX2Fzc2lzdGVkTm9kZSAo
YSBgUmVmUHRyPE5vZGU+YCkgd2l0aCBtX2ZvY3VzZWRFbGVtZW50IChhIGBSZWZQdHI8RWxlbWVu
dD5gKS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUVkaXRvclN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcGxldGVTeW50aGV0aWNDbGljayk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RGb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Ymx1ckZvY3VzZWRFbGVtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnNldEZvY3VzZWRFbGVtZW50VmFsdWVBc051bWJlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEZvY3VzZWRFbGVtZW50U2VsZWN0ZWRJbmRleCk6Cisg
ICAgICAgIChXZWJLaXQ6OmlubmVyRnJhbWVRdWFkKToKKyAgICAgICAgKFdlYktpdDo6Y29uc3Ry
YWluUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9y
UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0UG9pbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRo
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmFuZ2VGb3JHcmFudWxhcml0
eUF0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51
bGFyaXR5QXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlv
bldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZv
Y3VzTmV4dEZvY3VzZWRFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0Rm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF1dG9m
aWxsTG9naW5DcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RB
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmJsdXJBc3Npc3RlZE5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpzZXRBc3Npc3RlZE5vZGVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Zm9jdXNOZXh0QXNzaXN0ZWROb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pOiBE
ZWxldGVkLgorCiAyMDE4LTEyLTIwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtpT1NdIEZvY3VzaW5nIGFuIGVkaXRhYmxlIGVsZW1lbnQgc2hvdWxk
IHNjcm9sbCB0byByZXZlYWwgdGhlIHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkZGU0YmVjMzcyOGUzNTA2ODUxYjU5ZTQ3OTc1YTVlZDFkNmJjYzE2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmgiCi0KLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBP
cHRpb25JdGVtOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgdGV4dDsKLSAgICBlbmNvZGVyIDw8IGlzR3JvdXA7Ci0gICAgZW5jb2RlciA8PCBp
c1NlbGVjdGVkOwotICAgIGVuY29kZXIgPDwgZGlzYWJsZWQ7Ci0gICAgZW5jb2RlciA8PCBwYXJl
bnRHcm91cElEOwotfQotCi1PcHRpb25hbDxPcHRpb25JdGVtPiBPcHRpb25JdGVtOjpkZWNvZGUo
SVBDOjpEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbkl0ZW0gcmVzdWx0OwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRleHQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNHcm91cCkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5p
c1NlbGVjdGVkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmRpc2FibGVkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBhcmVudEdyb3VwSUQpKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIAotICAgIHJldHVybiBXVEZNb3ZlKHJlc3Vs
dCk7Ci19Ci0KLXZvaWQgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmVuY29kZShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBlbGVtZW50UmVjdDsKLSAgICBl
bmNvZGVyIDw8IGVsZW1lbnRJbnRlcmFjdGlvbkxvY2F0aW9uOwotICAgIGVuY29kZXIgPDwgbWlu
aW11bVNjYWxlRmFjdG9yOwotICAgIGVuY29kZXIgPDwgbWF4aW11bVNjYWxlRmFjdG9yOwotICAg
IGVuY29kZXIgPDwgbWF4aW11bVNjYWxlRmFjdG9ySWdub3JpbmdBbHdheXNTY2FsYWJsZTsKLSAg
ICBlbmNvZGVyIDw8IG5vZGVGb250U2l6ZTsKLSAgICBlbmNvZGVyIDw8IGhhc05leHROb2RlOwot
ICAgIGVuY29kZXIgPDwgbmV4dE5vZGVSZWN0OwotICAgIGVuY29kZXIgPDwgaGFzUHJldmlvdXNO
b2RlOwotICAgIGVuY29kZXIgPDwgcHJldmlvdXNOb2RlUmVjdDsKLSAgICBlbmNvZGVyIDw8IGlz
QXV0b2NvcnJlY3Q7Ci0gICAgZW5jb2RlciA8PCBpc1JUTDsKLSAgICBlbmNvZGVyLmVuY29kZUVu
dW0oYXV0b2NhcGl0YWxpemVUeXBlKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0oZWxlbWVudFR5
cGUpOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShpbnB1dE1vZGUpOwotICAgIGVuY29kZXIgPDwg
Zm9ybUFjdGlvbjsKLSAgICBlbmNvZGVyIDw8IHNlbGVjdE9wdGlvbnM7Ci0gICAgZW5jb2RlciA8
PCBzZWxlY3RlZEluZGV4OwotICAgIGVuY29kZXIgPDwgaXNNdWx0aVNlbGVjdDsKLSAgICBlbmNv
ZGVyIDw8IGlzUmVhZE9ubHk7Ci0gICAgZW5jb2RlciA8PCBhbGxvd3NVc2VyU2NhbGluZzsKLSAg
ICBlbmNvZGVyIDw8IGFsbG93c1VzZXJTY2FsaW5nSWdub3JpbmdBbHdheXNTY2FsYWJsZTsKLSAg
ICBlbmNvZGVyIDw8IGluc2lkZUZpeGVkUG9zaXRpb247Ci0gICAgZW5jb2RlciA8PCB2YWx1ZTsK
LSAgICBlbmNvZGVyIDw8IHZhbHVlQXNOdW1iZXI7Ci0gICAgZW5jb2RlciA8PCB0aXRsZTsKLSAg
ICBlbmNvZGVyIDw8IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKLSAgICBlbmNv
ZGVyIDw8IGlzQXV0b2ZpbGxhYmxlVXNlcm5hbWVGaWVsZDsKLSAgICBlbmNvZGVyIDw8IGVsZW1l
bnRJc1RyYW5zcGFyZW50OwotICAgIGVuY29kZXIgPDwgcmVwcmVzZW50aW5nUGFnZVVSTDsKLSAg
ICBlbmNvZGVyLmVuY29kZUVudW0oYXV0b2ZpbGxGaWVsZE5hbWUpOwotICAgIGVuY29kZXIgPDwg
cGxhY2Vob2xkZXI7Ci0gICAgZW5jb2RlciA8PCBsYWJlbDsKLSAgICBlbmNvZGVyIDw8IGFyaWFM
YWJlbDsKLSAgICBlbmNvZGVyIDw8IGVtYmVkZGVkVmlld0lEOwotICAgIGVuY29kZXIgPDwgYXNz
aXN0ZWROb2RlSWRlbnRpZmllcjsKLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBl
bmNvZGVyIDw8IGhhc1N1Z2dlc3Rpb25zOwotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQot
ICAgIGVuY29kZXIgPDwgc3VnZ2VzdGVkQ29sb3JzOwotI2VuZGlmCi0jZW5kaWYKLX0KLQotYm9v
bCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIHJlc3VsdCkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5lbGVtZW50UmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmVsZW1lbnRJbnRlcmFjdGlvbkxvY2F0aW9uKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubWlu
aW11bVNjYWxlRmFjdG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQubWF4aW11bVNjYWxlRmFjdG9yKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1heGltdW1TY2FsZUZh
Y3Rvcklnbm9yaW5nQWx3YXlzU2NhbGFibGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ub2RlRm9udFNpemUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5oYXNOZXh0Tm9kZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
Lm5leHROb2RlUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0Lmhhc1ByZXZpb3VzTm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnByZXZpb3VzTm9kZVJlY3QpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0F1
dG9jb3JyZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuaXNSVEwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRW51bShyZXN1bHQuYXV0b2NhcGl0YWxpemVUeXBlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmVsZW1lbnRU
eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVu
dW0ocmVzdWx0LmlucHV0TW9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmZvcm1BY3Rpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZWxlY3RPcHRpb25zKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2VsZWN0
ZWRJbmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmlzTXVsdGlTZWxlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1JlYWRPbmx5KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWxsb3dzVXNlclNjYWxpbmcp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuYWxsb3dzVXNlclNjYWxpbmdJZ25vcmluZ0Fsd2F5c1NjYWxhYmxlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaW5zaWRlRml4
ZWRQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQudmFsdWVBc051bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRpdGxlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWNjZXB0c0F1dG9m
aWxsZWRMb2dpbkNyZWRlbnRpYWxzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNBdXRvZmlsbGFibGVVc2VybmFtZUZpZWxkKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZWxl
bWVudElzVHJhbnNwYXJlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5yZXByZXNlbnRpbmdQYWdlVVJMKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmF1dG9maWxsRmll
bGROYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQucGxhY2Vob2xkZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5sYWJlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFyaWFMYWJlbCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmVtYmVkZGVkVmlld0lE
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuYXNzaXN0ZWROb2RlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lm
IEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
Lmhhc1N1Z2dlc3Rpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKElO
UFVUX1RZUEVfQ09MT1IpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc3VnZ2VzdGVk
Q29sb3JzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHJl
dHVybiB0cnVlOwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjQ3
Zjg5MDQzZWU3NTA0NzUxYjYxOWZmZWFiZjQyNjliYjU0YTI5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0F1dG9jYXBpdGFsaXplVHlwZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0F1
dG9maWxsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5wdXRNb2RlLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotZW51bSBjbGFzcyBJ
bnB1dFR5cGUgewotICAgIE5vbmUsCi0gICAgQ29udGVudEVkaXRhYmxlLAotICAgIFRleHQsCi0g
ICAgUGFzc3dvcmQsCi0gICAgVGV4dEFyZWEsCi0gICAgU2VhcmNoLAotICAgIEVtYWlsLAotICAg
IFVSTCwKLSAgICBQaG9uZSwKLSAgICBOdW1iZXIsCi0gICAgTnVtYmVyUGFkLAotICAgIERhdGUs
Ci0gICAgRGF0ZVRpbWUsCi0gICAgRGF0ZVRpbWVMb2NhbCwKLSAgICBNb250aCwKLSAgICBXZWVr
LAotICAgIFRpbWUsCi0gICAgU2VsZWN0LAotICAgIERyYXdpbmcsCi0jaWYgRU5BQkxFKElOUFVU
X1RZUEVfQ09MT1IpCi0gICAgQ29sb3IKLSNlbmRpZgotfTsKLQotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi1zdHJ1Y3QgT3B0aW9uSXRlbSB7Ci0gICAgT3B0aW9uSXRlbSgpIHsgfQotCi0gICAg
T3B0aW9uSXRlbShjb25zdCBPcHRpb25JdGVtJiBpdGVtKQotICAgICAgICA6IHRleHQoaXRlbS50
ZXh0KQotICAgICAgICAsIGlzR3JvdXAoaXRlbS5pc0dyb3VwKQotICAgICAgICAsIGlzU2VsZWN0
ZWQoaXRlbS5pc1NlbGVjdGVkKQotICAgICAgICAsIGRpc2FibGVkKGl0ZW0uZGlzYWJsZWQpCi0g
ICAgICAgICwgcGFyZW50R3JvdXBJRChpdGVtLnBhcmVudEdyb3VwSUQpCi0gICAgewotICAgIH0K
LQotICAgIE9wdGlvbkl0ZW0oY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIGlzR3JvdXAsIGludCBw
YXJlbnRJRCwgYm9vbCBzZWxlY3RlZCwgYm9vbCBkaXNhYmxlZCkKLSAgICAgICAgOiB0ZXh0KHRl
eHQpCi0gICAgICAgICwgaXNHcm91cChpc0dyb3VwKQotICAgICAgICAsIGlzU2VsZWN0ZWQoc2Vs
ZWN0ZWQpCi0gICAgICAgICwgZGlzYWJsZWQoZGlzYWJsZWQpCi0gICAgICAgICwgcGFyZW50R3Jv
dXBJRChwYXJlbnRJRCkKLSAgICB7Ci0gICAgfQotICAgIFN0cmluZyB0ZXh0OwotICAgIGJvb2wg
aXNHcm91cCB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc1NlbGVjdGVkIHsgZmFsc2UgfTsKLSAgICBi
b29sIGRpc2FibGVkIHsgZmFsc2UgfTsKLSAgICBpbnQgcGFyZW50R3JvdXBJRCB7IDAgfTsKLQot
ICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBPcHRpb25h
bDxPcHRpb25JdGVtPiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7Ci19OwotCi1zdHJ1Y3QgQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24gewotICAgIFdlYkNvcmU6OkludFJlY3QgZWxlbWVudFJlY3Q7Ci0g
ICAgV2ViQ29yZTo6SW50UG9pbnQgZWxlbWVudEludGVyYWN0aW9uTG9jYXRpb247Ci0gICAgZG91
YmxlIG1pbmltdW1TY2FsZUZhY3RvciB7IC1JTkZJTklUWSB9OwotICAgIGRvdWJsZSBtYXhpbXVt
U2NhbGVGYWN0b3IgeyBJTkZJTklUWSB9OwotICAgIGRvdWJsZSBtYXhpbXVtU2NhbGVGYWN0b3JJ
Z25vcmluZ0Fsd2F5c1NjYWxhYmxlIHsgSU5GSU5JVFkgfTsKLSAgICBkb3VibGUgbm9kZUZvbnRT
aXplIHsgMCB9OwotICAgIGJvb2wgaGFzTmV4dE5vZGUgeyBmYWxzZSB9OwotICAgIFdlYkNvcmU6
OkludFJlY3QgbmV4dE5vZGVSZWN0OwotICAgIGJvb2wgaGFzUHJldmlvdXNOb2RlIHsgZmFsc2Ug
fTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IHByZXZpb3VzTm9kZVJlY3Q7Ci0gICAgYm9vbCBpc0F1
dG9jb3JyZWN0IHsgZmFsc2UgfTsKLSAgICBib29sIGlzUlRMIHsgZmFsc2UgfTsKLSAgICBib29s
IGlzTXVsdGlTZWxlY3QgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNSZWFkT25seSB7ZmFsc2UgfTsK
LSAgICBib29sIGFsbG93c1VzZXJTY2FsaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93c1Vz
ZXJTY2FsaW5nSWdub3JpbmdBbHdheXNTY2FsYWJsZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBpbnNp
ZGVGaXhlZFBvc2l0aW9uIHsgZmFsc2UgfTsKLSAgICBBdXRvY2FwaXRhbGl6ZVR5cGUgYXV0b2Nh
cGl0YWxpemVUeXBlIHsgQXV0b2NhcGl0YWxpemVUeXBlRGVmYXVsdCB9OwotICAgIElucHV0VHlw
ZSBlbGVtZW50VHlwZSB7IElucHV0VHlwZTo6Tm9uZSB9OwotICAgIFdlYkNvcmU6OklucHV0TW9k
ZSBpbnB1dE1vZGUgeyBXZWJDb3JlOjpJbnB1dE1vZGU6OlVuc3BlY2lmaWVkIH07Ci0gICAgU3Ry
aW5nIGZvcm1BY3Rpb247Ci0gICAgVmVjdG9yPE9wdGlvbkl0ZW0+IHNlbGVjdE9wdGlvbnM7Ci0g
ICAgaW50IHNlbGVjdGVkSW5kZXggeyAtMSB9OwotICAgIFN0cmluZyB2YWx1ZTsKLSAgICBkb3Vi
bGUgdmFsdWVBc051bWJlciB7IDAgfTsKLSAgICBTdHJpbmcgdGl0bGU7Ci0gICAgYm9vbCBhY2Nl
cHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNBdXRv
ZmlsbGFibGVVc2VybmFtZUZpZWxkIHsgZmFsc2UgfTsKLSAgICBib29sIGVsZW1lbnRJc1RyYW5z
cGFyZW50IHsgZmFsc2UgfTsKLSAgICBVUkwgcmVwcmVzZW50aW5nUGFnZVVSTDsKLSAgICBXZWJD
b3JlOjpBdXRvZmlsbEZpZWxkTmFtZSBhdXRvZmlsbEZpZWxkTmFtZSB7IFdlYkNvcmU6OkF1dG9m
aWxsRmllbGROYW1lOjpOb25lIH07Ci0gICAgU3RyaW5nIHBsYWNlaG9sZGVyOwotICAgIFN0cmlu
ZyBsYWJlbDsKLSAgICBTdHJpbmcgYXJpYUxhYmVsOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI6OkVtYmVkZGVkVmlld0lEIGVtYmVkZGVkVmlld0lEOwotI2lmIEVOQUJMRShEQVRBTElTVF9F
TEVNRU5UKQotICAgIGJvb2wgaGFzU3VnZ2VzdGlvbnMgeyBmYWxzZSB9OwotI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX0NPTE9SKQotICAgIFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4gc3VnZ2VzdGVkQ29s
b3JzOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHVpbnQ2NF90IGFzc2lzdGVkTm9kZUlkZW50aWZp
ZXIgeyAwIH07Ci0KLSAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKLSAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24m
KTsKLX07Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Gb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTlkNzQ5M2JiNjFjZTVkZWMxZWIz
NTNkODcxNjZlZjgxZDAwMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5jcHAKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9jdXNlZEVsZW1lbnRJbmZv
cm1hdGlvbi5oIgorCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgT3B0aW9uSXRl
bTo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IHRleHQ7CisgICAgZW5jb2RlciA8PCBpc0dyb3VwOworICAgIGVuY29kZXIgPDwgaXNTZWxlY3Rl
ZDsKKyAgICBlbmNvZGVyIDw8IGRpc2FibGVkOworICAgIGVuY29kZXIgPDwgcGFyZW50R3JvdXBJ
RDsKK30KKworT3B0aW9uYWw8T3B0aW9uSXRlbT4gT3B0aW9uSXRlbTo6ZGVjb2RlKElQQzo6RGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25JdGVtIHJlc3VsdDsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC50ZXh0KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzR3JvdXApKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNTZWxlY3Rl
ZCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5kaXNhYmxlZCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wYXJlbnRHcm91cElEKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQor
Cit2b2lkIEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb246OmVuY29kZShJUEM6OkVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBlbGVtZW50UmVjdDsKKyAgICBlbmNvZGVy
IDw8IGVsZW1lbnRJbnRlcmFjdGlvbkxvY2F0aW9uOworICAgIGVuY29kZXIgPDwgbWluaW11bVNj
YWxlRmFjdG9yOworICAgIGVuY29kZXIgPDwgbWF4aW11bVNjYWxlRmFjdG9yOworICAgIGVuY29k
ZXIgPDwgbWF4aW11bVNjYWxlRmFjdG9ySWdub3JpbmdBbHdheXNTY2FsYWJsZTsKKyAgICBlbmNv
ZGVyIDw8IG5vZGVGb250U2l6ZTsKKyAgICBlbmNvZGVyIDw8IGhhc05leHROb2RlOworICAgIGVu
Y29kZXIgPDwgbmV4dE5vZGVSZWN0OworICAgIGVuY29kZXIgPDwgaGFzUHJldmlvdXNOb2RlOwor
ICAgIGVuY29kZXIgPDwgcHJldmlvdXNOb2RlUmVjdDsKKyAgICBlbmNvZGVyIDw8IGlzQXV0b2Nv
cnJlY3Q7CisgICAgZW5jb2RlciA8PCBpc1JUTDsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0oYXV0
b2NhcGl0YWxpemVUeXBlKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0oZWxlbWVudFR5cGUpOwor
ICAgIGVuY29kZXIuZW5jb2RlRW51bShpbnB1dE1vZGUpOworICAgIGVuY29kZXIgPDwgZm9ybUFj
dGlvbjsKKyAgICBlbmNvZGVyIDw8IHNlbGVjdE9wdGlvbnM7CisgICAgZW5jb2RlciA8PCBzZWxl
Y3RlZEluZGV4OworICAgIGVuY29kZXIgPDwgaXNNdWx0aVNlbGVjdDsKKyAgICBlbmNvZGVyIDw8
IGlzUmVhZE9ubHk7CisgICAgZW5jb2RlciA8PCBhbGxvd3NVc2VyU2NhbGluZzsKKyAgICBlbmNv
ZGVyIDw8IGFsbG93c1VzZXJTY2FsaW5nSWdub3JpbmdBbHdheXNTY2FsYWJsZTsKKyAgICBlbmNv
ZGVyIDw8IGluc2lkZUZpeGVkUG9zaXRpb247CisgICAgZW5jb2RlciA8PCB2YWx1ZTsKKyAgICBl
bmNvZGVyIDw8IHZhbHVlQXNOdW1iZXI7CisgICAgZW5jb2RlciA8PCB0aXRsZTsKKyAgICBlbmNv
ZGVyIDw8IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKKyAgICBlbmNvZGVyIDw8
IGlzQXV0b2ZpbGxhYmxlVXNlcm5hbWVGaWVsZDsKKyAgICBlbmNvZGVyIDw8IGVsZW1lbnRJc1Ry
YW5zcGFyZW50OworICAgIGVuY29kZXIgPDwgcmVwcmVzZW50aW5nUGFnZVVSTDsKKyAgICBlbmNv
ZGVyLmVuY29kZUVudW0oYXV0b2ZpbGxGaWVsZE5hbWUpOworICAgIGVuY29kZXIgPDwgcGxhY2Vo
b2xkZXI7CisgICAgZW5jb2RlciA8PCBsYWJlbDsKKyAgICBlbmNvZGVyIDw8IGFyaWFMYWJlbDsK
KyAgICBlbmNvZGVyIDw8IGVtYmVkZGVkVmlld0lEOworICAgIGVuY29kZXIgPDwgZm9jdXNlZEVs
ZW1lbnRJZGVudGlmaWVyOworI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorICAgIGVuY29k
ZXIgPDwgaGFzU3VnZ2VzdGlvbnM7CisjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCisgICAg
ZW5jb2RlciA8PCBzdWdnZXN0ZWRDb2xvcnM7CisjZW5kaWYKKyNlbmRpZgorfQorCitib29sIEZv
Y3VzZWRFbGVtZW50SW5mb3JtYXRpb246OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIEZv
Y3VzZWRFbGVtZW50SW5mb3JtYXRpb24mIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5lbGVtZW50UmVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmVsZW1lbnRJbnRlcmFjdGlvbkxvY2F0aW9uKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubWlu
aW11bVNjYWxlRmFjdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQubWF4aW11bVNjYWxlRmFjdG9yKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1heGltdW1TY2FsZUZh
Y3Rvcklnbm9yaW5nQWx3YXlzU2NhbGFibGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ub2RlRm9udFNpemUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5oYXNOZXh0Tm9kZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
Lm5leHROb2RlUmVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0Lmhhc1ByZXZpb3VzTm9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnByZXZpb3VzTm9kZVJlY3QpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0F1
dG9jb3JyZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuaXNSVEwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRW51bShyZXN1bHQuYXV0b2NhcGl0YWxpemVUeXBlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmVsZW1lbnRU
eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVu
dW0ocmVzdWx0LmlucHV0TW9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmZvcm1BY3Rpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZWxlY3RPcHRpb25zKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2VsZWN0
ZWRJbmRleCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmlzTXVsdGlTZWxlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1JlYWRPbmx5KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWxsb3dzVXNlclNjYWxpbmcp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuYWxsb3dzVXNlclNjYWxpbmdJZ25vcmluZ0Fsd2F5c1NjYWxhYmxlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaW5zaWRlRml4
ZWRQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQudmFsdWVBc051bWJlcikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRpdGxlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWNjZXB0c0F1dG9m
aWxsZWRMb2dpbkNyZWRlbnRpYWxzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNBdXRvZmlsbGFibGVVc2VybmFtZUZpZWxkKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZWxl
bWVudElzVHJhbnNwYXJlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5yZXByZXNlbnRpbmdQYWdlVVJMKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmF1dG9maWxsRmll
bGROYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQucGxhY2Vob2xkZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5sYWJlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFyaWFMYWJlbCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmVtYmVkZGVkVmlld0lE
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuZm9jdXNlZEVsZW1lbnRJZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisj
aWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuaGFzU3VnZ2VzdGlvbnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zdWdnZXN0
ZWRDb2xvcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyNlbmRpZgorCisgICAg
cmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlZTQzMDYyZjE1OWY0MGY0
NTFlZWYxMGRlZmZjMWNkNjY1ZGFjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Gb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmgKQEAgLTAsMCArMSwxNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9BdXRvY2FwaXRhbGl6ZVR5cGVzLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9BdXRvZmlsbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lucHV0TW9kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gY2xh
c3MgSW5wdXRUeXBlIHsKKyAgICBOb25lLAorICAgIENvbnRlbnRFZGl0YWJsZSwKKyAgICBUZXh0
LAorICAgIFBhc3N3b3JkLAorICAgIFRleHRBcmVhLAorICAgIFNlYXJjaCwKKyAgICBFbWFpbCwK
KyAgICBVUkwsCisgICAgUGhvbmUsCisgICAgTnVtYmVyLAorICAgIE51bWJlclBhZCwKKyAgICBE
YXRlLAorICAgIERhdGVUaW1lLAorICAgIERhdGVUaW1lTG9jYWwsCisgICAgTW9udGgsCisgICAg
V2VlaywKKyAgICBUaW1lLAorICAgIFNlbGVjdCwKKyAgICBEcmF3aW5nLAorI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX0NPTE9SKQorICAgIENvbG9yCisjZW5kaWYKK307CisKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorc3RydWN0IE9wdGlvbkl0ZW0geworICAgIE9wdGlvbkl0ZW0oKSB7IH0KKwor
ICAgIE9wdGlvbkl0ZW0oY29uc3QgT3B0aW9uSXRlbSYgaXRlbSkKKyAgICAgICAgOiB0ZXh0KGl0
ZW0udGV4dCkKKyAgICAgICAgLCBpc0dyb3VwKGl0ZW0uaXNHcm91cCkKKyAgICAgICAgLCBpc1Nl
bGVjdGVkKGl0ZW0uaXNTZWxlY3RlZCkKKyAgICAgICAgLCBkaXNhYmxlZChpdGVtLmRpc2FibGVk
KQorICAgICAgICAsIHBhcmVudEdyb3VwSUQoaXRlbS5wYXJlbnRHcm91cElEKQorICAgIHsKKyAg
ICB9CisKKyAgICBPcHRpb25JdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBpc0dyb3VwLCBp
bnQgcGFyZW50SUQsIGJvb2wgc2VsZWN0ZWQsIGJvb2wgZGlzYWJsZWQpCisgICAgICAgIDogdGV4
dCh0ZXh0KQorICAgICAgICAsIGlzR3JvdXAoaXNHcm91cCkKKyAgICAgICAgLCBpc1NlbGVjdGVk
KHNlbGVjdGVkKQorICAgICAgICAsIGRpc2FibGVkKGRpc2FibGVkKQorICAgICAgICAsIHBhcmVu
dEdyb3VwSUQocGFyZW50SUQpCisgICAgeworICAgIH0KKyAgICBTdHJpbmcgdGV4dDsKKyAgICBi
b29sIGlzR3JvdXAgeyBmYWxzZSB9OworICAgIGJvb2wgaXNTZWxlY3RlZCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBkaXNhYmxlZCB7IGZhbHNlIH07CisgICAgaW50IHBhcmVudEdyb3VwSUQgeyAwIH07
CisKKyAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgT3B0
aW9uYWw8T3B0aW9uSXRlbT4gZGVjb2RlKElQQzo6RGVjb2RlciYpOworfTsKKwordXNpbmcgRm9j
dXNlZEVsZW1lbnRJZGVudGlmaWVyID0gdWludDY0X3Q7CisKK3N0cnVjdCBGb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uIHsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRSZWN0OworICAgIFdl
YkNvcmU6OkludFBvaW50IGVsZW1lbnRJbnRlcmFjdGlvbkxvY2F0aW9uOworICAgIGRvdWJsZSBt
aW5pbXVtU2NhbGVGYWN0b3IgeyAtSU5GSU5JVFkgfTsKKyAgICBkb3VibGUgbWF4aW11bVNjYWxl
RmFjdG9yIHsgSU5GSU5JVFkgfTsKKyAgICBkb3VibGUgbWF4aW11bVNjYWxlRmFjdG9ySWdub3Jp
bmdBbHdheXNTY2FsYWJsZSB7IElORklOSVRZIH07CisgICAgZG91YmxlIG5vZGVGb250U2l6ZSB7
IDAgfTsKKyAgICBib29sIGhhc05leHROb2RlIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IG5leHROb2RlUmVjdDsKKyAgICBib29sIGhhc1ByZXZpb3VzTm9kZSB7IGZhbHNlIH07Cisg
ICAgV2ViQ29yZTo6SW50UmVjdCBwcmV2aW91c05vZGVSZWN0OworICAgIGJvb2wgaXNBdXRvY29y
cmVjdCB7IGZhbHNlIH07CisgICAgYm9vbCBpc1JUTCB7IGZhbHNlIH07CisgICAgYm9vbCBpc011
bHRpU2VsZWN0IHsgZmFsc2UgfTsKKyAgICBib29sIGlzUmVhZE9ubHkge2ZhbHNlIH07CisgICAg
Ym9vbCBhbGxvd3NVc2VyU2NhbGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBhbGxvd3NVc2VyU2Nh
bGluZ0lnbm9yaW5nQWx3YXlzU2NhbGFibGUgeyBmYWxzZSB9OworICAgIGJvb2wgaW5zaWRlRml4
ZWRQb3NpdGlvbiB7IGZhbHNlIH07CisgICAgQXV0b2NhcGl0YWxpemVUeXBlIGF1dG9jYXBpdGFs
aXplVHlwZSB7IEF1dG9jYXBpdGFsaXplVHlwZURlZmF1bHQgfTsKKyAgICBJbnB1dFR5cGUgZWxl
bWVudFR5cGUgeyBJbnB1dFR5cGU6Ok5vbmUgfTsKKyAgICBXZWJDb3JlOjpJbnB1dE1vZGUgaW5w
dXRNb2RlIHsgV2ViQ29yZTo6SW5wdXRNb2RlOjpVbnNwZWNpZmllZCB9OworICAgIFN0cmluZyBm
b3JtQWN0aW9uOworICAgIFZlY3RvcjxPcHRpb25JdGVtPiBzZWxlY3RPcHRpb25zOworICAgIGlu
dCBzZWxlY3RlZEluZGV4IHsgLTEgfTsKKyAgICBTdHJpbmcgdmFsdWU7CisgICAgZG91YmxlIHZh
bHVlQXNOdW1iZXIgeyAwIH07CisgICAgU3RyaW5nIHRpdGxlOworICAgIGJvb2wgYWNjZXB0c0F1
dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIHsgZmFsc2UgfTsKKyAgICBib29sIGlzQXV0b2ZpbGxh
YmxlVXNlcm5hbWVGaWVsZCB7IGZhbHNlIH07CisgICAgYm9vbCBlbGVtZW50SXNUcmFuc3BhcmVu
dCB7IGZhbHNlIH07CisgICAgVVJMIHJlcHJlc2VudGluZ1BhZ2VVUkw7CisgICAgV2ViQ29yZTo6
QXV0b2ZpbGxGaWVsZE5hbWUgYXV0b2ZpbGxGaWVsZE5hbWUgeyBXZWJDb3JlOjpBdXRvZmlsbEZp
ZWxkTmFtZTo6Tm9uZSB9OworICAgIFN0cmluZyBwbGFjZWhvbGRlcjsKKyAgICBTdHJpbmcgbGFi
ZWw7CisgICAgU3RyaW5nIGFyaWFMYWJlbDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpF
bWJlZGRlZFZpZXdJRCBlbWJlZGRlZFZpZXdJRDsKKyNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVO
VCkKKyAgICBib29sIGhhc1N1Z2dlc3Rpb25zIHsgZmFsc2UgfTsKKyNpZiBFTkFCTEUoSU5QVVRf
VFlQRV9DT0xPUikKKyAgICBWZWN0b3I8V2ViQ29yZTo6Q29sb3I+IHN1Z2dlc3RlZENvbG9yczsK
KyNlbmRpZgorI2VuZGlmCisKKyAgICBGb2N1c2VkRWxlbWVudElkZW50aWZpZXIgZm9jdXNlZEVs
ZW1lbnRJZGVudGlmaWVyIHsgMCB9OworCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikg
Y29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6RGVjb2RlciYsIEZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24mKTsKK307CisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaApp
bmRleCA0YTMwYWJmZTJlYTExZmMyMDAwYTgxOWZkZGYxMmVkNDIzZDA4NTUxLi43MWJjZTgwM2M4
ZjRkMmMyOWQxMzVkYjc5ZTdkOWFhZjE1ZDQ1YjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaApA
QCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHN0cnVjdCBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbiB7CiAgICAgSW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3Qg
cmVxdWVzdDsKIAotICAgIGJvb2wgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSB7IGZhbHNl
IH07CisgICAgYm9vbCBub2RlQXRQb3NpdGlvbklzRm9jdXNlZEVsZW1lbnQgeyBmYWxzZSB9Owog
I2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgIGJvb2wgaGFzU2VsZWN0aW9uQXRQb3Np
dGlvbiB7IGZhbHNlIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQppbmRleCBmZDcw
MzEwNDg2OTQxMWIxMjAzZjNjODZlYTI2ZWU1NmM1NTYyNTQxLi5hY2RhODE5MTViY2Q4MGFlZDky
ZjM5ODZhYTAxYzI3MzEwMDgyOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9p
b3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0KKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tCkBAIC00Myw3
ICs0Myw3IEBAIHZvaWQgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246OmVuY29kZShJ
UEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCByZXF1ZXN0Owog
Ci0gICAgZW5jb2RlciA8PCBub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlOworICAgIGVuY29k
ZXIgPDwgbm9kZUF0UG9zaXRpb25Jc0ZvY3VzZWRFbGVtZW50OwogI2lmIEVOQUJMRShEQVRBX0lO
VEVSQUNUSU9OKQogICAgIGVuY29kZXIgPDwgaGFzU2VsZWN0aW9uQXRQb3NpdGlvbjsKICNlbmRp
ZgpAQCAtODksNyArODksNyBAQCBib29sIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBJbnRlcmFjdGlvbgogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnJlcXVlc3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2Rl
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ub2RlQXRQb3NpdGlvbklzRm9jdXNl
ZEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoREFUQV9JTlRF
UkFDVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCBlZDY1YjhmYTczOWU4ZTE5NjBiM2Rj
ZTZiODY0ZTUxNDVlMmY5MTgzLi45ZDdjYzVjYzZjNGU3MWM0YmM2M2NkMWZiZjM0MjRkZjQ3YTNm
YzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC0xMTAsNyArMTEwLDcgQEAgU2hhcmVkL0FQ
SS9Db2NvYS9XS1JlbW90ZU9iamVjdENvZGVyLm1tCiAKIFNoYXJlZC9BUElXZWJBcmNoaXZlLm1t
CiBTaGFyZWQvQVBJV2ViQXJjaGl2ZVJlc291cmNlLm1tCi1TaGFyZWQvQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uY3BwCitTaGFyZWQvRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5jcHAKIFNoYXJl
ZC9WaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmNwcAogU2hhcmVkL1dlYlNRTGl0ZURhdGFi
YXNlVHJhY2tlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KaW5kZXggM2QzYzFlZGQ3Njc3NWVjOWNhOTFlOThkMDAxYzdjM2EwMDgxYjIz
MS4uYjJkMzNjNDRmNDE5ODEyOGNlYzZmYTcwODM2YzVmNWI5MmM5MjFiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0zMTUxLDcgKzMx
NTEsNyBAQCAtICh2b2lkKV9rZXlib2FyZENoYW5nZWRXaXRoSW5mbzooTlNEaWN0aW9uYXJ5ICop
a2V5Ym9hcmRJbmZvIGFkanVzdFNjcm9sbFZpZXc6KAogCiAtIChCT09MKV9zaG91bGRVcGRhdGVL
ZXlib2FyZFdpdGhJbmZvOihOU0RpY3Rpb25hcnkgKilrZXlib2FyZEluZm8KIHsKLSAgICBpZiAo
W19jb250ZW50VmlldyBpc0Fzc2lzdGluZ05vZGVdKQorICAgIGlmIChbX2NvbnRlbnRWaWV3IGlz
Rm9jdXNpbmdFbGVtZW50XSkKICAgICAgICAgcmV0dXJuIFlFUzsKIAogICAgIE5TTnVtYmVyICpp
c0xvY2FsS2V5Ym9hcmQgPSBba2V5Ym9hcmRJbmZvIHZhbHVlRm9yS2V5OlVJS2V5Ym9hcmRJc0xv
Y2FsVXNlckluZm9LZXldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFn
ZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IGJl
ZDZkMThmOTkzOGI0MTVjZGZlNzFmZTRhMTUxYTI3MmE3YTc5M2IuLmM3MjJiN2Q3MDY2ODEyYzc0
OWQ3MjdjYjdmOGRkNGI5NTIwNGRlNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50
LmgKQEAgLTEyMyw3ICsxMjMsNyBAQCBjbGFzcyBXZWJQb3B1cE1lbnVQcm94eTsKIAogZW51bSBj
bGFzcyBDb250aW51ZVVuc2FmZUxvYWQgOiBib29sIHsgTm8sIFllcyB9OwogCi1zdHJ1Y3QgQXNz
aXN0ZWROb2RlSW5mb3JtYXRpb247CitzdHJ1Y3QgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbjsK
IHN0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjsKIHN0cnVjdCBXZWJIaXRU
ZXN0UmVzdWx0RGF0YTsKIApAQCAtMzYyLDEwICszNjIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCByZXN0b3JlUGFnZVN0YXRlKE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+IHNj
cm9sbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxPcmlnaW4sIGNv
bnN0IFdlYkNvcmU6OkZsb2F0Qm94RXh0ZW50JiBvYnNjdXJlZEluc2V0c09uU2F2ZSwgZG91Ymxl
IHNjYWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVQYWdlQ2VudGVyQW5kU2NhbGUo
T3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRQb2ludD4gY2VudGVyLCBkb3VibGUgc2NhbGUpID0gMDsK
IAotICAgIHZpcnR1YWwgdm9pZCBzdGFydEFzc2lzdGluZ05vZGUoY29uc3QgQXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24mLCBib29sIHVzZXJJc0ludGVyYWN0aW5nLCBib29sIGJsdXJQcmV2aW91c05v
ZGUsIGJvb2wgY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcEFzc2lzdGluZ05vZGUoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGVsZW1lbnREaWRGb2N1cyhjb25zdCBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJiwg
Ym9vbCB1c2VySXNJbnRlcmFjdGluZywgYm9vbCBibHVyUHJldmlvdXNOb2RlLCBib29sIGNoYW5n
aW5nQWN0aXZpdHlTdGF0ZSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGVsZW1lbnREaWRCbHVyKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
RWRpdG9yU3RhdGVVcGRhdGVBZnRlckZvY3VzKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0Fz
c2lzdGluZ05vZGUoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRm9jdXNpbmdFbGVtZW50KCkg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiwgYm9vbCBpc0NoYXJFdmVudCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBw
b3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlKGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnkoUmVm
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggNGIwMTI1MmViYjhmZTkyN2M1YWFmNGM1NzBkYThlNDU1Zjhl
Y2I2ZC4uZjY2ZjczZGZiMzExZTc3YjVjYjE2OGU1YTJjMWYxY2I0ODQ5ZmM3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC02NDgzLDcgKzY0ODMsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZChQcm9jZXNzVGVy
bWluYXRpb25SZWFzb24gdGVybWluYQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBt
X3dhaXRpbmdGb3JQb3N0TGF5b3V0RWRpdG9yU3RhdGVVcGRhdGVBZnRlckZvY3VzaW5nRWxlbWVu
dCA9IGZhbHNlOwotICAgIG1fZGVmZXJyZWROb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyA9IG51bGxw
dHI7CisgICAgbV9kZWZlcnJlZEVsZW1lbnREaWRGb2N1c0FyZ3VtZW50cyA9IG51bGxwdHI7CiAg
ICAgbV9hY3Rpdml0eVRva2VuID0gbnVsbHB0cjsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGNhNTEwNDg4NWE0NmNlZjMwMWVlNmFiMWYzNmJlYzgx
ZTNkZTYyY2IuLjE1NmYxNDRhYTQxYmNmOTBiNThlMmZmZDNmMjY5OGNkOWM0NjQ5MTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIkFzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiQXV0b0NvcnJlY3Rpb25DYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRleHREYXRhLmgi
CkBAIC0zNCw2ICszMyw3IEBACiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCIKICNp
bmNsdWRlICJFZGl0aW5nUmFuZ2UuaCIKICNpbmNsdWRlICJFZGl0b3JTdGF0ZS5oIgorI2luY2x1
ZGUgIkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiSGlkZGVuUGFnZVRocm90
dGxpbmdBdXRvSW5jcmVhc2VzQ291bnRlci5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQu
aCIKQEAgLTMxMSwxMyArMzExLDEzIEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFN0
cmluZyYsIGRvdWJsZSwgYm9vbD4gRm9udEF0U2VsZWN0aW9uQ2FsbGJhY2s7CiB0eXBlZGVmIEdl
bmVyaWNDYWxsYmFjazxjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJf
dCwgdWludDMyX3Q+IEdlc3R1cmVDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90PiBUb3VjaGVzQ2FsbGJh
Y2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0
aW9uUmVjdD4mPiBTZWxlY3Rpb25SZWN0c0NhbGxiYWNrOwotdHlwZWRlZiBHZW5lcmljQ2FsbGJh
Y2s8Y29uc3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mPiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bkNhbGxiYWNrOwotc3RydWN0IE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzIHsKLSAgICBBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbiBtX25vZGVJbmZvcm1hdGlvbjsKLSAgICBib29sIG1fdXNlcklzSW50
ZXJhY3Rpbmc7Ci0gICAgYm9vbCBtX2JsdXJQcmV2aW91c05vZGU7Ci0gICAgYm9vbCBtX2NoYW5n
aW5nQWN0aXZpdHlTdGF0ZTsKLSAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IG1fdXNlckRhdGE7Cit0
eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJj4g
Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbkNhbGxiYWNrOworc3RydWN0IEVsZW1lbnREaWRGb2N1
c0FyZ3VtZW50cyB7CisgICAgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiBpbmZvcm1hdGlvbjsK
KyAgICBib29sIHVzZXJJc0ludGVyYWN0aW5nOworICAgIGJvb2wgYmx1clByZXZpb3VzTm9kZTsK
KyAgICBib29sIGNoYW5naW5nQWN0aXZpdHlTdGF0ZTsKKyAgICBSZWZQdHI8QVBJOjpPYmplY3Q+
IHVzZXJEYXRhOwogfTsKIAogdXNpbmcgRHJhd1RvUERGQ2FsbGJhY2sgPSBHZW5lcmljQ2FsbGJh
Y2s8Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJj47CkBAIC02MTUsMTkgKzYxNSwxOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRPdmVycmlkZVZpZXdwb3J0QXJndW1lbnRzKGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzPiYpOwogICAgIHZvaWQgd2lsbENvbW1pdExheWVy
VHJlZSh1aW50NjRfdCB0cmFuc2FjdGlvbklEKTsKIAotICAgIHZvaWQgc2VsZWN0V2l0aEdlc3R1
cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgdWlu
dDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0
aW5nV2l0aEFzc2lzdGVkTm9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJy
b3IpPiYmKTsKKyAgICB2b2lkIHNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50
MzJfdCBnZXN0dXJlU3RhdGUsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwg
V1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVp
bnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgdXBk
YXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIHVpbnQzMl90
IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3Ip
PiYmKTsKICAgICB2b2lkIHNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50IGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNl
OjpFcnJvcik+JiYpOwogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFu
dWxhcml0eSk7CiAgICAgdm9pZCBzZWxlY3RXb3JkQmFja3dhcmQoKTsKICAgICB2b2lkIG1vdmVT
ZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxs
YmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAgdm9pZCBzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5
QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5
LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQg
KENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKLSAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRQb2lu
dChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVk
Tm9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAg
dm9pZCBzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIFdlYkNvcmU6OlNlbGVjdGlvbkRp
cmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV1RGOjpGdW5jdGlv
bjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCBzZWxlY3RUZXh0V2l0
aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgV2ViQ29yZTo6VGV4
dEdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdURjo6
RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCBzZWxlY3RQ
b3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIGJvb2wgaXNJbnRlcmFjdGlu
Z1dpdGhGb2N1c2VkRWxlbWVudCwgV1RGOjpGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJy
b3IpPiYmKTsKKyAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24o
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgV2ViQ29y
ZTo6U2VsZWN0aW9uRGlyZWN0aW9uLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1l
bnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9p
ZCBtb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5LCBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248dm9pZChD
YWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCBiZWdpblNlbGVjdGlvbkluRGlyZWN0
aW9uKFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiwgV1RGOjpGdW5jdGlvbjx2b2lkICh1aW50
NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwotICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9u
V2l0aEV4dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBib29sIGlzSW50ZXJhY3Rp
bmdXaXRoQXNzaXN0ZWROb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKHVpbnQ2NF90LCBDYWxsYmFj
a0Jhc2U6OkVycm9yKT4mJik7Ci0gICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9p
bnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBXVEY6OkZ1bmN0aW9u
PHZvaWQodWludDY0X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKyAgICB2b2lkIHVwZGF0
ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0
X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKyAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbldp
dGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBXZWJDb3Jl
OjpUZXh0R3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwg
V1RGOjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAg
ICAgdm9pZCByZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1
dG9jb3JyZWN0aW9uLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpG
bG9hdFJlY3Q+JiwgY29uc3QgU3RyaW5nJiwgZG91YmxlLCB1aW50NjRfdCwgQ2FsbGJhY2tCYXNl
OjpFcnJvcik+JiYpOwogICAgIHZvaWQgYXBwbHlBdXRvY29ycmVjdGlvbihjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0LCBXVEY6OkZ1bmN0aW9uPHZv
aWQgKGNvbnN0IFN0cmluZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAgICBib29sIGFw
cGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcm
IG9yaWdpbmFsVGV4dCk7CkBAIC02NDIsMTAgKzY0MiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
dG9wSW50ZXJhY3Rpb24oKTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMy
X3QgYWN0aW9uKTsKICAgICB2b2lkIHNhdmVJbWFnZVRvTGlicmFyeShjb25zdCBTaGFyZWRNZW1v
cnk6OkhhbmRsZSYgaW1hZ2VIYW5kbGUsIHVpbnQ2NF90IGltYWdlU2l6ZSk7Ci0gICAgdm9pZCBm
b2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQsIFdURjo6RnVuY3Rpb248dm9pZCAo
Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgPSBbXSAoYXV0bykgeyB9KTsKLSAgICB2b2lkIHNldEFz
c2lzdGVkTm9kZVZhbHVlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0QXNzaXN0ZWROb2Rl
VmFsdWVBc051bWJlcihkb3VibGUpOwotICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJ
bmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uID0gZmFsc2Up
OworICAgIHZvaWQgZm9jdXNOZXh0Rm9jdXNlZEVsZW1lbnQoYm9vbCBpc0ZvcndhcmQsIFdURjo6
RnVuY3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgPSBbXSAoYXV0bykgeyB9KTsK
KyAgICB2b2lkIHNldEZvY3VzZWRFbGVtZW50VmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBzZXRGb2N1c2VkRWxlbWVudFZhbHVlQXNOdW1iZXIoZG91YmxlKTsKKyAgICB2b2lkIHNldEZv
Y3VzZWRFbGVtZW50U2VsZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011bHRp
cGxlU2VsZWN0aW9uID0gZmFsc2UpOwogICAgIHZvaWQgYXBwbGljYXRpb25EaWRFbnRlckJhY2tn
cm91bmQoKTsKICAgICB2b2lkIGFwcGxpY2F0aW9uRGlkRmluaXNoU25hcHNob3R0aW5nQWZ0ZXJF
bnRlcmluZ0JhY2tncm91bmQoKTsKICAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdy
b3VuZCgpOwpAQCAtMTE1Miw3ICsxMTUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5zcGVjdG9y
Tm9kZVNlYXJjaE1vdmVkVG9Qb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAg
ICAgdm9pZCBpbnNwZWN0b3JOb2RlU2VhcmNoRW5kZWRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmKTsKIAotICAgIHZvaWQgYmx1ckFzc2lzdGVkTm9kZSgpOworICAgIHZvaWQg
Ymx1ckZvY3VzZWRFbGVtZW50KCk7CiAjZW5kaWYKIAogICAgIHZvaWQgcG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIEFQSTo6T2JqZWN0KiBtZXNz
YWdlQm9keSk7CkBAIC0xMjAxLDcgKzEyMDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWNvcmRB
dXRvbWF0aWNOYXZpZ2F0aW9uU25hcHNob3QoKTsKICAgICB2b2lkIHN1cHByZXNzTmV4dEF1dG9t
YXRpY05hdmlnYXRpb25TbmFwc2hvdCgpIHsgbV9zaG91bGRTdXBwcmVzc05leHRBdXRvbWF0aWNO
YXZpZ2F0aW9uU25hcHNob3QgPSB0cnVlOyB9CiAgICAgdm9pZCByZWNvcmROYXZpZ2F0aW9uU25h
cHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpOwotICAgIHZvaWQgcmVxdWVzdEFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uKEZ1bmN0aW9uPHZvaWQoY29uc3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCByZXF1ZXN0Rm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbihGdW5jdGlvbjx2b2lkKGNvbnN0IEZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb24mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBSZWZQdHI8Vmlld1NuYXBzaG90PiB0YWtlVmlld1NuYXBzaG90KCk7CkBAIC0xNzczLDgg
KzE3NzMsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRHZXRUYXBIaWdobGlnaHRHZW9tZXRy
aWVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yLCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRRdWFkPiYgZ2VvbWV0cmllcywgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdG9wUmlnaHRS
YWRpdXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKTsKIAotICAgIHZvaWQgc3RhcnRBc3Np
c3RpbmdOb2RlKGNvbnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiwgYm9vbCB1c2VySXNJbnRl
cmFjdGluZywgYm9vbCBibHVyUHJldmlvdXNOb2RlLCBib29sIGNoYW5naW5nQWN0aXZpdHlTdGF0
ZSwgY29uc3QgVXNlckRhdGEmKTsKLSAgICB2b2lkIHN0b3BBc3Npc3RpbmdOb2RlKCk7CisgICAg
dm9pZCBlbGVtZW50RGlkRm9jdXMoY29uc3QgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYsIGJv
b2wgdXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwgYm9vbCBjaGFuZ2lu
Z0FjdGl2aXR5U3RhdGUsIGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBlbGVtZW50RGlkQmx1
cigpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUVkaXRvclN0YXRlVXBkYXRlQWZ0ZXJGb2N1cygpOwog
CiAgICAgdm9pZCBzaG93SW5zcGVjdG9ySGlnaGxpZ2h0KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdo
dCYpOwpAQCAtMTc4Miw3ICsxNzgyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZW5hYmxlSW5z
cGVjdG9yTm9kZVNlYXJjaCgpOwogICAgIHZvaWQgZGlzYWJsZUluc3BlY3Rvck5vZGVTZWFyY2go
KTsKLSAgICB2b2lkIGFzc2lzdGVkTm9kZUluZm9ybWF0aW9uQ2FsbGJhY2soY29uc3QgQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24mLCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIGZvY3VzZWRFbGVtZW50
SW5mb3JtYXRpb25DYWxsYmFjayhjb25zdCBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJiwgQ2Fs
bGJhY2tJRCk7CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogI2lmIEVOQUJMRShE
QVRBX0RFVEVDVElPTikKQEAgLTIyNjcsNyArMjI2Nyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5vZGVBc3Npc3Rh
bmNlQXJndW1lbnRzPiBtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHM7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEVsZW1lbnREaWRGb2N1c0FyZ3VtZW50cz4gbV9kZWZlcnJlZEVsZW1lbnRE
aWRGb2N1c0FyZ3VtZW50czsKICAgICBib29sIG1fd2FpdGluZ0ZvclBvc3RMYXlvdXRFZGl0b3JT
dGF0ZVVwZGF0ZUFmdGVyRm9jdXNpbmdFbGVtZW50IHsgZmFsc2UgfTsKICAgICBib29sIG1fZm9y
Y2VBbHdheXNVc2VyU2NhbGFibGUgeyBmYWxzZSB9OwogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBt
X3ZpZXdwb3J0Q29uZmlndXJhdGlvblZpZXdMYXlvdXRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGIxMWZjYjFkNmE5Njhh
NWNjZTcyYTRkODRhZjlkMDY2NThhMDE3ZTMuLjFlNDUxOGY3MWM0MWZkMWU2Mjg4ODZmYzAzZTM1
MTJmMDE4YWExYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4KQEAgLTQwMywxMyArNDAzLDEzIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQ
cm94eSB7CiAgICAgUmVzdG9yZVBhZ2VDZW50ZXJBbmRTY2FsZShPcHRpb25hbDxXZWJDb3JlOjpG
bG9hdFBvaW50PiB1bm9ic2N1cmVkQ2VudGVyLCBkb3VibGUgc2NhbGUpCiAgICAgRGlkR2V0VGFw
SGlnaGxpZ2h0R2VvbWV0cmllcyh1aW50NjRfdCByZXF1ZXN0SUQsIFdlYkNvcmU6OkNvbG9yIGNv
bG9yLCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRRdWFkPiBnZW9tZXRyaWVzLCBXZWJDb3JlOjpJbnRT
aXplIHRvcExlZnRSYWRpdXMsIFdlYkNvcmU6OkludFNpemUgdG9wUmlnaHRSYWRpdXMsIFdlYkNv
cmU6OkludFNpemUgYm90dG9tTGVmdFJhZGl1cywgV2ViQ29yZTo6SW50U2l6ZSBib3R0b21SaWdo
dFJhZGl1cykKIAotICAgIFN0YXJ0QXNzaXN0aW5nTm9kZShzdHJ1Y3QgV2ViS2l0OjpBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbiBpbmZvcm1hdGlvbiwgYm9vbCB1c2VySXNJbnRlcmFjdGluZywgYm9v
bCBibHVyUHJldmlvdXNOb2RlLCBib29sIGNoYW5naW5nQWN0aXZpdHlTdGF0ZSwgV2ViS2l0OjpV
c2VyRGF0YSB1c2VyRGF0YSkKLSAgICBTdG9wQXNzaXN0aW5nTm9kZSgpCisgICAgRWxlbWVudERp
ZEZvY3VzKHN0cnVjdCBXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24gaW5mb3JtYXRp
b24sIGJvb2wgdXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwgYm9vbCBj
aGFuZ2luZ0FjdGl2aXR5U3RhdGUsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCisgICAgRWxl
bWVudERpZEJsdXIoKQogICAgIFNjcm9sbGluZ05vZGVTY3JvbGxXaWxsU3RhcnRTY3JvbGwoKQog
ICAgIFNjcm9sbGluZ05vZGVTY3JvbGxEaWRFbmRTY3JvbGwoKQogICAgIFNob3dJbnNwZWN0b3JI
aWdobGlnaHQoc3RydWN0IFdlYkNvcmU6OkhpZ2hsaWdodCBoaWdobGlnaHQpCiAgICAgSGlkZUlu
c3BlY3RvckhpZ2hsaWdodCgpCi0gICAgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb25DYWxsYmFjayhz
dHJ1Y3QgV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiBpbmZvcm1hdGlvbiwgV2ViS2l0
OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbkNh
bGxiYWNrKHN0cnVjdCBXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24gaW5mb3JtYXRp
b24sIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogCiAgICAgU2hvd0luc3BlY3Rvcklu
ZGljYXRpb24oKQogICAgIEhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKaW5kZXggMTU3YTMxMDgyZjQ2
OTk3YjMyM2NjMzQ3ZjAzZTBhYTkyY2Y4NDJkZi4uYThlMWQ2YTM2MDk0YTNkOGUyMDVmM2E3ZGZk
YTQ2Nzg3ZmJiYWI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmgKQEAgLTEzOSwxMCArMTM5LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZXN0b3JlUGFnZVN0YXRlKE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRCb3hFeHRlbnQmLCBkb3VibGUp
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZVBhZ2VDZW50ZXJBbmRTY2FsZShPcHRpb25hbDxX
ZWJDb3JlOjpGbG9hdFBvaW50PiwgZG91YmxlKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc3RhcnRB
c3Npc3RpbmdOb2RlKGNvbnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiwgYm9vbCB1c2VySXNJ
bnRlcmFjdGluZywgYm9vbCBibHVyUHJldmlvdXNOb2RlLCBib29sIGNoYW5naW5nQWN0aXZpdHlT
dGF0ZSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3BBc3Np
c3RpbmdOb2RlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbGVtZW50RGlkRm9jdXMoY29uc3QgRm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYsIGJvb2wgdXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1
clByZXZpb3VzTm9kZSwgYm9vbCBjaGFuZ2luZ0FjdGl2aXR5U3RhdGUsIEFQSTo6T2JqZWN0KiB1
c2VyRGF0YSkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbGVtZW50RGlkQmx1cigpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZGlkUmVjZWl2ZUVkaXRvclN0YXRlVXBkYXRlQWZ0ZXJGb2N1cygpIG92ZXJyaWRl
OwotICAgIGJvb2wgaXNBc3Npc3RpbmdOb2RlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0ZvY3Vz
aW5nRWxlbWVudCgpIG92ZXJyaWRlOwogICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3Zl
cnJpZGU7CiAgICAgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50JiwgYm9vbCBpc0NoYXJFdmVudCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwb3NpdGlvbklu
Zm9ybWF0aW9uRGlkQ2hhbmdlKGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
Jikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVu
dEltcGxJT1MubW0KaW5kZXggYjhhNmZlN2RmZGRjMThjMWJjNDkwMTgyOWVjNTA1Yzg1MDdkNDk1
Yy4uZTkyOWUyMGRjMTZlNWJiNWY2MzU2NmFmZGQxYzY5Y2E4OWM2M2E2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtNTU1LDcg
KzU1NSw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJlc3RvcmVQYWdlQ2VudGVyQW5kU2NhbGUo
T3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRQb2ludD4gY2VuCiAgICAgW21fd2ViVmlldyBfcmVzdG9y
ZVBhZ2VTdGF0ZVRvVW5vYnNjdXJlZENlbnRlcjpjZW50ZXIgc2NhbGU6c2NhbGVdOwogfQogCi12
b2lkIFBhZ2VDbGllbnRJbXBsOjpzdGFydEFzc2lzdGluZ05vZGUoY29uc3QgQXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24mIG5vZGVJbmZvcm1hdGlvbiwgYm9vbCB1c2VySXNJbnRlcmFjdGluZywgYm9v
bCBibHVyUHJldmlvdXNOb2RlLCBib29sIGNoYW5naW5nQWN0aXZpdHlTdGF0ZSwgQVBJOjpPYmpl
Y3QqIHVzZXJEYXRhKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZWxlbWVudERpZEZvY3VzKGNvbnN0
IEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24mIG5vZGVJbmZvcm1hdGlvbiwgYm9vbCB1c2VySXNJ
bnRlcmFjdGluZywgYm9vbCBibHVyUHJldmlvdXNOb2RlLCBib29sIGNoYW5naW5nQWN0aXZpdHlT
dGF0ZSwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQogewogICAgIE1FU1NBR0VfQ0hFQ0soIXVzZXJE
YXRhIHx8IHVzZXJEYXRhLT50eXBlKCkgPT0gQVBJOjpPYmplY3Q6OlR5cGU6OkRhdGEpOwogCkBA
IC01NzAsMTcgKzU3MCwxNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzdGFydEFzc2lzdGluZ05v
ZGUoY29uc3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIG5vZGVJbmZvcgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgW21fY29udGVudFZpZXcgX3N0YXJ0QXNzaXN0aW5nTm9kZTpub2RlSW5mb3Jt
YXRpb24gdXNlcklzSW50ZXJhY3Rpbmc6dXNlcklzSW50ZXJhY3RpbmcgYmx1clByZXZpb3VzTm9k
ZTpibHVyUHJldmlvdXNOb2RlIGNoYW5naW5nQWN0aXZpdHlTdGF0ZTpjaGFuZ2luZ0FjdGl2aXR5
U3RhdGUgdXNlck9iamVjdDp1c2VyT2JqZWN0XTsKKyAgICBbbV9jb250ZW50VmlldyBfZWxlbWVu
dERpZEZvY3VzOm5vZGVJbmZvcm1hdGlvbiB1c2VySXNJbnRlcmFjdGluZzp1c2VySXNJbnRlcmFj
dGluZyBibHVyUHJldmlvdXNOb2RlOmJsdXJQcmV2aW91c05vZGUgY2hhbmdpbmdBY3Rpdml0eVN0
YXRlOmNoYW5naW5nQWN0aXZpdHlTdGF0ZSB1c2VyT2JqZWN0OnVzZXJPYmplY3RdOwogfQogCi1i
b29sIFBhZ2VDbGllbnRJbXBsOjppc0Fzc2lzdGluZ05vZGUoKQorYm9vbCBQYWdlQ2xpZW50SW1w
bDo6aXNGb2N1c2luZ0VsZW1lbnQoKQogewotICAgIHJldHVybiBbbV9jb250ZW50VmlldyBpc0Fz
c2lzdGluZ05vZGVdOworICAgIHJldHVybiBbbV9jb250ZW50VmlldyBpc0ZvY3VzaW5nRWxlbWVu
dF07CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnN0b3BBc3Npc3RpbmdOb2RlKCkKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmVsZW1lbnREaWRCbHVyKCkKIHsKLSAgICBbbV9jb250ZW50VmlldyBf
c3RvcEFzc2lzdGluZ05vZGVdOworICAgIFttX2NvbnRlbnRWaWV3IF9lbGVtZW50RGlkQmx1cl07
CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlY2VpdmVFZGl0b3JTdGF0ZVVwZGF0ZUFm
dGVyRm9jdXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3LmgK
aW5kZXggNjg3YTIwYjIxM2UzNWY2MGQxYjU2ZjJmNzM0NjBlNmNkZjJiMDdjNy4uMTFmZDhhMDQw
ZmY5OGZiMzBkMjM4ODk0NGE0NDI2MWJkZGE2YTM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlldy5oCkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIFdlYlByb2Nl
c3NQb29sOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogCiBAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlOwotQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGlzQXNzaXN0aW5nTm9kZTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgQk9PTCBpc0ZvY3VzaW5nRWxlbWVudDsKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBnZXR0ZXI9aXNTaG93aW5nSW5zcGVjdG9ySW5kaWNhdGlvbikgQk9PTCBzaG93aW5n
SW5zcGVjdG9ySW5kaWNhdGlvbjsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgZ2V0
dGVyPWlzUmVzaWduaW5nRmlyc3RSZXNwb25kZXIpIEJPT0wgcmVzaWduaW5nRmlyc3RSZXNwb25k
ZXI7CiBAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBzaXplQ2hhbmdlZFNpbmNlTGFzdFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXcubW0KaW5kZXggNmFmYmNiODJiZDE1YmUzYTZmNjI2NDZhYmM3ZmI2NzQ3NmVjNDVi
YS4uZWIyYWVkNTRkMzAwMDA4MDU3NWFjZDYzZTU2YWE4Zjg0ODIyNDRlYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KQEAgLTMwMCw3ICszMDAsNyBA
QCAtIChXS1BhZ2VSZWYpX3BhZ2VSZWYKICAgICByZXR1cm4gdG9BUEkoX3BhZ2UuZ2V0KCkpOwog
fQogCi0tIChCT09MKWlzQXNzaXN0aW5nTm9kZQorLSAoQk9PTClpc0ZvY3VzaW5nRWxlbWVudAog
ewogICAgIHJldHVybiBbc2VsZiBpc0VkaXRhYmxlXTsKIH0KQEAgLTU0NCw3ICs1NDQsNyBAQCAt
ICh2b2lkKV9kaWRSZWxhdW5jaFByb2Nlc3MKIAogLSAodm9pZClfZGlkQ29tbWl0TG9hZEZvck1h
aW5GcmFtZQogewotICAgIFtzZWxmIF9zdG9wQXNzaXN0aW5nTm9kZV07CisgICAgW3NlbGYgX2Vs
ZW1lbnREaWRCbHVyXTsKICAgICBbc2VsZiBfY2FuY2VsTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6
ZXJdOwogICAgIFtfd2ViVmlldyBfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZV07CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLmgKaW5kZXggNGQ4YzE0MDZhMzM1MDdkODVjMDhkMWY2N2I2NGY4NDYyNGVjMGIwZS4uYzFm
NjQ3NDAyZDlhYmUyNjE2ODE1MmMxZTcxMDEyODdkNjFiYjE5OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAt
MzEsOSArMzEsOSBAQAogI2ltcG9ydCAiV0tTaGFyZVNoZWV0LmgiCiAjZW5kaWYKIAotI2ltcG9y
dCAiQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaCIKICNpbXBvcnQgIkRyYWdEcm9wSW50ZXJhY3Rp
b25TdGF0ZS5oIgogI2ltcG9ydCAiRWRpdG9yU3RhdGUuaCIKKyNpbXBvcnQgIkZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uaCIKICNpbXBvcnQgIkdlc3R1cmVUeXBlcy5oIgogI2ltcG9ydCAiSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCkBA
IC0yNjEsNyArMjYxLDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKIAogICAgIFdl
YktpdDo6V0tBdXRvQ29ycmVjdGlvbkRhdGEgX2F1dG9jb3JyZWN0aW9uRGF0YTsKICAgICBXZWJL
aXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIF9wb3NpdGlvbkluZm9ybWF0aW9u
OwotICAgIFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gX2Fzc2lzdGVkTm9kZUluZm9y
bWF0aW9uOworICAgIFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiBfZm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbjsKICAgICBSZXRhaW5QdHI8TlNPYmplY3Q8V0tGb3JtUGVyaXBoZXJh
bD4+IF9pbnB1dFBlcmlwaGVyYWw7CiAgICAgUmV0YWluUHRyPFVJRXZlbnQ+IF91aUV2ZW50QmVp
bmdSZXNlbnQ7CiAgICAgQmxvY2tQdHI8dm9pZCg6OldlYkV2ZW50ICosIEJPT0wpPiBfa2V5V2Vi
RXZlbnRIYW5kbGVyOwpAQCAtMzUzLDcgKzM1Myw3IEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9u
RGF0YSB7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgc2hvdWxkSGlkZVNl
bGVjdGlvbldoZW5TY3JvbGxpbmc7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGNv
bnN0IFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mIHBvc2l0aW9uSW5m
b3JtYXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGNvbnN0IFdlYktpdDo6
V0tBdXRvQ29ycmVjdGlvbkRhdGEmIGF1dG9jb3JyZWN0aW9uRGF0YTsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgY29uc3QgV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYg
YXNzaXN0ZWROb2RlSW5mb3JtYXRpb247CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IGNvbnN0IFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYgZm9jdXNlZEVsZW1lbnRJ
bmZvcm1hdGlvbjsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlXZWJGb3JtQWNj
ZXNzb3J5ICpmb3JtQWNjZXNzb3J5VmlldzsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgVUlUZXh0SW5wdXRBc3Npc3RhbnRJdGVtICppbnB1dEFzc2lzdGFudEl0ZW1Gb3JXZWJWaWV3
OwogCkBAIC0zOTMsOCArMzkzLDggQEAgRk9SX0VBQ0hfUFJJVkFURV9XS0NPTlRFTlRWSUVXX0FD
VElPTihERUNMQVJFX1dLQ09OVEVOVFZJRVdfQUNUSU9OX0ZPUl9XRUJfVklFVykKIAogLSAoQk9P
TClfbWF5RGlzYWJsZURvdWJsZVRhcEdlc3R1cmVzRHVyaW5nU2luZ2xlVGFwOwogLSAodm9pZClf
ZGlzYWJsZURvdWJsZVRhcEdlc3R1cmVzRHVyaW5nVGFwSWZOZWNlc3Nhcnk6KHVpbnQ2NF90KXJl
cXVlc3RJRDsKLS0gKHZvaWQpX3N0YXJ0QXNzaXN0aW5nTm9kZTooY29uc3QgV2ViS2l0OjpBc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbiYpaW5mb3JtYXRpb24gdXNlcklzSW50ZXJhY3Rpbmc6KEJPT0wp
dXNlcklzSW50ZXJhY3RpbmcgYmx1clByZXZpb3VzTm9kZTooQk9PTClibHVyUHJldmlvdXNOb2Rl
IGNoYW5naW5nQWN0aXZpdHlTdGF0ZTooQk9PTCljaGFuZ2luZ0FjdGl2aXR5U3RhdGUgdXNlck9i
amVjdDooTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPiAqKXVzZXJPYmplY3Q7Ci0tICh2b2lkKV9z
dG9wQXNzaXN0aW5nTm9kZTsKKy0gKHZvaWQpX2VsZW1lbnREaWRGb2N1czooY29uc3QgV2ViS2l0
OjpGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJilpbmZvcm1hdGlvbiB1c2VySXNJbnRlcmFjdGlu
ZzooQk9PTCl1c2VySXNJbnRlcmFjdGluZyBibHVyUHJldmlvdXNOb2RlOihCT09MKWJsdXJQcmV2
aW91c05vZGUgY2hhbmdpbmdBY3Rpdml0eVN0YXRlOihCT09MKWNoYW5naW5nQWN0aXZpdHlTdGF0
ZSB1c2VyT2JqZWN0OihOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+ICopdXNlck9iamVjdDsKKy0g
KHZvaWQpX2VsZW1lbnREaWRCbHVyOwogLSAodm9pZClfZGlkUmVjZWl2ZUVkaXRvclN0YXRlVXBk
YXRlQWZ0ZXJGb2N1czsKIC0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQ7CiAtICh2b2lkKV91cGRh
dGVDaGFuZ2VkU2VsZWN0aW9uOwpAQCAtNDExLDcgKzQxMSw3IEBAIEZPUl9FQUNIX1BSSVZBVEVf
V0tDT05URU5UVklFV19BQ1RJT04oREVDTEFSRV9XS0NPTlRFTlRWSUVXX0FDVElPTl9GT1JfV0VC
X1ZJRVcpCiAtICh2b2lkKV9zaG93U2hhcmVTaGVldDooY29uc3QgV2ViQ29yZTo6U2hhcmVEYXRh
V2l0aFBhcnNlZFVSTCYpc2hhcmVEYXRhIGNvbXBsZXRpb25IYW5kbGVyOihXVEY6OkNvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpY29tcGxldGlvbkhhbmRsZXI7CiAtICh2b2lkKWFjY2Vz
c29yeURvbmU7CiAtICh2b2lkKV9kaWRIYW5kbGVLZXlFdmVudDooOjpXZWJFdmVudCAqKWV2ZW50
IGV2ZW50V2FzSGFuZGxlZDooQk9PTClldmVudFdhc0hhbmRsZWQ7Ci0tIChWZWN0b3I8V2ViS2l0
OjpPcHRpb25JdGVtPiYpIGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnM7CistIChWZWN0b3I8V2Vi
S2l0OjpPcHRpb25JdGVtPiYpIGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uczsKIC0gKHZvaWQp
X2VuYWJsZUluc3BlY3Rvck5vZGVTZWFyY2g7CiAtICh2b2lkKV9kaXNhYmxlSW5zcGVjdG9yTm9k
ZVNlYXJjaDsKIC0gKHZvaWQpX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVjdGlvbk1vdmlu
Z0ZvcndhcmQ6KEJPT0wpc2VsZWN0aW5nRm9yd2FyZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoQk9PTCBkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcikpY29tcGxldGlvbkhhbmRsZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbQppbmRleCA1ZTM5OWZkMTA1ZTNjNjUwNmEwZjViNjExNjRlYmM2MTNmYmU0ZmFhLi5m
MjY5Mzk1MDYxZjIwYTJhYjljZjI2YThlMDFiZDVlNzg1NGMxYzdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
QEAgLTI4MSw3ICsyODEsNyBAQCBAZW5kCiBAcHJvdG9jb2wgVUlTZWxlY3Rpb25JbnRlcmFjdGlv
bkFzc2lzdGFudDsKIAogQGludGVyZmFjZSBXS0ZvY3VzZWRFbGVtZW50SW5mbyA6IE5TT2JqZWN0
IDxfV0tGb2N1c2VkRWxlbWVudEluZm8+Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbjooY29uc3QgV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYp
aW5mb3JtYXRpb24gaXNVc2VySW5pdGlhdGVkOihCT09MKWlzVXNlckluaXRpYXRlZCB1c2VyT2Jq
ZWN0OihOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+ICopdXNlck9iamVjdDsKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb246KGNvbnN0IFdlYktpdDo6Rm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYpaW5mb3JtYXRpb24gaXNVc2VySW5pdGlhdGVkOihCT09M
KWlzVXNlckluaXRpYXRlZCB1c2VyT2JqZWN0OihOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+ICop
dXNlck9iamVjdDsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLRm9ybUlucHV0U2Vzc2lvbiB7
CkBAIC00NDEsNyArNDQxLDcgQEAgQGltcGxlbWVudGF0aW9uIFdLRm9jdXNlZEVsZW1lbnRJbmZv
IHsKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9sYWJlbDsKIH0KIAotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246KGNvbnN0IFdlYktpdDo6QXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24mKWluZm9ybWF0aW9uIGlzVXNlckluaXRpYXRlZDooQk9PTClpc1VzZXJJ
bml0aWF0ZWQgdXNlck9iamVjdDooTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPiAqKXVzZXJPYmpl
Y3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb246KGNv
bnN0IFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYpaW5mb3JtYXRpb24gaXNVc2Vy
SW5pdGlhdGVkOihCT09MKWlzVXNlckluaXRpYXRlZCB1c2VyT2JqZWN0OihOU09iamVjdCA8TlNT
ZWN1cmVDb2Rpbmc+ICopdXNlck9iamVjdAogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtNjA5LDkgKzYwOSw5IEBAIEBlbmQKIAogQGlt
cGxlbWVudGF0aW9uIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb24pCiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBoYXNBc3Npc3RlZE5vZGUoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiBh
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNGb2N1c2VkRWxl
bWVudChXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24gZm9jdXNlZEVsZW1lbnRJbmZv
cm1hdGlvbikKIHsKLSAgICByZXR1cm4gKGFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRU
eXBlICE9IFdlYktpdDo6SW5wdXRUeXBlOjpOb25lKTsKKyAgICByZXR1cm4gKGZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUgIT0gV2ViS2l0OjpJbnB1dFR5cGU6Ok5vbmUpOwog
fQogCiAtIChXS0Zvcm1JbnB1dFNlc3Npb24gKilfZm9ybUlucHV0U2Vzc2lvbgpAQCAtODQzLDcg
Kzg0Myw3IEBAIC0gKHZvaWQpY2xlYW51cEludGVyYWN0aW9uCiAjZW5kaWYKIAogICAgIF9pbnB1
dFZpZXdVcGRhdGVEZWZlcnJlciA9IG51bGxwdHI7Ci0gICAgX2Fzc2lzdGVkTm9kZUluZm9ybWF0
aW9uID0geyB9OworICAgIF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uID0geyB9OwogICAgIAog
ICAgIFtfa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciBpbnZhbGlkYXRlXTsKICAgICBfa2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvciA9IG5pbDsKQEAgLTEwMDgsNyArMTAwOCw3IEBAIC0gKENHUG9p
bnQpbGFzdEludGVyYWN0aW9uTG9jYXRpb24KIC0gKEJPT0wpc2hvdWxkSGlkZVNlbGVjdGlvbldo
ZW5TY3JvbGxpbmcKIHsKICAgICBpZiAoX2lzRWRpdGFibGUpCi0gICAgICAgIHJldHVybiBfYXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24uaW5zaWRlRml4ZWRQb3NpdGlvbjsKKyAgICAgICAgcmV0dXJu
IF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmluc2lkZUZpeGVkUG9zaXRpb247CiAKICAgICBh
dXRvJiBlZGl0b3JTdGF0ZSA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpOwogICAgIHJldHVybiAhZWRp
dG9yU3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEgJiYgZWRpdG9yU3RhdGUucG9zdExheW91
dERhdGEoKS5pbnNpZGVGaXhlZFBvc2l0aW9uOwpAQCAtMTA5MCw3ICsxMDkwLDcgQEAgLSAoQk9P
TClyZXNpZ25GaXJzdFJlc3BvbmRlckZvcldlYlZpZXcKICAgICBpZiAoIV93ZWJWaWV3Ll9yZXRh
aW5pbmdBY3RpdmVGb2N1c2VkU3RhdGUpIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21wbGV0
ZSB0aGUgZWRpdGluZyBvcGVyYXRpb24gYmVmb3JlIHdlIGJsdXIgdGhlIGVsZW1lbnQuCiAgICAg
ICAgIFtzZWxmIF9lbmRFZGl0aW5nXTsKLSAgICAgICAgX3BhZ2UtPmJsdXJBc3Npc3RlZE5vZGUo
KTsKKyAgICAgICAgX3BhZ2UtPmJsdXJGb2N1c2VkRWxlbWVudCgpOwogICAgIH0KIAogICAgIFtz
ZWxmIF9jYW5jZWxJbnRlcmFjdGlvbl07CkBAIC0xMzAwLDcgKzEzMDAsNyBAQCAtICh2b2lkKV9k
aWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1ZXN0Oih1aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6KGNv
bnN0IFdlYkNvcmU6OgogICAgIGlmICghX2lzVGFwSGlnaGxpZ2h0SURWYWxpZCB8fCBfbGF0ZXN0
VGFwSUQgIT0gcmVxdWVzdElEKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaGFzQXNzaXN0
ZWROb2RlKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbikgJiYgX3Bvc2l0aW9uSW5mb3JtYXRpb24u
bm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSkKKyAgICBpZiAoaGFzRm9jdXNlZEVsZW1lbnQo
X2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24pICYmIF9wb3NpdGlvbkluZm9ybWF0aW9uLm5vZGVB
dFBvc2l0aW9uSXNGb2N1c2VkRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgX2lzVGFw
SGlnaGxpZ2h0SURWYWxpZCA9IE5POwpAQCAtMTM3Miw3ICsxMzcyLDcgQEAgLSAodm9pZClfc2Ny
b2xsaW5nTm9kZVNjcm9sbGluZ0RpZEVuZAogLSAoQk9PTClfcmVxdWlyZXNLZXlib2FyZFdoZW5G
aXJzdFJlc3BvbmRlcgogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRkIHRoZSBsb2dpYyB0
byBoYW5kbGUga2V5Ym9hcmQgdmlzaWJpbGl0eSBkdXJpbmcgZm9jdXMgcmVkaXJlY3RzLgotICAg
IHN3aXRjaCAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSB7CisgICAgc3dp
dGNoIChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkgewogICAgIGNhc2Ug
V2ViS2l0OjpJbnB1dFR5cGU6Ok5vbmU6CiAgICAgY2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6RHJh
d2luZzoKICAgICAgICAgcmV0dXJuIE5POwpAQCAtMTM4Niw3ICsxMzg2LDcgQEAgLSAoQk9PTClf
cmVxdWlyZXNLZXlib2FyZFdoZW5GaXJzdFJlc3BvbmRlcgogICAgIGNhc2UgV2ViS2l0OjpJbnB1
dFR5cGU6OlRpbWU6CiAgICAgICAgIHJldHVybiAhY3VycmVudFVzZXJJbnRlcmZhY2VJZGlvbUlz
UGFkKCk7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICFfYXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24uaXNSZWFkT25seTsKKyAgICAgICAgcmV0dXJuICFfZm9jdXNlZEVsZW1lbnRJbmZvcm1h
dGlvbi5pc1JlYWRPbmx5OwogICAgIH0KICAgICByZXR1cm4gTk87CiB9CkBAIC0xNDA0LDI2ICsx
NDA0LDI2IEBAIC0gKHZvaWQpX3pvb21Ub1JldmVhbEZvY3VzZWRFbGVtZW50CiAgICAgU2V0Rm9y
U2NvcGU8Qk9PTD4gaXNab29taW5nVG9SZXZlYWxGb2N1c2VkRWxlbWVudEZvclNjb3BlIHsgX2lz
Wm9vbWluZ1RvUmV2ZWFsRm9jdXNlZEVsZW1lbnQsIFlFUyB9OwogICAgIC8vIEluIGNhc2UgdXNl
ciBzY2FsaW5nIGlzIGZvcmNlIGVuYWJsZWQsIGRvIG5vdCB1c2UgdGhhdCBzY2FsaW5nIHdoZW4g
em9vbWluZyBpbiB3aXRoIGFuIGlucHV0IGZpZWxkLgogICAgIC8vIFpvb21pbmcgYWJvdmUgdGhl
IHBhZ2UncyBkZWZhdWx0IHNjYWxlIGZhY3RvciBzaG91bGQgb25seSBoYXBwZW4gd2hlbiB0aGUg
dXNlciBwZXJmb3JtcyBpdC4KLSAgICBbc2VsZiBfem9vbVRvRm9jdXNSZWN0Ol9hc3Npc3RlZE5v
ZGVJbmZvcm1hdGlvbi5lbGVtZW50UmVjdAotICAgICAgICBzZWxlY3Rpb25SZWN0Ol9kaWRBY2Nl
c3NvcnlUYWJJbml0aWF0ZUZvY3VzID8gV2ViQ29yZTo6RmxvYXRSZWN0KCkgOiByZWN0VG9SZXZl
YWxXaGVuWm9vbWluZ1RvRm9jdXNlZEVsZW1lbnQoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLCBf
cGFnZS0+ZWRpdG9yU3RhdGUoKSkKLSAgICAgICAgaW5zaWRlRml4ZWQ6X2Fzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uLmluc2lkZUZpeGVkUG9zaXRpb24KLSAgICAgICAgZm9udFNpemU6X2Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLm5vZGVGb250U2l6ZQotICAgICAgICBtaW5pbXVtU2NhbGU6X2Fzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLm1pbmltdW1TY2FsZUZhY3RvcgotICAgICAgICBtYXhpbXVtU2Nh
bGU6X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLm1heGltdW1TY2FsZUZhY3Rvcklnbm9yaW5nQWx3
YXlzU2NhbGFibGUKLSAgICAgICAgYWxsb3dTY2FsaW5nOl9hc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bi5hbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlzU2NhbGFibGUgJiYgIWN1cnJlbnRVc2Vy
SW50ZXJmYWNlSWRpb21Jc1BhZCgpCi0gICAgICAgIGZvcmNlU2Nyb2xsOihfYXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24uaW5wdXRNb2RlID09IFdlYkNvcmU6OklucHV0TW9kZTo6Tm9uZSkgPyAhY3Vy
cmVudFVzZXJJbnRlcmZhY2VJZGlvbUlzUGFkKCkgOiBbc2VsZiByZXF1aXJlc0FjY2Vzc29yeVZp
ZXddXTsKKyAgICBbc2VsZiBfem9vbVRvRm9jdXNSZWN0Ol9mb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uLmVsZW1lbnRSZWN0CisgICAgICAgIHNlbGVjdGlvblJlY3Q6X2RpZEFjY2Vzc29yeVRhYklu
aXRpYXRlRm9jdXMgPyBXZWJDb3JlOjpGbG9hdFJlY3QoKSA6IHJlY3RUb1JldmVhbFdoZW5ab29t
aW5nVG9Gb2N1c2VkRWxlbWVudChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiwgX3BhZ2UtPmVk
aXRvclN0YXRlKCkpCisgICAgICAgIGluc2lkZUZpeGVkOl9mb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uLmluc2lkZUZpeGVkUG9zaXRpb24KKyAgICAgICAgZm9udFNpemU6X2ZvY3VzZWRFbGVtZW50
SW5mb3JtYXRpb24ubm9kZUZvbnRTaXplCisgICAgICAgIG1pbmltdW1TY2FsZTpfZm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbi5taW5pbXVtU2NhbGVGYWN0b3IKKyAgICAgICAgbWF4aW11bVNjYWxl
Ol9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLm1heGltdW1TY2FsZUZhY3Rvcklnbm9yaW5nQWx3
YXlzU2NhbGFibGUKKyAgICAgICAgYWxsb3dTY2FsaW5nOl9mb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uLmFsbG93c1VzZXJTY2FsaW5nSWdub3JpbmdBbHdheXNTY2FsYWJsZSAmJiAhY3VycmVudFVz
ZXJJbnRlcmZhY2VJZGlvbUlzUGFkKCkKKyAgICAgICAgZm9yY2VTY3JvbGw6KF9mb2N1c2VkRWxl
bWVudEluZm9ybWF0aW9uLmlucHV0TW9kZSA9PSBXZWJDb3JlOjpJbnB1dE1vZGU6Ok5vbmUpID8g
IWN1cnJlbnRVc2VySW50ZXJmYWNlSWRpb21Jc1BhZCgpIDogW3NlbGYgcmVxdWlyZXNBY2Nlc3Nv
cnlWaWV3XV07CiB9CiAKIC0gKFVJVmlldyAqKWlucHV0VmlldwogewotICAgIGlmICghaGFzQXNz
aXN0ZWROb2RlKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbikpCisgICAgaWYgKCFoYXNGb2N1c2Vk
RWxlbWVudChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbikpCiAgICAgICAgIHJldHVybiBuaWw7
CiAKLSAgICBpZiAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmlucHV0TW9kZSA9PSBXZWJDb3Jl
OjpJbnB1dE1vZGU6Ok5vbmUpCisgICAgaWYgKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmlu
cHV0TW9kZSA9PSBXZWJDb3JlOjpJbnB1dE1vZGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiBbW1VJ
VmlldyBuZXddIGF1dG9yZWxlYXNlXTsKIAogICAgIGlmICghX2lucHV0UGVyaXBoZXJhbCkgewot
ICAgICAgICBzd2l0Y2ggKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkgewor
ICAgICAgICBzd2l0Y2ggKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSB7
CiAgICAgICAgIGNhc2UgV2ViS2l0OjpJbnB1dFR5cGU6OlNlbGVjdDoKICAgICAgICAgICAgIF9p
bnB1dFBlcmlwaGVyYWwgPSBhZG9wdE5TKFtbV0tGb3JtU2VsZWN0Q29udHJvbCBhbGxvY10gaW5p
dFdpdGhWaWV3OnNlbGZdKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQ2Myw3ICsxNDYzLDcg
QEAgLSAoVUlWaWV3ICopaW5wdXRWaWV3CiAKIC0gKENHUmVjdClfc2VsZWN0aW9uQ2xpcFJlY3QK
IHsKLSAgICBpZiAoIWhhc0Fzc2lzdGVkTm9kZShfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pKQor
ICAgIGlmICghaGFzRm9jdXNlZEVsZW1lbnQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24pKQog
ICAgICAgICByZXR1cm4gQ0dSZWN0TnVsbDsKICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRl
KCkucG9zdExheW91dERhdGEoKS5zZWxlY3Rpb25DbGlwUmVjdDsKIH0KQEAgLTE3MjUsMTggKzE3
MjUsMTggQEAgLSAoQk9PTClnZXN0dXJlUmVjb2duaXplclNob3VsZEJlZ2luOihVSUdlc3R1cmVS
ZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKICAgICAgICAgfHwgZ2VzdHVyZVJlY29nbml6
ZXIgPT0gX25vbkJsb2NraW5nRG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIKICAgICAgICAgfHwg
Z2VzdHVyZVJlY29nbml6ZXIgPT0gX3R3b0ZpbmdlckRvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVy
KSB7CiAKLSAgICAgICAgaWYgKGhhc0Fzc2lzdGVkTm9kZShfYXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24pKSB7CisgICAgICAgIGlmIChoYXNGb2N1c2VkRWxlbWVudChfZm9jdXNlZEVsZW1lbnRJbmZv
cm1hdGlvbikpIHsKICAgICAgICAgICAgIC8vIFJlcXVlc3QgaW5mb3JtYXRpb24gYWJvdXQgdGhl
IHBvc2l0aW9uIHdpdGggc3luYyBtZXNzYWdlLgogICAgICAgICAgICAgLy8gSWYgdGhlIGFzc2lz
dGVkIG5vZGUgaXMgdGhlIHNhbWUsIHByZXZlbnQgdGhlIGdlc3R1cmUuCiAgICAgICAgICAgICBp
ZiAoIVtzZWxmIGVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlOldlYktpdDo6SW50
ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QoV2ViQ29yZTo6cm91bmRlZEludFBvaW50KHBvaW50
KSldKQogICAgICAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgICAgIGlmIChfcG9zaXRp
b25JbmZvcm1hdGlvbi5ub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlKQorICAgICAgICAgICAg
aWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLm5vZGVBdFBvc2l0aW9uSXNGb2N1c2VkRWxlbWVudCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gTk87CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAo
Z2VzdHVyZVJlY29nbml6ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
KSB7Ci0gICAgICAgIGlmIChoYXNBc3Npc3RlZE5vZGUoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9u
KSkgeworICAgICAgICBpZiAoaGFzRm9jdXNlZEVsZW1lbnQoX2ZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb24pKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGlmZmVyZW50IG5vZGUgdGhhbiB0
aGUgYXNzaXN0ZWQgb25lLgogICAgICAgICAgICAgLy8gUHJldmVudCB0aGUgZ2VzdHVyZSBpZiB0
aGVyZSBpcyBubyBub2RlLgogICAgICAgICAgICAgLy8gQWxsb3cgdGhlIGdlc3R1cmUgaWYgaXQg
aXMgYSBub2RlIHRoYXQgd2FudHMgaGlnaGxpZ2h0IG9yIGlmIHRoZXJlIGlzIGFuIGFjdGlvbiBm
b3IgaXQuCkBAIC0xNzcwLDkgKzE3NzAsOSBAQCAtIChCT09MKWdlc3R1cmVSZWNvZ25pemVyU2hv
dWxkQmVnaW46KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgogICAgICAg
ICBpZiAoIVtzZWxmIGVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlOnJlcXVlc3Rd
KQogICAgICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgICAgIGlmIChoYXNBc3Npc3RlZE5vZGUo
X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uKSkgeworICAgICAgICBpZiAoaGFzRm9jdXNlZEVsZW1l
bnQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24pKSB7CiAgICAgICAgICAgICAvLyBQcmV2ZW50
IHRoZSBnZXN0dXJlIGlmIGl0IGlzIHRoZSBzYW1lIG5vZGUuCi0gICAgICAgICAgICBpZiAoX3Bv
c2l0aW9uSW5mb3JtYXRpb24ubm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSkKKyAgICAgICAg
ICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5ub2RlQXRQb3NpdGlvbklzRm9jdXNlZEVsZW1l
bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5POwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gUHJldmVudCB0aGUgZ2VzdHVyZSBpZiB0aGVyZSBpcyBubyBhY3Rpb24gZm9yIHRo
ZSBub2RlLgpAQCAtMTg3Nyw4ICsxODc3LDggQEAgLSAoQk9PTCl0ZXh0SW50ZXJhY3Rpb25HZXN0
dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZSBzaG91bGRCZWdpbkF0UG9pbnQ6KENHUG8KICNl
bmRpZgogCiAgICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGVkaXRpbmcgYW4gYXNzaXN0ZWQgbm9k
ZSwgb25seSBhbGxvdyB0aGUgc2VsZWN0aW9uIHRvIG1vdmUgd2l0aGluIHRoYXQgYXNzaXN0ZWQg
bm9kZS4KLSAgICBpZiAoc2VsZi5pc0Fzc2lzdGluZ05vZGUpCi0gICAgICAgIHJldHVybiBfcG9z
aXRpb25JbmZvcm1hdGlvbi5ub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlOworICAgIGlmIChz
ZWxmLmlzRm9jdXNpbmdFbGVtZW50KQorICAgICAgICByZXR1cm4gX3Bvc2l0aW9uSW5mb3JtYXRp
b24ubm9kZUF0UG9zaXRpb25Jc0ZvY3VzZWRFbGVtZW50OwogICAgIAogICAgIC8vIERvbid0IGFs
bG93IGRvdWJsZSB0YXAgdGV4dCBnZXN0dXJlcyBpbiBub25lZGl0YWJsZSBjb250ZW50LgogICAg
IGlmIChnZXN0dXJlID09IFVJV0tHZXN0dXJlRG91YmxlVGFwKQpAQCAtMjE0MSw3ICsyMTQxLDcg
QEAgLSAodm9pZClzZXRVcFRleHRTZWxlY3Rpb25Bc3Npc3RhbnQKIAogLSAodm9pZCljbGVhclNl
bGVjdGlvbgogewotICAgIFtzZWxmIF9zdG9wQXNzaXN0aW5nTm9kZV07CisgICAgW3NlbGYgX2Vs
ZW1lbnREaWRCbHVyXTsKICAgICBfcGFnZS0+Y2xlYXJTZWxlY3Rpb24oKTsKIH0KIApAQCAtMjE5
OCwxMCArMjE5OCwxMCBAQCAtIChCT09MKXJlcXVpcmVzQWNjZXNzb3J5VmlldwogICAgIGlmIChb
X2Zvcm1JbnB1dFNlc3Npb24gY3VzdG9tSW5wdXRBY2Nlc3NvcnlWaWV3XSkKICAgICAgICAgcmV0
dXJuIFlFUzsKIAotICAgIGlmIChfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaW5wdXRNb2RlID09
IFdlYkNvcmU6OklucHV0TW9kZTo6Tm9uZSkKKyAgICBpZiAoX2ZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb24uaW5wdXRNb2RlID09IFdlYkNvcmU6OklucHV0TW9kZTo6Tm9uZSkKICAgICAgICAgcmV0
dXJuIE5POwogCi0gICAgc3dpdGNoIChfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFR5
cGUpIHsKKyAgICBzd2l0Y2ggKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBl
KSB7CiAgICAgY2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6Tm9uZToKICAgICBjYXNlIFdlYktpdDo6
SW5wdXRUeXBlOjpEcmF3aW5nOgogICAgICAgICByZXR1cm4gTk87CkBAIC0yNTQ2LDkgKzI1NDYs
OSBAQCAtIChCT09MKWNhblBlcmZvcm1BY3Rpb246KFNFTClhY3Rpb24gd2l0aFNlbmRlcjooaWQp
c2VuZGVyCiAtIChCT09MKWNhblBlcmZvcm1BY3Rpb25Gb3JXZWJWaWV3OihTRUwpYWN0aW9uIHdp
dGhTZW5kZXI6KGlkKXNlbmRlcgogewogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9uZXh0
QWNjZXNzb3J5VGFiOikpCi0gICAgICAgIHJldHVybiBoYXNBc3Npc3RlZE5vZGUoX2Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uKSAmJiBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaGFzTmV4dE5vZGU7
CisgICAgICAgIHJldHVybiBoYXNGb2N1c2VkRWxlbWVudChfZm9jdXNlZEVsZW1lbnRJbmZvcm1h
dGlvbikgJiYgX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaGFzTmV4dE5vZGU7CiAgICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IoX3ByZXZpb3VzQWNjZXNzb3J5VGFiOikpCi0gICAgICAgIHJl
dHVybiBoYXNBc3Npc3RlZE5vZGUoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uKSAmJiBfYXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uaGFzUHJldmlvdXNOb2RlOworICAgICAgICByZXR1cm4gaGFzRm9j
dXNlZEVsZW1lbnQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24pICYmIF9mb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uLmhhc1ByZXZpb3VzTm9kZTsKIAogICAgIGF1dG8gZWRpdG9yU3RhdGUgPSBf
cGFnZS0+ZWRpdG9yU3RhdGUoKTsKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihfc2hvd1Rl
eHRTdHlsZU9wdGlvbnM6KSkKQEAgLTMwNTUsOSArMzA1NSw5IEBAIHN0YXRpYyB2b2lkIHNlbGVj
dGlvbkNoYW5nZWRXaXRoVG91Y2goV0tDb250ZW50VmlldyAqdmlldywgY29uc3QgV2ViQ29yZTo6
SW50UG9pCiAgICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgaW50ZXJh
Y3Rpb25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2hBdDooQ0dQb2ludClwb2lu
dCB3aXRoU2VsZWN0aW9uVG91Y2g6dG9VSVdLU2VsZWN0aW9uVG91Y2goKFdlYktpdDo6U2VsZWN0
aW9uVG91Y2gpdG91Y2gpIHdpdGhGbGFnczpzdGF0aWNfY2FzdDxVSVdLU2VsZWN0aW9uRmxhZ3M+
KGZsYWdzKV07CiB9CiAKLS0gKEJPT0wpX2lzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlCist
IChCT09MKV9pc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50CiB7Ci0gICAgcmV0dXJuIGhh
c0Fzc2lzdGVkTm9kZShfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pOworICAgIHJldHVybiBoYXNG
b2N1c2VkRWxlbWVudChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbik7CiB9CiAKIC0gKHZvaWQp
Y2hhbmdlU2VsZWN0aW9uV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2VzdHVyZToo
VUlXS0dlc3R1cmVUeXBlKWdlc3R1cmVUeXBlIHdpdGhTdGF0ZTooVUlHZXN0dXJlUmVjb2duaXpl
clN0YXRlKXN0YXRlCkBAIC0zMDY4LDcgKzMwNjgsNyBAQCAtICh2b2lkKWNoYW5nZVNlbGVjdGlv
bldpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlw
ZQogLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50IHdp
dGhHZXN0dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUgd2l0aFN0YXRlOihVSUdlc3R1
cmVSZWNvZ25pemVyU3RhdGUpc3RhdGUgd2l0aEZsYWdzOihVSVdLU2VsZWN0aW9uRmxhZ3MpZmxh
Z3MKIHsKICAgICBfdXNpbmdHZXN0dXJlRm9yU2VsZWN0aW9uID0gWUVTOwotICAgIF9wYWdlLT5z
ZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIFdlYkNvcmU6OkNoYXJh
Y3RlckdyYW51bGFyaXR5LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9HZXN0dXJlVHlwZShnZXN0
dXJlVHlwZSkpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9HZXN0dXJlUmVjb2duaXplclN0YXRl
KHN0YXRlKSksIFtzZWxmIF9pc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZV0sIFtzZWxmLCBz
dGF0ZSwgZmxhZ3NdKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2Vz
dHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgaW5uZXJGbGFncywgV2Vi
S2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgX3BhZ2UtPnNlbGVjdFdpdGhH
ZXN0dXJlKFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgV2ViQ29yZTo6Q2hhcmFjdGVyR3JhbnVs
YXJpdHksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVUeXBlKGdlc3R1cmVUeXBlKSks
IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVSZWNvZ25pemVyU3RhdGUoc3RhdGUpKSwg
W3NlbGYgX2lzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnRdLCBbc2VsZiwgc3RhdGUsIGZs
YWdzXShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBl
LCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGlubmVyRmxhZ3MsIFdlYktpdDo6Q2Fs
bGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewogICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdl
c3R1cmUoc2VsZiwgcG9pbnQsIGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIGZsYWdzIHwgaW5u
ZXJGbGFncywgZXJyb3IpOwogICAgICAgICBpZiAoc3RhdGUgPT0gVUlHZXN0dXJlUmVjb2duaXpl
clN0YXRlRW5kZWQgfHwgc3RhdGUgPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVk
KQogICAgICAgICAgICAgX3VzaW5nR2VzdHVyZUZvclNlbGVjdGlvbiA9IE5POwpAQCAtMzE0OCw3
ICszMTQ4LDcgQEAgLSAodm9pZClzZWxlY3RQb3NpdGlvbkF0UG9pbnQ6KENHUG9pbnQpcG9pbnQg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWMKICAgICBVSVdLU2VsZWN0aW9uQ29t
cGxldGlvbkhhbmRsZXIgc2VsZWN0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5
XTsKICAgICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gdmlldyA9IHNlbGY7CiAgICAgCi0gICAg
X3BhZ2UtPnNlbGVjdFBvc2l0aW9uQXRQb2ludChXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIFtz
ZWxmIF9pc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZV0sIFt2aWV3LCBzZWxlY3Rpb25IYW5k
bGVyXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBfcGFnZS0+c2Vs
ZWN0UG9zaXRpb25BdFBvaW50KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgW3NlbGYgX2lzSW50
ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnRdLCBbdmlldywgc2VsZWN0aW9uSGFuZGxlcl0oV2Vi
S2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CiAgICAgICAgIHNlbGVjdGlvbkhhbmRs
ZXIoKTsKICAgICAgICAgdmlldy0+X3VzaW5nR2VzdHVyZUZvclNlbGVjdGlvbiA9IE5POwogICAg
ICAgICBbc2VsZWN0aW9uSGFuZGxlciByZWxlYXNlXTsKQEAgLTMxNjEsNyArMzE2MSw3IEBAIC0g
KHZvaWQpc2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5OihVSVRleHRHcmFudWxhcml0eSlncmFudWxh
cml0eSBpbkRpcmVjdGlvbjooVUlUCiAgICAgVUlXS1NlbGVjdGlvbkNvbXBsZXRpb25IYW5kbGVy
IHNlbGVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CiAgICAgUmV0YWlu
UHRyPFdLQ29udGVudFZpZXc+IHZpZXcgPSBzZWxmOwogICAgIAotICAgIF9wYWdlLT5zZWxlY3RQ
b3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwg
dG9XS1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIHRvV0tTZWxlY3Rpb25EaXJlY3Rpb24o
ZGlyZWN0aW9uKSwgW3NlbGYgX2lzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlXSwgW3ZpZXcs
IHNlbGVjdGlvbkhhbmRsZXJdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewor
ICAgIF9wYWdlLT5zZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6
OkludFBvaW50KHBvaW50KSwgdG9XS1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIHRvV0tT
ZWxlY3Rpb25EaXJlY3Rpb24oZGlyZWN0aW9uKSwgW3NlbGYgX2lzSW50ZXJhY3RpbmdXaXRoRm9j
dXNlZEVsZW1lbnRdLCBbdmlldywgc2VsZWN0aW9uSGFuZGxlcl0oV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yIGVycm9yKSB7CiAgICAgICAgIHNlbGVjdGlvbkhhbmRsZXIoKTsKICAgICAgICAg
dmlldy0+X3VzaW5nR2VzdHVyZUZvclNlbGVjdGlvbiA9IE5POwogICAgICAgICBbc2VsZWN0aW9u
SGFuZGxlciByZWxlYXNlXTsKQEAgLTMxODcsNyArMzE4Nyw3IEBAIC0gKHZvaWQpc2VsZWN0VGV4
dFdpdGhHcmFudWxhcml0eTooVUlUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgYXRQb2ludDoo
Q0dQb2luCiAgICAgVUlXS1NlbGVjdGlvbkNvbXBsZXRpb25IYW5kbGVyIHNlbGVjdGlvbkhhbmRs
ZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZp
ZXc+IHZpZXcgPSBzZWxmOwogCi0gICAgX3BhZ2UtPnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlB
dFBvaW50KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgdG9XS1RleHRHcmFudWxhcml0eShncmFu
dWxhcml0eSksIFtzZWxmIF9pc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZV0sIFt2aWV3LCBz
ZWxlY3Rpb25IYW5kbGVyXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAg
ICBfcGFnZS0+c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoV2ViQ29yZTo6SW50UG9p
bnQocG9pbnQpLCB0b1dLVGV4dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5KSwgW3NlbGYgX2lzSW50
ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnRdLCBbdmlldywgc2VsZWN0aW9uSGFuZGxlcl0oV2Vi
S2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CiAgICAgICAgIHNlbGVjdGlvbkhhbmRs
ZXIoKTsKICAgICAgICAgdmlldy0+X3VzaW5nR2VzdHVyZUZvclNlbGVjdGlvbiA9IE5POwogICAg
ICAgICBbc2VsZWN0aW9uSGFuZGxlciByZWxlYXNlXTsKQEAgLTMyMDgsNyArMzIwOCw3IEBAIC0g
KHZvaWQpdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50OihDR1BvaW50KXBvaW50IGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheCiB7CiAgICAgVUlXS1NlbGVjdGlvbldpdGhEaXJlY3Rpb25D
b21wbGV0aW9uSGFuZGxlciBzZWxlY3Rpb25IYW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyIGNv
cHldOwogICAgIAotICAgIF9wYWdlLT51cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoV2Vi
Q29yZTo6SW50UG9pbnQocG9pbnQpLCBbc2VsZiBfaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5v
ZGVdLCBbc2VsZWN0aW9uSGFuZGxlcl0oYm9vbCBlbmRJc01vdmluZywgV2ViS2l0OjpDYWxsYmFj
a0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgX3BhZ2UtPnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRl
bnRQb2ludChXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIFtzZWxmIF9pc0ludGVyYWN0aW5nV2l0
aEZvY3VzZWRFbGVtZW50XSwgW3NlbGVjdGlvbkhhbmRsZXJdKGJvb2wgZW5kSXNNb3ZpbmcsIFdl
YktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewogICAgICAgICBzZWxlY3Rpb25IYW5k
bGVyKGVuZElzTW92aW5nKTsKICAgICAgICAgW3NlbGVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CiAg
ICAgfSk7CkBAIC0zMjE4LDcgKzMyMTgsNyBAQCAtICh2b2lkKXVwZGF0ZVNlbGVjdGlvbldpdGhF
eHRlbnRQb2ludDooQ0dQb2ludClwb2ludCB3aXRoQm91bmRhcnk6KFVJVGV4dEdyYW51bAogewog
ICAgIFVJV0tTZWxlY3Rpb25XaXRoRGlyZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIgc2VsZWN0aW9u
SGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKICAgICAKLSAgICBfcGFnZS0+dXBk
YXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoV2ViQ29yZTo6SW50UG9pbnQo
cG9pbnQpLCB0b1dLVGV4dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5KSwgW3NlbGYgX2lzSW50ZXJh
Y3RpbmdXaXRoQXNzaXN0ZWROb2RlXSwgW3NlbGVjdGlvbkhhbmRsZXJdKGJvb2wgZW5kSXNNb3Zp
bmcsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgIF9wYWdlLT51cGRh
dGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShXZWJDb3JlOjpJbnRQb2ludChw
b2ludCksIHRvV0tUZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCBbc2VsZiBfaXNJbnRlcmFj
dGluZ1dpdGhGb2N1c2VkRWxlbWVudF0sIFtzZWxlY3Rpb25IYW5kbGVyXShib29sIGVuZElzTW92
aW5nLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgc2VsZWN0
aW9uSGFuZGxlcihlbmRJc01vdmluZyk7CiAgICAgICAgIFtzZWxlY3Rpb25IYW5kbGVyIHJlbGVh
c2VdOwogICAgIH0pOwpAQCAtMzM1MSw3ICszMzUxLDcgQEAgLSAodm9pZClhY2Nlc3NvcnlUYWI6
KEJPT0wpaXNOZXh0CiAgICAgX2lzQ2hhbmdpbmdGb2N1c1VzaW5nQWNjZXNzb3J5VGFiID0gWUVT
OwogICAgIFtzZWxmIGJlZ2luU2VsZWN0aW9uQ2hhbmdlXTsKICAgICBSZXRhaW5QdHI8V0tDb250
ZW50Vmlldz4gdmlldyA9IHNlbGY7Ci0gICAgX3BhZ2UtPmZvY3VzTmV4dEFzc2lzdGVkTm9kZShp
c05leHQsIFt2aWV3XShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICBfcGFnZS0+
Zm9jdXNOZXh0Rm9jdXNlZEVsZW1lbnQoaXNOZXh0LCBbdmlld10oV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yKSB7CiAgICAgICAgIFt2aWV3IGVuZFNlbGVjdGlvbkNoYW5nZV07CiAgICAgICAg
IFt2aWV3IHJlbG9hZElucHV0Vmlld3NdOwogICAgICAgICB2aWV3LT5faXNDaGFuZ2luZ0ZvY3Vz
VXNpbmdBY2Nlc3NvcnlUYWIgPSBOTzsKQEAgLTMzNjMsNyArMzM2Myw3IEBAIC0gKHZvaWQpX2Jl
Y29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVjdGlvbk1vdmluZ0ZvcndhcmQ6KEJPT0wpc2VsZWN0
aW5nRm9yd2FyZCBjCiAgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBCbG9ja19jb3B5
KGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gdmlldyA9
IHNlbGY7CiAgICAgX3BhZ2UtPnNldEluaXRpYWxGb2N1cyhzZWxlY3RpbmdGb3J3YXJkLCBmYWxz
ZSwgV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50KCksIFt2aWV3LCBjb21wbGV0aW9uSGFuZGxlckNv
cHldKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAgICBCT09MIGRpZEJlY29t
ZUZpcnN0UmVzcG9uZGVyID0gdmlldy0+X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRU
eXBlICE9IFdlYktpdDo6SW5wdXRUeXBlOjpOb25lICYmIFt2aWV3IGJlY29tZUZpcnN0UmVzcG9u
ZGVyXTsKKyAgICAgICAgQk9PTCBkaWRCZWNvbWVGaXJzdFJlc3BvbmRlciA9IHZpZXctPl9mb2N1
c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBlICE9IFdlYktpdDo6SW5wdXRUeXBlOjpO
b25lICYmIFt2aWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXJDb3B5KGRpZEJlY29tZUZpcnN0UmVzcG9uZGVyKTsKICAgICAgICAgQmxvY2tfcmVsZWFz
ZShjb21wbGV0aW9uSGFuZGxlckNvcHkpOwogICAgIH0pOwpAQCAtMzQwMiwxOCArMzQwMiwxOCBA
QCAtICh2b2lkKWFjY2Vzc29yeUF1dG9GaWxsCiAKIC0gKHZvaWQpYWNjZXNzb3J5Q2xlYXIKIHsK
LSAgICBfcGFnZS0+c2V0QXNzaXN0ZWROb2RlVmFsdWUoU3RyaW5nKCkpOworICAgIF9wYWdlLT5z
ZXRGb2N1c2VkRWxlbWVudFZhbHVlKFN0cmluZygpKTsKIH0KIAogLSAodm9pZClfdXBkYXRlQWNj
ZXNzb3J5CiB7Ci0gICAgW19mb3JtQWNjZXNzb3J5VmlldyBzZXROZXh0RW5hYmxlZDpfYXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uaGFzTmV4dE5vZGVdOwotICAgIFtfZm9ybUFjY2Vzc29yeVZpZXcg
c2V0UHJldmlvdXNFbmFibGVkOl9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oYXNQcmV2aW91c05v
ZGVdOworICAgIFtfZm9ybUFjY2Vzc29yeVZpZXcgc2V0TmV4dEVuYWJsZWQ6X2ZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uaGFzTmV4dE5vZGVdOworICAgIFtfZm9ybUFjY2Vzc29yeVZpZXcgc2V0
UHJldmlvdXNFbmFibGVkOl9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmhhc1ByZXZpb3VzTm9k
ZV07CiAKICAgICBpZiAoY3VycmVudFVzZXJJbnRlcmZhY2VJZGlvbUlzUGFkKCkpCiAgICAgICAg
IFtfZm9ybUFjY2Vzc29yeVZpZXcgc2V0Q2xlYXJWaXNpYmxlOk5PXTsKICAgICBlbHNlIHsKLSAg
ICAgICAgc3dpdGNoIChfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFR5cGUpIHsKKyAg
ICAgICAgc3dpdGNoIChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkgewog
ICAgICAgICBjYXNlIFdlYktpdDo6SW5wdXRUeXBlOjpEYXRlOgogICAgICAgICBjYXNlIFdlYktp
dDo6SW5wdXRUeXBlOjpNb250aDoKICAgICAgICAgY2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6RGF0
ZVRpbWVMb2NhbDoKQEAgLTM0NTYsNyArMzQ1Niw3IEBAIC0gKHZvaWQpaW5zZXJ0VGV4dFN1Z2dl
c3Rpb246KFVJVGV4dFN1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbgogICAgIH0KICNpZiBFTkFC
TEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICBpZiAoW3RleHRTdWdnZXN0aW9uIGlzS2luZE9mQ2xh
c3M6W1dLRGF0YUxpc3RUZXh0U3VnZ2VzdGlvbiBjbGFzc11dKSB7Ci0gICAgICAgIF9wYWdlLT5z
ZXRBc3Npc3RlZE5vZGVWYWx1ZShbdGV4dFN1Z2dlc3Rpb24gaW5wdXRUZXh0XSk7CisgICAgICAg
IF9wYWdlLT5zZXRGb2N1c2VkRWxlbWVudFZhbHVlKFt0ZXh0U3VnZ2VzdGlvbiBpbnB1dFRleHRd
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzUzMCw3ICszNTMwLDcgQEAg
LSAodm9pZClzZXRTZWxlY3RlZFRleHRSYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZQogICAgIGlm
IChyYW5nZSkKICAgICAgICAgcmV0dXJuOwogI2lmICFQTEFURk9STShJT1NNQUMpCi0gICAgaWYg
KCFoYXNBc3Npc3RlZE5vZGUoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uKSkKKyAgICBpZiAoIWhh
c0ZvY3VzZWRFbGVtZW50KF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKSkKICAgICAgICAgcmV0
dXJuOwogI2VuZGlmCiAgICAgW3NlbGYgY2xlYXJTZWxlY3Rpb25dOwpAQCAtMzgwNiwyMyArMzgw
NiwyMyBAQCAtIChVSVRleHRJbnB1dFRyYWl0cyAqKXRleHRJbnB1dFRyYWl0cwogICAgIGlmICgh
X3RyYWl0cykKICAgICAgICAgX3RyYWl0cyA9IGFkb3B0TlMoW1tVSVRleHRJbnB1dFRyYWl0cyBh
bGxvY10gaW5pdF0pOwogCi0gICAgW190cmFpdHMgc2V0U2VjdXJlVGV4dEVudHJ5Ol9hc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9PSBXZWJLaXQ6OklucHV0VHlwZTo6UGFzc3dv
cmQgfHwgW19mb3JtSW5wdXRTZXNzaW9uIGZvcmNlU2VjdXJlVGV4dEVudHJ5XV07Ci0gICAgW190
cmFpdHMgc2V0U2hvcnRjdXRDb252ZXJzaW9uVHlwZTpfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
ZWxlbWVudFR5cGUgPT0gV2ViS2l0OjpJbnB1dFR5cGU6OlBhc3N3b3JkID8gVUlUZXh0U2hvcnRj
dXRDb252ZXJzaW9uVHlwZU5vIDogVUlUZXh0U2hvcnRjdXRDb252ZXJzaW9uVHlwZURlZmF1bHRd
OworICAgIFtfdHJhaXRzIHNldFNlY3VyZVRleHRFbnRyeTpfZm9jdXNlZEVsZW1lbnRJbmZvcm1h
dGlvbi5lbGVtZW50VHlwZSA9PSBXZWJLaXQ6OklucHV0VHlwZTo6UGFzc3dvcmQgfHwgW19mb3Jt
SW5wdXRTZXNzaW9uIGZvcmNlU2VjdXJlVGV4dEVudHJ5XV07CisgICAgW190cmFpdHMgc2V0U2hv
cnRjdXRDb252ZXJzaW9uVHlwZTpfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlw
ZSA9PSBXZWJLaXQ6OklucHV0VHlwZTo6UGFzc3dvcmQgPyBVSVRleHRTaG9ydGN1dENvbnZlcnNp
b25UeXBlTm8gOiBVSVRleHRTaG9ydGN1dENvbnZlcnNpb25UeXBlRGVmYXVsdF07CiAKLSAgICBp
ZiAoIV9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5mb3JtQWN0aW9uLmlzRW1wdHkoKSkKLSAgICAg
ICAgW190cmFpdHMgc2V0UmV0dXJuS2V5VHlwZTooX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVs
ZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpTZWFyY2gpID8gVUlSZXR1cm5LZXlTZWFy
Y2ggOiBVSVJldHVybktleUdvXTsKKyAgICBpZiAoIV9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
LmZvcm1BY3Rpb24uaXNFbXB0eSgpKQorICAgICAgICBbX3RyYWl0cyBzZXRSZXR1cm5LZXlUeXBl
OihfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9PSBXZWJLaXQ6OklucHV0
VHlwZTo6U2VhcmNoKSA/IFVJUmV0dXJuS2V5U2VhcmNoIDogVUlSZXR1cm5LZXlHb107CiAKLSAg
ICBpZiAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID09IFdlYktpdDo6SW5w
dXRUeXBlOjpQYXNzd29yZCB8fCBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFR5cGUg
PT0gV2ViS2l0OjpJbnB1dFR5cGU6OkVtYWlsIHx8IF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5l
bGVtZW50VHlwZSA9PSBXZWJLaXQ6OklucHV0VHlwZTo6VVJMIHx8IF9hc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5mb3JtQWN0aW9uLmNvbnRhaW5zKCJsb2dpbiIpKSB7CisgICAgaWYgKF9mb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpQYXNz
d29yZCB8fCBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9PSBXZWJLaXQ6
OklucHV0VHlwZTo6RW1haWwgfHwgX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5
cGUgPT0gV2ViS2l0OjpJbnB1dFR5cGU6OlVSTCB8fCBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlv
bi5mb3JtQWN0aW9uLmNvbnRhaW5zKCJsb2dpbiIpKSB7CiAgICAgICAgIFtfdHJhaXRzIHNldEF1
dG9jYXBpdGFsaXphdGlvblR5cGU6VUlUZXh0QXV0b2NhcGl0YWxpemF0aW9uVHlwZU5vbmVdOwog
ICAgICAgICBbX3RyYWl0cyBzZXRBdXRvY29ycmVjdGlvblR5cGU6VUlUZXh0QXV0b2NvcnJlY3Rp
b25UeXBlTm9dOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFtfdHJhaXRzIHNldEF1dG9jYXBpdGFs
aXphdGlvblR5cGU6dG9VSVRleHRBdXRvY2FwaXRhbGl6ZShfYXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24uYXV0b2NhcGl0YWxpemVUeXBlKV07Ci0gICAgICAgIFtfdHJhaXRzIHNldEF1dG9jb3JyZWN0
aW9uVHlwZTpfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaXNBdXRvY29ycmVjdCA/IFVJVGV4dEF1
dG9jb3JyZWN0aW9uVHlwZVllcyA6IFVJVGV4dEF1dG9jb3JyZWN0aW9uVHlwZU5vXTsKKyAgICAg
ICAgW190cmFpdHMgc2V0QXV0b2NhcGl0YWxpemF0aW9uVHlwZTp0b1VJVGV4dEF1dG9jYXBpdGFs
aXplKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSldOworICAg
ICAgICBbX3RyYWl0cyBzZXRBdXRvY29ycmVjdGlvblR5cGU6X2ZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb24uaXNBdXRvY29ycmVjdCA/IFVJVGV4dEF1dG9jb3JyZWN0aW9uVHlwZVllcyA6IFVJVGV4
dEF1dG9jb3JyZWN0aW9uVHlwZU5vXTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKF9hc3Npc3RlZE5v
ZGVJbmZvcm1hdGlvbi5pbnB1dE1vZGUpIHsKKyAgICBzd2l0Y2ggKF9mb2N1c2VkRWxlbWVudElu
Zm9ybWF0aW9uLmlucHV0TW9kZSkgewogICAgIGNhc2UgV2ViQ29yZTo6SW5wdXRNb2RlOjpVbnNw
ZWNpZmllZDoKLSAgICAgICAgc3dpdGNoIChfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVu
dFR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVt
ZW50VHlwZSkgewogICAgICAgICBjYXNlIFdlYktpdDo6SW5wdXRUeXBlOjpQaG9uZToKICAgICAg
ICAgICAgIFtfdHJhaXRzIHNldEtleWJvYXJkVHlwZTpVSUtleWJvYXJkVHlwZVBob25lUGFkXTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzg4Myw3ICszODgzLDcgQEAgLSAoVUlUZXh0SW5wdXRU
cmFpdHMgKil0ZXh0SW5wdXRUcmFpdHMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgW190
cmFpdHMgc2V0VGV4dENvbnRlbnRUeXBlOmNvbnRlbnRUeXBlRnJvbUZpZWxkTmFtZShfYXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uYXV0b2ZpbGxGaWVsZE5hbWUpXTsKKyAgICBbX3RyYWl0cyBzZXRU
ZXh0Q29udGVudFR5cGU6Y29udGVudFR5cGVGcm9tRmllbGROYW1lKF9mb2N1c2VkRWxlbWVudElu
Zm9ybWF0aW9uLmF1dG9maWxsRmllbGROYW1lKV07CiAKICAgICBbc2VsZiBfdXBkYXRlSW50ZXJh
Y3Rpb25UaW50Q29sb3JdOwogCkBAIC00MDgyLDcgKzQwODIsNyBAQCAtIChCT09MKWlzU2Nyb2xs
YWJsZUZvcktleWJvYXJkU2Nyb2xsVmlld0FuaW1hdG9yOihXS0tleWJvYXJkU2Nyb2xsVmlld0Fu
aW1hdG9yCiAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKQog
ICAgICAgICByZXR1cm4gTk87CiAKLSAgICBpZiAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVs
ZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpTZWxlY3QpCisgICAgaWYgKF9mb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpTZWxl
Y3QpCiAgICAgICAgIHJldHVybiBOTzsKIAogICAgIHJldHVybiBZRVM7CkBAIC00MzUxLDE0ICs0
MzUxLDE0IEBAIC0gKHZvaWQpX3N0b3BBc3Npc3RpbmdLZXlib2FyZAogICAgIFtfdGV4dFNlbGVj
dGlvbkFzc2lzdGFudCBkZWFjdGl2YXRlU2VsZWN0aW9uXTsKIH0KIAotLSAoY29uc3QgV2ViS2l0
OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYpYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24KKy0gKGNv
bnN0IFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYpZm9jdXNlZEVsZW1lbnRJbmZv
cm1hdGlvbgogewotICAgIHJldHVybiBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb247CisgICAgcmV0
dXJuIF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uOwogfQogCi0tIChWZWN0b3I8V2ViS2l0OjpP
cHRpb25JdGVtPiYpYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9ucworLSAoVmVjdG9yPFdlYktpdDo6
T3B0aW9uSXRlbT4mKWZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9ucwogewotICAgIHJldHVybiBf
YXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uc2VsZWN0T3B0aW9uczsKKyAgICByZXR1cm4gX2ZvY3Vz
ZWRFbGVtZW50SW5mb3JtYXRpb24uc2VsZWN0T3B0aW9uczsKIH0KIAogLSAoVUlXZWJGb3JtQWNj
ZXNzb3J5ICopZm9ybUFjY2Vzc29yeVZpZXcKQEAgLTQzODYsNyArNDM4Niw3IEBAIHN0YXRpYyBi
b29sIHNob3VsZFpvb21Ub1JldmVhbFNlbGVjdGlvblJlY3QoV2ViS2l0OjpJbnB1dFR5cGUgdHlw
ZSkKICAgICB9CiB9CiAKLXN0YXRpYyBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdFRvUmV2ZWFsV2hl
blpvb21pbmdUb0ZvY3VzZWRFbGVtZW50KGNvbnN0IFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24mIGVsZW1lbnRJbmZvLCBjb25zdCBXZWJLaXQ6OkVkaXRvclN0YXRlJiBlZGl0b3JTdGF0
ZSkKK3N0YXRpYyBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdFRvUmV2ZWFsV2hlblpvb21pbmdUb0Zv
Y3VzZWRFbGVtZW50KGNvbnN0IFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYgZWxl
bWVudEluZm8sIGNvbnN0IFdlYktpdDo6RWRpdG9yU3RhdGUmIGVkaXRvclN0YXRlKQogewogICAg
IFdlYkNvcmU6OkludFJlY3QgZWxlbWVudEludGVyYWN0aW9uUmVjdChlbGVtZW50SW5mby5lbGVt
ZW50SW50ZXJhY3Rpb25Mb2NhdGlvbiwgeyAxLCAxIH0pOwogICAgIGlmICghc2hvdWxkWm9vbVRv
UmV2ZWFsU2VsZWN0aW9uUmVjdChlbGVtZW50SW5mby5lbGVtZW50VHlwZSkpCkBAIC00NDQ2LDE1
ICs0NDQ2LDE1IEBAIHN0YXRpYyBib29sIGlzQXNzaXN0YWJsZUlucHV0VHlwZShXZWJLaXQ6Oklu
cHV0VHlwZSB0eXBlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLSAodm9pZClfc3RhcnRBc3Np
c3RpbmdOb2RlOihjb25zdCBXZWJLaXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJilpbmZvcm1h
dGlvbiB1c2VySXNJbnRlcmFjdGluZzooQk9PTCl1c2VySXNJbnRlcmFjdGluZyBibHVyUHJldmlv
dXNOb2RlOihCT09MKWJsdXJQcmV2aW91c05vZGUgY2hhbmdpbmdBY3Rpdml0eVN0YXRlOihCT09M
KWNoYW5naW5nQWN0aXZpdHlTdGF0ZSB1c2VyT2JqZWN0OihOU09iamVjdCA8TlNTZWN1cmVDb2Rp
bmc+ICopdXNlck9iamVjdAorLSAodm9pZClfZWxlbWVudERpZEZvY3VzOihjb25zdCBXZWJLaXQ6
OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24mKWluZm9ybWF0aW9uIHVzZXJJc0ludGVyYWN0aW5n
OihCT09MKXVzZXJJc0ludGVyYWN0aW5nIGJsdXJQcmV2aW91c05vZGU6KEJPT0wpYmx1clByZXZp
b3VzTm9kZSBjaGFuZ2luZ0FjdGl2aXR5U3RhdGU6KEJPT0wpY2hhbmdpbmdBY3Rpdml0eVN0YXRl
IHVzZXJPYmplY3Q6KE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4gKil1c2VyT2JqZWN0CiB7Ci0g
ICAgU2V0Rm9yU2NvcGU8Qk9PTD4gaXNDaGFuZ2luZ0ZvY3VzRm9yU2NvcGUgeyBfaXNDaGFuZ2lu
Z0ZvY3VzLCBoYXNBc3Npc3RlZE5vZGUoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uKSB9OworICAg
IFNldEZvclNjb3BlPEJPT0w+IGlzQ2hhbmdpbmdGb2N1c0ZvclNjb3BlIHsgX2lzQ2hhbmdpbmdG
b2N1cywgaGFzRm9jdXNlZEVsZW1lbnQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24pIH07CiAg
ICAgX2lucHV0Vmlld1VwZGF0ZURlZmVycmVyID0gbnVsbHB0cjsKIAogICAgIF9kaWRBY2Nlc3Nv
cnlUYWJJbml0aWF0ZUZvY3VzID0gX2lzQ2hhbmdpbmdGb2N1c1VzaW5nQWNjZXNzb3J5VGFiOwog
CiAgICAgaWQgPF9XS0lucHV0RGVsZWdhdGU+IGlucHV0RGVsZWdhdGUgPSBbX3dlYlZpZXcgX2lu
cHV0RGVsZWdhdGVdOwotICAgIFJldGFpblB0cjxXS0ZvY3VzZWRFbGVtZW50SW5mbz4gZm9jdXNl
ZEVsZW1lbnRJbmZvID0gYWRvcHROUyhbW1dLRm9jdXNlZEVsZW1lbnRJbmZvIGFsbG9jXSBpbml0
V2l0aEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOmluZm9ybWF0aW9uIGlzVXNlckluaXRpYXRlZDp1
c2VySXNJbnRlcmFjdGluZyB1c2VyT2JqZWN0OnVzZXJPYmplY3RdKTsKKyAgICBSZXRhaW5QdHI8
V0tGb2N1c2VkRWxlbWVudEluZm8+IGZvY3VzZWRFbGVtZW50SW5mbyA9IGFkb3B0TlMoW1tXS0Zv
Y3VzZWRFbGVtZW50SW5mbyBhbGxvY10gaW5pdFdpdGhGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
OmluZm9ybWF0aW9uIGlzVXNlckluaXRpYXRlZDp1c2VySXNJbnRlcmFjdGluZyB1c2VyT2JqZWN0
OnVzZXJPYmplY3RdKTsKIAogICAgIEJPT0wgc2hvdWxkU2hvd0tleWJvYXJkID0gTk87CiAgICAg
X1dLRm9jdXNTdGFydHNJbnB1dFNlc3Npb25Qb2xpY3kgc3RhcnRJbnB1dFNlc3Npb25Qb2xpY3kg
PSBfV0tGb2N1c1N0YXJ0c0lucHV0U2Vzc2lvblBvbGljeUF1dG87CkBAIC00NTAxLDcgKzQ1MDEs
NyBAQCAtICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU6KGNvbnN0IFdlYktpdDo6QXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24mKWluZm9ybWF0aW9uCiAgICAgfQogCiAgICAgaWYgKGJsdXJQcmV2aW91
c05vZGUpCi0gICAgICAgIFtzZWxmIF9zdG9wQXNzaXN0aW5nTm9kZV07CisgICAgICAgIFtzZWxm
IF9lbGVtZW50RGlkQmx1cl07CiAKICNpZiBIQVZFKFBFTkNJTEtJVCkKICAgICBpZiAoaW5mb3Jt
YXRpb24uZWxlbWVudFR5cGUgPT0gV2ViS2l0OjpJbnB1dFR5cGU6OkRyYXdpbmcpCkBAIC00NTE0
LDkgKzQ1MTQsOSBAQCAtICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU6KGNvbnN0IFdlYktpdDo6
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mKWluZm9ybWF0aW9uCiAgICAgaWYgKCFpc0Fzc2lzdGFi
bGVJbnB1dFR5cGUoaW5mb3JtYXRpb24uZWxlbWVudFR5cGUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGNoZWNrIHdoZW4gd2UgbWFuYWdl
IHRvIHNlbmQgU3RhcnRBc3Npc3RpbmdOb2RlIGZyb20gdGhlIFdlYlByb2Nlc3MKKyAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGNoZWNrIHdoZW4gd2UgbWFuYWdlIHRvIHNlbmQg
RWxlbWVudERpZEZvY3VzIGZyb20gdGhlIFdlYlByb2Nlc3MKICAgICAvLyBvbmx5IHdoZW4gaXQg
aXMgdHJ1bHkgdGltZSB0byBzaG93IHRoZSBrZXlib2FyZC4KLSAgICBpZiAoX2Fzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID09IGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlICYmIF9h
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50UmVjdCA9PSBpbmZvcm1hdGlvbi5lbGVtZW50
UmVjdCkKKyAgICBpZiAoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPT0g
aW5mb3JtYXRpb24uZWxlbWVudFR5cGUgJiYgX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxl
bWVudFJlY3QgPT0gaW5mb3JtYXRpb24uZWxlbWVudFJlY3QpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFtfd2ViVmlldyBfcmVzZXRGb2N1c1ByZXNlcnZhdGlvbkNvdW50XTsKQEAgLTQ1MzcsNyAr
NDUzNyw3IEBAIC0gKHZvaWQpX3N0YXJ0QXNzaXN0aW5nTm9kZTooY29uc3QgV2ViS2l0OjpBc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbiYpaW5mb3JtYXRpb24KICAgICAgICAgW2lucHV0RGVsZWdhdGUg
X3dlYlZpZXc6X3dlYlZpZXcgd2lsbFN0YXJ0SW5wdXRTZXNzaW9uOl9mb3JtSW5wdXRTZXNzaW9u
LmdldCgpXTsKIAogICAgIEJPT0wgZWRpdGFibGVDaGFuZ2VkID0gW3NlbGYgc2V0SXNFZGl0YWJs
ZTpZRVNdOwotICAgIF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiA9IGluZm9ybWF0aW9uOworICAg
IF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uID0gaW5mb3JtYXRpb247CiAgICAgX2lucHV0UGVy
aXBoZXJhbCA9IG5pbDsKICAgICBfdHJhaXRzID0gbmlsOwogCkBAIC00NTQ3LDcgKzQ1NDcsNyBA
QCAtICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU6KGNvbnN0IFdlYktpdDo6QXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24mKWluZm9ybWF0aW9uCiAjaWYgUExBVEZPUk0oV0FUQ0hPUykKICAgICBbc2Vs
ZiBhZGRGb2N1c2VkRm9ybUNvbnRyb2xPdmVybGF5XTsKICAgICBpZiAoIV9pc0NoYW5naW5nRm9j
dXMpCi0gICAgICAgIFtzZWxmIHByZXNlbnRWaWV3Q29udHJvbGxlckZvckN1cnJlbnRBc3Npc3Rl
ZE5vZGVdOworICAgICAgICBbc2VsZiBwcmVzZW50Vmlld0NvbnRyb2xsZXJGb3JDdXJyZW50Rm9j
dXNlZEVsZW1lbnRdOwogI2Vsc2UKICAgICBbc2VsZiByZWxvYWRJbnB1dFZpZXdzXTsKICNlbmRp
ZgpAQCAtNDU2OCwxMSArNDU2OCwxMSBAQCAtICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU6KGNv
bnN0IFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mKWluZm9ybWF0aW9uCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAKLSAgICAvLyBUaGUgY3VzdG9tIGZpeGVkIHBvc2l0aW9uIHJl
Y3QgYmVoYXZpb3IgaXMgYWZmZWN0ZWQgYnkgLWlzQXNzaXN0aW5nTm9kZSwgc28gaWYgdGhhdCBj
aGFuZ2VzIHdlIG5lZWQgdG8gcmVjb21wdXRlIHJlY3RzLgorICAgIC8vIFRoZSBjdXN0b20gZml4
ZWQgcG9zaXRpb24gcmVjdCBiZWhhdmlvciBpcyBhZmZlY3RlZCBieSAtaXNGb2N1c2luZ0VsZW1l
bnQsIHNvIGlmIHRoYXQgY2hhbmdlcyB3ZSBuZWVkIHRvIHJlY29tcHV0ZSByZWN0cy4KICAgICBp
ZiAoZWRpdGFibGVDaGFuZ2VkKQogICAgICAgICBbX3dlYlZpZXcgX3NjaGVkdWxlVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlXTsKICAgICAKLSAgICBpZiAoIXNob3VsZFpvb21Ub1JldmVhbFNlbGVj
dGlvblJlY3QoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSkKKyAgICBpZiAo
IXNob3VsZFpvb21Ub1JldmVhbFNlbGVjdGlvblJlY3QoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRp
b24uZWxlbWVudFR5cGUpKQogICAgICAgICBbc2VsZiBfem9vbVRvUmV2ZWFsRm9jdXNlZEVsZW1l
bnRdOwogCiAgICAgW3NlbGYgX2Vuc3VyZUZvcm1BY2Nlc3NvcnlWaWV3XTsKQEAgLTQ1OTIsNyAr
NDU5Miw3IEBAIC0gKHZvaWQpX3N0YXJ0QXNzaXN0aW5nTm9kZTooY29uc3QgV2ViS2l0OjpBc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbiYpaW5mb3JtYXRpb24KICAgICBbX3dlYlZpZXcgZGlkU3RhcnRG
b3JtQ29udHJvbEludGVyYWN0aW9uXTsKIH0KIAotLSAodm9pZClfc3RvcEFzc2lzdGluZ05vZGUK
Ky0gKHZvaWQpX2VsZW1lbnREaWRCbHVyCiB7CiAgICAgU2V0Rm9yU2NvcGU8Qk9PTD4gaXNCbHVy
cmluZ0ZvY3VzZWROb2RlRm9yU2NvcGUgeyBfaXNCbHVycmluZ0ZvY3VzZWROb2RlLCBZRVMgfTsK
IApAQCAtNDYxMSw3ICs0NjExLDcgQEAgLSAodm9pZClfc3RvcEFzc2lzdGluZ05vZGUKIAogICAg
IEJPT0wgZWRpdGFibGVDaGFuZ2VkID0gW3NlbGYgc2V0SXNFZGl0YWJsZTpOT107CiAKLSAgICBf
YXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBXZWJLaXQ6OklucHV0VHlwZTo6
Tm9uZTsKKyAgICBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IFdlYktp
dDo6SW5wdXRUeXBlOjpOb25lOwogICAgIF9pbnB1dFBlcmlwaGVyYWwgPSBuaWw7CiAgICAgX2Zv
Y3VzUmVxdWlyZXNTdHJvbmdQYXNzd29yZEFzc2lzdGFuY2UgPSBOTzsKIApAQCAtNDYyNiw3ICs0
NjI2LDcgQEAgLSAodm9pZClfc3RvcEFzc2lzdGluZ05vZGUKICAgICAgICAgW3NlbGYgcmVtb3Zl
Rm9jdXNlZEZvcm1Db250cm9sT3ZlcmxheV07CiAjZW5kaWYKIAotICAgIC8vIFRoZSBjdXN0b20g
Zml4ZWQgcG9zaXRpb24gcmVjdCBiZWhhdmlvciBpcyBhZmZlY3RlZCBieSAtaXNBc3Npc3RpbmdO
b2RlLCBzbyBpZiB0aGF0IGNoYW5nZXMgd2UgbmVlZCB0byByZWNvbXB1dGUgcmVjdHMuCisgICAg
Ly8gVGhlIGN1c3RvbSBmaXhlZCBwb3NpdGlvbiByZWN0IGJlaGF2aW9yIGlzIGFmZmVjdGVkIGJ5
IC1pc0ZvY3VzaW5nRWxlbWVudCwgc28gaWYgdGhhdCBjaGFuZ2VzIHdlIG5lZWQgdG8gcmVjb21w
dXRlIHJlY3RzLgogICAgIGlmIChlZGl0YWJsZUNoYW5nZWQpCiAgICAgICAgIFtfd2ViVmlldyBf
c2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOwogCkBAIC00NjQ0LDcgKzQ2NDQsNyBA
QCAtICh2b2lkKV9kaWRSZWNlaXZlRWRpdG9yU3RhdGVVcGRhdGVBZnRlckZvY3VzCiAKICAgICAv
LyBGSVhNRTogSWYgdGhlIGluaXRpYWwgd3JpdGluZyBkaXJlY3Rpb24ganVzdCBjaGFuZ2VkLCB3
ZSBzaG91bGQgd2FpdCB1bnRpbCB3ZSBnZXQgdGhlIG5leHQgcG9zdC1sYXlvdXQgZWRpdG9yIHN0
YXRlCiAgICAgLy8gYmVmb3JlIHpvb21pbmcgdG8gcmV2ZWFsIHRoZSBzZWxlY3Rpb24gcmVjdC4K
LSAgICBpZiAoc2hvdWxkWm9vbVRvUmV2ZWFsU2VsZWN0aW9uUmVjdChfYXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uZWxlbWVudFR5cGUpKQorICAgIGlmIChzaG91bGRab29tVG9SZXZlYWxTZWxlY3Rp
b25SZWN0KF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSkKICAgICAgICAg
W3NlbGYgX3pvb21Ub1JldmVhbEZvY3VzZWRFbGVtZW50XTsKIH0KIApAQCAtNDY2NSwxOCArNDY2
NSwxOCBAQCAtICh2b2lkKV91cGRhdGVJbml0aWFsV3JpdGluZ0RpcmVjdGlvbklmTmVjZXNzYXJ5
CiAgICAgW2tleWJvYXJkIHNldEluaXRpYWxEaXJlY3Rpb25dOwogfQogCi0tICh2b2lkKXVwZGF0
ZUN1cnJlbnRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjooRnVuY3Rpb248dm9pZChib29sIGRpZFVw
ZGF0ZSk+JiYpY2FsbGJhY2sKKy0gKHZvaWQpdXBkYXRlQ3VycmVudEZvY3VzZWRFbGVtZW50SW5m
b3JtYXRpb246KEZ1bmN0aW9uPHZvaWQoYm9vbCBkaWRVcGRhdGUpPiYmKWNhbGxiYWNrCiB7CiAg
ICAgV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4gd2Vha1NlbGYgeyBzZWxmIH07Ci0gICAgYXV0
byBpZGVudGlmaWVyQmVmb3JlVXBkYXRlID0gX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmFzc2lz
dGVkTm9kZUlkZW50aWZpZXI7Ci0gICAgX3BhZ2UtPnJlcXVlc3RBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgaWRlbnRpZmllckJlZm9yZVVwZGF0
ZSwgd2Vha1NlbGZdIChhdXRvJiBpbmZvLCBhdXRvIGVycm9yKSB7Ci0gICAgICAgIGlmICghd2Vh
a1NlbGYgfHwgZXJyb3IgIT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lIHx8IGlu
Zm8uYXNzaXN0ZWROb2RlSWRlbnRpZmllciAhPSBpZGVudGlmaWVyQmVmb3JlVXBkYXRlKSB7Cisg
ICAgYXV0byBpZGVudGlmaWVyQmVmb3JlVXBkYXRlID0gX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRp
b24uZm9jdXNlZEVsZW1lbnRJZGVudGlmaWVyOworICAgIF9wYWdlLT5yZXF1ZXN0Rm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgaWRlbnRpZmll
ckJlZm9yZVVwZGF0ZSwgd2Vha1NlbGZdIChhdXRvJiBpbmZvLCBhdXRvIGVycm9yKSB7CisgICAg
ICAgIGlmICghd2Vha1NlbGYgfHwgZXJyb3IgIT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9y
OjpOb25lIHx8IGluZm8uZm9jdXNlZEVsZW1lbnRJZGVudGlmaWVyICE9IGlkZW50aWZpZXJCZWZv
cmVVcGRhdGUpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBhc3Npc3RlZCBub2RlIG1heSBoYXZl
IGNoYW5nZWQgaW4gdGhlIG1lYW50aW1lLCBkb24ndCBvdmVyd3JpdGUgYXNzaXN0ZWQgbm9kZSBp
bmZvcm1hdGlvbi4KICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHdlYWtTZWxmLmdldCgpLT5fYXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24gPSBpbmZvOworICAgICAgICB3ZWFrU2VsZi5nZXQoKS0+X2ZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24gPSBpbmZvOwogICAgICAgICBjYWxsYmFjayh0cnVlKTsKICAgICB9KTsK
IH0KQEAgLTQ3MTcsNyArNDcxNyw3IEBAIC0gKHZvaWQpcmVtb3ZlRm9jdXNlZEZvcm1Db250cm9s
T3ZlcmxheQogICAgIFtzZWxmIHNldElucHV0RGVsZWdhdGU6bmlsXTsKIH0KIAotLSAodm9pZClw
cmVzZW50Vmlld0NvbnRyb2xsZXJGb3JDdXJyZW50QXNzaXN0ZWROb2RlCistICh2b2lkKXByZXNl
bnRWaWV3Q29udHJvbGxlckZvckN1cnJlbnRGb2N1c2VkRWxlbWVudAogewogICAgIFtzZWxmIGRp
c21pc3NBbGxJbnB1dFZpZXdDb250cm9sbGVyczpOT107CiAKQEAgLTQ3MjgsNyArNDcyOCw3IEBA
IC0gKHZvaWQpcHJlc2VudFZpZXdDb250cm9sbGVyRm9yQ3VycmVudEFzc2lzdGVkTm9kZQogCiAg
ICAgQk9PTCBwcmVmZXJzTW9kYWxQcmVzZW50YXRpb24gPSBOTzsKIAotICAgIHN3aXRjaCAoX2Fz
c2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSB7CisgICAgc3dpdGNoIChfZm9jdXNl
ZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkgewogICAgIGNhc2UgV2ViS2l0OjpJbnB1
dFR5cGU6OlNlbGVjdDoKICAgICAgICAgX3ByZXNlbnRlZEZ1bGxTY3JlZW5JbnB1dFZpZXdDb250
cm9sbGVyID0gYWRvcHROUyhbW1dLU2VsZWN0TWVudUxpc3RWaWV3Q29udHJvbGxlciBhbGxvY10g
aW5pdFdpdGhEZWxlZ2F0ZTpzZWxmXSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDgwOCw0NSArNDgw
OCw0NSBAQCAtICh2b2lkKWRpc21pc3NBbGxJbnB1dFZpZXdDb250cm9sbGVyczooQk9PTClhbmlt
YXRlZAogLSAodm9pZClmb2N1c2VkRm9ybUNvbnRyb2xWaWV3RGlkU3VibWl0OihXS0ZvY3VzZWRG
b3JtQ29udHJvbFZpZXcgKil2aWV3CiB7CiAgICAgW3NlbGYgaW5zZXJ0VGV4dDpAIlxuIl07Ci0g
ICAgX3BhZ2UtPmJsdXJBc3Npc3RlZE5vZGUoKTsKKyAgICBfcGFnZS0+Ymx1ckZvY3VzZWRFbGVt
ZW50KCk7CiB9CiAKIC0gKHZvaWQpZm9jdXNlZEZvcm1Db250cm9sVmlld0RpZENhbmNlbDooV0tG
b2N1c2VkRm9ybUNvbnRyb2xWaWV3ICopdmlldwogewotICAgIF9wYWdlLT5ibHVyQXNzaXN0ZWRO
b2RlKCk7CisgICAgX3BhZ2UtPmJsdXJGb2N1c2VkRWxlbWVudCgpOwogfQogCiAtICh2b2lkKWZv
Y3VzZWRGb3JtQ29udHJvbFZpZXdEaWRCZWdpbkVkaXRpbmc6KFdLRm9jdXNlZEZvcm1Db250cm9s
VmlldyAqKXZpZXcKIHsKLSAgICBbc2VsZiB1cGRhdGVDdXJyZW50QXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb246W3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4oc2VsZildIChib29s
IGRpZFVwZGF0ZSkgeworICAgIFtzZWxmIHVwZGF0ZUN1cnJlbnRGb2N1c2VkRWxlbWVudEluZm9y
bWF0aW9uOlt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KHNlbGYpXSAoYm9v
bCBkaWRVcGRhdGUpIHsKICAgICAgICAgaWYgKCFkaWRVcGRhdGUpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7Ci0gICAgICAg
IFtzdHJvbmdTZWxmIHByZXNlbnRWaWV3Q29udHJvbGxlckZvckN1cnJlbnRBc3Npc3RlZE5vZGVd
OworICAgICAgICBbc3Ryb25nU2VsZiBwcmVzZW50Vmlld0NvbnRyb2xsZXJGb3JDdXJyZW50Rm9j
dXNlZEVsZW1lbnRdOwogICAgICAgICBbc3Ryb25nU2VsZi0+X2ZvY3VzZWRGb3JtQ29udHJvbFZp
ZXcgaGlkZTpZRVNdOwogICAgIH1dOwogfQogCiAtIChDR1JlY3QpcmVjdEZvckZvY3VzZWRGb3Jt
Q29udHJvbFZpZXc6KFdLRm9jdXNlZEZvcm1Db250cm9sVmlldyAqKXZpZXcKIHsKLSAgICByZXR1
cm4gW3NlbGYgY29udmVydFJlY3Q6X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRSZWN0
IHRvVmlldzp2aWV3XTsKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6X2ZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uZWxlbWVudFJlY3QgdG9WaWV3OnZpZXddOwogfQogCiAtIChDR1JlY3Qp
bmV4dFJlY3RGb3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3OihXS0ZvY3VzZWRGb3JtQ29udHJvbFZp
ZXcgKil2aWV3CiB7Ci0gICAgaWYgKCFfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaGFzTmV4dE5v
ZGUpCisgICAgaWYgKCFfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oYXNOZXh0Tm9kZSkKICAg
ICAgICAgcmV0dXJuIENHUmVjdE51bGw7CiAKLSAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6
X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLm5leHROb2RlUmVjdCB0b1ZpZXc6dmlld107CisgICAg
cmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0Ol9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLm5leHRO
b2RlUmVjdCB0b1ZpZXc6dmlld107CiB9CiAKIC0gKENHUmVjdClwcmV2aW91c1JlY3RGb3JGb2N1
c2VkRm9ybUNvbnRyb2xWaWV3OihXS0ZvY3VzZWRGb3JtQ29udHJvbFZpZXcgKil2aWV3CiB7Ci0g
ICAgaWYgKCFfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaGFzUHJldmlvdXNOb2RlKQorICAgIGlm
ICghX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaGFzUHJldmlvdXNOb2RlKQogICAgICAgICBy
ZXR1cm4gQ0dSZWN0TnVsbDsKIAotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDpfYXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24ucHJldmlvdXNOb2RlUmVjdCB0b1ZpZXc6dmlld107CisgICAgcmV0
dXJuIFtzZWxmIGNvbnZlcnRSZWN0Ol9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLnByZXZpb3Vz
Tm9kZVJlY3QgdG9WaWV3OnZpZXddOwogfQogCiAtIChVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3
Rm9yRm9jdXNlZEZvcm1Db250cm9sVmlldzooV0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3ICopdmll
dwpAQCAtNDg1NiwxMCArNDg1NiwxMCBAQCAtIChVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Rm9y
Rm9jdXNlZEZvcm1Db250cm9sVmlldzooV0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3CiAKIC0gKE5T
U3RyaW5nICopYWN0aW9uTmFtZUZvckZvY3VzZWRGb3JtQ29udHJvbFZpZXc6KFdLRm9jdXNlZEZv
cm1Db250cm9sVmlldyAqKXZpZXcKIHsKLSAgICBpZiAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LmZvcm1BY3Rpb24uaXNFbXB0eSgpKQorICAgIGlmIChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlv
bi5mb3JtQWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHN3aXRj
aCAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSB7CisgICAgc3dpdGNoIChf
Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkgewogICAgIGNhc2UgV2ViS2l0
OjpJbnB1dFR5cGU6OlNlbGVjdDoKICAgICBjYXNlIFdlYktpdDo6SW5wdXRUeXBlOjpUaW1lOgog
ICAgIGNhc2UgV2ViS2l0OjpJbnB1dFR5cGU6OkRhdGU6CkBAIC00ODc2LDI0ICs0ODc2LDI0IEBA
IC0gKE5TU3RyaW5nICopYWN0aW9uTmFtZUZvckZvY3VzZWRGb3JtQ29udHJvbFZpZXc6KFdLRm9j
dXNlZEZvcm1Db250cm9sVmlldyAqKXZpCiAKIC0gKHZvaWQpZm9jdXNlZEZvcm1Db250cm9sVmll
d0RpZFJlcXVlc3ROZXh0Tm9kZTooV0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3ICopdmlldwogewot
ICAgIGlmIChfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaGFzTmV4dE5vZGUpCi0gICAgICAgIF9w
YWdlLT5mb2N1c05leHRBc3Npc3RlZE5vZGUodHJ1ZSk7CisgICAgaWYgKF9mb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uLmhhc05leHROb2RlKQorICAgICAgICBfcGFnZS0+Zm9jdXNOZXh0Rm9jdXNl
ZEVsZW1lbnQodHJ1ZSk7CiB9CiAKIC0gKHZvaWQpZm9jdXNlZEZvcm1Db250cm9sVmlld0RpZFJl
cXVlc3RQcmV2aW91c05vZGU6KFdLRm9jdXNlZEZvcm1Db250cm9sVmlldyAqKXZpZXcKIHsKLSAg
ICBpZiAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmhhc1ByZXZpb3VzTm9kZSkKLSAgICAgICAg
X3BhZ2UtPmZvY3VzTmV4dEFzc2lzdGVkTm9kZShmYWxzZSk7CisgICAgaWYgKF9mb2N1c2VkRWxl
bWVudEluZm9ybWF0aW9uLmhhc1ByZXZpb3VzTm9kZSkKKyAgICAgICAgX3BhZ2UtPmZvY3VzTmV4
dEZvY3VzZWRFbGVtZW50KGZhbHNlKTsKIH0KIAogLSAoQk9PTCloYXNOZXh0Tm9kZUZvckZvY3Vz
ZWRGb3JtQ29udHJvbFZpZXc6KFdLRm9jdXNlZEZvcm1Db250cm9sVmlldyAqKXZpZXcKIHsKLSAg
ICByZXR1cm4gX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmhhc05leHROb2RlOworICAgIHJldHVy
biBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oYXNOZXh0Tm9kZTsKIH0KIAogLSAoQk9PTClo
YXNQcmV2aW91c05vZGVGb3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3OihXS0ZvY3VzZWRGb3JtQ29u
dHJvbFZpZXcgKil2aWV3CiB7Ci0gICAgcmV0dXJuIF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5o
YXNQcmV2aW91c05vZGU7CisgICAgcmV0dXJuIF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmhh
c1ByZXZpb3VzTm9kZTsKIH0KIAogLSAodm9pZClmb2N1c2VkRm9ybUNvbnRyb2xsZXJEaWRVcGRh
dGVTdWdnZXN0aW9uczooV0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3ICopdmlldwpAQCAtNDkwOCwx
OCArNDkwOCwxOCBAQCAtICh2b2lkKWZvY3VzZWRGb3JtQ29udHJvbGxlckRpZFVwZGF0ZVN1Z2dl
c3Rpb25zOihXS0ZvY3VzZWRGb3JtQ29udHJvbFZpZXcgKil2aQogCiAtICh2b2lkKXNlbGVjdE1l
bnU6KFdLU2VsZWN0TWVudUxpc3RWaWV3Q29udHJvbGxlciAqKXNlbGVjdE1lbnUgZGlkU2VsZWN0
SXRlbUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKIHsKLSAgICBBU1NFUlQoIV9hc3Npc3RlZE5v
ZGVJbmZvcm1hdGlvbi5pc011bHRpU2VsZWN0KTsKLSAgICBfcGFnZS0+c2V0QXNzaXN0ZWROb2Rl
U2VsZWN0ZWRJbmRleChpbmRleCwgZmFsc2UpOworICAgIEFTU0VSVCghX2ZvY3VzZWRFbGVtZW50
SW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdCk7CisgICAgX3BhZ2UtPnNldEZvY3VzZWRFbGVtZW50
U2VsZWN0ZWRJbmRleChpbmRleCwgZmFsc2UpOwogfQogCiAtIChOU1VJbnRlZ2VyKW51bWJlck9m
SXRlbXNJblNlbGVjdE1lbnU6KFdLU2VsZWN0TWVudUxpc3RWaWV3Q29udHJvbGxlciAqKXNlbGVj
dE1lbnUKIHsKLSAgICByZXR1cm4gc2VsZi5hc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zLnNpemUo
KTsKKyAgICByZXR1cm4gc2VsZi5mb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnMuc2l6ZSgpOwog
fQogCiAtIChOU1N0cmluZyAqKXNlbGVjdE1lbnU6KFdLU2VsZWN0TWVudUxpc3RWaWV3Q29udHJv
bGxlciAqKXNlbGVjdE1lbnUgZGlzcGxheVRleHRGb3JJdGVtQXRJbmRleDooTlNVSW50ZWdlcilp
bmRleAogewotICAgIGF1dG8mIG9wdGlvbnMgPSBzZWxmLmFzc2lzdGVkTm9kZVNlbGVjdE9wdGlv
bnM7CisgICAgYXV0byYgb3B0aW9ucyA9IHNlbGYuZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25z
OwogICAgIGlmIChpbmRleCA+PSBvcHRpb25zLnNpemUoKSkgewogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIEAiIjsKQEAgLTQ5MzAsMzUgKzQ5MzAsMzUgQEAg
LSAoTlNTdHJpbmcgKilzZWxlY3RNZW51OihXS1NlbGVjdE1lbnVMaXN0Vmlld0NvbnRyb2xsZXIg
KilzZWxlY3RNZW51IGRpc3BsYXlUZXgKIAogLSAodm9pZClzZWxlY3RNZW51OihXS1NlbGVjdE1l
bnVMaXN0Vmlld0NvbnRyb2xsZXIgKilzZWxlY3RNZW51IGRpZENoZWNrSXRlbUF0SW5kZXg6KE5T
VUludGVnZXIpaW5kZXggY2hlY2tlZDooQk9PTCljaGVja2VkCiB7Ci0gICAgQVNTRVJUKF9hc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbi5pc011bHRpU2VsZWN0KTsKLSAgICBpZiAoaW5kZXggPj0gc2Vs
Zi5hc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zLnNpemUoKSkgeworICAgIEFTU0VSVChfZm9jdXNl
ZEVsZW1lbnRJbmZvcm1hdGlvbi5pc011bHRpU2VsZWN0KTsKKyAgICBpZiAoaW5kZXggPj0gc2Vs
Zi5mb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byYgb3B0aW9u
ID0gc2VsZi5hc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zW2luZGV4XTsKKyAgICBhdXRvJiBvcHRp
b24gPSBzZWxmLmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc1tpbmRleF07CiAgICAgaWYgKG9w
dGlvbi5pc1NlbGVjdGVkID09IGNoZWNrZWQpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBfcGFnZS0+c2V0QXNzaXN0ZWROb2Rl
U2VsZWN0ZWRJbmRleChpbmRleCwgdHJ1ZSk7CisgICAgX3BhZ2UtPnNldEZvY3VzZWRFbGVtZW50
U2VsZWN0ZWRJbmRleChpbmRleCwgdHJ1ZSk7CiAgICAgb3B0aW9uLmlzU2VsZWN0ZWQgPSBjaGVj
a2VkOwogfQogCiAtIChCT09MKXNlbGVjdE1lbnVVc2VzTXVsdGlwbGVTZWxlY3Rpb246KFdLU2Vs
ZWN0TWVudUxpc3RWaWV3Q29udHJvbGxlciAqKXNlbGVjdE1lbnUKIHsKLSAgICByZXR1cm4gX2Fz
c2lzdGVkTm9kZUluZm9ybWF0aW9uLmlzTXVsdGlTZWxlY3Q7CisgICAgcmV0dXJuIF9mb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLmlzTXVsdGlTZWxlY3Q7CiB9CiAKIC0gKEJPT0wpc2VsZWN0TWVu
dTooV0tTZWxlY3RNZW51TGlzdFZpZXdDb250cm9sbGVyICopc2VsZWN0TWVudSBoYXNTZWxlY3Rl
ZE9wdGlvbkF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKIHsKLSAgICBpZiAoaW5kZXggPj0gc2Vs
Zi5hc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zLnNpemUoKSkgeworICAgIGlmIChpbmRleCA+PSBz
ZWxmLmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9ucy5zaXplKCkpIHsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBOTzsKICAgICB9CiAKLSAgICByZXR1cm4g
c2VsZi5hc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zW2luZGV4XS5pc1NlbGVjdGVkOworICAgIHJl
dHVybiBzZWxmLmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc1tpbmRleF0uaXNTZWxlY3RlZDsK
IH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKFdBVENIT1MpCkBAIC01MDAwLDcgKzUwMDAsNyBAQCAt
ICh2b2lkKV91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uOihCT09MKWZvcmNlCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8mIHBvc3RMYXlvdXREYXRhID0gc3RhdGUucG9zdExheW91dERhdGEoKTsK
LSAgICBpZiAoaGFzQXNzaXN0ZWROb2RlKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbikpIHsKKyAg
ICBpZiAoaGFzRm9jdXNlZEVsZW1lbnQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24pKSB7CiAg
ICAgICAgIGlmIChwb3N0TGF5b3V0RGF0YS5lbGVtZW50SXNUcmFuc3BhcmVudCkKICAgICAgICAg
ICAgIFtzZWxmIF9iZWdpblN1cHByZXNzaW5nU2VsZWN0aW9uQXNzaXN0YW50Rm9yUmVhc29uOldl
YktpdDo6Rm9jdXNlZEVsZW1lbnRJc1RyYW5zcGFyZW50XTsKICAgICAgICAgZWxzZQpAQCAtNTc0
NCwxNCArNTc0NCwxNCBAQCAtIChOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilfaXRlbXNGb3JCZWdp
bm5pbmdPckFkZGluZ1RvU2Vzc2lvbldpdGhSZWdpc3RyYXRpb25MaQogCiAtIChOU0RpY3Rpb25h
cnkgKilfYXV0b2ZpbGxDb250ZXh0CiB7Ci0gICAgQk9PTCBwcm92aWRlU3Ryb25nUGFzc3dvcmRB
c3Npc3RhbmNlID0gX2ZvY3VzUmVxdWlyZXNTdHJvbmdQYXNzd29yZEFzc2lzdGFuY2UgJiYgX2Fz
c2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpQ
YXNzd29yZDsKLSAgICBpZiAoIWhhc0Fzc2lzdGVkTm9kZShfYXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24pIHx8ICghX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5D
cmVkZW50aWFscyAmJiAhcHJvdmlkZVN0cm9uZ1Bhc3N3b3JkQXNzaXN0YW5jZSkpCisgICAgQk9P
TCBwcm92aWRlU3Ryb25nUGFzc3dvcmRBc3Npc3RhbmNlID0gX2ZvY3VzUmVxdWlyZXNTdHJvbmdQ
YXNzd29yZEFzc2lzdGFuY2UgJiYgX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5
cGUgPT0gV2ViS2l0OjpJbnB1dFR5cGU6OlBhc3N3b3JkOworICAgIGlmICghaGFzRm9jdXNlZEVs
ZW1lbnQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24pIHx8ICghX2ZvY3VzZWRFbGVtZW50SW5m
b3JtYXRpb24uYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzICYmICFwcm92aWRlU3Ry
b25nUGFzc3dvcmRBc3Npc3RhbmNlKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIGlmIChw
cm92aWRlU3Ryb25nUGFzc3dvcmRBc3Npc3RhbmNlKQogICAgICAgICByZXR1cm4gQHsgQCJfYXV0
b21hdGljUGFzc3dvcmRLZXlib2FyZCIgOiBAWUVTIH07CiAKLSAgICBOU1VSTCAqcGxhdGZvcm1V
UkwgPSBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24ucmVwcmVzZW50aW5nUGFnZVVSTDsKKyAgICBO
U1VSTCAqcGxhdGZvcm1VUkwgPSBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5yZXByZXNlbnRp
bmdQYWdlVVJMOwogICAgIGlmIChwbGF0Zm9ybVVSTCkKICAgICAgICAgcmV0dXJuIEB7IEAiX1dl
YlZpZXdVUkwiIDogcGxhdGZvcm1VUkwgfTsKIApAQCAtNjA5NCwxMiArNjA5NCwxMiBAQCAtICh2
b2lkKWRpc21pc3NRdWlja2JvYXJkVmlld0NvbnRyb2xsZXJBbmRSZXZlYWxGb2N1c2VkRm9ybU92
ZXJsYXlJZk5lY2Vzc2FyeTooUAogICAgIEJPT0wgc2hvdWxkUmV2ZWFsRm9jdXNPdmVybGF5ID0g
Tk87CiAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUncyBub3RoaW5nIHRoZSB1c2VyIGNv
dWxkIHBvdGVudGlhbGx5IGRvIGJlc2lkZXMgZGlzbWlzcyB0aGUgb3ZlcmxheSwgd2UgY2FuIGp1
c3QgYXV0b21hdGljYWxseSB3aXRob3V0IGFza2luZyB0aGUgZGVsZWdhdGUuCiAgICAgaWYgKFtf
d2ViVmlldy5faW5wdXREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJW
aWV3OnNob3VsZFJldmVhbEZvY3VzT3ZlcmxheUZvcklucHV0U2Vzc2lvbjopXQotICAgICAgICAm
JiAoW3NlbGYgYWN0aW9uTmFtZUZvckZvY3VzZWRGb3JtQ29udHJvbFZpZXc6X2ZvY3VzZWRGb3Jt
Q29udHJvbFZpZXcuZ2V0KCldIHx8IF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oYXNOZXh0Tm9k
ZSB8fCBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaGFzUHJldmlvdXNOb2RlKSkKKyAgICAgICAg
JiYgKFtzZWxmIGFjdGlvbk5hbWVGb3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3Ol9mb2N1c2VkRm9y
bUNvbnRyb2xWaWV3LmdldCgpXSB8fCBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oYXNOZXh0
Tm9kZSB8fCBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oYXNQcmV2aW91c05vZGUpKQogICAg
ICAgICBzaG91bGRSZXZlYWxGb2N1c092ZXJsYXkgPSBbX3dlYlZpZXcuX2lucHV0RGVsZWdhdGUg
X3dlYlZpZXc6X3dlYlZpZXcgc2hvdWxkUmV2ZWFsRm9jdXNPdmVybGF5Rm9ySW5wdXRTZXNzaW9u
Ol9mb3JtSW5wdXRTZXNzaW9uLmdldCgpXTsKIAogICAgIGlmIChzaG91bGRSZXZlYWxGb2N1c092
ZXJsYXkpIHsKICAgICAgICAgW19mb2N1c2VkRm9ybUNvbnRyb2xWaWV3IHNob3c6Tk9dOwotICAg
ICAgICBbc2VsZiB1cGRhdGVDdXJyZW50QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246W3dlYWtTZWxm
ID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4oc2VsZildIChib29sIGRpZFVwZGF0ZSkgewor
ICAgICAgICBbc2VsZiB1cGRhdGVDdXJyZW50Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbjpbd2Vh
a1NlbGYgPSBXZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3PihzZWxmKV0gKGJvb2wgZGlkVXBkYXRl
KSB7CiAgICAgICAgICAgICBpZiAoIWRpZFVwZGF0ZSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAKQEAgLTYxMDgsNyArNjEwOCw3IEBAIC0gKHZvaWQpZGlzbWlzc1F1aWNrYm9hcmRWaWV3Q29u
dHJvbGxlckFuZFJldmVhbEZvY3VzZWRGb3JtT3ZlcmxheUlmTmVjZXNzYXJ5OihQCiAgICAgICAg
ICAgICBbZm9jdXNlZEZvcm1Db250cm9sbGVyIGVuZ2FnZUZvY3VzZWRGb3JtQ29udHJvbE5hdmln
YXRpb25dOwogICAgICAgICB9XTsKICAgICB9IGVsc2UKLSAgICAgICAgX3BhZ2UtPmJsdXJBc3Np
c3RlZE5vZGUoKTsKKyAgICAgICAgX3BhZ2UtPmJsdXJGb2N1c2VkRWxlbWVudCgpOwogCiAgICAg
Ly8gVGhlIFF1aWNrYm9hcmQgdmlldyBjb250cm9sbGVyIHBhc3NlZCBpbnRvIHRoaXMgZGVsZWdh
dGUgbWV0aG9kIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgdmlldyBjb250cm9sbGVyIHdlIG9yaWdp
bmFsbHkgcHJlc2VudGVkOwogICAgIC8vIHRoaXMgaGFwcGVucyBpbiB0aGUgY2FzZSB3aGVuIHRo
ZSB1c2VyIGNob29zZXMgYW4gaW5wdXQgbWV0aG9kIChlLmcuIHNjcmliYmxlKSBhbmQgYSBuZXcg
UXVpY2tib2FyZCB2aWV3IGNvbnRyb2xsZXIgaXMgcHJlc2VudGVkLgpAQCAtNjE0Niw3ICs2MTQ2
LDcgQEAgLSAoQ0dGbG9hdCl2aWV3Q29udHJvbGxlcjooUFVJQ1F1aWNrYm9hcmRWaWV3Q29udHJv
bGxlciAqKWNvbnRyb2xsZXIgaW5wdXRDb250ZXgKIAogLSAoQk9PTClhbGxvd3NMYW5ndWFnZVNl
bGVjdGlvbk1lbnVGb3JMaXN0Vmlld0NvbnRyb2xsZXI6KFBVSUNRdWlja2JvYXJkVmlld0NvbnRy
b2xsZXIgKiljb250cm9sbGVyCiB7Ci0gICAgc3dpdGNoIChfYXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24uZWxlbWVudFR5cGUpIHsKKyAgICBzd2l0Y2ggKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
LmVsZW1lbnRUeXBlKSB7CiAgICAgY2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6Q29udGVudEVkaXRh
YmxlOgogICAgIGNhc2UgV2ViS2l0OjpJbnB1dFR5cGU6OlRleHQ6CiAgICAgY2FzZSBXZWJLaXQ6
OklucHV0VHlwZTo6VGV4dEFyZWE6CkBAIC02MTcwLDI2ICs2MTcwLDI2IEBAIC0gKFVJVmlldyAq
KWlucHV0Q29udGV4dFZpZXdGb3JWaWV3Q29udHJvbGxlcjooUFVJQ1F1aWNrYm9hcmRWaWV3Q29u
dHJvbGxlciAqKWNvCiAKIC0gKE5TU3RyaW5nICopaW5wdXRMYWJlbFRleHRGb3JWaWV3Q29udHJv
bGxlcjooUFVJQ1F1aWNrYm9hcmRWaWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIKIHsKLSAgICBp
ZiAoIV9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5sYWJlbC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24ubGFiZWw7CisgICAgaWYgKCFfZm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbi5sYWJlbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBfZm9jdXNl
ZEVsZW1lbnRJbmZvcm1hdGlvbi5sYWJlbDsKIAotICAgIGlmICghX2Fzc2lzdGVkTm9kZUluZm9y
bWF0aW9uLmFyaWFMYWJlbC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBfYXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24uYXJpYUxhYmVsOworICAgIGlmICghX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRp
b24uYXJpYUxhYmVsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIF9mb2N1c2VkRWxlbWVudElu
Zm9ybWF0aW9uLmFyaWFMYWJlbDsKIAotICAgIGlmICghX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LnRpdGxlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bi50aXRsZTsKKyAgICBpZiAoIV9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLnRpdGxlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLnRpdGxlOwog
Ci0gICAgcmV0dXJuIF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5wbGFjZWhvbGRlcjsKKyAgICBy
ZXR1cm4gX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24ucGxhY2Vob2xkZXI7CiB9CiAKIC0gKE5T
U3RyaW5nICopaW5pdGlhbFZhbHVlRm9yVmlld0NvbnRyb2xsZXI6KFBVSUNRdWlja2JvYXJkVmll
d0NvbnRyb2xsZXIgKiljb250cm9sbGVyCiB7Ci0gICAgcmV0dXJuIF9hc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi52YWx1ZTsKKyAgICByZXR1cm4gX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24udmFs
dWU7CiB9CiAKIC0gKEJPT0wpc2hvdWxkRGlzcGxheUlucHV0Q29udGV4dFZpZXdGb3JMaXN0Vmll
d0NvbnRyb2xsZXI6KFBVSUNRdWlja2JvYXJkVmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyCiB7
Ci0gICAgc3dpdGNoIChfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFR5cGUpIHsKKyAg
ICBzd2l0Y2ggKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSB7CiAgICAg
Y2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6Q29udGVudEVkaXRhYmxlOgogICAgIGNhc2UgV2ViS2l0
OjpJbnB1dFR5cGU6OlRleHQ6CiAgICAgY2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6UGFzc3dvcmQ6
CkBAIC02MjA4LDcgKzYyMDgsNyBAQCAtIChCT09MKXNob3VsZERpc3BsYXlJbnB1dENvbnRleHRW
aWV3Rm9yTGlzdFZpZXdDb250cm9sbGVyOihQVUlDUXVpY2tib2FyZFZpZXdDbwogCiAtIChXS051
bWJlclBhZElucHV0TW9kZSludW1lcmljSW5wdXRNb2RlRm9yTGlzdFZpZXdDb250cm9sbGVyOihX
S1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIKIHsKLSAgICBzd2l0Y2gg
KF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkgeworICAgIHN3aXRjaCAoX2Zv
Y3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUpIHsKICAgICBjYXNlIFdlYktpdDo6
SW5wdXRUeXBlOjpQaG9uZToKICAgICAgICAgcmV0dXJuIFdLTnVtYmVyUGFkSW5wdXRNb2RlVGVs
ZXBob25lOwogICAgIGNhc2UgV2ViS2l0OjpJbnB1dFR5cGU6Ok51bWJlcjoKQEAgLTYyMjIsNyAr
NjIyMiw3IEBAIC0gKFdLTnVtYmVyUGFkSW5wdXRNb2RlKW51bWVyaWNJbnB1dE1vZGVGb3JMaXN0
Vmlld0NvbnRyb2xsZXI6KFdLVGV4dElucHV0TGlzdFZpCiAKIC0gKE5TU3RyaW5nICopdGV4dENv
bnRlbnRUeXBlRm9yTGlzdFZpZXdDb250cm9sbGVyOihXS1RleHRJbnB1dExpc3RWaWV3Q29udHJv
bGxlciAqKWNvbnRyb2xsZXIKIHsKLSAgICBzd2l0Y2ggKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bi5lbGVtZW50VHlwZSkgeworICAgIHN3aXRjaCAoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24u
ZWxlbWVudFR5cGUpIHsKICAgICBjYXNlIFdlYktpdDo6SW5wdXRUeXBlOjpQYXNzd29yZDoKICAg
ICAgICAgcmV0dXJuIFVJVGV4dENvbnRlbnRUeXBlUGFzc3dvcmQ7CiAgICAgY2FzZSBXZWJLaXQ6
OklucHV0VHlwZTo6VVJMOgpAQCAtNjIzMywxMCArNjIzMywxMCBAQCAtIChOU1N0cmluZyAqKXRl
eHRDb250ZW50VHlwZUZvckxpc3RWaWV3Q29udHJvbGxlcjooV0tUZXh0SW5wdXRMaXN0Vmlld0Nv
bnRyb2xsZQogICAgICAgICByZXR1cm4gVUlUZXh0Q29udGVudFR5cGVUZWxlcGhvbmVOdW1iZXI7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gVGhlIGVsZW1lbnQgdHlwZSBhbG9uZSBpcyBpbnN1
ZmZpY2llbnQgdG8gaW5mZXIgY29udGVudCB0eXBlOyBmYWxsIGJhY2sgdG8gYXV0b2ZpbGwgZGF0
YS4KLSAgICAgICAgaWYgKE5TU3RyaW5nICpjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlRnJvbUZp
ZWxkTmFtZShfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uYXV0b2ZpbGxGaWVsZE5hbWUpKQorICAg
ICAgICBpZiAoTlNTdHJpbmcgKmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVGcm9tRmllbGROYW1l
KF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmF1dG9maWxsRmllbGROYW1lKSkKICAgICAgICAg
ICAgIHJldHVybiBjb250ZW50VHlwZTsKIAotICAgICAgICBpZiAoX2Fzc2lzdGVkTm9kZUluZm9y
bWF0aW9uLmlzQXV0b2ZpbGxhYmxlVXNlcm5hbWVGaWVsZCkKKyAgICAgICAgaWYgKF9mb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLmlzQXV0b2ZpbGxhYmxlVXNlcm5hbWVGaWVsZCkKICAgICAgICAg
ICAgIHJldHVybiBVSVRleHRDb250ZW50VHlwZVVzZXJuYW1lOwogCiAgICAgICAgIHJldHVybiBu
aWw7CkBAIC02MjU2LDcgKzYyNTYsNyBAQCAtICh2b2lkKWxpc3RWaWV3Q29udHJvbGxlcjooV0tU
ZXh0SW5wdXRMaXN0Vmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyIGRpZFNlbGVjdAogCiAtIChC
T09MKWFsbG93c0RpY3RhdGlvbklucHV0Rm9yTGlzdFZpZXdDb250cm9sbGVyOihQVUlDUXVpY2ti
b2FyZFZpZXdDb250cm9sbGVyICopY29udHJvbGxlcgogewotICAgIHJldHVybiBfYXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24uZWxlbWVudFR5cGUgIT0gV2ViS2l0OjpJbnB1dFR5cGU6OlBhc3N3b3Jk
OworICAgIHJldHVybiBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSAhPSBX
ZWJLaXQ6OklucHV0VHlwZTo6UGFzc3dvcmQ7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShXQVRD
SE9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYkRhdGFMaXN0
U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
ZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MubW0KaW5kZXggNmYwN2Q4OTNhZjU5MWIz
NjQ5YjM0ZTZjOGVkY2E3N2QzYWE1MTM4ZC4uN2IzODgzM2ZiZWZmY2RlNzczMGQwMTI5ZDgzM2U4
NzliNTQwNTljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYkRh
dGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duSU9TLm1tCkBAIC0xOTAsNyAr
MTkwLDcgQEAgLSAoU3RyaW5nKXN1Z2dlc3Rpb25BdEluZGV4OihOU0ludGVnZXIpaW5kZXgKIAog
LSAoTlNUZXh0QWxpZ25tZW50KXRleHRBbGlnbm1lbnQKIHsKLSAgICByZXR1cm4gX3ZpZXcuYXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24uaXNSVEwgPyBOU1RleHRBbGlnbm1lbnRSaWdodCA6IE5TVGV4
dEFsaWdubWVudExlZnQ7CisgICAgcmV0dXJuIF92aWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRp
b24uaXNSVEwgPyBOU1RleHRBbGlnbm1lbnRSaWdodCA6IE5TVGV4dEFsaWdubWVudExlZnQ7CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tCmluZGV4IDY4YWEyYjEwMTVjMGRjZWJiZDI1NTIzNDAxYTc1NGIzZjI1ZDNiMjMuLmY2ZDMw
NGI4MTA2MWI1YWQ0MTg4MDZiZDg5ZDZiNzY3YWY0ZGJiYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAtMTg3LDkgKzE4Nyw5IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzZWxlY3Rpb25SZWN0c0NhbGxiYWNrKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpTZWxlY3Rpb25SZWN0PiYKICAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJl
dHVyblZhbHVlKHNlbGVjdGlvblJlY3RzKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uQ2FsbGJhY2soY29uc3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24m
IGluZm8sIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZVByb3h5Ojpmb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uQ2FsbGJhY2soY29uc3QgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlv
biYgaW5mbywgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewotICAgIGF1dG8gY2FsbGJhY2sgPSBt
X2NhbGxiYWNrcy50YWtlPEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uQ2FsbGJhY2s+KGNhbGxiYWNr
SUQpOworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlPEZvY3VzZWRFbGVtZW50
SW5mb3JtYXRpb25DYWxsYmFjaz4oY2FsbGJhY2tJRCk7CiAgICAgaWYgKCFjYWxsYmFjaykgewog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTk4LDcg
KzE5OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojphc3Npc3RlZE5vZGVJbmZvcm1hdGlvbkNhbGxi
YWNrKGNvbnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uCiAgICAgY2FsbGJhY2stPnBlcmZvcm1D
YWxsYmFja1dpdGhSZXR1cm5WYWx1ZShpbmZvKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnJl
cXVlc3RBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihGdW5jdGlvbjx2b2lkKGNvbnN0IEFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2spCit2b2lk
IFdlYlBhZ2VQcm94eTo6cmVxdWVzdEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24oRnVuY3Rpb248
dm9pZChjb25zdCBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJiwgQ2FsbGJhY2tCYXNlOjpFcnJv
cik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJh
Y2soeyB9LCBDYWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKQEAgLTIw
Niw3ICsyMDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdEFzc2lzdGVkTm9kZUluZm9y
bWF0aW9uKEZ1bmN0aW9uPHZvaWQoY29uc3QgQXNzaXN0ZWRObwogICAgIH0KIAogICAgIGF1dG8g
Y2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSwgbV9wcm9jZXNz
LT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlcXVlc3RBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihj
YWxsYmFja0lEKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6UmVxdWVzdEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24oY2FsbGJhY2tJRCksIG1fcGFn
ZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMo
Y29uc3QgVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbyYgdmlzaWJsZUNvbnRlbnRSZWN0VXBk
YXRlKQpAQCAtMjQ4LDcgKzI0OCw3IEBAIFdlYkNvcmU6OkZsb2F0UmVjdCBXZWJQYWdlUHJveHk6
OmNvbXB1dGVDdXN0b21GaXhlZFBvc2l0aW9uUmVjdChjb25zdCBGbG9hdFJlY3QmCiAgICAgRmxv
YXRSZWN0IGNvbnN0cmFpbmVkVW5vYnNjdXJlZFJlY3QgPSB1bm9ic2N1cmVkQ29udGVudFJlY3Q7
CiAgICAgRmxvYXRSZWN0IGRvY3VtZW50UmVjdCA9IHBhZ2VDbGllbnQoKS5kb2N1bWVudFJlY3Qo
KTsKIAotICAgIGlmICghdmlzdWFsVmlld3BvcnRFbmFibGVkICYmIHBhZ2VDbGllbnQoKS5pc0Fz
c2lzdGluZ05vZGUoKSkKKyAgICBpZiAoIXZpc3VhbFZpZXdwb3J0RW5hYmxlZCAmJiBwYWdlQ2xp
ZW50KCkuaXNGb2N1c2luZ0VsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGRvY3VtZW50UmVjdDsK
IAogICAgIGlmIChjb25zdHJhaW50ID09IEZyYW1lVmlldzo6TGF5b3V0Vmlld3BvcnRDb25zdHJh
aW50OjpDb25zdHJhaW5lZFRvRG9jdW1lbnRSZWN0KQpAQCAtMzgxLDExICszODEsOCBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TGF5ZXJUcmVlKGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb24mCiAgICAgICAgIGRpZFJlYWNoTGF5b3V0TWlsZXN0b25lKFdlYkNv
cmU6OlJlYWNoZWRTZXNzaW9uUmVzdG9yYXRpb25SZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCk7CiAg
ICAgfQogCi0gICAgaWYgKG1fZGVmZXJyZWROb2RlQXNzaXN0YW5jZUFyZ3VtZW50cykgewotICAg
ICAgICBwYWdlQ2xpZW50KCkuc3RhcnRBc3Npc3RpbmdOb2RlKG1fZGVmZXJyZWROb2RlQXNzaXN0
YW5jZUFyZ3VtZW50cy0+bV9ub2RlSW5mb3JtYXRpb24sIG1fZGVmZXJyZWROb2RlQXNzaXN0YW5j
ZUFyZ3VtZW50cy0+bV91c2VySXNJbnRlcmFjdGluZywgbV9kZWZlcnJlZE5vZGVBc3Npc3RhbmNl
QXJndW1lbnRzLT5tX2JsdXJQcmV2aW91c05vZGUsCi0gICAgICAgICAgICBtX2RlZmVycmVkTm9k
ZUFzc2lzdGFuY2VBcmd1bWVudHMtPm1fY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCBtX2RlZmVycmVk
Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHMtPm1fdXNlckRhdGEuZ2V0KCkpOwotICAgICAgICBtX2Rl
ZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHMgPSBudWxscHRyOwotICAgIH0KKyAgICBpZiAo
YXV0byBhcmd1bWVudHMgPSBzdGQ6OmV4Y2hhbmdlKG1fZGVmZXJyZWRFbGVtZW50RGlkRm9jdXNB
cmd1bWVudHMsIG51bGxwdHIpKQorICAgICAgICBwYWdlQ2xpZW50KCkuZWxlbWVudERpZEZvY3Vz
KGFyZ3VtZW50cy0+aW5mb3JtYXRpb24sIGFyZ3VtZW50cy0+dXNlcklzSW50ZXJhY3RpbmcsIGFy
Z3VtZW50cy0+Ymx1clByZXZpb3VzTm9kZSwgYXJndW1lbnRzLT5jaGFuZ2luZ0FjdGl2aXR5U3Rh
dGUsIGFyZ3VtZW50cy0+dXNlckRhdGEuZ2V0KCkpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6
dXBkYXRlTGF5b3V0Vmlld3BvcnRQYXJhbWV0ZXJzKGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24mIGxheWVyVHJlZVRyYW5zYWN0aW9uKQpAQCAtNDA5LDcgKzQwNiw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpsYXllclRyZWVDb21taXRDb21wbGV0ZSgpCiAgICAgcGFnZUNs
aWVudCgpLmxheWVyVHJlZUNvbW1pdENvbXBsZXRlKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgV2ViQ29y
ZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWlu
dDMyX3QgZ2VzdHVyZVN0YXRlLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVp
bnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlv
bikKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCB1aW50
MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBib29sIGlzSW50ZXJhY3Rp
bmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJy
b3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbihXZWJDb3JlOjpJbnRQb2ludCgpLCAwLCAwLCAwLCBDYWxsYmFj
a0Jhc2U6OkVycm9yOjpVbmtub3duKTsKQEAgLTQxNyw3ICs0MTQsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdl
YkNvcmU6OlRleAogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1
dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eVRva2VuKCkpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U2VsZWN0V2l0aEdlc3R1cmUocG9pbnQsICh1aW50MzJfdClncmFudWxhcml0eSwgZ2Vz
dHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIGNh
bGxiYWNrSUQpLCBtX3BhZ2VJRCk7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZWxlY3RXaXRoR2VzdHVyZShwb2ludCwgKHVpbnQzMl90KWdyYW51bGFyaXR5LCBnZXN0
dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBj
YWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlU2Vs
ZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90
IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3Ip
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC00NzAsNyArNDY3LDcgQEAgYm9vbCBXZWJQYWdlUHJv
eHk6OmFwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBT
dHJpbmcmIG8KICAgICByZXR1cm4gYXV0b2NvcnJlY3Rpb25BcHBsaWVkOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwg
Ym9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkIChD
YWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJQYWdlUHJv
eHk6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50IHBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgaXNJ
bnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV1RGOjpGdW5jdGlvbjx2b2lkKENhbGxiYWNr
QmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkp
IHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3du
KTsKQEAgLTQ3OCwxMCArNDc1LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RUZXh0V2l0
aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2luCiAgICAgfQog
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eVRv
a2VuKCkpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0VGV4
dFdpdGhHcmFudWxhcml0eUF0UG9pbnQocG9pbnQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihncmFu
dWxhcml0eSksIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBjYWxsYmFja0lEKSwgbV9w
YWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0VGV4
dFdpdGhHcmFudWxhcml0eUF0UG9pbnQocG9pbnQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihncmFu
dWxhcml0eSksIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIGNhbGxiYWNrSUQpLCBt
X3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRh
cnlXaXRoRGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdURjo6RnVuY3Rp
b248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQg
V2ViUGFnZVByb3h5OjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgaXNJbnRl
cmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV1RGOjpGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFz
ZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsK
ICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsK
QEAgLTQ4OSw3ICs0ODYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdEJv
dW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludAogICAgIH0KICAgICAK
ICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigp
KTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdFBvc2l0aW9u
QXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24ocG9pbnQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihncmFu
dWxhcml0eSksIHN0YXRpY19jYXN0PHVpbnQzMl90PihkaXJlY3Rpb24pLCBpc0ludGVyYWN0aW5n
V2l0aEFzc2lzdGVkTm9kZSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKKyAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJl
Y3Rpb24ocG9pbnQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihncmFudWxhcml0eSksIHN0YXRpY19j
YXN0PHVpbnQzMl90PihkaXJlY3Rpb24pLCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50
LCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bW92ZVNl
bGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgV1RGOjpG
dW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBA
IC01MDMsNyArNTAwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6Om1vdmVTZWxlY3Rpb25BdEJvdW5k
YXJ5V2l0aERpcmVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkKICAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Ok1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVj
dGlvbihzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ3JhbnVsYXJpdHkpLCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oZGlyZWN0aW9uKSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KICAgICAKLXZvaWQg
V2ViUGFnZVByb3h5OjpzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQgcG9pbnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdURjo6RnVuY3Rp
b248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQg
V2ViUGFnZVByb3h5OjpzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQgcG9pbnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV1RGOjpGdW5j
dGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAg
ICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jh
c2U6OkVycm9yOjpVbmtub3duKTsKQEAgLTUxMSw3ICs1MDgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBi
b29sIGlzSQogICAgIH0KICAgICAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5w
dXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNr
Z3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNlbGVjdFBvc2l0aW9uQXRQb2ludChwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhBc3Np
c3RlZE5vZGUsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZWxlY3RQb3NpdGlvbkF0UG9pbnQocG9pbnQsIGlzSW50ZXJhY3Rp
bmdXaXRoRm9jdXNlZEVsZW1lbnQsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpiZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKFdlYkNvcmU6OlNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248dm9pZCAodWludDY0X3QsIENhbGxi
YWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC01MjUsNyArNTIyLDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmJlZ2luU2VsZWN0aW9uSW5EaXJlY3Rpb24oV2ViQ29yZTo6U2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGkKICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkJlZ2luU2VsZWN0aW9uSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBjYWxsYmFja0lEKSwg
bV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4
dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBib29sIGlzSW50ZXJhY3Rp
bmdXaXRoQXNzaXN0ZWROb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKHVpbnQ2NF90LCBDYWxsYmFj
a0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJQYWdlUHJveHk6OnVw
ZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2lu
dCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXVEY6OkZ1bmN0aW9uPHZv
aWQodWludDY0X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7
CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigwLCBDYWxs
YmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsKQEAgLTUzMywxMSArNTMwLDExIEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQgcG9pbnQsCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2Fs
bGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxl
cigpLmJhY2tncm91bmRBY3Rpdml0eVRva2VuKCkpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6VXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KHBvaW50LCBpc0lu
dGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKKyAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZVNlbGVjdGlvbldpdGhFeHRl
bnRQb2ludChwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgY2FsbGJhY2tJ
RCksIG1fcGFnZUlEKTsKICAgICAKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVNlbGVj
dGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBv
aW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFj
dGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdURjo6RnVuY3Rpb248dm9pZCh1aW50NjRfdCwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1
cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29s
IGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZCh1aW50
NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKICAgICBp
ZiAoIWlzVmFsaWQoKSkgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKDAsIENhbGxiYWNrQmFz
ZTo6RXJyb3I6OlVua25vd24pOwpAQCAtNTQ1LDcgKzU0Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
Ojp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3Jl
OjpJbnRQCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1
dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eVRva2VuKCkpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6VXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkocG9pbnQsIGdy
YW51bGFyaXR5LCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgY2FsbGJhY2tJRCksIG1f
cGFnZUlEKTsKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZVNl
bGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KHBvaW50LCBncmFudWxhcml0eSwgaXNJ
bnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKICAg
ICAKIH0KIApAQCAtODQ4LDkgKzg0NSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjppbnNwZWN0b3JO
b2RlU2VhcmNoRW5kZWRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmCiAgICAg
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okluc3BlY3Rvck5vZGVTZWFyY2hFbmRl
ZEF0UG9zaXRpb24ocG9zaXRpb24pLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpibHVyQXNzaXN0ZWROb2RlKCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpibHVyRm9jdXNlZEVsZW1l
bnQoKQogewotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpCbHVyQXNzaXN0
ZWROb2RlKCksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6Qmx1ckZvY3VzZWRFbGVtZW50KCksIG1fcGFnZUlEKTsKIH0KIAogRmxvYXRTaXplIFdlYlBh
Z2VQcm94eTo6c2NyZWVuU2l6ZSgpCkBAIC04OTMsMjQgKzg5MCwyNSBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkR2V0VGFwSGlnaGxpZ2h0R2VvbWV0cmllcyh1aW50NjRfdCByZXF1ZXN0SUQsIGNv
bnN0IFdlYkNvcgogICAgIHBhZ2VDbGllbnQoKS5kaWRHZXRUYXBIaWdobGlnaHRHZW9tZXRyaWVz
KHJlcXVlc3RJRCwgY29sb3IsIGhpZ2hsaWdodGVkUXVhZHMsIHRvcExlZnRSYWRpdXMsIHRvcFJp
Z2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CiB9CiAKLXZv
aWQgV2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUoY29uc3QgQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24mIGluZm9ybWF0aW9uLCBib29sIHVzZXJJc0ludGVyYWN0aW5nLCBib29sIGJsdXJQ
cmV2aW91c05vZGUsIGJvb2wgY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCBjb25zdCBVc2VyRGF0YSYg
dXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZWxlbWVudERpZEZvY3VzKGNvbnN0IEZvY3Vz
ZWRFbGVtZW50SW5mb3JtYXRpb24mIGluZm9ybWF0aW9uLCBib29sIHVzZXJJc0ludGVyYWN0aW5n
LCBib29sIGJsdXJQcmV2aW91c05vZGUsIGJvb2wgY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCBjb25z
dCBVc2VyRGF0YSYgdXNlckRhdGEpCiB7CiAgICAgbV93YWl0aW5nRm9yUG9zdExheW91dEVkaXRv
clN0YXRlVXBkYXRlQWZ0ZXJGb2N1c2luZ0VsZW1lbnQgPSB0cnVlOwogCiAgICAgQVBJOjpPYmpl
Y3QqIHVzZXJEYXRhT2JqZWN0ID0gcHJvY2VzcygpLnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHMo
dXNlckRhdGEub2JqZWN0KCkpLmdldCgpOwogICAgIGlmIChtX2VkaXRvclN0YXRlLmlzTWlzc2lu
Z1Bvc3RMYXlvdXREYXRhKSB7Ci0gICAgICAgIG1fZGVmZXJyZWROb2RlQXNzaXN0YW5jZUFyZ3Vt
ZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHM+KE5vZGVBc3Np
c3RhbmNlQXJndW1lbnRzIHsgaW5mb3JtYXRpb24sIHVzZXJJc0ludGVyYWN0aW5nLCBibHVyUHJl
dmlvdXNOb2RlLCBjaGFuZ2luZ0FjdGl2aXR5U3RhdGUsIHVzZXJEYXRhT2JqZWN0IH0pOworICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyeSB0byBlbGltaW5hdGUgbV9kZWZlcnJlZEVsZW1l
bnREaWRGb2N1c0FyZ3VtZW50cyBhbHRvZ2V0aGVyLCBpbiBmYXZvciBvZiBvbmx5IGRlZmVycmlu
ZyBhY3Rpb25zIHRoYXQgYXJlIGRlcGVuZGVudCBvbiBwb3N0LWxheW91dCBlZGl0b3Igc3RhdGUg
aW5mb3JtYXRpb24uCisgICAgICAgIG1fZGVmZXJyZWRFbGVtZW50RGlkRm9jdXNBcmd1bWVudHMg
PSBzdGQ6Om1ha2VfdW5pcXVlPEVsZW1lbnREaWRGb2N1c0FyZ3VtZW50cz4oRWxlbWVudERpZEZv
Y3VzQXJndW1lbnRzIHsgaW5mb3JtYXRpb24sIHVzZXJJc0ludGVyYWN0aW5nLCBibHVyUHJldmlv
dXNOb2RlLCBjaGFuZ2luZ0FjdGl2aXR5U3RhdGUsIHVzZXJEYXRhT2JqZWN0IH0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcGFnZUNsaWVudCgpLnN0YXJ0QXNzaXN0aW5nTm9kZShp
bmZvcm1hdGlvbiwgdXNlcklzSW50ZXJhY3RpbmcsIGJsdXJQcmV2aW91c05vZGUsIGNoYW5naW5n
QWN0aXZpdHlTdGF0ZSwgdXNlckRhdGFPYmplY3QpOworICAgIHBhZ2VDbGllbnQoKS5lbGVtZW50
RGlkRm9jdXMoaW5mb3JtYXRpb24sIHVzZXJJc0ludGVyYWN0aW5nLCBibHVyUHJldmlvdXNOb2Rl
LCBjaGFuZ2luZ0FjdGl2aXR5U3RhdGUsIHVzZXJEYXRhT2JqZWN0KTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OnN0b3BBc3Npc3RpbmdOb2RlKCkKK3ZvaWQgV2ViUGFnZVByb3h5OjplbGVtZW50
RGlkQmx1cigpCiB7CiAgICAgbV93YWl0aW5nRm9yUG9zdExheW91dEVkaXRvclN0YXRlVXBkYXRl
QWZ0ZXJGb2N1c2luZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICBtX2RlZmVycmVkTm9kZUFzc2lzdGFu
Y2VBcmd1bWVudHMgPSBudWxscHRyOwotICAgIHBhZ2VDbGllbnQoKS5zdG9wQXNzaXN0aW5nTm9k
ZSgpOworICAgIG1fZGVmZXJyZWRFbGVtZW50RGlkRm9jdXNBcmd1bWVudHMgPSBudWxscHRyOwor
ICAgIHBhZ2VDbGllbnQoKS5lbGVtZW50RGlkQmx1cigpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0
IFN0cmluZyYgcGFzc3dvcmQpCkBAIC05NDgsNyArOTQ2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRpc2FibGVJbnNwZWN0b3JOb2RlU2VhcmNoKCkKICAgICBwYWdlQ2xpZW50KCkuZGlzYWJsZUlu
c3BlY3Rvck5vZGVTZWFyY2goKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmZvY3VzTmV4dEFz
c2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJQYWdlUHJveHk6OmZvY3Vz
TmV4dEZvY3VzZWRFbGVtZW50KGJvb2wgaXNGb3J3YXJkLCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKICAgICBpZiAoIWlzVmFs
aWQoKSkgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6OlVu
a25vd24pOwpAQCAtOTU2LDIyICs5NTQsMjIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZvY3VzTmV4
dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgV1RGOjpGdW5jdGlvbjx2b2lkIChDYWwKICAg
ICB9CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2
aXR5VG9rZW4oKSk7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZvY3Vz
TmV4dEFzc2lzdGVkTm9kZShpc0ZvcndhcmQsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CisgICAg
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZvY3VzTmV4dEZvY3VzZWRFbGVtZW50
KGlzRm9yd2FyZCwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJv
eHk6OnNldEFzc2lzdGVkTm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewot
ICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBc3Npc3RlZE5vZGVWYWx1
ZSh2YWx1ZSksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6U2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZSh2YWx1ZSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBX
ZWJQYWdlUHJveHk6OnNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIoZG91YmxlIHZhbHVlKQor
dm9pZCBXZWJQYWdlUHJveHk6OnNldEZvY3VzZWRFbGVtZW50VmFsdWVBc051bWJlcihkb3VibGUg
dmFsdWUpCiB7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFzc2lz
dGVkTm9kZVZhbHVlQXNOdW1iZXIodmFsdWUpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEZvY3VzZWRFbGVtZW50VmFsdWVBc051bWJlcih2YWx1
ZSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldEFzc2lzdGVkTm9kZVNl
bGVjdGVkSW5kZXgodWludDMyX3QgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikK
K3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRGb2N1c2VkRWxlbWVudFNlbGVjdGVkSW5kZXgodWludDMy
X3QgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikKIHsKLSAgICBwcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleChpbmRl
eCwgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Rm9jdXNlZEVsZW1lbnRTZWxlY3RlZEluZGV4KGluZGV4
LCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgRGljdGlvbmFyeVBvcHVwSW5m
byYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3Jt
Q29sb3JQaWNrZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3Jt
Q29sb3JQaWNrZXIubW0KaW5kZXggMzRiNGY4ZDFlODZhZjQ4NjNlZTg5ODMxNDlhOTJhMzJhZDky
ZGI1NS4uZGFhYzkwYWEwZjhiNWQ2NDJmNjI3YzhlOGMyNzYwNDM5N2IzZTJlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybUNvbG9yUGlja2VyLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1Db2xvclBpY2tl
ci5tbQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpICYm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLSNpbXBvcnQgIkFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LmgiCisjaW1wb3J0ICJGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmgiCiAjaW1wb3J0ICJVSUtp
dFNQSS5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgiCiAjaW1wb3J0ICJX
S0Zvcm1Qb3BvdmVyLmgiCkBAIC0xOTYsMTEgKzE5NiwxMSBAQCAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldwogICAgIE5TQXJyYXk8TlNBcnJheTxVSUNv
bG9yICo+ICo+ICp0b3BDb2xvck1hdHJpeCA9IFtbc2VsZiBjbGFzc10gZGVmYXVsdFRvcENvbG9y
TWF0cml4XTsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAgIHNpemVfdCBudW1D
b2xvclN1Z2dlc3Rpb25zID0gdmlldy5hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5zdWdnZXN0ZWRD
b2xvcnMuc2l6ZSgpOworICAgIHNpemVfdCBudW1Db2xvclN1Z2dlc3Rpb25zID0gdmlldy5mb2N1
c2VkRWxlbWVudEluZm9ybWF0aW9uLnN1Z2dlc3RlZENvbG9ycy5zaXplKCk7CiAgICAgaWYgKG51
bUNvbG9yU3VnZ2VzdGlvbnMpIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXk8VUlDb2xvciAqPiAq
Y29sb3JzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdGQ6Om1pbihudW1Db2xvclN1Z2dlc3Rpb25zLCBtYXhDb2xvclN1Z2dlc3Rpb25z
KTsgaSsrKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xvciA9IHZpZXcuYXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uc3VnZ2VzdGVkQ29sb3JzW2ldOworICAgICAgICAgICAgV2ViQ29y
ZTo6Q29sb3IgY29sb3IgPSB2aWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uc3VnZ2VzdGVk
Q29sb3JzW2ldOwogICAgICAgICAgICAgW2NvbG9ycyBhZGRPYmplY3Q6W1VJQ29sb3IgY29sb3JX
aXRoQ0dDb2xvcjpjYWNoZWRDR0NvbG9yKGNvbG9yKV1dOwogICAgICAgICB9CiAgICAgICAgIHRv
cENvbG9yTWF0cml4ID0gQFsgY29sb3JzIF07CkBAIC0yNjMsNyArMjYzLDcgQEAgLSAodm9pZClk
cmF3U2VsZWN0aW9uSW5kaWNhdG9yRm9yQ29sb3JCdXR0b246KFdLQ29sb3JCdXR0b24gKiljb2xv
ckJ1dHRvbgogLSAodm9pZClzZXRDb250cm9sVmFsdWVGcm9tVUlDb2xvcjooVUlDb2xvciAqKXVp
Q29sb3IKIHsKICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcih1aUNvbG9yLkNHQ29sb3IpOwotICAg
IFtfdmlldyBwYWdlXS0+c2V0QXNzaXN0ZWROb2RlVmFsdWUoY29sb3Iuc2VyaWFsaXplZCgpKTsK
KyAgICBbX3ZpZXcgcGFnZV0tPnNldEZvY3VzZWRFbGVtZW50VmFsdWUoY29sb3Iuc2VyaWFsaXpl
ZCgpKTsKIH0KIAogI3ByYWdtYSBtYXJrIFdLRm9ybUNvbnRyb2wKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1JbnB1dENvbnRyb2wubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtSW5wdXRDb250cm9sLm1tCmluZGV4
IDJiYjAyY2E2N2ViOGViODRkMWEwZmI3NzY3N2Y3MGViYjhlNzU1MWMuLjk4ZTE0Njc4ZTE3ZDQ2
ZGE5OTQ1OWY1YjZkMWQwNTRlODBkNTA0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1JbnB1dENvbnRyb2wubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybUlucHV0Q29udHJvbC5tbQpAQCAtODcsNyArODcs
NyBAQCAtIChpZClpbml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3IGRhdGVQaWNrZXJN
b2RlOihVSURhdGVQaWNrZXJNb2RlKW1vZGUKICAgICBfdmlldyA9IHZpZXc7CiAgICAgX3Nob3Vs
ZFJlbW92ZVRpbWVab25lSW5mb3JtYXRpb24gPSBOTzsKICAgICBfaXNUaW1lSW5wdXQgPSBOTzsK
LSAgICBzd2l0Y2ggKHZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFR5cGUpIHsK
KyAgICBzd2l0Y2ggKHZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkg
ewogICAgIGNhc2UgSW5wdXRUeXBlOjpEYXRlOgogICAgICAgICBfZm9ybWF0U3RyaW5nID0ga0Rh
dGVGb3JtYXRTdHJpbmc7CiAgICAgICAgIGJyZWFrOwpAQCAtMTExLDcgKzExMSw3IEBAIC0gKGlk
KWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXcgZGF0ZVBpY2tlck1vZGU6KFVJRGF0
ZVBpY2tlck1vZGUpbW9kZQogICAgIF9kYXRlUGlja2VyLmdldCgpLmRhdGVQaWNrZXJNb2RlID0g
bW9kZTsKICAgICBfZGF0ZVBpY2tlci5nZXQoKS5oaWRkZW4gPSBOTzsKICAgICAKLSAgICBpZiAo
W3NlbGYgc2hvdWxkUHJlc2VudEdyZWdvcmlhbkNhbGVuZGFyOnZpZXcuYXNzaXN0ZWROb2RlSW5m
b3JtYXRpb25dKQorICAgIGlmIChbc2VsZiBzaG91bGRQcmVzZW50R3JlZ29yaWFuQ2FsZW5kYXI6
dmlldy5mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uXSkKICAgICAgICAgX2RhdGVQaWNrZXIuZ2V0
KCkuY2FsZW5kYXIgPSBbTlNDYWxlbmRhciBjYWxlbmRhcldpdGhJZGVudGlmaWVyOk5TQ2FsZW5k
YXJJZGVudGlmaWVyR3JlZ29yaWFuXTsKICAgICAKICAgICBbX2RhdGVQaWNrZXIgYWRkVGFyZ2V0
OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfZGF0ZUNoYW5nZUhhbmRsZXI6KSBmb3JDb250cm9sRXZl
bnRzOlVJQ29udHJvbEV2ZW50VmFsdWVDaGFuZ2VkXTsKQEAgLTEzMCw3ICsxMzAsNyBAQCAtICh2
b2lkKWRlYWxsb2MKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKLS0gKEJPT0wpc2hvdWxkUHJl
c2VudEdyZWdvcmlhbkNhbGVuZGFyOihjb25zdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYpbm9k
ZUluZm8KKy0gKEJPT0wpc2hvdWxkUHJlc2VudEdyZWdvcmlhbkNhbGVuZGFyOihjb25zdCBGb2N1
c2VkRWxlbWVudEluZm9ybWF0aW9uJilub2RlSW5mbwogewogICAgIHJldHVybiBub2RlSW5mby5h
dXRvZmlsbEZpZWxkTmFtZSA9PSBXZWJDb3JlOjpBdXRvZmlsbEZpZWxkTmFtZTo6Q2NFeHBNb250
aAogICAgICAgICB8fCBub2RlSW5mby5hdXRvZmlsbEZpZWxkTmFtZSA9PSBXZWJDb3JlOjpBdXRv
ZmlsbEZpZWxkTmFtZTo6Q2NFeHAKQEAgLTE2Myw3ICsxNjMsNyBAQCAtIChOU1N0cmluZyAqKV9z
YW5pdGl6ZUlucHV0VmFsdWVGb3JGb3JtYXR0ZXI6KE5TU3RyaW5nICopdmFsdWUKIC0gKHZvaWQp
X2RhdGVDaGFuZ2VkU2V0QXNOdW1iZXIKIHsKICAgICBOU0RhdGUgKmRhdGUgPSBbX2RhdGVQaWNr
ZXIgZGF0ZV07Ci0gICAgW192aWV3IHBhZ2VdLT5zZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVy
KChbZGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdICsgW3NlbGYgX3RpbWVab25lT2Zmc2V0RnJv
bUdNVDpkYXRlXSkgKiBrTWlsbGlzZWNvbmRzUGVyU2Vjb25kKTsKKyAgICBbX3ZpZXcgcGFnZV0t
PnNldEZvY3VzZWRFbGVtZW50VmFsdWVBc051bWJlcigoW2RhdGUgdGltZUludGVydmFsU2luY2Ux
OTcwXSArIFtzZWxmIF90aW1lWm9uZU9mZnNldEZyb21HTVQ6ZGF0ZV0pICoga01pbGxpc2Vjb25k
c1BlclNlY29uZCk7CiB9CiAKIC0gKFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+KWRhdGVGb3Jt
YXR0ZXJGb3JQaWNrZXIKQEAgLTE4MSw3ICsxODEsNyBAQCAtICh2b2lkKV9kYXRlQ2hhbmdlZFNl
dEFzU3RyaW5nCiAgICAgLy8gRm9yY2UgRW5nbGlzaCBsb2NhbGUgYmVjYXVzZSB0aGF0IGlzIHdo
YXQgSFRNTDUgdmFsdWUgcGFyc2luZyBleHBlY3RzLgogICAgIFJldGFpblB0cjxOU0RhdGVGb3Jt
YXR0ZXI+IGRhdGVGb3JtYXR0ZXIgPSBbc2VsZiBkYXRlRm9ybWF0dGVyRm9yUGlja2VyXTsKIAot
ICAgIFtfdmlldyBwYWdlXS0+c2V0QXNzaXN0ZWROb2RlVmFsdWUoW2RhdGVGb3JtYXR0ZXIgc3Ry
aW5nRnJvbURhdGU6W19kYXRlUGlja2VyIGRhdGVdXSk7CisgICAgW192aWV3IHBhZ2VdLT5zZXRG
b2N1c2VkRWxlbWVudFZhbHVlKFtkYXRlRm9ybWF0dGVyIHN0cmluZ0Zyb21EYXRlOltfZGF0ZVBp
Y2tlciBkYXRlXV0pOwogfQogCiAtICh2b2lkKV9kYXRlQ2hhbmdlZApAQCAtMjA4LDggKzIwOCw4
IEBAIC0gKHZvaWQpY29udHJvbEJlZ2luRWRpdGluZwogCiAgICAgLy8gQ3VycmVudGx5IG5vIHZh
bHVlIGZvciB0aGUgPGlucHV0Pi4gU3RhcnQgdGhlIHBpY2tlciB3aXRoIHRoZSBjdXJyZW50IHRp
bWUuCiAgICAgLy8gQWxzbywgdXBkYXRlIHRoZSBhY3R1YWwgPGlucHV0PiB2YWx1ZS4KLSAgICBO
U1N0cmluZyAqdmFsdWUgPSBfdmlldy5hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi52YWx1ZTsKLSAg
ICBpZiAoX3ZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24udmFsdWUuaXNFbXB0eSgpKSB7Cisg
ICAgTlNTdHJpbmcgKnZhbHVlID0gX3ZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi52YWx1
ZTsKKyAgICBpZiAoX3ZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi52YWx1ZS5pc0VtcHR5
KCkpIHsKICAgICAgICAgW19kYXRlUGlja2VyIHNldERhdGU6W05TRGF0ZSBkYXRlXV07CiAgICAg
ICAgIFtzZWxmIF9kYXRlQ2hhbmdlZF07CiAgICAgICAgIHJldHVybjsKQEAgLTIyNSw3ICsyMjUs
NyBAQCAtICh2b2lkKWNvbnRyb2xCZWdpbkVkaXRpbmcKICAgICB9CiAKICAgICAvLyBDb252ZXJ0
IHRoZSBudW1iZXIgdmFsdWUgdG8gYSBkYXRlIG9iamVjdCBmb3IgdGhlIGZpZWxkcyBhZmZlY3Rl
ZCBieSB0aW1lem9uZXMuCi0gICAgTlNUaW1lSW50ZXJ2YWwgc2Vjb25kc1NpbmNlMTk3MCA9IF92
aWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnZhbHVlQXNOdW1iZXIgLyBrTWlsbGlzZWNvbmRz
UGVyU2Vjb25kOworICAgIE5TVGltZUludGVydmFsIHNlY29uZHNTaW5jZTE5NzAgPSBfdmlldy5m
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLnZhbHVlQXNOdW1iZXIgLyBrTWlsbGlzZWNvbmRzUGVy
U2Vjb25kOwogICAgIE5TSW50ZWdlciB0aW1lWm9uZU9mZnNldCA9IFtzZWxmIF90aW1lWm9uZU9m
ZnNldEZyb21HTVQ6W05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpzZWNvbmRz
U2luY2UxOTcwXV07CiAgICAgTlNUaW1lSW50ZXJ2YWwgYWRqdXN0ZWRTZWNvbmRzU2luY2UxOTcw
ID0gc2Vjb25kc1NpbmNlMTk3MCAtIHRpbWVab25lT2Zmc2V0OwogICAgIFtfZGF0ZVBpY2tlciBz
ZXREYXRlOltOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6YWRqdXN0ZWRTZWNv
bmRzU2luY2UxOTcwXV07CkBAIC0yNDksNyArMjQ5LDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXcKIAogICAgIFVJRGF0ZVBpY2tlck1vZGUgbW9k
ZTsKIAotICAgIHN3aXRjaCAodmlldy5hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlw
ZSkgeworICAgIHN3aXRjaCAodmlldy5mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRU
eXBlKSB7CiAgICAgY2FzZSBJbnB1dFR5cGU6OkRhdGU6CiAgICAgICAgIG1vZGUgPSBVSURhdGVQ
aWNrZXJNb2RlRGF0ZTsKICAgICAgICAgYnJlYWs7CkBAIC0zMzQsNyArMzM0LDcgQEAgQGltcGxl
bWVudGF0aW9uIFdLRGF0ZVRpbWVQb3BvdmVyCiAKIC0gKHZvaWQpY2xlYXI6KGlkKXNlbmRlcgog
ewotICAgIFtfdmlldyBwYWdlXS0+c2V0QXNzaXN0ZWROb2RlVmFsdWUoU3RyaW5nKCkpOworICAg
IFtfdmlldyBwYWdlXS0+c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZShTdHJpbmcoKSk7CiB9CiAKIC0g
KGlkKWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXcgZGF0ZVBpY2tlck1vZGU6KFVJ
RGF0ZVBpY2tlck1vZGUpbW9kZQpAQCAtMzQ5LDcgKzM0OSw3IEBAIC0gKGlkKWluaXRXaXRoVmll
dzooV0tDb250ZW50VmlldyAqKXZpZXcgZGF0ZVBpY2tlck1vZGU6KFVJRGF0ZVBpY2tlck1vZGUp
bW9kZQogICAgIENHRmxvYXQgcG9wb3ZlckhlaWdodCA9IF92aWV3Q29udHJvbGxlci5nZXQoKS52
aWV3LmZyYW1lLnNpemUuaGVpZ2h0OwogICAgIFtfdmlld0NvbnRyb2xsZXIgc2V0UHJlZmVycmVk
Q29udGVudFNpemU6Q0dTaXplTWFrZShwb3BvdmVyV2lkdGgsIHBvcG92ZXJIZWlnaHQpXTsKICAg
ICBbX3ZpZXdDb250cm9sbGVyIHNldEVkZ2VzRm9yRXh0ZW5kZWRMYXlvdXQ6VUlSZWN0RWRnZU5v
bmVdOwotICAgIFtfdmlld0NvbnRyb2xsZXIgc2V0VGl0bGU6X3ZpZXcuYXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24udGl0bGVdOworICAgIFtfdmlld0NvbnRyb2xsZXIgc2V0VGl0bGU6X3ZpZXcuZm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbi50aXRsZV07CiAKICAgICAvLyBBbHdheXMgaGF2ZSBhIG5h
dmlnYXRpb24gY29udHJvbGxlciB3aXRoIGEgY2xlYXIgYnV0dG9uLCBhbmQgYSB0aXRsZSBpZiB0
aGUgaW5wdXQgZWxlbWVudCBoYXMgYSB0aXRsZS4KICAgICBSZXRhaW5QdHI8VUlOYXZpZ2F0aW9u
Q29udHJvbGxlcj4gbmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbVUlOYXZpZ2F0aW9u
Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhSb290Vmlld0NvbnRyb2xsZXI6X3ZpZXdDb250cm9s
bGVyLmdldCgpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9y
bXMvV0tGb3JtUG9wb3Zlci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9X
S0Zvcm1Qb3BvdmVyLm1tCmluZGV4IDk5ZmY3MmIxZTJlYmU5MTFkOGYzYWM5MDdkNmFkN2I1NmUw
N2ZmMWMuLjA3ZWVlMDNjYTZkYzkzNGFiNTc5NzkzOTkwYTM4YTI0YmM5ODQwZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1Qb3BvdmVyLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1Qb3BvdmVyLm1tCkBA
IC0xNDIsNyArMTQyLDcgQEAgLSAodm9pZClwcmVzZW50UG9wb3ZlckFuaW1hdGVkOihCT09MKWFu
aW1hdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdHRlZEFycm93RGlyZWN0aW9u
czpkaXJlY3Rpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bmltYXRlZDphbmltYXRlZF07CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQ0dSZWN0IGJvdW5kaW5n
Qm94T2ZET01Ob2RlID0gX3ZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFJlY3Q7
CisgICAgICAgIENHUmVjdCBib3VuZGluZ0JveE9mRE9NTm9kZSA9IF92aWV3LmZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uZWxlbWVudFJlY3Q7CiAgICAgICAgIFtfcG9wb3ZlckNvbnRyb2xsZXIg
cHJlc2VudFBvcG92ZXJGcm9tUmVjdDpDR1JlY3RJbnRlZ3JhbChib3VuZGluZ0JveE9mRE9NTm9k
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5WaWV3Ol92
aWV3CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdHRlZEFycm93RGlyZWN0aW9uczpk
aXJlY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMv
V0tGb3JtU2VsZWN0Q29udHJvbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1z
L1dLRm9ybVNlbGVjdENvbnRyb2wuaAppbmRleCA0MDI1MjBhMjBlNzE1OTU5NDkyMjU3NDkzOWNh
ZTRlZjM0M2Y1OTA1Li43YmU2NTFhODA0YTg5NmU5MGQ2MWNkNTg4ZTYyOTQ4MDVmODI2MjQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0
Q29udHJvbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1T
ZWxlY3RDb250cm9sLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAKLSNpbXBvcnQgIkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgiCisjaW1wb3J0ICJGb2N1
c2VkRWxlbWVudEluZm9ybWF0aW9uLmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgogI2ltcG9ydCAi
V0tGb3JtUGVyaXBoZXJhbC5oIgogI2ltcG9ydCAiV0tGb3JtUG9wb3Zlci5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdENvbnRyb2wu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0Q29udHJv
bC5tbQppbmRleCAwOTc4NjVhMTAxOWJkYjcxZWVhMTU3Yzk5ZjY5OGY0M2YwMjAyNzJhLi4zYjk0
OGQxYWQ0ZGI1MWZmMTJiMmViMDc5NDMyOTljMWEzMTEyZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0Q29udHJvbC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0Q29udHJvbC5tbQpA
QCAtNjksOCArNjksOCBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRW
aWV3ICopdmlldwogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgYm9vbCBoYXNHcm91cHMgPSBm
YWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZXcuYXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24uc2VsZWN0T3B0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAodmlldy5hc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbi5zZWxlY3RPcHRpb25zW2ldLmlzR3JvdXApIHsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5zZWxlY3RP
cHRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICh2aWV3LmZvY3VzZWRFbGVtZW50SW5m
b3JtYXRpb24uc2VsZWN0T3B0aW9uc1tpXS5pc0dyb3VwKSB7CiAgICAgICAgICAgICBoYXNHcm91
cHMgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTc4LDcgKzc4LDcg
QEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXcKIAog
ICAgIGlmIChjdXJyZW50VXNlckludGVyZmFjZUlkaW9tSXNQYWQoKSkKICAgICAgICAgX2NvbnRy
b2wgPSBhZG9wdE5TKFtbV0tTZWxlY3RQb3BvdmVyIGFsbG9jXSBpbml0V2l0aFZpZXc6dmlldyBo
YXNHcm91cHM6aGFzR3JvdXBzXSk7Ci0gICAgZWxzZSBpZiAodmlldy5hc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5pc011bHRpU2VsZWN0IHx8IGhhc0dyb3VwcykKKyAgICBlbHNlIGlmICh2aWV3LmZv
Y3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdCB8fCBoYXNHcm91cHMpCiAgICAg
ICAgIF9jb250cm9sID0gYWRvcHROUyhbW1dLTXVsdGlwbGVTZWxlY3RQaWNrZXIgYWxsb2NdIGlu
aXRXaXRoVmlldzp2aWV3XSk7CiAgICAgZWxzZQogICAgICAgICBfY29udHJvbCA9IGFkb3B0TlMo
W1tXS1NlbGVjdFNpbmdsZVBpY2tlciBhbGxvY10gaW5pdFdpdGhWaWV3OnZpZXddKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQaWNr
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0UGlj
a2VyLm1tCmluZGV4IGRhMjZiYjMwZGFjMzhhMDFmMjZmZmM5ZDFiOWYwYWMzM2MyMmIzZDQuLjUy
MGFhMTQ4YjQ2NGY3NDlkOTZjNDgwMmEwYzY1YzlhZGQ3NmU0NTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQaWNrZXIubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdFBpY2tlci5tbQpA
QCAtMTQ2LDcgKzE0Niw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZXc6KFdLQ29udGVu
dFZpZXcgKil2aWV3CiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBfdmlldyA9IHZpZXc7Ci0g
ICAgX2FsbG93c011bHRpcGxlU2VsZWN0aW9uID0gX3ZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24uaXNNdWx0aVNlbGVjdDsKKyAgICBfYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSBfdmlldy5m
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmlzTXVsdGlTZWxlY3Q7CiAgICAgX3NpbmdsZVNlbGVj
dGlvbkluZGV4ID0gTlNOb3RGb3VuZDsKICAgICBbc2VsZiBzZXRBdXRvcmVzaXppbmdNYXNrOlVJ
Vmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJs
ZUhlaWdodF07CiAgICAgW3NlbGYgc2V0RGF0YVNvdXJjZTpzZWxmXTsKQEAgLTE2NSw3ICsxNjUs
NyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldwog
ICAgIFtzZWxmIHJlbG9hZEFsbENvbXBvbmVudHNdOwogCiAgICAgaWYgKCFfYWxsb3dzTXVsdGlw
bGVTZWxlY3Rpb24pIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPE9wdGlvbkl0ZW0+JiBzZWxlY3RP
cHRpb25zID0gW192aWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdOworICAgICAgICBjb25z
dCBWZWN0b3I8T3B0aW9uSXRlbT4mIHNlbGVjdE9wdGlvbnMgPSBbX3ZpZXcgZm9jdXNlZFNlbGVj
dEVsZW1lbnRPcHRpb25zXTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWxlY3RP
cHRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBPcHRpb25JdGVtJiBpdGVt
ID0gc2VsZWN0T3B0aW9uc1tpXTsKICAgICAgICAgICAgIGlmIChpdGVtLmlzR3JvdXApCkBAIC0y
MTksNyArMjE5LDcgQEAgLSAodm9pZClsYXlvdXRTdWJ2aWV3cwogCiAtIChVSVZpZXcgKilwaWNr
ZXJWaWV3OihVSVBpY2tlclZpZXcgKilwaWNrZXJWaWV3IHZpZXdGb3JSb3c6KE5TSW50ZWdlcily
b3dJbmRleCBmb3JDb21wb25lbnQ6KE5TSW50ZWdlciljb2x1bW5JbmRleCByZXVzaW5nVmlldzoo
VUlWaWV3ICopdmlldwogewotICAgIGNvbnN0IE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX3ZpZXcgYXNz
aXN0ZWROb2RlU2VsZWN0T3B0aW9uc11bcm93SW5kZXhdOworICAgIGNvbnN0IE9wdGlvbkl0ZW0m
IGl0ZW0gPSBbX3ZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXVtyb3dJbmRleF07CiAg
ICAgVUlQaWNrZXJDb250ZW50VmlldyogcGlja2VySXRlbSA9IGl0ZW0uaXNHcm91cCA/IFtbW1dL
T3B0aW9uR3JvdXBQaWNrZXJDZWxsIGFsbG9jXSBpbml0V2l0aE9wdGlvbkl0ZW06aXRlbV0gYXV0
b3JlbGVhc2VdIDogW1tbV0tPcHRpb25QaWNrZXJDZWxsIGFsbG9jXSBpbml0V2l0aE9wdGlvbkl0
ZW06aXRlbV0gYXV0b3JlbGVhc2VdOwogCiAgICAgLy8gVGhlIGNlbGwgc3RhcnRzIG91dCB3aXRo
IGEgbnVsbCBmcmFtZS4gV2UgbmVlZCB0byBzZXQgaXRzIGZyYW1lIG5vdyBzbyB3ZSBjYW4gZmlu
ZCB0aGUgcmlnaHQgZm9udCBzaXplLgpAQCAtMjM1LDcgKzIzNSw3IEBAIC0gKFVJVmlldyAqKXBp
Y2tlclZpZXc6KFVJUGlja2VyVmlldyAqKXBpY2tlclZpZXcgdmlld0ZvclJvdzooTlNJbnRlZ2Vy
KXJvd0luZGV4CiAgICAgVUlGb250ICpmb250ID0gdGl0bGVUZXh0TGFiZWwuZm9udDsKICAgICBp
ZiAod2lkdGggIT0gX21heGltdW1UZXh0V2lkdGggfHwgX2ZvbnRTaXplID09IDApIHsKICAgICAg
ICAgX21heGltdW1UZXh0V2lkdGggPSB3aWR0aDsKLSAgICAgICAgX2ZvbnRTaXplID0gYWRqdXN0
ZWRGb250U2l6ZShfbWF4aW11bVRleHRXaWR0aCwgZm9udCwgdGl0bGVUZXh0TGFiZWwuZm9udC5w
b2ludFNpemUsIFtfdmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXSk7CisgICAgICAgIF9m
b250U2l6ZSA9IGFkanVzdGVkRm9udFNpemUoX21heGltdW1UZXh0V2lkdGgsIGZvbnQsIHRpdGxl
VGV4dExhYmVsLmZvbnQucG9pbnRTaXplLCBbX3ZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRp
b25zXSk7CiAgICAgfQogCiAgICAgW3RpdGxlVGV4dExhYmVsIHNldEZvbnQ6W2ZvbnQgZm9udFdp
dGhTaXplOl9mb250U2l6ZV1dOwpAQCAtMjUzLDE1ICsyNTMsMTUgQEAgLSAoTlNJbnRlZ2VyKW51
bWJlck9mQ29tcG9uZW50c0luUGlja2VyVmlldzooVUlQaWNrZXJWaWV3ICopYVBpY2tlclZpZXcK
IAogLSAoTlNJbnRlZ2VyKXBpY2tlclZpZXc6KFVJUGlja2VyVmlldyAqKXBpY2tlclZpZXcgbnVt
YmVyT2ZSb3dzSW5Db21wb25lbnQ6KE5TSW50ZWdlciljb2x1bW5JbmRleAogewotICAgIHJldHVy
biBbX3ZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc10uc2l6ZSgpOworICAgIHJldHVybiBb
X3ZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXS5zaXplKCk7CiB9CiAKIC0gKE5TSW50
ZWdlcilmaW5kSXRlbUluZGV4QXQ6KGludClyb3dJbmRleAogewotICAgIEFTU0VSVChyb3dJbmRl
eCA+PSAwICYmIChzaXplX3Qpcm93SW5kZXggPCBbX3ZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0
aW9uc10uc2l6ZSgpKTsKKyAgICBBU1NFUlQocm93SW5kZXggPj0gMCAmJiAoc2l6ZV90KXJvd0lu
ZGV4IDwgW192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc10uc2l6ZSgpKTsKICAgICBO
U0ludGVnZXIgaXRlbUluZGV4ID0gMDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd0luZGV4
OyArK2kpIHsKLSAgICAgICAgaWYgKFtfdmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXVtp
XS5pc0dyb3VwKQorICAgICAgICBpZiAoW192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9u
c11baV0uaXNHcm91cCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpdGVtSW5kZXgr
KzsKICAgICB9CkBAIC0yNzIsMTAgKzI3MiwxMCBAQCAtIChOU0ludGVnZXIpZmluZEl0ZW1JbmRl
eEF0OihpbnQpcm93SW5kZXgKIAogLSAodm9pZClwaWNrZXJWaWV3OihVSVBpY2tlclZpZXcgKilw
aWNrZXJWaWV3IHJvdzooaW50KXJvd0luZGV4IGNvbHVtbjooaW50KWNvbHVtbkluZGV4IGNoZWNr
ZWQ6KEJPT0wpaXNDaGVja2VkCiB7Ci0gICAgaWYgKChzaXplX3Qpcm93SW5kZXggPj0gW192aWV3
IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdLnNpemUoKSkKKyAgICBpZiAoKHNpemVfdClyb3dJ
bmRleCA+PSBbX3ZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXS5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX3ZpZXcgYXNzaXN0ZWROb2Rl
U2VsZWN0T3B0aW9uc11bcm93SW5kZXhdOworICAgIE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX3ZpZXcg
Zm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXVtyb3dJbmRleF07CiAKICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBvbmNlIDxyZGFyOi8vcHJvYmxlbS8xODc0NTI1Mz4gaXMg
Zml4ZWQuCiAgICAgLy8gR3JvdXAgcm93cyBzaG91bGQgbm90IGJlIGNoZWNrYWJsZSwgYnV0IHdl
IGFyZSBnZXR0aW5nIHRoaXMgZGVsZWdhdGUgZm9yCkBAIC0yODksNyArMjg5LDcgQEAgLSAodm9p
ZClwaWNrZXJWaWV3OihVSVBpY2tlclZpZXcgKilwaWNrZXJWaWV3IHJvdzooaW50KXJvd0luZGV4
IGNvbHVtbjooaW50KWNvbHUKICAgICB9CiAKICAgICBpZiAoW3NlbGYgYWxsb3dzTXVsdGlwbGVT
ZWxlY3Rpb25dKSB7Ci0gICAgICAgIFtfdmlldyBwYWdlXS0+c2V0QXNzaXN0ZWROb2RlU2VsZWN0
ZWRJbmRleChbc2VsZiBmaW5kSXRlbUluZGV4QXQ6cm93SW5kZXhdLCB0cnVlKTsKKyAgICAgICAg
W192aWV3IHBhZ2VdLT5zZXRGb2N1c2VkRWxlbWVudFNlbGVjdGVkSW5kZXgoW3NlbGYgZmluZEl0
ZW1JbmRleEF0OnJvd0luZGV4XSwgdHJ1ZSk7CiAgICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IGlz
Q2hlY2tlZDsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTaW5nbGUgc2VsZWN0aW9uLgpAQCAt
Mjk5LDcgKzI5OSw3IEBAIC0gKHZvaWQpcGlja2VyVmlldzooVUlQaWNrZXJWaWV3ICopcGlja2Vy
VmlldyByb3c6KGludClyb3dJbmRleCBjb2x1bW46KGludCljb2x1CiAgICAgICAgIC8vIFRoaXMg
cHJpdmF0ZSBkZWxlZ2F0ZSBvZnRlbiBnZXRzIGNhbGxlZCBmb3IgbXVsdGlwbGUgcm93cyBpbiB0
aGUgcGlja2VyLAogICAgICAgICAvLyBzbyB3ZSBvbmx5IGFjdGl2YXRlIGFuZCBzZXQgYXMgc2Vs
ZWN0ZWQgdGhlIGNoZWNrZWQgaXRlbSBpbiBzaW5nbGUgc2VsZWN0aW9uLgogICAgICAgICBpZiAo
aXNDaGVja2VkKSB7Ci0gICAgICAgICAgICBbX3ZpZXcgcGFnZV0tPnNldEFzc2lzdGVkTm9kZVNl
bGVjdGVkSW5kZXgoW3NlbGYgZmluZEl0ZW1JbmRleEF0OnJvd0luZGV4XSk7CisgICAgICAgICAg
ICBbX3ZpZXcgcGFnZV0tPnNldEZvY3VzZWRFbGVtZW50U2VsZWN0ZWRJbmRleChbc2VsZiBmaW5k
SXRlbUluZGV4QXQ6cm93SW5kZXhdKTsKICAgICAgICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IFlF
UzsKICAgICAgICAgfQogICAgIH0KQEAgLTMzMyw4ICszMzMsOCBAQCAtIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldwogCiAgICAgX3NlbGVjdGVkSW5kZXgg
PSBOU05vdEZvdW5kOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBbdmlldyBhc3Npc3Rl
ZE5vZGVTZWxlY3RPcHRpb25zXS5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoW192aWV3IGFz
c2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdW2ldLmlzU2VsZWN0ZWQpIHsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IFt2aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc10uc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKFtfdmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdW2ld
LmlzU2VsZWN0ZWQpIHsKICAgICAgICAgICAgIF9zZWxlY3RlZEluZGV4ID0gaTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNzAsOSArMzcwLDkgQEAgLSAodm9pZCljb250cm9s
RW5kRWRpdGluZwogICAgIGlmIChfc2VsZWN0ZWRJbmRleCA9PSBOU05vdEZvdW5kKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoX3NlbGVjdGVkSW5kZXggPCAoTlNJbnRlZ2VyKVtfdmlldyBh
c3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXS5zaXplKCkpIHsKLSAgICAgICAgW192aWV3IGFzc2lz
dGVkTm9kZVNlbGVjdE9wdGlvbnNdW19zZWxlY3RlZEluZGV4XS5pc1NlbGVjdGVkID0gdHJ1ZTsK
LSAgICAgICAgW192aWV3IHBhZ2VdLT5zZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KF9zZWxl
Y3RlZEluZGV4KTsKKyAgICBpZiAoX3NlbGVjdGVkSW5kZXggPCAoTlNJbnRlZ2VyKVtfdmlldyBm
b2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdLnNpemUoKSkgeworICAgICAgICBbX3ZpZXcgZm9j
dXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXVtfc2VsZWN0ZWRJbmRleF0uaXNTZWxlY3RlZCA9IHRy
dWU7CisgICAgICAgIFtfdmlldyBwYWdlXS0+c2V0Rm9jdXNlZEVsZW1lbnRTZWxlY3RlZEluZGV4
KF9zZWxlY3RlZEluZGV4KTsKICAgICB9CiB9CiAKQEAgLTM4MywxNSArMzgzLDE1IEBAIC0gKE5T
SW50ZWdlciludW1iZXJPZkNvbXBvbmVudHNJblBpY2tlclZpZXc6KFVJUGlja2VyVmlldyAqKXBp
Y2tlclZpZXcKIAogLSAoTlNJbnRlZ2VyKXBpY2tlclZpZXc6KFVJUGlja2VyVmlldyAqKXBpY2tl
clZpZXcgbnVtYmVyT2ZSb3dzSW5Db21wb25lbnQ6KE5TSW50ZWdlciljb2x1bW5JbmRleAogewot
ICAgIHJldHVybiBfdmlldy5hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5zZWxlY3RPcHRpb25zLnNp
emUoKTsKKyAgICByZXR1cm4gX3ZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5zZWxlY3RP
cHRpb25zLnNpemUoKTsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopcGlja2VyVmlldzoo
VUlQaWNrZXJWaWV3ICopcGlja2VyVmlldyBhdHRyaWJ1dGVkVGl0bGVGb3JSb3c6KE5TSW50ZWdl
cilyb3cgZm9yQ29tcG9uZW50OihOU0ludGVnZXIpY29tcG9uZW50CiB7Ci0gICAgaWYgKHJvdyA8
IDAgfHwgcm93ID49IChOU0ludGVnZXIpW192aWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNd
LnNpemUoKSkKKyAgICBpZiAocm93IDwgMCB8fCByb3cgPj0gKE5TSW50ZWdlcilbX3ZpZXcgZm9j
dXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXS5zaXplKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICBjb25zdCBPcHRpb25JdGVtJiBvcHRpb24gPSBbX3ZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0
T3B0aW9uc11bcm93XTsKKyAgICBjb25zdCBPcHRpb25JdGVtJiBvcHRpb24gPSBbX3ZpZXcgZm9j
dXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXVtyb3ddOwogICAgIE5TTXV0YWJsZVN0cmluZyAqdHJp
bW1lZFRleHQgPSBbW29wdGlvbi50ZXh0IG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07CiAgICAg
Q0ZTdHJpbmdUcmltV2hpdGVzcGFjZSgoQ0ZNdXRhYmxlU3RyaW5nUmVmKXRyaW1tZWRUZXh0KTsK
IApAQCAtNDA0LDE2ICs0MDQsMTYgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopcGlja2VyVmll
dzooVUlQaWNrZXJWaWV3ICopcGlja2VyVmlldyBhdHRyaWJ1dGVkVGl0bGVGb3IKIAogLSAodm9p
ZClwaWNrZXJWaWV3OihVSVBpY2tlclZpZXcgKilwaWNrZXJWaWV3IGRpZFNlbGVjdFJvdzooTlNJ
bnRlZ2VyKXJvdyBpbkNvbXBvbmVudDooTlNJbnRlZ2VyKWNvbXBvbmVudAogewotICAgIGlmIChy
b3cgPCAwIHx8IHJvdyA+PSAoTlNJbnRlZ2VyKVtfdmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRp
b25zXS5zaXplKCkpCisgICAgaWYgKHJvdyA8IDAgfHwgcm93ID49IChOU0ludGVnZXIpW192aWV3
IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc10uc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBjb25zdCBPcHRpb25JdGVtJiBuZXdTZWxlY3RlZE9wdGlvbiA9IFtfdmlldyBhc3Npc3Rl
ZE5vZGVTZWxlY3RPcHRpb25zXVtyb3ddOworICAgIGNvbnN0IE9wdGlvbkl0ZW0mIG5ld1NlbGVj
dGVkT3B0aW9uID0gW192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc11bcm93XTsKICAg
ICBpZiAobmV3U2VsZWN0ZWRPcHRpb24uZGlzYWJsZWQpIHsKICAgICAgICAgTlNJbnRlZ2VyIHJv
d1RvU2VsZWN0ID0gTlNOb3RGb3VuZDsKIAogICAgICAgICAvLyBTZWFyY2ggYmFja3dhcmRzIGZv
ciB0aGUgcHJldmlvdXMgZW5hYmxlZCBvcHRpb24uCiAgICAgICAgIGZvciAoTlNJbnRlZ2VyIGkg
PSByb3cgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgY29uc3QgT3B0aW9uSXRlbSYg
ZWFybGllck9wdGlvbiA9IFtfdmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXVtpXTsKKyAg
ICAgICAgICAgIGNvbnN0IE9wdGlvbkl0ZW0mIGVhcmxpZXJPcHRpb24gPSBbX3ZpZXcgZm9jdXNl
ZFNlbGVjdEVsZW1lbnRPcHRpb25zXVtpXTsKICAgICAgICAgICAgIGlmICghZWFybGllck9wdGlv
bi5kaXNhYmxlZCkgewogICAgICAgICAgICAgICAgIHJvd1RvU2VsZWN0ID0gaTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTQyMiw4ICs0MjIsOCBAQCAtICh2b2lkKXBpY2tlclZpZXc6KFVJ
UGlja2VyVmlldyAqKXBpY2tlclZpZXcgZGlkU2VsZWN0Um93OihOU0ludGVnZXIpcm93IGluQ29t
cAogCiAgICAgICAgIC8vIElmIG5vdGhpbmcgcHJldmlvdXMsIHNlYXJjaCBmb3J3YXJkcyBmb3Ig
dGhlIG5leHQgZW5hYmxlZCBvcHRpb24uCiAgICAgICAgIGlmIChyb3dUb1NlbGVjdCA9PSBOU05v
dEZvdW5kKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gcm93ICsgMTsgaSA8IFtfdmll
dyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgIGNvbnN0IE9wdGlvbkl0ZW0mIGxhdGVyT3B0aW9uID0gW192aWV3IGFzc2lzdGVkTm9kZVNl
bGVjdE9wdGlvbnNdW2ldOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHJvdyArIDE7IGkg
PCBbX3ZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXS5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IE9wdGlvbkl0ZW0mIGxhdGVyT3B0aW9uID0gW192aWV3IGZvY3Vz
ZWRTZWxlY3RFbGVtZW50T3B0aW9uc11baV07CiAgICAgICAgICAgICAgICAgaWYgKCFsYXRlck9w
dGlvbi5kaXNhYmxlZCkgewogICAgICAgICAgICAgICAgICAgICByb3dUb1NlbGVjdCA9IGk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdFBvcG92ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0UG9wb3Zlci5tbQppbmRleCA1M2MyNWQwMGI5
NTBiNjQ0YzJkNTE4NmU3ZWJhZWY0MzlhYTNiNDc0Li5mNWI2NjcxNWEwNzhkOWVmNDMzZTQ2ZDA3
MWFhOWNiNDhmY2ZmZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
Zm9ybXMvV0tGb3JtU2VsZWN0UG9wb3Zlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0UG9wb3Zlci5tbQpAQCAtMTA0LDggKzEwNCw4IEBAIC0g
KGlkKWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXcgaGFzR3JvdXBzOihCT09MKWhh
c0dyb3VwcwogICAgICAgICByZXR1cm4gbmlsOwogICAgIAogICAgIF9jb250ZW50VmlldyA9IHZp
ZXc7Ci0gICAgVmVjdG9yPE9wdGlvbkl0ZW0+JiBzZWxlY3RPcHRpb25zID0gW19jb250ZW50Vmll
dyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXTsKLSAgICBfYWxsb3dzTXVsdGlwbGVTZWxlY3Rp
b24gPSBfY29udGVudFZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdDsK
KyAgICBWZWN0b3I8T3B0aW9uSXRlbT4mIHNlbGVjdE9wdGlvbnMgPSBbX2NvbnRlbnRWaWV3IGZv
Y3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc107CisgICAgX2FsbG93c011bHRpcGxlU2VsZWN0aW9u
ID0gX2NvbnRlbnRWaWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdDsK
ICAgICAKICAgICAvLyBFdmVuIGlmIHRoZSBzZWxlY3QgaXMgZW1wdHksIHRoZXJlIGlzIGF0IGxl
YXN0IG9uZSB0YWJsZXZpZXcgc2VjdGlvbi4KICAgICBfbnVtYmVyT2ZTZWN0aW9ucyA9IDE7CkBA
IC0xMjYsNyArMTI2LDcgQEAgLSAoaWQpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmll
dyBoYXNHcm91cHM6KEJPT0wpaGFzR3JvdXBzCiAgICAgfQogCiAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBVSVRleHRXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdE
aXJlY3Rpb24gPSBfY29udGVudFZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaXNSVEwgPyBV
SVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQgOiBVSVRleHRXcml0aW5nRGlyZWN0aW9u
TGVmdFRvUmlnaHQ7CisgICAgVUlUZXh0V3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9u
ID0gX2NvbnRlbnRWaWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaXNSVEwgPyBVSVRleHRX
cml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQgOiBVSVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRv
UmlnaHQ7CiAgICAgQk9PTCBvdmVycmlkZSA9IE5POwogICAgIF90ZXh0QWxpZ25tZW50ID0gKHdy
aXRpbmdEaXJlY3Rpb24gPT0gVUlUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0KSA/IE5T
VGV4dEFsaWdubWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdodDsKIApAQCAtMTM1LDcgKzEz
NSw3IEBAIC0gKGlkKWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXcgaGFzR3JvdXBz
OihCT09MKWhhc0dyb3VwcwogICAgIC8vIEZvciB0aGF0IHJlYXNvbiB3ZSBoYXZlIHRvIG92ZXJy
aWRlIHdoYXQgdGhlIHN5c3RlbSB0aGlua3MuCiAgICAgaWYgKHdyaXRpbmdEaXJlY3Rpb24gPT0g
VUlUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KQogICAgICAgICBzZWxmLnZpZXcuc2Vt
YW50aWNDb250ZW50QXR0cmlidXRlID0gVUlTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGVGb3JjZVJp
Z2h0VG9MZWZ0OwotICAgIFtzZWxmIHNldFRpdGxlOnN0cmluZ1dpdGhXcml0aW5nRGlyZWN0aW9u
KF9jb250ZW50Vmlldy5hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi50aXRsZSwgd3JpdGluZ0RpcmVj
dGlvbiwgb3ZlcnJpZGUpXTsKKyAgICBbc2VsZiBzZXRUaXRsZTpzdHJpbmdXaXRoV3JpdGluZ0Rp
cmVjdGlvbihfY29udGVudFZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi50aXRsZSwgd3Jp
dGluZ0RpcmVjdGlvbiwgb3ZlcnJpZGUpXTsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKIAogICAgIHJldHVybiBzZWxmOwpAQCAtMTY3LDEyICsxNjcsMTIgQEAgLSAoTlNJ
bnRlZ2VyKW51bWJlck9mU2VjdGlvbnNJblRhYmxlVmlldzooVUlUYWJsZVZpZXcgKil0YWJsZVZp
ZXcKIAogLSAoTlNJbnRlZ2VyKXRhYmxlVmlldzooVUlUYWJsZVZpZXcgKil0YWJsZVZpZXcgbnVt
YmVyT2ZSb3dzSW5TZWN0aW9uOihOU0ludGVnZXIpc2VjdGlvbgogewotICAgIGlmIChbX2NvbnRl
bnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdLmlzRW1wdHkoKSkKKyAgICBpZiAoW19j
b250ZW50VmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIDE7CiAgICAgCiAgICAgaW50IHJvd0NvdW50ID0gMDsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IFtfY29udGVudFZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc10uc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgT3B0aW9uSXRlbSYgaXRlbSA9IFtfY29udGVudFZp
ZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc11baV07CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBbX2NvbnRlbnRWaWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc10uc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgT3B0aW9uSXRlbSYgaXRlbSA9IFtfY29udGVudFZpZXcgZm9j
dXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXVtpXTsKICAgICAgICAgaWYgKGl0ZW0uaXNHcm91cCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoaXRlbS5wYXJlbnRHcm91cElEID09
IHNlY3Rpb24pCkBAIC0xOTAsOCArMTkwLDggQEAgLSAoTlNTdHJpbmcgKil0YWJsZVZpZXc6KFVJ
VGFibGVWaWV3ICopdGFibGVWaWV3IHRpdGxlRm9ySGVhZGVySW5TZWN0aW9uOihOU0ludGUKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBpbnQgZ3JvdXBDb3VudCA9IDA7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBbX2NvbnRlbnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlv
bnNdLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX2Nv
bnRlbnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdW2ldOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgW19jb250ZW50VmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX2NvbnRlbnRW
aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc11baV07CiAgICAgICAgIGlmICghaXRlbS5p
c0dyb3VwKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGdyb3VwQ291bnQrKzsKQEAg
LTIxNiw4ICsyMTYsOCBAQCAtIChOU0ludGVnZXIpZmluZEl0ZW1JbmRleEF0OihOU0luZGV4UGF0
aCAqKWluZGV4UGF0aAogICAgIAogICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgaW50IHJv
d0luZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFtfY29udGVudFZpZXcgYXNz
aXN0ZWROb2RlU2VsZWN0T3B0aW9uc10uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgT3B0
aW9uSXRlbSYgaXRlbSA9IFtfY29udGVudFZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc11b
aV07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBbX2NvbnRlbnRWaWV3IGZvY3VzZWRTZWxl
Y3RFbGVtZW50T3B0aW9uc10uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgT3B0aW9uSXRl
bSYgaXRlbSA9IFtfY29udGVudFZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXVtpXTsK
ICAgICAgICAgaWYgKGl0ZW0uaXNHcm91cCkgewogICAgICAgICAgICAgcm93SW5kZXggPSAwOwog
ICAgICAgICAgICAgY29udGludWU7CkBAIC0yMzYsOCArMjM2LDggQEAgLSAoT3B0aW9uSXRlbSAq
KWZpbmRJdGVtQXQ6KE5TSW5kZXhQYXRoICopaW5kZXhQYXRoCiAgICAgQVNTRVJUKGluZGV4UGF0
aC5zZWN0aW9uIDw9IF9udW1iZXJPZlNlY3Rpb25zKTsKIAogICAgIGludCBpbmRleCA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBbX2NvbnRlbnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVj
dE9wdGlvbnNdLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX2Nv
bnRlbnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdW2ldOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgW19jb250ZW50VmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdLnNp
emUoKTsgKytpKSB7CisgICAgICAgIE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX2NvbnRlbnRWaWV3IGZv
Y3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc11baV07CiAgICAgICAgIGlmIChpdGVtLmlzR3JvdXAg
fHwgaXRlbS5wYXJlbnRHcm91cElEICE9IGluZGV4UGF0aC5zZWN0aW9uKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIGlmIChpbmRleCA9PSBpbmRleFBhdGgucm93KQpAQCAtMjU2LDcg
KzI1Niw3IEBAIC0gKFVJVGFibGVWaWV3Q2VsbCAqKXRhYmxlVmlldzooVUlUYWJsZVZpZXcgKil0
YWJsZVZpZXcgY2VsbEZvclJvd0F0SW5kZXhQYXRoOihOCiAgICAgY2VsbC5zZW1hbnRpY0NvbnRl
bnRBdHRyaWJ1dGUgPSBzZWxmLnZpZXcuc2VtYW50aWNDb250ZW50QXR0cmlidXRlOwogICAgIGNl
bGwudGV4dExhYmVsLnRleHRBbGlnbm1lbnQgPSBfdGV4dEFsaWdubWVudDsKICAgICAKLSAgICBp
ZiAoX2NvbnRlbnRWaWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMuaXNF
bXB0eSgpKSB7CisgICAgaWYgKF9jb250ZW50Vmlldy5mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
LnNlbGVjdE9wdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNlbGwudGV4dExhYmVsLmVuYWJs
ZWQgPSBOTzsKICAgICAgICAgY2VsbC50ZXh0TGFiZWwudGV4dCA9IFdFQl9VSV9TVFJJTkdfS0VZ
KCJObyBPcHRpb25zIiwgIk5vIE9wdGlvbnMgU2VsZWN0IFBvcG92ZXIiLCAiRW1wdHkgc2VsZWN0
IGxpc3QiKTsKICAgICAgICAgY2VsbC5hY2Nlc3NvcnlUeXBlID0gVUlUYWJsZVZpZXdDZWxsQWNj
ZXNzb3J5Tm9uZTsKQEAgLTI3Myw3ICsyNzMsNyBAQCAtIChVSVRhYmxlVmlld0NlbGwgKil0YWJs
ZVZpZXc6KFVJVGFibGVWaWV3ICopdGFibGVWaWV3IGNlbGxGb3JSb3dBdEluZGV4UGF0aDooTgog
ICAgIEFTU0VSVChpbml0aWFsRm9udFNpemUpOwogICAgIGlmICh0ZXh0UmVjdC5zaXplLndpZHRo
ICE9IF9tYXhpbXVtVGV4dFdpZHRoIHx8IF9mb250U2l6ZSA9PSAwKSB7CiAgICAgICAgIF9tYXhp
bXVtVGV4dFdpZHRoID0gdGV4dFJlY3Quc2l6ZS53aWR0aDsKLSAgICAgICAgX2ZvbnRTaXplID0g
YWRqdXN0ZWRGb250U2l6ZShfbWF4aW11bVRleHRXaWR0aCwgZm9udCwgaW5pdGlhbEZvbnRTaXpl
LCBfY29udGVudFZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uc2VsZWN0T3B0aW9ucyk7Cisg
ICAgICAgIF9mb250U2l6ZSA9IGFkanVzdGVkRm9udFNpemUoX21heGltdW1UZXh0V2lkdGgsIGZv
bnQsIGluaXRpYWxGb250U2l6ZSwgX2NvbnRlbnRWaWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRp
b24uc2VsZWN0T3B0aW9ucyk7CiAgICAgfQogICAgIAogICAgIGNvbnN0IE9wdGlvbkl0ZW0qIGl0
ZW0gPSBbc2VsZiBmaW5kSXRlbUF0OmluZGV4UGF0aF07CkBAIC0yODgsNyArMjg4LDcgQEAgLSAo
VUlUYWJsZVZpZXdDZWxsICopdGFibGVWaWV3OihVSVRhYmxlVmlldyAqKXRhYmxlVmlldyBjZWxs
Rm9yUm93QXRJbmRleFBhdGg6KE4KIAogLSAodm9pZCl0YWJsZVZpZXc6KFVJVGFibGVWaWV3ICop
dGFibGVWaWV3IGRpZFNlbGVjdFJvd0F0SW5kZXhQYXRoOihOU0luZGV4UGF0aCAqKWluZGV4UGF0
aAogewotICAgIGlmIChfY29udGVudFZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uc2VsZWN0
T3B0aW9ucy5pc0VtcHR5KCkpCisgICAgaWYgKF9jb250ZW50Vmlldy5mb2N1c2VkRWxlbWVudElu
Zm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgTlNJbnRlZ2VyIGl0ZW1JbmRleCA9IFtzZWxmIGZpbmRJdGVtSW5kZXhBdDppbmRleFBh
dGhdOwpAQCAtMzExLDggKzMxMSw4IEBAIC0gKHZvaWQpdGFibGVWaWV3OihVSVRhYmxlVmlldyAq
KXRhYmxlVmlldyBkaWRTZWxlY3RSb3dBdEluZGV4UGF0aDooTlNJbmRleFBhdGgKICAgICAgICAg
Ly8gU1BJIHdoaWNoIG1pbWljcyBhIHVzZXIgYWN0aW9uIG9uIHRoZSA8c2VsZWN0Pi4gTm9ybWFs
bHkgcHJvZ3JhbW1hdGljCiAgICAgICAgIC8vIGNoYW5nZXMgZG8gbm90IHRyaWdnZXIgImNoYW5n
ZSIgZXZlbnRzIG9uIHN1Y2ggc2VsZWN0cy4KICAgICAKLSAgICAgICAgW19jb250ZW50VmlldyBw
YWdlXS0+c2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleChpdGVtSW5kZXgsIHRydWUpOwotICAg
ICAgICBPcHRpb25JdGVtJiBpdGVtID0gW19jb250ZW50VmlldyBhc3Npc3RlZE5vZGVTZWxlY3RP
cHRpb25zXVtpdGVtSW5kZXhdOworICAgICAgICBbX2NvbnRlbnRWaWV3IHBhZ2VdLT5zZXRGb2N1
c2VkRWxlbWVudFNlbGVjdGVkSW5kZXgoaXRlbUluZGV4LCB0cnVlKTsKKyAgICAgICAgT3B0aW9u
SXRlbSYgaXRlbSA9IFtfY29udGVudFZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXVtp
dGVtSW5kZXhdOwogICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBuZXdTdGF0ZUlzU2VsZWN0ZWQ7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgW3RhYmxlVmlldyBkZXNlbGVjdFJvd0F0SW5kZXhQYXRo
OmluZGV4UGF0aCBhbmltYXRlZDpOT107CkBAIC0zNDQsOCArMzQ0LDggQEAgLSAodm9pZCl0YWJs
ZVZpZXc6KFVJVGFibGVWaWV3ICopdGFibGVWaWV3IGRpZFNlbGVjdFJvd0F0SW5kZXhQYXRoOihO
U0luZGV4UGF0aAogICAgICAgICAgICAgX3NpbmdsZVNlbGVjdGlvbkluZGV4ID0gaW5kZXhQYXRo
LnJvdzsKICAgICAgICAgICAgIF9zaW5nbGVTZWxlY3Rpb25TZWN0aW9uID0gaW5kZXhQYXRoLnNl
Y3Rpb247CiAgCi0gICAgICAgICAgICBbX2NvbnRlbnRWaWV3IHBhZ2VdLT5zZXRBc3Npc3RlZE5v
ZGVTZWxlY3RlZEluZGV4KGl0ZW1JbmRleCk7Ci0gICAgICAgICAgICBPcHRpb25JdGVtJiBuZXdJ
dGVtID0gW19jb250ZW50VmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXVtpdGVtSW5kZXhd
OworICAgICAgICAgICAgW19jb250ZW50VmlldyBwYWdlXS0+c2V0Rm9jdXNlZEVsZW1lbnRTZWxl
Y3RlZEluZGV4KGl0ZW1JbmRleCk7CisgICAgICAgICAgICBPcHRpb25JdGVtJiBuZXdJdGVtID0g
W19jb250ZW50VmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdW2l0ZW1JbmRleF07CiAg
ICAgICAgICAgICBuZXdJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAg
IApAQCAtMzkzLDcgKzM5Myw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZXc6KFdLQ29u
dGVudFZpZXcgKil2aWV3IGhhc0dyb3VwczooQk9PTCloYXNHcm91cHMKICAgICBbX3RhYmxlVmll
d0NvbnRyb2xsZXIgc2V0UG9wb3ZlcjpzZWxmXTsKICAgICBVSVZpZXdDb250cm9sbGVyICpwb3Bv
dmVyVmlld0NvbnRyb2xsZXIgPSBfdGFibGVWaWV3Q29udHJvbGxlci5nZXQoKTsKICAgICBVSU5h
dmlnYXRpb25Db250cm9sbGVyICpuYXZDb250cm9sbGVyID0gbmlsOwotICAgIEJPT0wgbmVlZHNO
YXZpZ2F0aW9uQ29udHJvbGxlciA9ICF2aWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnRpdGxl
LmlzRW1wdHkoKTsKKyAgICBCT09MIG5lZWRzTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSAhdmlldy5m
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLnRpdGxlLmlzRW1wdHkoKTsKICAgICBpZiAobmVlZHNO
YXZpZ2F0aW9uQ29udHJvbGxlcikgewogICAgICAgICBuYXZDb250cm9sbGVyID0gW1tVSU5hdmln
YXRpb25Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFJvb3RWaWV3Q29udHJvbGxlcjpfdGFibGVW
aWV3Q29udHJvbGxlci5nZXQoKV07CiAgICAgICAgIHBvcG92ZXJWaWV3Q29udHJvbGxlciA9IG5h
dkNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAwM2IxZjIzODYyMjJmODgyNzU5YTZjMjRhOWEwNGZlYzliNDFjMjY4Li4y
ZTlmMGQ4ODgxYTU1ZjEwMmMwMDcxNzRjMmVjZTMxMTIyOGUyYzg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE1MTksNyArMTUxOSw3
IEBACiAJCUM1NDI1NkJBMThCRUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1TZWxlY3RDb250cm9sLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTQyNTZCNDE4
QkVDMThDMDBERTQxNzkgLyogV0tGb3JtU2VsZWN0Q29udHJvbC5oICovOyB9OwogCQlDNTVGOTE3
MTFDNTk2NzZFMDAyOUU5MkQgLyogRGF0YURldGVjdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1RjkxNkMxQzU5NUU0NDAwMjlFOTJE
IC8qIERhdGFEZXRlY3Rpb25SZXN1bHQuaCAqLzsgfTsKIAkJQzU3NEE1ODExMkU2NjY4MTAwMkRG
RTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBl
cy5oICovOyB9OwotCQlDNTlDNEE1OTE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1OUM0QTU3MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oICov
OyB9OworCQlDNTlDNEE1OTE4QjgxMTc0MDA3QkRDQjYgLyogRm9jdXNlZEVsZW1lbnRJbmZvcm1h
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU5
QzRBNTcxOEI4MTE3NDAwN0JEQ0I2IC8qIEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaCAqLzsg
fTsKIAkJQzVCQ0U1REYxQzUwNzY2QTAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24uaCAqLzsgfTsKIAkJQzVFMUFGRTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMjlE
QTYxNkFDRTVBOTAwMzE2REUyIC8qIFdLV2ViQXJjaGl2ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM1RTFBRkVCMTZCMjBCN0UwMDZDQzFGMiAv
KiBXS1dlYkFyY2hpdmVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMzMjlEQUExNkFDRTVDMDAwMzE2REUyIC8qIFdLV2ViQXJjaGl2ZVJl
c291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTQzMjIsOCArNDMyMiw4IEBACiAJCUM1NzE5M0JEMThDMTRBNDMwMDJEMEYxMiAvKiBXS0Zv
cm1TZWxlY3RDb250cm9sLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gV0tGb3JtU2VsZWN0Q29udHJvbC5tbTsgcGF0aCA9IGlvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RD
b250cm9sLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTc0QTU3RjEyRTY2Njgx
MDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhc3RlYm9hcmRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
NTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDNTlDNEE1NjE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDNTlDNEE1NzE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU5QzRBNTYxOEI4MTE3NDAwN0JE
Q0I2IC8qIEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1OUM0QTU3MThCODExNzQwMDdCRENCNiAvKiBGb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
Y3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzVCQ0U1REExQzUwNzYxRDAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmg7IHBhdGggPSBpb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVCQ0U1REIxQzUwNzYxRDAw
Q0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24ubW07IHBhdGggPSBpb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1RkExRUQxMThFMTA2MjIwMEIzRjQwMiAv
KiBXS0FpclBsYXlSb3V0ZVBpY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXS0FpclBsYXlSb3V0ZVBpY2tlci5oOyBwYXRoID0gaW9zL2Zvcm1zL1dLQWlyUGxheVJvdXRl
UGlja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDAyLDggKzUwMDIsNiBA
QAogCQkJCUJDMzI5RDk5MTZBQ0NFOTkwMDMxNkRFMiAvKiBBUElXZWJBcmNoaXZlLm1tICovLAog
CQkJCUJDMzI5RDlGMTZBQ0Q0NzgwMDMxNkRFMiAvKiBBUElXZWJBcmNoaXZlUmVzb3VyY2UuaCAq
LywKIAkJCQlCQzMyOUQ5RTE2QUNENDc4MDAzMTZERTIgLyogQVBJV2ViQXJjaGl2ZVJlc291cmNl
Lm1tICovLAotCQkJCUM1OUM0QTU2MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5jcHAgKi8sCi0JCQkJQzU5QzRBNTcxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmggKi8sCiAJCQkJNTE1RTc3MjUxODNERDZGNjAwMDcyMDNGIC8qIEFz
eW5jUmVxdWVzdC5jcHAgKi8sCiAJCQkJNTE1RTc3MjYxODNERDZGNjAwMDcyMDNGIC8qIEFzeW5j
UmVxdWVzdC5oICovLAogCQkJCUUxNjRBMkVGMTkxQUYxNEUwMDEwNzM3RCAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2VXaXRoU2FuZGJveEV4dGVuc2lvbi5jcHAgKi8sCkBAIC01MDI0LDYgKzUwMjIs
OCBAQAogCQkJCUUxMDVGRTUzMThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCAqLywK
IAkJCQk4Q0ZFQ0U5MzE0OTBGMTQwMDAyQUFBMzIgLyogRWRpdG9yU3RhdGUuY3BwICovLAogCQkJ
CTFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5oICovLAorCQkJCUM1OUM0
QTU2MThCODExNzQwMDdCRENCNiAvKiBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmNwcCAqLywK
KwkJCQlDNTlDNEE1NzE4QjgxMTc0MDA3QkRDQjYgLyogRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlv
bi5oICovLAogCQkJCUJDRTgxRDhBMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5jcHAgKi8s
CiAJCQkJQkNFODFEOEIxMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmggKi8sCiAJCQkJMUEx
NEY4REYxRDc0QzgzNDAwNkNCRUM2IC8qIEZyYW1lSW5mb0RhdGEuY3BwICovLApAQCAtODkyNyw3
ICs4OTI3LDYgQEAKIAkJCQlBMTc1QzQ0QTIxQUEzMTcxMDAwMDM3RDAgLyogQXJndW1lbnRDb2Rl
cnNDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE3OUZEOUMxMzREMzgwNjAwMTVCODgzIC8q
IEFyZ3VtZW50Q29kZXJzTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTFBMEJEMjFBNDhFNkM2
MDA1NEVGNzQgLyogQXNzZXJ0aW9uU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1
OUM0QTU5MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE1RTc3MjgxODNERDZGNjAwMDcyMDNGIC8qIEFzeW5jUmVxdWVzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFRTk2NkQxMTJGQUY1NzAwNkJDQzI0IC8qIEF0dGFjaG1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQTMxNzMyMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRy
aWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywKQEAgLTkwMDIsNiArOTAwMSw3IEBACiAJCQkJ
MUFBNTc1RkIxNDk2QjUyNjAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDBCOTY2MUExOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBOTBDMUY0MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQzU5QzRBNTkxOEI4MTE3NDAwN0JEQ0I2IC8qIEZvY3VzZWRF
bGVtZW50SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTgxRDhEMTMxOUY3RUYw
MDI0MTkxMCAvKiBGb250SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExNEY4RTIxRDc0Qzgz
NDAwNkNCRUM2IC8qIEZyYW1lSW5mb0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAwRDYx
MTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCmluZGV4IGJmNjQ3MTQ0OWZiYjgxOTA5MDgxYzhkZGQ3YmYyZGE1NWJj
OGVlODQuLmEzMjkyYWFjOTViMDUwYjEzZmU3NmM2YmRlNTliMzU1NzdkNWIxNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCkBAIC0yMDAsMTcgKzIwMCwxNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6dW5mb2N1cygpCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjplbGVtZW50RGlkRm9jdXMoRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3BhZ2UuZWxlbWVudERpZEZvY3VzKCZlbGVtZW50KTsK
KyAgICBtX3BhZ2UuZWxlbWVudERpZEZvY3VzKGVsZW1lbnQpOwogfQogCiB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6ZWxlbWVudERpZFJlZm9jdXMoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3Bh
Z2UuZWxlbWVudERpZFJlZm9jdXMoJmVsZW1lbnQpOworICAgIG1fcGFnZS5lbGVtZW50RGlkUmVm
b2N1cyhlbGVtZW50KTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVsZW1lbnREaWRCbHVy
KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9wYWdlLmVsZW1lbnREaWRCbHVyKCZlbGVtZW50
KTsKKyAgICBtX3BhZ2UuZWxlbWVudERpZEJsdXIoZWxlbWVudCk7CiB9CiAKIHZvaWQgV2ViQ2hy
b21lQ2xpZW50OjptYWtlRmlyc3RSZXNwb25kZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBjMjliZDRkYzU4MjRhNTg5NTVkZDc3MzYwZTY5
Y2QxMWNjMzdiOWFiLi43ZjA0NDNlNWM2ZWIzNTgyMzUyZTk3ZmMzYzk1YzRmYWNhZGJiZDlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzAs
NyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElHZW9tZXRy
eS5oIgotI2luY2x1ZGUgIkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiRGF0
YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyQWN0aW9uLmgiCiAjaW5jbHVk
ZSAiRHJhd2luZ0FyZWEuaCIKQEAgLTMwNTksNyArMzA1OCw3IEBAIHZvaWQgV2ViUGFnZTo6ZGlk
U3RhcnRQYWdlVHJhbnNpdGlvbigpCiAgICAgYm9vbCBoYXNQcmV2aW91c2x5Rm9jdXNlZER1ZVRv
VXNlckludGVyYWN0aW9uID0gbV9oYXNFdmVyRm9jdXNlZEVsZW1lbnREdWVUb1VzZXJJbnRlcmFj
dGlvblNpbmNlUGFnZVRyYW5zaXRpb247CiAjZW5kaWYKICAgICBtX2hhc0V2ZXJGb2N1c2VkRWxl
bWVudER1ZVRvVXNlckludGVyYWN0aW9uU2luY2VQYWdlVHJhbnNpdGlvbiA9IGZhbHNlOwotICAg
IG1faXNBc3Npc3RpbmdOb2RlRHVlVG9Vc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICBtX2lz
Rm9jdXNpbmdFbGVtZW50RHVlVG9Vc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKICAgICBtX2xhc3RF
ZGl0b3JTdGF0ZVdhc0NvbnRlbnRFZGl0YWJsZSA9IEVkaXRvclN0YXRlSXNDb250ZW50RWRpdGFi
bGU6OlVuc2V0OwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoaGFzUHJldmlvdXNseUZvY3Vz
ZWREdWVUb1VzZXJJbnRlcmFjdGlvbikKQEAgLTQ5NzEsOCArNDk3MCw4IEBAIHZvaWQgV2ViUGFn
ZTo6c2V0VGV4dEFzeW5jKGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihtX2Fzc2lzdGVkTm9kZS5nZXQoKSkp
IHsKLSAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKS5z
ZXRWYWx1ZUZvclVzZXIodGV4dCk7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZm9j
dXNlZEVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCptX2ZvY3VzZWRFbGVtZW50KS5zZXRWYWx1ZUZvclVzZXIodGV4dCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTUyNjQsNTIgKzUyNjMsNTMgQEAgdm9pZCBXZWJQYWdlOjpkaWRDaGFu
Z2VTZWxlY3Rpb24oKQogICAgIHNlbmRQYXJ0aWFsRWRpdG9yU3RhdGVBbmRTY2hlZHVsZVBvc3RM
YXlvdXRVcGRhdGUoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpyZXNldEFzc2lzdGVkTm9kZUZvckZy
YW1lKFdlYkZyYW1lKiBmcmFtZSkKK3ZvaWQgV2ViUGFnZTo6cmVzZXRGb2N1c2VkRWxlbWVudEZv
ckZyYW1lKFdlYkZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fYXNzaXN0ZWROb2RlKQorICAg
IGlmICghbV9mb2N1c2VkRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZS0+
aXNNYWluRnJhbWUoKSB8fCBtX2Fzc2lzdGVkTm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpID09IGZy
YW1lLT5jb3JlRnJhbWUoKSkgeworCisgICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpIHx8IG1f
Zm9jdXNlZEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSA9PSBmcmFtZS0+Y29yZUZyYW1lKCkp
IHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlN0b3BBc3Npc3RpbmdOb2RlKCkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkVsZW1lbnREaWRCbHVyKCkpOwogI2VsaWYgUExBVEZPUk0oTUFDKQogICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEVkaXRhYmxlRWxlbWVudElzRm9j
dXNlZChmYWxzZSkpOwogI2VuZGlmCi0gICAgICAgIG1fYXNzaXN0ZWROb2RlID0gbnVsbHB0cjsK
KyAgICAgICAgbV9mb2N1c2VkRWxlbWVudCA9IG51bGxwdHI7CiAgICAgfQogfQogCi12b2lkIFdl
YlBhZ2U6OmVsZW1lbnREaWRSZWZvY3VzKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit2b2lkIFdlYlBh
Z2U6OmVsZW1lbnREaWRSZWZvY3VzKFdlYkNvcmU6OkVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
ZWxlbWVudERpZEZvY3VzKG5vZGUpOworICAgIGVsZW1lbnREaWRGb2N1cyhlbGVtZW50KTsKICAg
ICBtX2hhc1BlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZSA9IHRydWU7CiB9CiAKLXZvaWQgV2ViUGFn
ZTo6ZWxlbWVudERpZEZvY3VzKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit2b2lkIFdlYlBhZ2U6OmVs
ZW1lbnREaWRGb2N1cyhXZWJDb3JlOjpFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmIChtX2Fz
c2lzdGVkTm9kZSA9PSBub2RlICYmIG1faXNBc3Npc3RpbmdOb2RlRHVlVG9Vc2VySW50ZXJhY3Rp
b24pCisgICAgaWYgKG1fZm9jdXNlZEVsZW1lbnQgPT0gJmVsZW1lbnQgJiYgbV9pc0ZvY3VzaW5n
RWxlbWVudER1ZVRvVXNlckludGVyYWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OnNlbGVjdFRhZykgfHwgbm9kZS0+
aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OmlucHV0VGFnKSB8fCBub2RlLT5oYXNUYWdO
YW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6dGV4dGFyZWFUYWcpIHx8IG5vZGUtPmhhc0VkaXRhYmxl
U3R5bGUoKSkgewotICAgICAgICBtX2Fzc2lzdGVkTm9kZSA9IG5vZGU7Ci0gICAgICAgIG1faXNB
c3Npc3RpbmdOb2RlRHVlVG9Vc2VySW50ZXJhY3Rpb24gfD0gbV91c2VySXNJbnRlcmFjdGluZzsK
KyAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6c2VsZWN0VGFn
KSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRNTE5hbWVzOjppbnB1dFRhZykgfHwg
ZWxlbWVudC5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6dGV4dGFyZWFUYWcpIHx8IGVs
ZW1lbnQuaGFzRWRpdGFibGVTdHlsZSgpKSB7CisgICAgICAgIG1fZm9jdXNlZEVsZW1lbnQgPSAm
ZWxlbWVudDsKKyAgICAgICAgbV9pc0ZvY3VzaW5nRWxlbWVudER1ZVRvVXNlckludGVyYWN0aW9u
IHw9IG1fdXNlcklzSW50ZXJhY3Rpbmc7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgICAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKS53
ZWJraXRJc0Z1bGxTY3JlZW4oKSkKLSAgICAgICAgICAgIG5vZGUtPmRvY3VtZW50KCkud2Via2l0
Q2FuY2VsRnVsbFNjcmVlbigpOworICAgICAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLndlYmtp
dElzRnVsbFNjcmVlbigpKQorICAgICAgICAgICAgZWxlbWVudC5kb2N1bWVudCgpLndlYmtpdENh
bmNlbEZ1bGxTY3JlZW4oKTsKICNlbmRpZgogCi0gICAgICAgICsrbV9jdXJyZW50QXNzaXN0ZWRO
b2RlSWRlbnRpZmllcjsKLSAgICAgICAgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gaW5mb3JtYXRp
b247Ci0gICAgICAgIGdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKGluZm9ybWF0aW9uKTsKKyAg
ICAgICAgKyttX2N1cnJlbnRGb2N1c2VkRWxlbWVudElkZW50aWZpZXI7CisgICAgICAgIEZvY3Vz
ZWRFbGVtZW50SW5mb3JtYXRpb24gaW5mb3JtYXRpb247CisgICAgICAgIGdldEZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24oaW5mb3JtYXRpb24pOwogICAgICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+
IHVzZXJEYXRhOwogCi0gICAgICAgIG1fZm9ybUNsaWVudC0+d2lsbEJlZ2luSW5wdXRTZXNzaW9u
KHRoaXMsIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLCBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgq
bm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpKSwgbV91c2VySXNJbnRlcmFjdGluZywgdXNlckRhdGEp
OworICAgICAgICBtX2Zvcm1DbGllbnQtPndpbGxCZWdpbklucHV0U2Vzc2lvbih0aGlzLCAmZWxl
bWVudCwgV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgp
KSwgbV91c2VySXNJbnRlcmFjdGluZywgdXNlckRhdGEpOwogCi0gICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U3RhcnRBc3Npc3RpbmdOb2RlKGluZm9ybWF0aW9uLCBtX3VzZXJJ
c0ludGVyYWN0aW5nLCBtX2hhc1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uLCBtX2NoYW5naW5nQWN0
aXZpdHlTdGF0ZSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2Jq
ZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RWxlbWVudERpZEZvY3VzKGluZm9ybWF0aW9uLCBtX3VzZXJJ
c0ludGVyYWN0aW5nLCBtX2hhc1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uLCBtX2NoYW5naW5nQWN0
aXZpdHlTdGF0ZSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2Jq
ZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAjZWxpZiBQTEFURk9STShN
QUMpCi0gICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6c2Vs
ZWN0VGFnKSkKKyAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnNlbGVjdFRhZykpCiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlNldEVkaXRhYmxlRWxlbWVudElzRm9jdXNlZChmYWxzZSkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEVkaXRhYmxlRWxlbWVudElz
Rm9jdXNlZCh0cnVlKSk7CkBAIC01MzE4LDE1ICs1MzE4LDE1IEBAIHZvaWQgV2ViUGFnZTo6ZWxl
bWVudERpZEZvY3VzKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCiAgICAgfQogfQogCi12b2lkIFdlYlBh
Z2U6OmVsZW1lbnREaWRCbHVyKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit2b2lkIFdlYlBhZ2U6OmVs
ZW1lbnREaWRCbHVyKFdlYkNvcmU6OkVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKG1fYXNz
aXN0ZWROb2RlID09IG5vZGUpIHsKKyAgICBpZiAobV9mb2N1c2VkRWxlbWVudCA9PSAmZWxlbWVu
dCkgewogICAgICAgICBtX2hhc1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uID0gdHJ1ZTsKICAgICAg
ICAgUmVmUHRyPFdlYlBhZ2U+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3Byb3RlY3RlZFRoaXNdIHsKICAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlz
LT5tX2hhc1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uKSB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlN0b3BBc3Npc3RpbmdOb2RlKCkpOworICAgICAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RWxlbWVudERpZEJsdXIoKSk7CiAjZWxp
ZiBQTEFURk9STShNQUMpCiAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpTZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQoZmFsc2UpKTsK
ICNlbmRpZgpAQCAtNTMzNCw4ICs1MzM0LDggQEAgdm9pZCBXZWJQYWdlOjplbGVtZW50RGlkQmx1
cihXZWJDb3JlOjpOb2RlKiBub2RlKQogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9oYXNQ
ZW5kaW5nQmx1ck5vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICB9KTsKIAotICAgICAgICBt
X2lzQXNzaXN0aW5nTm9kZUR1ZVRvVXNlckludGVyYWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIG1f
YXNzaXN0ZWROb2RlID0gbnVsbHB0cjsKKyAgICAgICAgbV9pc0ZvY3VzaW5nRWxlbWVudER1ZVRv
VXNlckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgICAgIG1fZm9jdXNlZEVsZW1lbnQgPSBudWxs
cHRyOwogICAgIH0KIH0KIApAQCAtNTUzNSw3ICs1NTM1LDcgQEAgdm9pZCBXZWJQYWdlOjpkaWRD
b21taXRMb2FkKFdlYkZyYW1lKiBmcmFtZSkKICAgICBmcmFtZS0+c2V0Rmlyc3RMYXllclRyZWVU
cmFuc2FjdGlvbklEQWZ0ZXJEaWRDb21taXRMb2FkKGRvd25jYXN0PFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhPigqbV9kcmF3aW5nQXJlYSkubmV4dFRyYW5zYWN0aW9uSUQoKSk7CiAgICAgY2Fu
Y2VsUG90ZW50aWFsVGFwSW5GcmFtZSgqZnJhbWUpOwogI2VuZGlmCi0gICAgcmVzZXRBc3Npc3Rl
ZE5vZGVGb3JGcmFtZShmcmFtZSk7CisgICAgcmVzZXRGb2N1c2VkRWxlbWVudEZvckZyYW1lKGZy
YW1lKTsKIAogICAgIGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBhNzFjYjA0
NDNjOTcwZTQ0MzBmZmU0MjZjYjVkODc4YzMzNDhkN2JhLi5mYzRlYTFkZmI5NDI2NGNhMWI5N2Jm
ZDg5NjUzMjBlNDAyZTA3MTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2FsbGJhY2tJRC5oIgogI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgogI2luY2x1ZGUgIkVkaXRpbmdSYW5nZS5oIgorI2lu
Y2x1ZGUgIkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1
bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFn
ZUZ1bGxTY3JlZW5DbGllbnQuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2VQb2xpY3lD
bGllbnQuaCIKQEAgLTI0MCw3ICsyNDEsNiBAQCBlbnVtIEZpbmRPcHRpb25zIDogdWludDE2X3Q7
CiBlbnVtIGNsYXNzIERyYWdDb250cm9sbGVyQWN0aW9uIDogdWludDhfdDsKIGVudW0gY2xhc3Mg
V2ViUG9saWN5QWN0aW9uIDogdWludDhfdDsKIAotc3RydWN0IEFzc2lzdGVkTm9kZUluZm9ybWF0
aW9uOwogc3RydWN0IEF0dHJpYnV0ZWRTdHJpbmc7CiBzdHJ1Y3QgRGF0YURldGVjdGlvblJlc3Vs
dDsKIHN0cnVjdCBCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGU7CkBAIC01ODUsMTEgKzU4NSwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjYXB0dXJlRGV2aWNlc0NoYW5nZWQoKTsKICNlbmRpZgogCi0g
ICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBhbGwgdGFrZSBFbGVtZW50JiBpbnN0ZWFkIG9mIE5v
ZGUqLgotICAgIHZvaWQgZWxlbWVudERpZEZvY3VzKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2b2lk
IGVsZW1lbnREaWRSZWZvY3VzKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2b2lkIGVsZW1lbnREaWRC
bHVyKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2b2lkIHJlc2V0QXNzaXN0ZWROb2RlRm9yRnJhbWUo
V2ViRnJhbWUqKTsKKyAgICB2b2lkIGVsZW1lbnREaWRGb2N1cyhXZWJDb3JlOjpFbGVtZW50Jik7
CisgICAgdm9pZCBlbGVtZW50RGlkUmVmb2N1cyhXZWJDb3JlOjpFbGVtZW50Jik7CisgICAgdm9p
ZCBlbGVtZW50RGlkQmx1cihXZWJDb3JlOjpFbGVtZW50Jik7CisgICAgdm9pZCByZXNldEZvY3Vz
ZWRFbGVtZW50Rm9yRnJhbWUoV2ViRnJhbWUqKTsKIAogICAgIHZvaWQgZGlzYWJsZWRBZGFwdGF0
aW9uc0RpZENoYW5nZShjb25zdCBPcHRpb25TZXQ8V2ViQ29yZTo6RGlzYWJsZWRBZGFwdGF0aW9u
cz4mKTsKICAgICB2b2lkIHZpZXdwb3J0UHJvcGVydGllc0RpZENoYW5nZShjb25zdCBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50cyYpOwpAQCAtNjIyLDIxICs2MjEsMjEgQEAgcHVibGljOgogICAg
IHZvaWQgaW5zcGVjdG9yTm9kZVNlYXJjaE1vdmVkVG9Qb3NpdGlvbihjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jik7CiAgICAgdm9pZCBpbnNwZWN0b3JOb2RlU2VhcmNoRW5kZWRBdFBvc2l0aW9u
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKIAotICAgIHZvaWQgYmx1ckFzc2lzdGVkTm9k
ZSgpOwotICAgIHZvaWQgcmVxdWVzdEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKENhbGxiYWNrSUQp
OwotICAgIHZvaWQgc2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1
aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1
cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgQ2FsbGJhY2tJRCk7
CisgICAgdm9pZCBibHVyRm9jdXNlZEVsZW1lbnQoKTsKKyAgICB2b2lkIHJlcXVlc3RGb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uKENhbGxiYWNrSUQpOworICAgIHZvaWQgc2VsZWN0V2l0aEdlc3R1
cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMy
X3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5n
V2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFja0lEKTsKICAgICB2b2lkIHVwZGF0ZVNlbGVjdGlv
bldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgdG91Y2hlcywg
Ym9vbCBiYXNlSXNTdGFydCwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91
Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHRvLCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBDYWxs
YmFja0lEKTsKICAgICB2b2lkIGV4dGVuZFNlbGVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSk7
CiAgICAgdm9pZCBzZWxlY3RXb3JkQmFja3dhcmQoKTsKICAgICB2b2lkIG1vdmVTZWxlY3Rpb25C
eU9mZnNldChpbnQzMl90IG9mZnNldCwgQ2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBzZWxlY3RUZXh0
V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90
IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBDYWxsYmFj
a0lEKTsKLSAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGly
ZWN0aW9uLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBDYWxsYmFja0lEKTsK
KyAgICB2b2lkIHNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhG
b2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBzZWxlY3RQb3NpdGlvbkF0Qm91
bmRhcnlXaXRoRGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgZ3Jh
bnVsYXJpdHksIHVpbnQzMl90IGRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3Vz
ZWRFbGVtZW50LCBDYWxsYmFja0lEKTsKICAgICB2b2lkIG1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5
V2l0aERpcmVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGlyZWN0aW9uLCBD
YWxsYmFja0lEKTsKLSAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRQb2ludChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIENhbGxiYWNr
SUQpOworICAgIHZvaWQgc2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFja0lEKTsK
ICAgICB2b2lkIGJlZ2luU2VsZWN0aW9uSW5EaXJlY3Rpb24odWludDMyX3QgZGlyZWN0aW9uLCBD
YWxsYmFja0lEKTsKLSAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUs
IENhbGxiYWNrSUQpOwotICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5k
Qm91bmRhcnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwg
Ym9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgQ2FsbGJhY2tJRCk7CisgICAgdm9p
ZCB1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENhbGxiYWNrSUQpOworICAg
IHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5n
V2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFja0lEKTsKIAogICAgIHZvaWQgcmVxdWVzdERpY3Rh
dGlvbkNvbnRleHQoQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCByZXBsYWNlRGljdGF0ZWRUZXh0KGNv
bnN0IFN0cmluZyYgb2xkVGV4dCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KTsKQEAgLTY1MSwxMSAr
NjUwLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0
UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2b2lkIHN0b3BJbnRlcmFj
dGlvbigpOwogICAgIHZvaWQgcGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24p
OwotICAgIHZvaWQgZm9jdXNOZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNGb3J3YXJkLCBDYWxsYmFj
a0lEKTsKKyAgICB2b2lkIGZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGJvb2wgaXNGb3J3YXJkLCBD
YWxsYmFja0lEKTsKICAgICB2b2lkIGF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVZhbHVlKGNvbnN0
IFN0cmluZyYpOwotICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUp
OwotICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRleCwg
Ym9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKTsKKyAgICB2b2lkIHNldEZvY3VzZWRFbGVtZW50
VmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRGb2N1c2VkRWxlbWVudFZhbHVlQXNO
dW1iZXIoZG91YmxlKTsKKyAgICB2b2lkIHNldEZvY3VzZWRFbGVtZW50U2VsZWN0ZWRJbmRleCh1
aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKTsKICAgICBXZWJDb3Jl
OjpJbnRSZWN0IHJlY3RGb3JFbGVtZW50QXRJbnRlcmFjdGlvbkxvY2F0aW9uKCk7CiAgICAgdm9p
ZCB1cGRhdGVTZWxlY3Rpb25BcHBlYXJhbmNlKCk7CiAgICAgdm9pZCBnZXRTZWxlY3Rpb25Db250
ZXh0KENhbGxiYWNrSUQpOwpAQCAtMTE2NiwxNCArMTE2NSwxNCBAQCBwcml2YXRlOgogCiAgICAg
c3RhdGljIHZvaWQgY29udmVydFNlbGVjdGlvblJlY3RzVG9Sb290VmlldyhXZWJDb3JlOjpGcmFt
ZVZpZXcqLCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mKTsKICAgICBSZWZQdHI8V2Vi
Q29yZTo6UmFuZ2U+IHJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbihjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYsIFNlbGVjdGlvbkZs
YWdzJik7Ci0gICAgdm9pZCBnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihBc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbiYpOworICAgIHZvaWQgZ2V0Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbihGb2N1
c2VkRWxlbWVudEluZm9ybWF0aW9uJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVBY2Nl
c3NpYmlsaXR5KCk7CiAgICAgdm9pZCBoYW5kbGVTeW50aGV0aWNDbGljayhXZWJDb3JlOjpOb2Rl
KiBub2RlUmVzcG9uZGluZ1RvQ2xpY2ssIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0
aW9uKTsKICAgICB2b2lkIGNvbXBsZXRlU3ludGhldGljQ2xpY2soV2ViQ29yZTo6Tm9kZSogbm9k
ZVJlc3BvbmRpbmdUb0NsaWNrLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbiwg
V2ViQ29yZTo6U3ludGhldGljQ2xpY2tUeXBlKTsKICAgICB2b2lkIHNlbmRUYXBIaWdobGlnaHRG
b3JOb2RlSWZOZWNlc3NhcnkodWludDY0X3QgcmVxdWVzdElELCBXZWJDb3JlOjpOb2RlKik7CiAg
ICAgdm9pZCByZXNldFRleHRBdXRvc2l6aW5nKCk7Ci0gICAgV2ViQ29yZTo6VmlzaWJsZVBvc2l0
aW9uIHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChjb25zdCBXZWJDb3JlOjpG
cmFtZSYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFz
c2lzdGVkTm9kZSk7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZUZvckdyYW51bGFy
aXR5QXRQb2ludChXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWlu
dDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUpOwor
ICAgIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2Rl
Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7CisgICAgUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiByYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChXZWJDb3JlOjpGcmFtZSYsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRl
cmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpICYmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpAQCAtMTY3Miw3ICsxNjcxLDcgQEAg
cHJpdmF0ZToKICAgICBPcHRpb25hbDxXZWJDb3JlOjpJbnRTaXplPiBtX3ZpZXdwb3J0U2l6ZUZv
ckNTU1ZpZXdwb3J0VW5pdHM7CiAKICAgICBib29sIG1fdXNlcklzSW50ZXJhY3RpbmcgeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9pc0Fzc2lzdGluZ05vZGVEdWVUb1VzZXJJbnRlcmFjdGlvbiB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lzRm9jdXNpbmdFbGVtZW50RHVlVG9Vc2VySW50ZXJhY3Rpb24g
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNFdmVyRm9jdXNlZEVsZW1lbnREdWVUb1VzZXJJbnRl
cmFjdGlvblNpbmNlUGFnZVRyYW5zaXRpb24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9uZWVkc0hp
ZGRlbkNvbnRlbnRFZGl0YWJsZVF1aXJrIHsgZmFsc2UgfTsKICAgICBib29sIG1fbmVlZHNQbGFp
blRleHRRdWlyayB7IGZhbHNlIH07CkBAIC0xNjgyLDcgKzE2ODEsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9pc1Nob3dpbmdDb250ZXh0TWVudSB7IGZhbHNlIH07CiAjZW5kaWYKIAotICAgIFJl
ZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2Fzc2lzdGVkTm9kZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
RWxlbWVudD4gbV9mb2N1c2VkRWxlbWVudDsKICAgICBib29sIG1faGFzUGVuZGluZ0JsdXJOb3Rp
ZmljYXRpb24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNQZW5kaW5nRWRpdG9yU3RhdGVVcGRh
dGUgeyBmYWxzZSB9OwogICAgIApAQCAtMTcyNCw3ICsxNzIzLDcgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9wZW5kaW5nU3ludGhldGljQ2xpY2tOb2RlOwogICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgbV9wZW5kaW5nU3ludGhldGljQ2xpY2tMb2NhdGlvbjsKICAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgbV9wcmV2aW91c0V4cG9zZWRDb250ZW50UmVjdDsKLSAgICB1aW50
NjRfdCBtX2N1cnJlbnRBc3Npc3RlZE5vZGVJZGVudGlmaWVyIHsgMCB9OworICAgIEZvY3VzZWRF
bGVtZW50SWRlbnRpZmllciBtX2N1cnJlbnRGb2N1c2VkRWxlbWVudElkZW50aWZpZXIgeyAwIH07
CiAgICAgT3B0aW9uYWw8RHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEPiBtX3BlbmRpbmdEeW5h
bWljVmlld3BvcnRTaXplVXBkYXRlSUQ7CiAgICAgZG91YmxlIG1fbGFzdFRyYW5zYWN0aW9uUGFn
ZVNjYWxlRmFjdG9yIHsgMCB9OwogICAgIHVpbnQ2NF90IG1fbGFzdFRyYW5zYWN0aW9uSURXaXRo
U2NhbGVDaGFuZ2UgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCBiYzllM2VjMDg1Y2ZkMjk5NmQ5MTgzMmY3
ZTQwZDNlYzNiNjFiZDQyLi5lMjY1NGQ5NDNjZjRjNGY2YjVlNDk3ZWI3OTJmYjhkNWQ2NWNiYmY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KQEAgLTU4LDIwICs1OCwyMCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2Fj
eVJlY2VpdmVyIHsKICAgICBUYXBIaWdobGlnaHRBdFBvc2l0aW9uKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCkKICAgICBJbnNwZWN0b3JOb2RlU2VhcmNoTW92
ZWRUb1Bvc2l0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCiAgICAgSW5zcGVjdG9yTm9k
ZVNlYXJjaEVuZGVkQXRQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQotICAgIEJs
dXJBc3Npc3RlZE5vZGUoKQotICAgIFNlbGVjdFdpdGhHZXN0dXJlKFdlYkNvcmU6OkludFBvaW50
IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQz
Ml90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV2Vi
S2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgQmx1ckZvY3VzZWRFbGVtZW50KCkKKyAg
ICBTZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgZ3Jh
bnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIGJv
b2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV2ViS2l0OjpDYWxsYmFja0lEIGNh
bGxiYWNrSUQpCiAgICAgVXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoV2ViQ29yZTo6SW50UG9p
bnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIFdlYktpdDo6Q2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFNlbGVjdFdpdGhUd29Ub3VjaGVzKFdlYkNvcmU6Oklu
dFBvaW50IGZyb20sIFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlwZSwg
dWludDMyX3QgZ2VzdHVyZVN0YXRlLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAg
ICBFeHRlbmRTZWxlY3Rpb24odWludDMyX3QgZ3JhbnVsYXJpdHkpCiAgICAgU2VsZWN0V29yZEJh
Y2t3YXJkKCkKICAgICBNb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIFdlYktp
dDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQotICAgIFNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlB
dFBvaW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9v
bCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxi
YWNrSUQpCi0gICAgU2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihXZWJDb3Jl
OjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGRpcmVjdGlv
biwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV2ViS2l0OjpDYWxsYmFja0lE
IGNhbGxiYWNrSUQpCisgICAgU2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3Rp
bmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAg
IFNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6SW50UG9pbnQg
cG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIGJvb2wgaXNJ
bnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiAgICAgTW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKHVpbnQzMl90IGdy
YW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQotICAgIFNlbGVjdFBvc2l0aW9uQXRQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
Ym9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV2ViS2l0OjpDYWxsYmFja0lEIGNh
bGxiYWNrSUQpCisgICAgU2VsZWN0UG9zaXRpb25BdFBvaW50KFdlYkNvcmU6OkludFBvaW50IHBv
aW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdlYktpdDo6Q2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQogICAgIEJlZ2luU2VsZWN0aW9uSW5EaXJlY3Rpb24odWludDMyX3Qg
ZGlyZWN0aW9uLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLSAgICBVcGRhdGVTZWxl
Y3Rpb25XaXRoRXh0ZW50UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIGJvb2wgaXNJbnRl
cmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQot
ICAgIFVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KFdlYkNvcmU6Oklu
dFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0
aEFzc2lzdGVkTm9kZSwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgVXBkYXRl
U2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBib29sIGlz
SW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQorICAgIFVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KFdlYkNv
cmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0
aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAg
ICBSZXF1ZXN0RGljdGF0aW9uQ29udGV4dChXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
ICAgICBSZXBsYWNlRGljdGF0ZWRUZXh0KFN0cmluZyBvbGRUZXh0LCBTdHJpbmcgbmV3VGV4dCkK
ICAgICBSZXBsYWNlU2VsZWN0ZWRUZXh0KFN0cmluZyBvbGRUZXh0LCBTdHJpbmcgbmV3VGV4dCkK
QEAgLTg1LDExICs4NSwxMSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsK
ICAgICBTdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKFdlYkNvcmU6OkludFBv
aW50IHBvaW50KQogICAgIFN0b3BJbnRlcmFjdGlvbigpCiAgICAgUGVyZm9ybUFjdGlvbk9uRWxl
bWVudCh1aW50MzJfdCBhY3Rpb24pCi0gICAgRm9jdXNOZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNG
b3J3YXJkLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLSAgICBTZXRBc3Npc3RlZE5v
ZGVWYWx1ZShTdHJpbmcgdmFsdWUpCisgICAgRm9jdXNOZXh0Rm9jdXNlZEVsZW1lbnQoYm9vbCBp
c0ZvcndhcmQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIFNldEZvY3VzZWRF
bGVtZW50VmFsdWUoU3RyaW5nIHZhbHVlKQogICAgIEF1dG9maWxsTG9naW5DcmVkZW50aWFscyhT
dHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkKLSAgICBTZXRBc3Npc3RlZE5vZGVWYWx1
ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKLSAgICBTZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4
KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCisgICAgU2V0Rm9j
dXNlZEVsZW1lbnRWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKKyAgICBTZXRGb2N1c2VkRWxl
bWVudFNlbGVjdGVkSW5kZXgodWludDMyX3QgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVj
dGlvbikKICAgICBBcHBsaWNhdGlvbldpbGxSZXNpZ25BY3RpdmUoKQogICAgIEFwcGxpY2F0aW9u
RGlkRW50ZXJCYWNrZ3JvdW5kKGJvb2wgaXNTdXNwZW5kZWRVbmRlckxvY2spCiAgICAgQXBwbGlj
YXRpb25EaWRGaW5pc2hTbmFwc2hvdHRpbmdBZnRlckVudGVyaW5nQmFja2dyb3VuZCgpCkBAIC0x
MDYsNyArMTA2LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAg
U3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJvb2wgc2hvdWxkU3RvcmUpCiAgICAgU3Rh
cnRBdXRvc2Nyb2xsQXRQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvc2l0aW9uSW5XaW5k
b3cpCiAgICAgQ2FuY2VsQXV0b3Njcm9sbCgpCi0gICAgUmVxdWVzdEFzc2lzdGVkTm9kZUluZm9y
bWF0aW9uKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIFJlcXVlc3RGb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIEhh
cmR3YXJlS2V5Ym9hcmRBdmFpbGFiaWxpdHlDaGFuZ2VkKCkKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDlm
OTliNGJlNWNlODk2YTE1YjhlMzRmNzBmODkwNGJlZTkwN2U1ZTcuLmMxNTAyYWNiNDZhYmE0NGVl
OGQ1NjA3ZmFjODRlOWIwYzI5OWFhMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUlPUy5oIgotI2ltcG9y
dCAiQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIK
ICNpbXBvcnQgIkRyYXdpbmdBcmVhLmgiCiAjaW1wb3J0ICJFZGl0aW5nUmFuZ2UuaCIKQEAgLTI0
MSwxMCArMjQwLDEwIEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYg
ZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQsIEluY2x1ZGVQb3N0CiAgICAgfQogICAgIHBvc3RM
YXlvdXREYXRhLmluc2lkZUZpeGVkUG9zaXRpb24gPSBzdGFydE5vZGVJc0luc2lkZUZpeGVkUG9z
aXRpb24gfHwgZW5kTm9kZUlzSW5zaWRlRml4ZWRQb3NpdGlvbjsKICAgICBpZiAoIXNlbGVjdGlv
bi5pc05vbmUoKSkgewotICAgICAgICBpZiAobV9hc3Npc3RlZE5vZGUgJiYgbV9hc3Npc3RlZE5v
ZGUtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnNlbGVjdGlvbkNs
aXBSZWN0ID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KG1fYXNzaXN0ZWROb2RlLT5yZW5kZXJl
cigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKLSAgICAgICAgICAgIHBvc3RMYXlvdXRE
YXRhLmNhcmV0Q29sb3IgPSBtX2Fzc2lzdGVkTm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5jYXJl
dENvbG9yKCk7Ci0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5lbGVtZW50SXNUcmFuc3BhcmVu
dCA9IG1fYXNzaXN0ZWROb2RlLT5yZW5kZXJlcigpLT5pc1RyYW5zcGFyZW50UmVzcGVjdGluZ1Bh
cmVudEZyYW1lcygpOworICAgICAgICBpZiAobV9mb2N1c2VkRWxlbWVudCAmJiBtX2ZvY3VzZWRF
bGVtZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zZWxlY3Rp
b25DbGlwUmVjdCA9IHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhtX2ZvY3VzZWRFbGVtZW50LT5y
ZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKKyAgICAgICAgICAgIHBvc3RM
YXlvdXREYXRhLmNhcmV0Q29sb3IgPSBtX2ZvY3VzZWRFbGVtZW50LT5yZW5kZXJlcigpLT5zdHls
ZSgpLmNhcmV0Q29sb3IoKTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLmVsZW1lbnRJc1Ry
YW5zcGFyZW50ID0gbV9mb2N1c2VkRWxlbWVudC0+cmVuZGVyZXIoKS0+aXNUcmFuc3BhcmVudFJl
c3BlY3RpbmdQYXJlbnRGcmFtZXMoKTsKICAgICAgICAgfQogICAgICAgICBjb21wdXRlRWRpdGFi
bGVSb290SGFzQ29udGVudEFuZFBsYWluVGV4dChzZWxlY3Rpb24sIHBvc3RMYXlvdXREYXRhKTsK
ICAgICB9CkBAIC02MTUsNyArNjE0LDcgQEAgdm9pZCBXZWJQYWdlOjpjb21wbGV0ZVN5bnRoZXRp
Y0NsaWNrKE5vZGUqIG5vZGVSZXNwb25kaW5nVG9DbGljaywgY29uc3QgV2ViQ29yZToKICAgICAv
LyBJZiB0aGUgbm9kZSBoYXMgYmVlbiBmb2N1c2VkIGJ5IEphdmFTY3JpcHQgd2l0aG91dCB1c2Vy
IGludGVyYWN0aW9uLCB0aGUKICAgICAvLyBrZXlib2FyZCBpcyBub3Qgb24gc2NyZWVuLgogICAg
IGlmIChuZXdGb2N1c2VkRWxlbWVudCAmJiBuZXdGb2N1c2VkRWxlbWVudCA9PSBvbGRGb2N1c2Vk
RWxlbWVudCkKLSAgICAgICAgZWxlbWVudERpZFJlZm9jdXMobmV3Rm9jdXNlZEVsZW1lbnQuZ2V0
KCkpOworICAgICAgICBlbGVtZW50RGlkUmVmb2N1cygqbmV3Rm9jdXNlZEVsZW1lbnQpOwogCiAg
ICAgaWYgKCF0YXBXYXNIYW5kbGVkIHx8ICFub2RlUmVzcG9uZGluZ1RvQ2xpY2sgfHwgIW5vZGVS
ZXNwb25kaW5nVG9DbGljay0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZE5vdEhhbmRsZVRhcEFzQ2xpY2socm91bmRlZEludFBvaW50KGxv
Y2F0aW9uKSkpOwpAQCAtNjQzLDEzICs2NDIsMTMgQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVUYXAo
Y29uc3QgSW50UG9pbnQmIHBvaW50LCB1aW50NjRfdCBsYXN0TGF5ZXJUcmVlVHJhbnNhY3Rpb24K
ICAgICAgICAgaGFuZGxlU3ludGhldGljQ2xpY2sobm9kZVJlc3BvbmRpbmdUb0NsaWNrLCBhZGp1
c3RlZFBvaW50KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24oV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdlYlBhZ2U6OnJlcXVl
c3RGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lE
KQogewotICAgIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uIGluZm87Ci0gICAgaWYgKG1fYXNzaXN0
ZWROb2RlKQotICAgICAgICBnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihpbmZvKTsKKyAgICBG
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uIGluZm87CisgICAgaWYgKG1fZm9jdXNlZEVsZW1lbnQp
CisgICAgICAgIGdldEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24oaW5mbyk7CiAKLSAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uQ2FsbGJhY2so
aW5mbywgY2FsbGJhY2tJRCkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Rm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbkNhbGxiYWNrKGluZm8sIGNhbGxiYWNrSUQpKTsKIH0KIAog
I2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpAQCAtODc0LDI5ICs4NzMsMzEgQEAgdm9pZCBX
ZWJQYWdlOjppbnNwZWN0b3JOb2RlU2VhcmNoRW5kZWRBdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKQogICAgICAgICBub2RlLT5pbnNwZWN0KCk7CiB9CiAKLXZvaWQgV2ViUGFn
ZTo6Ymx1ckFzc2lzdGVkTm9kZSgpCit2b2lkIFdlYlBhZ2U6OmJsdXJGb2N1c2VkRWxlbWVudCgp
CiB7Ci0gICAgaWYgKGlzPEVsZW1lbnQ+KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkKLSAgICAgICAg
ZG93bmNhc3Q8RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKS5ibHVyKCk7CisgICAgaWYgKCFtX2Zv
Y3VzZWRFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZvY3VzZWRFbGVtZW50LT5i
bHVyKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3ZvaWQgV2ViUGFnZTo6c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZShjb25zdCBT
dHJpbmcmIHZhbHVlKQogewogICAgIC8vIEZJWE1FOiBzaG91bGQgYWxzbyBoYW5kbGUgdGhlIGNh
c2Ugb2YgSFRNTFNlbGVjdEVsZW1lbnQuCi0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1f
YXNzaXN0ZWROb2RlLmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Km1fYXNzaXN0ZWROb2RlKS5zZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2
ZW50KTsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obV9mb2N1c2VkRWxlbWVudC5nZXQo
KSkpCisgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2ZvY3VzZWRFbGVtZW50
KS5zZXRWYWx1ZSh2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKIH0KIAotdm9p
ZCBXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKK3Zv
aWQgV2ViUGFnZTo6c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkK
IHsKLSAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obV9hc3Npc3RlZE5vZGUuZ2V0KCkpKQot
ICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpLnNldFZh
bHVlQXNOdW1iZXIodmFsdWUsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7CisgICAgaWYg
KGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZm9jdXNlZEVsZW1lbnQuZ2V0KCkpKQorICAgICAgICBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9mb2N1c2VkRWxlbWVudCkuc2V0VmFsdWVBc051
bWJlcih2YWx1ZSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKIH0KIAotdm9pZCBXZWJQ
YWdlOjpzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFs
bG93TXVsdGlwbGVTZWxlY3Rpb24pCit2b2lkIFdlYlBhZ2U6OnNldEZvY3VzZWRFbGVtZW50U2Vs
ZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKQog
ewotICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4obV9hc3Npc3RlZE5vZGUuZ2V0KCkpKQot
ICAgICAgICBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKS5vcHRp
b25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7Cisg
ICAgaWYgKGlzPEhUTUxTZWxlY3RFbGVtZW50PihtX2ZvY3VzZWRFbGVtZW50LmdldCgpKSkKKyAg
ICAgICAgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCptX2ZvY3VzZWRFbGVtZW50KS5vcHRp
b25TZWxlY3RlZEJ5VXNlcihpbmRleCwgdHJ1ZSwgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CiB9
CiAKIHZvaWQgV2ViUGFnZTo6c2hvd0luc3BlY3RvckhpZ2hsaWdodChjb25zdCBXZWJDb3JlOjpI
aWdobGlnaHQmIGhpZ2hsaWdodCkKQEAgLTkzNSwxMyArOTM2LDEzIEBAIHZvaWQgV2ViUGFnZTo6
c2V0Rm9yY2VBbHdheXNVc2VyU2NhbGFibGUoYm9vbCB1c2VyU2NhbGFibGUpCiAgICAgbV92aWV3
cG9ydENvbmZpZ3VyYXRpb24uc2V0Rm9yY2VBbHdheXNVc2VyU2NhbGFibGUodXNlclNjYWxhYmxl
KTsKIH0KIAotc3RhdGljIEZsb2F0UXVhZCBpbm5lckZyYW1lUXVhZChjb25zdCBGcmFtZSYgZnJh
bWUsIGNvbnN0IE5vZGUmIGFzc2lzdGVkTm9kZSkKK3N0YXRpYyBGbG9hdFF1YWQgaW5uZXJGcmFt
ZVF1YWQoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBFbGVtZW50JiBmb2N1c2VkRWxlbWVudCkK
IHsKICAgICBmcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IG51bGxwdHI7Ci0gICAgaWYg
KGFzc2lzdGVkTm9kZS5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWFUYWcpIHx8IGFzc2lz
dGVkTm9kZS5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpIHx8IGFzc2lzdGVkTm9kZS5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKSkKLSAgICAgICAgcmVuZGVyZXIgPSBkb3du
Y2FzdDxSZW5kZXJFbGVtZW50Pihhc3Npc3RlZE5vZGUucmVuZGVyZXIoKSk7Ci0gICAgZWxzZSBp
ZiAoRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCA9IGFzc2lzdGVkTm9kZS5yb290RWRpdGFi
bGVFbGVtZW50KCkpCisgICAgaWYgKGZvY3VzZWRFbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0ZXh0YXJlYVRhZykgfHwgZm9jdXNlZEVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6Omlu
cHV0VGFnKSB8fCBmb2N1c2VkRWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFn
KSkKKyAgICAgICAgcmVuZGVyZXIgPSBmb2N1c2VkRWxlbWVudC5yZW5kZXJlcigpOworICAgIGVs
c2UgaWYgKGF1dG8qIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBmb2N1c2VkRWxlbWVudC5yb290RWRp
dGFibGVFbGVtZW50KCkpCiAgICAgICAgIHJlbmRlcmVyID0gcm9vdEVkaXRhYmxlRWxlbWVudC0+
cmVuZGVyZXIoKTsKICAgICAKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtOTU3LDExICs5NTgsMTEg
QEAgc3RhdGljIEZsb2F0UXVhZCBpbm5lckZyYW1lUXVhZChjb25zdCBGcmFtZSYgZnJhbWUsIGNv
bnN0IE5vZGUmIGFzc2lzdGVkTm9kZSkKICAgICByZXR1cm4gRmxvYXRRdWFkKGJvdW5kaW5nQm94
KTsKIH0KIAotc3RhdGljIEludFBvaW50IGNvbnN0cmFpblBvaW50KGNvbnN0IEludFBvaW50JiBw
b2ludCwgY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBOb2RlJiBhc3Npc3RlZE5vZGUpCitzdGF0
aWMgSW50UG9pbnQgY29uc3RyYWluUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBjb25zdCBG
cmFtZSYgZnJhbWUsIGNvbnN0IEVsZW1lbnQmIGZvY3VzZWRFbGVtZW50KQogewotICAgIEFTU0VS
VCgmYXNzaXN0ZWROb2RlLmRvY3VtZW50KCkgPT0gZnJhbWUuZG9jdW1lbnQoKSk7CisgICAgQVNT
RVJUKCZmb2N1c2VkRWxlbWVudC5kb2N1bWVudCgpID09IGZyYW1lLmRvY3VtZW50KCkpOwogICAg
IGNvbnN0IGludCBERUZBVUxUX0NPTlNUUkFJTl9JTlNFVCA9IDI7Ci0gICAgSW50UmVjdCBpbm5l
ckZyYW1lID0gaW5uZXJGcmFtZVF1YWQoZnJhbWUsIGFzc2lzdGVkTm9kZSkuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKKyAgICBJbnRSZWN0IGlubmVyRnJhbWUgPSBpbm5lckZyYW1lUXVhZChmcmFt
ZSwgZm9jdXNlZEVsZW1lbnQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgSW50UG9pbnQg
Y29uc3RyYWluZWRQb2ludCA9IHBvaW50OwogCiAgICAgaW50IG1pblggPSBpbm5lckZyYW1lLngo
KSArIERFRkFVTFRfQ09OU1RSQUlOX0lOU0VUOwpAQCAtMTA4OSwxMCArMTA5MCwxMCBAQCBSZWZQ
dHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbihjb25zdCBJ
bnRQb2ludCYgcG9pbnQsIGNvbgogICAgIHJldHVybiByYW5nZS0+Y29sbGFwc2VkKCkgPyBudWxs
cHRyIDogcmFuZ2U7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3Qg
SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5
cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVk
Tm9kZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2Vz
dHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJf
dCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBib29sIGlzSW50ZXJhY3RpbmdX
aXRoRm9jdXNlZEVsZW1lbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBhdXRvJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9k
ZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUpOwor
ICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5v
ZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQp
OwogCiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6R2VzdHVyZUNhbGxiYWNrKHBvaW50LCBnZXN0dXJlVHlwZSwgZ2VzdHVy
ZVN0YXRlLCAwLCBjYWxsYmFja0lEKSk7CkBAIC0xNDYyLDggKzE0NjMsOCBAQCB2b2lkIFdlYlBh
Z2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgQ2FsbGJhY2tJRCBjYWxs
YmFja0lEKQogICAgIAogdm9pZCBXZWJQYWdlOjpzdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cpCiB7Ci0gICAgaWYgKG1f
YXNzaXN0ZWROb2RlICYmIG1fYXNzaXN0ZWROb2RlLT5yZW5kZXJlcigpKQotICAgICAgICBtX3Bh
Z2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLnN0YXJ0U2VsZWN0aW9uQXV0b3Njcm9sbCht
X2Fzc2lzdGVkTm9kZS0+cmVuZGVyZXIoKSwgcG9zaXRpb25JbldpbmRvdyk7CisgICAgaWYgKG1f
Zm9jdXNlZEVsZW1lbnQgJiYgbV9mb2N1c2VkRWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAg
bV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zdGFydFNlbGVjdGlvbkF1dG9zY3Jv
bGwobV9mb2N1c2VkRWxlbWVudC0+cmVuZGVyZXIoKSwgcG9zaXRpb25JbldpbmRvdyk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CkBAIC0xNTYzLDI3ICsxNTY0LDI3IEBA
IHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qg
b2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRlCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpTZWxlY3Rpb25SZWN0c0NhbGxiYWNrKHNlbGVjdGlvblJlY3RzLCBjYWxsYmFja0lEKSk7CiB9
CiAKLVZpc2libGVQb3NpdGlvbiBXZWJQYWdlOjp2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2Rl
Rm9yUG9pbnQoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wg
aXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUpCitWaXNpYmxlUG9zaXRpb24gV2ViUGFnZTo6
dmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGNvbnN0IEZyYW1lJiBmcmFtZSwg
Y29uc3QgSW50UG9pbnQmIHBvaW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1l
bnQpCiB7CiAgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludChmcmFtZS52aWV3KCktPnJvb3RWaWV3
VG9Db250ZW50cyhwb2ludCkpOwotICAgIEludFBvaW50IGNvbnN0cmFpbmVkUG9pbnQgPSBtX2Fz
c2lzdGVkTm9kZSAmJiBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSA/IGNvbnN0cmFpblBv
aW50KGFkanVzdGVkUG9pbnQsIGZyYW1lLCAqbV9hc3Npc3RlZE5vZGUpIDogYWRqdXN0ZWRQb2lu
dDsKKyAgICBJbnRQb2ludCBjb25zdHJhaW5lZFBvaW50ID0gbV9mb2N1c2VkRWxlbWVudCAmJiBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50ID8gY29uc3RyYWluUG9pbnQoYWRqdXN0ZWRQ
b2ludCwgZnJhbWUsICptX2ZvY3VzZWRFbGVtZW50KSA6IGFkanVzdGVkUG9pbnQ7CiAgICAgcmV0
dXJuIGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0cmFpbmVkUG9pbnQpOwogfQog
Ci12b2lkIFdlYlBhZ2U6OnNlbGVjdFBvc2l0aW9uQXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgcG9pbnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIENhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRF
bGVtZW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgYXV0byYgZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChm
cmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQo
ZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKICAgICAKICAg
ICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpCiAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24s
IHBvc2l0aW9uKS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKIH0KIAot
dm9pZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90
IGRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgQ2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRo
RGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ3JhbnVs
YXJpdHksIHVpbnQzMl90IGRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRF
bGVtZW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgYXV0byYgZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChm
cmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQo
ZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKIAogICAgIGlm
IChwb3NpdGlvbi5pc05vdE51bGwoKSkgewogICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uT2ZO
ZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpU
ZXh0R3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgc3RhdGljX2Nhc3Q8U2VsZWN0aW9uRGlyZWN0
aW9uPihkaXJlY3Rpb24pKTsKQEAgLTE2MDcsOSArMTYwOCw5IEBAIHZvaWQgV2ViUGFnZTo6bW92
ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKHVpbnQzMl90IGdyYW51bGFyaXR5LCB1
aW50MzJfCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2soY2Fs
bGJhY2tJRCkpOwogfQogCi1SZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yR3JhbnVsYXJp
dHlBdFBvaW50KEZyYW1lJiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1
aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSkK
K1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JHcmFudWxhcml0eUF0UG9pbnQoRnJhbWUm
IGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFy
aXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpCiB7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50
KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUpOworICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2lu
dChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogCiAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZTsKICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFdlYkNvcmU6OlRl
eHRHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpKSB7CkBAIC0xNjM3LDExICsxNjM4LDExIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCByZWN0SXNUb29CaWdGb3JTZWxlY3Rpb24oY29uc3QgSW50UmVjdCYg
YmxvY2tSZWN0LCBjb25zdCBGcmFtCiAgICAgcmV0dXJuIGJsb2NrUmVjdC5oZWlnaHQoKSA+IGZy
YW1lLnZpZXcoKS0+dW5vYnNjdXJlZENvbnRlbnRSZWN0KCkuaGVpZ2h0KCkgKiBmYWN0b3I7CiB9
CiAKLXZvaWQgV2ViUGFnZTo6c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0lu
dGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBX
ZWJQYWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdX
aXRoRm9jdXNlZEVsZW1lbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBhdXRvJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KGZyYW1l
LCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsKLSAg
ICBpZiAoIWlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKSB7CisgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IHJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KGZyYW1lLCBwb2ludCwgZ3JhbnVs
YXJpdHksIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOworICAgIGlmICghaXNJbnRl
cmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCkgewogICAgICAgICBtX2Jsb2NrU2VsZWN0aW9uRGVz
aXJlZFNpemUuc2V0V2lkdGgoYmxvY2tTZWxlY3Rpb25TdGFydFdpZHRoKTsKICAgICAgICAgbV9i
bG9ja1NlbGVjdGlvbkRlc2lyZWRTaXplLnNldEhlaWdodChibG9ja1NlbGVjdGlvblN0YXJ0SGVp
Z2h0KTsKICAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPSBudWxscHRyOwpAQCAtMTY0
OSw3ICsxNjUwLDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQ
b2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHUKICAgICAgICAgaWYgKHJlbmRl
cmVyICYmIHJlbmRlcmVyLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKQogICAgICAgICAgICAg
bV9ibG9ja1JlY3RGb3JUZXh0U2VsZWN0aW9uID0gcmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdC
b3hSZWN0KHRydWUpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gcGFyYWdyYXBo
UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkodmlzaWJsZVBvc2l0aW9uSW5G
b2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3Rl
ZE5vZGUpLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7CisgICAgICAg
ICAgICBhdXRvIHBhcmFncmFwaFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5
KHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50
ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgRGlyZWN0
aW9uRm9yd2FyZCk7CiAgICAgICAgICAgICBpZiAocGFyYWdyYXBoUmFuZ2UgJiYgIXBhcmFncmFw
aFJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgICAgICAgICBtX2Jsb2NrUmVjdEZvclRleHRT
ZWxlY3Rpb24gPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZShwYXJhZ3JhcGhSYW5nZS5nZXQoKSk7CiAg
ICAgICAgIH0KQEAgLTE2NzAsMTEgKzE2NzEsMTEgQEAgdm9pZCBXZWJQYWdlOjpiZWdpblNlbGVj
dGlvbkluRGlyZWN0aW9uKHVpbnQzMl90IGRpcmVjdGlvbiwgQ2FsbGJhY2tJRCBjYWxsYmFja0kK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2sobV9zZWxl
Y3Rpb25BbmNob3IgPT0gU3RhcnQsIGNhbGxiYWNrSUQpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjp1
cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdX
aXRoQXNzaXN0ZWROb2RlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdlYlBhZ2U6OnVw
ZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dp
dGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGF1dG8mIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2Rl
Rm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSk7Ci0g
ICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IHJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KGZy
YW1lLCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWRO
b2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50
KTsKKyAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9p
bnQoZnJhbWUsIHBvaW50LCBncmFudWxhcml0eSwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxl
bWVudCk7CiAgICAgCiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpIHx8ICFtX2luaXRpYWxTZWxl
Y3Rpb24gfHwgIW5ld1JhbmdlKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6VW5zaWduZWRDYWxsYmFjayhmYWxzZSwgY2FsbGJhY2tJRCkpOwpAQCAtMTY5OSwxMCArMTcw
MCwxMCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJv
dW5kYXJ5KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JgogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6VW5zaWduZWRDYWxsYmFjayhzZWxlY3Rpb25TdGFydCA9PSBtX2luaXRpYWxTZWxl
Y3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgY2FsbGJhY2tJRCkpOwogfQogCi12b2lkIFdlYlBhZ2U6
OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
cG9pbnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIENhbGxiYWNrSUQgY2Fs
bGJhY2tJRCkKK3ZvaWQgV2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3Vz
ZWRFbGVtZW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgYXV0byYgZnJhbWUgPSBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2lu
dChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9p
bnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKIAogICAg
IGlmIChwb3NpdGlvbi5pc051bGwoKSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soZmFsc2UsIGNhbGxiYWNrSUQpKTsKQEAgLTIwODYsMTUg
KzIwODcsMTUgQEAgdm9pZCBXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IElu
dGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0JiByZXF1ZXMKICAgICBGbG9hdFBvaW50IGFkanVz
dGVkUG9pbnQ7CiAgICAgTm9kZSogaGl0Tm9kZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCkubm9kZVJl
c3BvbmRpbmdUb0NsaWNrRXZlbnRzKHJlcXVlc3QucG9pbnQsIGFkanVzdGVkUG9pbnQpOwogCi0g
ICAgaW5mby5ub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlID0gKGhpdE5vZGUgPT0gbV9hc3Np
c3RlZE5vZGUpOwotICAgIGlmIChtX2Fzc2lzdGVkTm9kZSkgeworICAgIGluZm8ubm9kZUF0UG9z
aXRpb25Jc0ZvY3VzZWRFbGVtZW50ID0gaGl0Tm9kZSA9PSBtX2ZvY3VzZWRFbGVtZW50OworICAg
IGlmIChtX2ZvY3VzZWRFbGVtZW50KSB7CiAgICAgICAgIGNvbnN0IEZyYW1lJiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgICAgIGlm
IChmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgICAgICBjb25zdCB1
aW50MzJfdCBrSGl0QXJlYVdpZHRoID0gNjY7CiAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBr
SGl0QXJlYUhlaWdodCA9IDY2OwogICAgICAgICAgICAgRnJhbWVWaWV3JiB2aWV3ID0gKmZyYW1l
LnZpZXcoKTsKICAgICAgICAgICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQodmlldy5yb290Vmll
d1RvQ29udGVudHMocmVxdWVzdC5wb2ludCkpOwotICAgICAgICAgICAgSW50UG9pbnQgY29uc3Ry
YWluZWRQb2ludCA9IG1fYXNzaXN0ZWROb2RlID8gY29uc3RyYWluUG9pbnQoYWRqdXN0ZWRQb2lu
dCwgZnJhbWUsICptX2Fzc2lzdGVkTm9kZSkgOiBhZGp1c3RlZFBvaW50OworICAgICAgICAgICAg
SW50UG9pbnQgY29uc3RyYWluZWRQb2ludCA9IG1fZm9jdXNlZEVsZW1lbnQgPyBjb25zdHJhaW5Q
b2ludChhZGp1c3RlZFBvaW50LCBmcmFtZSwgKm1fZm9jdXNlZEVsZW1lbnQpIDogYWRqdXN0ZWRQ
b2ludDsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnZpc2li
bGVQb3NpdGlvbkZvclBvaW50KGNvbnN0cmFpbmVkUG9pbnQpOwogCiAgICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJh
bmdlKCk7CkBAIC0yMzM2LDkgKzIzMzcsOSBAQCBzdGF0aWMgaW5saW5lIEVsZW1lbnQqIG5leHRB
c3Npc3RhYmxlRWxlbWVudChOb2RlKiBzdGFydE5vZGUsIFBhZ2UmIHBhZ2UsIGJvb2wgaQogICAg
IHJldHVybiBuZXh0RWxlbWVudDsKIH0KIAotdm9pZCBXZWJQYWdlOjpmb2N1c05leHRBc3Npc3Rl
ZE5vZGUoYm9vbCBpc0ZvcndhcmQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFn
ZTo6Zm9jdXNOZXh0Rm9jdXNlZEVsZW1lbnQoYm9vbCBpc0ZvcndhcmQsIENhbGxiYWNrSUQgY2Fs
bGJhY2tJRCkKIHsKLSAgICBFbGVtZW50KiBuZXh0RWxlbWVudCA9IG5leHRBc3Npc3RhYmxlRWxl
bWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSwgKm1fcGFnZSwgaXNGb3J3YXJkKTsKKyAgICBFbGVt
ZW50KiBuZXh0RWxlbWVudCA9IG5leHRBc3Npc3RhYmxlRWxlbWVudChtX2ZvY3VzZWRFbGVtZW50
LmdldCgpLCAqbV9wYWdlLCBpc0ZvcndhcmQpOwogICAgIG1fdXNlcklzSW50ZXJhY3RpbmcgPSB0
cnVlOwogICAgIGlmIChuZXh0RWxlbWVudCkKICAgICAgICAgbmV4dEVsZW1lbnQtPmZvY3VzKCk7
CkBAIC0yMzU5LDE1ICsyMzYwLDE1IEBAIHN0YXRpYyBJbnRSZWN0IGVsZW1lbnRSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKGNvbnN0IE5vZGUmIG5vZGUsIGNvbnN0IEZyYW1lJiBmCiAgICAgcmV0
dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24o
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQordm9pZCBXZWJQYWdlOjpnZXRG
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24mIGluZm9y
bWF0aW9uKQogewogICAgIGxheW91dElmTmVlZGVkKCk7CiAKICAgICBpbmZvcm1hdGlvbi5lbGVt
ZW50SW50ZXJhY3Rpb25Mb2NhdGlvbiA9IG1fbGFzdEludGVyYWN0aW9uTG9jYXRpb247CiAKLSAg
ICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fYXNzaXN0ZWROb2RlLT5yZW5kZXJlcigp
KSB7Ci0gICAgICAgIEZyYW1lJiBlbGVtZW50RnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50UmVj
dCA9IGVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCptX2Fzc2lzdGVkTm9kZSwgZWxl
bWVudEZyYW1lKTsKKyAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBtX2ZvY3VzZWRFbGVtZW50LT5y
ZW5kZXJlcigpKSB7CisgICAgICAgIGF1dG8mIGVsZW1lbnRGcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgICAgIGluZm9ybWF0aW9uLmVs
ZW1lbnRSZWN0ID0gZWxlbWVudFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKm1fZm9jdXNlZEVs
ZW1lbnQsIGVsZW1lbnRGcmFtZSk7CiAgICAgICAgIGluZm9ybWF0aW9uLm5vZGVGb250U2l6ZSA9
IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOwogICAg
ICAgICBpbmZvcm1hdGlvbi5lbGVtZW50SXNUcmFuc3BhcmVudCA9IHJlbmRlcmVyLT5pc1RyYW5z
cGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpOwogCkBAIC0yMzc2LDcgKzIzNzcsNyBAQCB2
b2lkIFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9y
bWF0aW9uJiBpbmZvcm1hdGlvbikKICAgICAgICAgaW5mb3JtYXRpb24uaW5zaWRlRml4ZWRQb3Np
dGlvbiA9IGluRml4ZWQ7CiAgICAgICAgIGluZm9ybWF0aW9uLmlzUlRMID0gcmVuZGVyZXItPnN0
eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMOwogCi0gICAgICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gZWxlbWVudEZyYW1lLnZpZXcoKTsKKyAgICAgICAgYXV0byogZnJh
bWVWaWV3ID0gZWxlbWVudEZyYW1lLnZpZXcoKTsKICAgICAgICAgaWYgKGluRml4ZWQgJiYgZWxl
bWVudEZyYW1lLmlzTWFpbkZyYW1lKCkgJiYgIWZyYW1lVmlldy0+ZnJhbWUoKS5zZXR0aW5ncygp
LnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGN1cnJlbnRG
aXhlZFBvc2l0aW9uUmVjdCA9IGZyYW1lVmlldy0+Y3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJl
Y3QoKTsKICAgICAgICAgICAgIGZyYW1lVmlldy0+c2V0Q3VzdG9tRml4ZWRQb3NpdGlvbkxheW91
dFJlY3QoZnJhbWVWaWV3LT5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpKTsKQEAgLTIzOTgs
MjAgKzIzOTksMjAgQEAgdm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihB
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCiAgICAgaW5mb3JtYXRpb24ubWF4
aW11bVNjYWxlRmFjdG9ySWdub3JpbmdBbHdheXNTY2FsYWJsZSA9IG1heGltdW1QYWdlU2NhbGVG
YWN0b3JJZ25vcmluZ0Fsd2F5c1NjYWxhYmxlKCk7CiAgICAgaW5mb3JtYXRpb24uYWxsb3dzVXNl
clNjYWxpbmcgPSBtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5hbGxvd3NVc2VyU2NhbGluZygpOwog
ICAgIGluZm9ybWF0aW9uLmFsbG93c1VzZXJTY2FsaW5nSWdub3JpbmdBbHdheXNTY2FsYWJsZSA9
IG1fdmlld3BvcnRDb25maWd1cmF0aW9uLmFsbG93c1VzZXJTY2FsaW5nSWdub3JpbmdBbHdheXNT
Y2FsYWJsZSgpOwotICAgIGlmIChhdXRvKiBuZXh0RWxlbWVudCA9IG5leHRBc3Npc3RhYmxlRWxl
bWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSwgKm1fcGFnZSwgdHJ1ZSkpIHsKKyAgICBpZiAoYXV0
byogbmV4dEVsZW1lbnQgPSBuZXh0QXNzaXN0YWJsZUVsZW1lbnQobV9mb2N1c2VkRWxlbWVudC5n
ZXQoKSwgKm1fcGFnZSwgdHJ1ZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gbmV4dEVs
ZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLm5leHRO
b2RlUmVjdCA9IGVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCpuZXh0RWxlbWVudCwg
KmZyYW1lKTsKICAgICAgICAgaW5mb3JtYXRpb24uaGFzTmV4dE5vZGUgPSB0cnVlOwogICAgIH0K
LSAgICBpZiAoYXV0byogcHJldmlvdXNFbGVtZW50ID0gbmV4dEFzc2lzdGFibGVFbGVtZW50KG1f
YXNzaXN0ZWROb2RlLmdldCgpLCAqbV9wYWdlLCBmYWxzZSkpIHsKKyAgICBpZiAoYXV0byogcHJl
dmlvdXNFbGVtZW50ID0gbmV4dEFzc2lzdGFibGVFbGVtZW50KG1fZm9jdXNlZEVsZW1lbnQuZ2V0
KCksICptX3BhZ2UsIGZhbHNlKSkgewogICAgICAgICBpZiAoYXV0byogZnJhbWUgPSBwcmV2aW91
c0VsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLnBy
ZXZpb3VzTm9kZVJlY3QgPSBlbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygqcHJldmlv
dXNFbGVtZW50LCAqZnJhbWUpOwogICAgICAgICBpbmZvcm1hdGlvbi5oYXNQcmV2aW91c05vZGUg
PSB0cnVlOwogICAgIH0KLSAgICBpbmZvcm1hdGlvbi5hc3Npc3RlZE5vZGVJZGVudGlmaWVyID0g
bV9jdXJyZW50QXNzaXN0ZWROb2RlSWRlbnRpZmllcjsKKyAgICBpbmZvcm1hdGlvbi5mb2N1c2Vk
RWxlbWVudElkZW50aWZpZXIgPSBtX2N1cnJlbnRGb2N1c2VkRWxlbWVudElkZW50aWZpZXI7CiAK
LSAgICBpZiAoaXM8TGFiZWxhYmxlRWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgewotICAgICAg
ICBhdXRvIGxhYmVscyA9IGRvd25jYXN0PExhYmVsYWJsZUVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9k
ZSkubGFiZWxzKCk7CisgICAgaWYgKGlzPExhYmVsYWJsZUVsZW1lbnQ+KCptX2ZvY3VzZWRFbGVt
ZW50KSkgeworICAgICAgICBhdXRvIGxhYmVscyA9IGRvd25jYXN0PExhYmVsYWJsZUVsZW1lbnQ+
KCptX2ZvY3VzZWRFbGVtZW50KS5sYWJlbHMoKTsKICAgICAgICAgVmVjdG9yPFJlZjxFbGVtZW50
Pj4gYXNzb2NpYXRlZExhYmVsczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbGFiZWxzLT5sZW5ndGgoKTsgKytpbmRleCkgewogICAgICAgICAgICAgaWYgKGlzPEVs
ZW1lbnQ+KGxhYmVscy0+aXRlbShpbmRleCkpICYmIGxhYmVscy0+aXRlbShpbmRleCktPnJlbmRl
cmVyKCkpCkBAIC0yNDI2LDE0ICsyNDI3LDExIEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGlzPEVsZW1lbnQ+KG1fYXNzaXN0ZWROb2RlLmdldCgp
KSkgewotICAgICAgICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm1fYXNzaXN0
ZWROb2RlKTsKLSAgICAgICAgaW5mb3JtYXRpb24udGl0bGUgPSBlbGVtZW50LnRpdGxlKCk7Ci0g
ICAgICAgIGluZm9ybWF0aW9uLmFyaWFMYWJlbCA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmFyaWFfbGFiZWxBdHRyKTsKLSAgICB9CisgICAgaW5m
b3JtYXRpb24udGl0bGUgPSBtX2ZvY3VzZWRFbGVtZW50LT50aXRsZSgpOworICAgIGluZm9ybWF0
aW9uLmFyaWFMYWJlbCA9IG1fZm9jdXNlZEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oSFRNTE5hbWVzOjphcmlhX2xhYmVsQXR0cik7CiAKLSAgICBpZiAoaXM8SFRNTFNl
bGVjdEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkpIHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1l
bnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2Rl
KTsKKyAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KCptX2ZvY3VzZWRFbGVtZW50KSkgewor
ICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxTZWxlY3RF
bGVtZW50PigqbV9mb2N1c2VkRWxlbWVudCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRU
eXBlID0gSW5wdXRUeXBlOjpTZWxlY3Q7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVu
dCo+JiBpdGVtcyA9IGVsZW1lbnQubGlzdEl0ZW1zKCk7CiAgICAgICAgIHNpemVfdCBjb3VudCA9
IGl0ZW1zLnNpemUoKTsKQEAgLTI0NTQsOCArMjQ1Miw4IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9u
KQogICAgICAgICB9CiAgICAgICAgIGluZm9ybWF0aW9uLnNlbGVjdGVkSW5kZXggPSBlbGVtZW50
LnNlbGVjdGVkSW5kZXgoKTsKICAgICAgICAgaW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdCA9IGVs
ZW1lbnQubXVsdGlwbGUoKTsKLSAgICB9IGVsc2UgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+
KCptX2Fzc2lzdGVkTm9kZSkpIHsKLSAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgZWxlbWVu
dCA9IGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7CisgICAg
fSBlbHNlIGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9mb2N1c2VkRWxlbWVudCkpIHsK
KyAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0
QXJlYUVsZW1lbnQ+KCptX2ZvY3VzZWRFbGVtZW50KTsKICAgICAgICAgaW5mb3JtYXRpb24uYXV0
b2NhcGl0YWxpemVUeXBlID0gZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKTsKICAgICAgICAg
aW5mb3JtYXRpb24uaXNBdXRvY29ycmVjdCA9IGVsZW1lbnQuc2hvdWxkQXV0b2NvcnJlY3QoKTsK
ICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OlRleHRBcmVhOwpA
QCAtMjQ2NCwxNCArMjQ2MiwxNCBAQCB2b2lkIFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9y
bWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbikKICAgICAgICAgaW5m
b3JtYXRpb24uYXV0b2ZpbGxGaWVsZE5hbWUgPSBXZWJDb3JlOjp0b0F1dG9maWxsRmllbGROYW1l
KGVsZW1lbnQuYXV0b2ZpbGxEYXRhKCkuZmllbGROYW1lKTsKICAgICAgICAgaW5mb3JtYXRpb24u
cGxhY2Vob2xkZXIgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRN
TE5hbWVzOjpwbGFjZWhvbGRlckF0dHIpOwogICAgICAgICBpbmZvcm1hdGlvbi5pbnB1dE1vZGUg
PSBlbGVtZW50LmNhbm9uaWNhbElucHV0TW9kZSgpOwotICAgIH0gZWxzZSBpZiAoaXM8SFRNTElu
cHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50
JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsK
KyAgICB9IGVsc2UgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCptX2ZvY3VzZWRFbGVtZW50KSkg
eworICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKm1fZm9jdXNlZEVsZW1lbnQpOwogICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZv
cm0gPSBlbGVtZW50LmZvcm0oKTsKICAgICAgICAgaWYgKGZvcm0pCiAgICAgICAgICAgICBpbmZv
cm1hdGlvbi5mb3JtQWN0aW9uID0gZm9ybS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6YWN0aW9uQXR0cik7CiAgICAgICAgIGlmIChhdXRvIGF1dG9maWxsRWxlbWVudHMgPSBX
ZWJDb3JlOjpBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhlbGVtZW50
KSkgewogICAgICAgICAgICAgaW5mb3JtYXRpb24uYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRl
bnRpYWxzID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9ybWF0aW9uLmlzQXV0b2ZpbGxhYmxlVXNl
cm5hbWVGaWVsZCA9IGF1dG9maWxsRWxlbWVudHMtPnVzZXJuYW1lKCkgPT0gbV9hc3Npc3RlZE5v
ZGU7CisgICAgICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9maWxsYWJsZVVzZXJuYW1lRmllbGQg
PSBhdXRvZmlsbEVsZW1lbnRzLT51c2VybmFtZSgpID09IG1fZm9jdXNlZEVsZW1lbnQ7CiAgICAg
ICAgIH0KICAgICAgICAgaW5mb3JtYXRpb24ucmVwcmVzZW50aW5nUGFnZVVSTCA9IGVsZW1lbnQu
ZG9jdW1lbnQoKS51cmxGb3JCaW5kaW5ncygpOwogICAgICAgICBpbmZvcm1hdGlvbi5hdXRvY2Fw
aXRhbGl6ZVR5cGUgPSBlbGVtZW50LmF1dG9jYXBpdGFsaXplVHlwZSgpOwpAQCAtMjUyOSwxMyAr
MjUyNywxMyBAQCB2b2lkIFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbikKICAgICAgICAgaW5mb3JtYXRpb24udmFs
dWUgPSBlbGVtZW50LnZhbHVlKCk7CiAgICAgICAgIGluZm9ybWF0aW9uLnZhbHVlQXNOdW1iZXIg
PSBlbGVtZW50LnZhbHVlQXNOdW1iZXIoKTsKICAgICAgICAgaW5mb3JtYXRpb24uYXV0b2ZpbGxG
aWVsZE5hbWUgPSBXZWJDb3JlOjp0b0F1dG9maWxsRmllbGROYW1lKGVsZW1lbnQuYXV0b2ZpbGxE
YXRhKCkuZmllbGROYW1lKTsKLSAgICB9IGVsc2UgaWYgKGlzPEhUTUxJbWFnZUVsZW1lbnQ+KCpt
X2Fzc2lzdGVkTm9kZSkgJiYgZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4oKm1fYXNzaXN0ZWRO
b2RlKS5oYXNFZGl0YWJsZUltYWdlQXR0cmlidXRlKCkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPEhU
TUxJbWFnZUVsZW1lbnQ+KCptX2ZvY3VzZWRFbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MSW1hZ2VF
bGVtZW50PigqbV9mb2N1c2VkRWxlbWVudCkuaGFzRWRpdGFibGVJbWFnZUF0dHJpYnV0ZSgpKSB7
CiAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpEcmF3aW5nOwot
ICAgICAgICBpbmZvcm1hdGlvbi5lbWJlZGRlZFZpZXdJRCA9IGRvd25jYXN0PEhUTUxJbWFnZUVs
ZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkuZWRpdGFibGVJbWFnZVZpZXdJRCgpOwotICAgIH0gZWxz
ZSBpZiAobV9hc3Npc3RlZE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkgeworICAgICAgICBpbmZv
cm1hdGlvbi5lbWJlZGRlZFZpZXdJRCA9IGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCptX2Zv
Y3VzZWRFbGVtZW50KS5lZGl0YWJsZUltYWdlVmlld0lEKCk7CisgICAgfSBlbHNlIGlmIChtX2Zv
Y3VzZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgaW5mb3JtYXRpb24u
ZWxlbWVudFR5cGUgPSBJbnB1dFR5cGU6OkNvbnRlbnRFZGl0YWJsZTsKLSAgICAgICAgaWYgKGlz
PEhUTUxFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKSB7Ci0gICAgICAgICAgICBhdXRvJiBhc3Np
c3RlZEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAg
ICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PigqbV9mb2N1c2VkRWxlbWVudCkpIHsKKyAgICAgICAg
ICAgIGF1dG8mIGFzc2lzdGVkRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PigqbV9mb2N1
c2VkRWxlbWVudCk7CiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9jb3JyZWN0ID0gYXNz
aXN0ZWRFbGVtZW50LnNob3VsZEF1dG9jb3JyZWN0KCk7CiAgICAgICAgICAgICBpbmZvcm1hdGlv
bi5hdXRvY2FwaXRhbGl6ZVR5cGUgPSBhc3Npc3RlZEVsZW1lbnQuYXV0b2NhcGl0YWxpemVUeXBl
KCk7CiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5pbnB1dE1vZGUgPSBhc3Npc3RlZEVsZW1lbnQu
Y2Fub25pY2FsSW5wdXRNb2RlKCk7CkBAIC0yNTQ5LDggKzI1NDcsOCBAQCB2b2lkIFdlYlBhZ2U6
OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZv
cm1hdGlvbikKIAogdm9pZCBXZWJQYWdlOjphdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3Qg
U3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKIHsKLSAgICBpZiAoaXM8
SFRNTElucHV0RWxlbWVudD4obV9hc3Npc3RlZE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIGlmIChh
dXRvIGF1dG9maWxsRWxlbWVudHMgPSBBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxF
bGVtZW50cyhkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKSkKKyAg
ICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obV9mb2N1c2VkRWxlbWVudC5nZXQoKSkpIHsKKyAg
ICAgICAgaWYgKGF1dG8gYXV0b2ZpbGxFbGVtZW50cyA9IEF1dG9maWxsRWxlbWVudHM6OmNvbXB1
dGVBdXRvZmlsbEVsZW1lbnRzKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2ZvY3VzZWRF
bGVtZW50KSkpCiAgICAgICAgICAgICBhdXRvZmlsbEVsZW1lbnRzLT5hdXRvZmlsbCh1c2VybmFt
ZSwgcGFzc3dvcmQpOwogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357820</attachid>
            <date>2018-12-20 09:42:37 -0800</date>
            <delta_ts>2018-12-20 10:42:53 -0800</delta_ts>
            <desc>Update a Copyright year</desc>
            <filename>bug-192936-20181220094236.patch</filename>
            <type>text/plain</type>
            <size>204436</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU5ZTIzZmI2ZGI5YTE3Yjcz
ZDgyZTgwNzYwY2RhNzdjNmI2MTVhZGQuLjJhOWQ3MTE0ZmQ2YzY4ZTA1MTQxZDcxZDVkZTJhZjk4
ZWZmODNiZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjU2IEBACisyMDE4LTEyLTIwICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFJlcGxhY2Ug
Im5vZGUgYXNzaXN0YW5jZSIgdGVybWlub2xvZ3kgaW4gV2ViS2l0IHdpdGggImZvY3VzZWQgZWxl
bWVudCIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MjkzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmFtZXMgYSBmZXcgbWV0aG9kcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGluIFdlYktpdCwgdG8gcmVm
ZXIgdG8gImZvY3VzZWQgZWxlbWVudHMiIHJhdGhlciB0aGFuICJhc3Npc3RlZCBub2RlcyI7Cisg
ICAgICAgIHNlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLiBObyBuZXcgdGVzdHMsIGJlY2F1c2Ug
dGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFNoYXJl
ZC9Gb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcC4KKyAgICAgICAgKFdlYktpdDo6
T3B0aW9uSXRlbTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3B0aW9uSXRlbTo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbjo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbjo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
aC4KKworICAgICAgICBSZW5hbWUgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gdG8gRm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbi4gQWRkaXRpb25hbGx5LCBpbnRyb2R1Y2UgYSBuYW1lZCB0eXBlIGZv
ciB0aGUKKyAgICAgICAgZm9jdXNlZEVsZW1lbnRJZGVudGlmaWVyICh3aGljaCBpcyBjdXJyZW50
bHkganVzdCBhIGB1aW50NjRfdGApLgorCisgICAgICAgIChXZWJLaXQ6Ok9wdGlvbkl0ZW06Ok9w
dGlvbkl0ZW0pOgorICAgICAgICAqIFNoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0
UG9zaXRpb24uaDoKKyAgICAgICAgKiBTaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb246OmRlY29kZSk6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9zaG91bGRVcGRhdGVLZXlib2FyZFdpdGhJbmZvOl0pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vz
c0V4aXRlZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorCisgICAgICAg
IFJlbmFtZSBOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyB0byBFbGVtZW50RGlkRm9jdXNBcmd1bWVu
dHMgKGFuZCBhbHNvIGFkZCBhIEZJWE1FIGZvciByZW1vdmluZyB0aGlzIG1lY2hhbmlzbQorICAg
ICAgICBldmVudHVhbGx5KS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZvY3Vz
TmV4dEZvY3VzZWRFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpmb2N1
c05leHRBc3Npc3RlZE5vZGUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW46CisKKyAgICAgICAgUmVuYW1lIFN0YXJ0QXNzaXN0aW5nTm9kZSB0
byBFbGVtZW50RGlkRm9jdXMsIGFuZCBTdG9wQXNzaXN0aW5nTm9kZSB0byBFbGVtZW50RGlkQmx1
ci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6ZWxlbWVudERpZEZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudEltcGw6OmlzRm9jdXNpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmVsZW1lbnREaWRCbHVyKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OnN0YXJ0QXNzaXN0aW5nTm9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjppc0Fzc2lzdGluZ05vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6c3RvcEFzc2lzdGluZ05vZGUpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpc0ZvY3VzaW5nRWxlbWVu
dF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9kaWRDb21taXRMb2FkRm9yTWFpbkZyYW1l
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaXNBc3Npc3RpbmdOb2RlXSk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tGb2N1c2VkRWxlbWVudEluZm8gaW5pdFdpdGhGb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uOmlzVXNlckluaXRpYXRlZDp1c2VyT2JqZWN0Ol0pOgorICAgICAgICAoaGFzRm9jdXNlZEVs
ZW1lbnQpOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNsZWFudXBJbnRlcmFjdGlvbl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNob3VsZEhpZGVTZWxlY3Rpb25XaGVuU2Nyb2xsaW5n
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJGb3JXZWJW
aWV3XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RpZEdldFRhcEhpZ2hsaWdodEZvclJl
cXVlc3Q6Y29sb3I6cXVhZHM6dG9wTGVmdFJhZGl1czp0b3BSaWdodFJhZGl1czpib3R0b21MZWZ0
UmFkaXVzOmJvdHRvbVJpZ2h0UmFkaXVzOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9y
ZXF1aXJlc0tleWJvYXJkV2hlbkZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgX3pvb21Ub1JldmVhbEZvY3VzZWRFbGVtZW50XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgaW5wdXRWaWV3XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NlbGVjdGlvbkNs
aXBSZWN0XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZ2VzdHVyZVJlY29nbml6ZXJTaG91
bGRCZWdpbjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyB0ZXh0SW50ZXJhY3Rpb25HZXN0
dXJlOnNob3VsZEJlZ2luQXRQb2ludDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjbGVh
clNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcXVpcmVzQWNjZXNzb3J5
Vmlld10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNhblBlcmZvcm1BY3Rpb25Gb3JXZWJW
aWV3OndpdGhTZW5kZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2lzSW50ZXJhY3Rp
bmdXaXRoRm9jdXNlZEVsZW1lbnRdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjaGFuZ2VT
ZWxlY3Rpb25XaXRoR2VzdHVyZUF0OndpdGhHZXN0dXJlOndpdGhTdGF0ZTp3aXRoRmxhZ3M6XSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2VsZWN0UG9zaXRpb25BdFBvaW50OmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVjdFBvc2l0aW9uQXRC
b3VuZGFyeTppbkRpcmVjdGlvbjpmcm9tUG9pbnQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgc2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eTphdFBvaW50OmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHVwZGF0ZVNlbGVj
dGlvbldpdGhFeHRlbnRQb2ludDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyB1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQ6d2l0aEJvdW5kYXJ5OmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjY2Vzc29yeVRh
YjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRo
U2VsZWN0aW9uTW92aW5nRm9yd2FyZDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBhY2Nlc3NvcnlDbGVhcl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IF91cGRhdGVBY2Nlc3NvcnldKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpbnNlcnRUZXh0
U3VnZ2VzdGlvbjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXRTZWxlY3RlZFRleHRS
YW5nZTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyB0ZXh0SW5wdXRUcmFpdHNdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBpc1Njcm9sbGFibGVGb3JLZXlib2FyZFNjcm9sbFZpZXdB
bmltYXRvcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBmb2N1c2VkRWxlbWVudEluZm9y
bWF0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRP
cHRpb25zXSk6CisgICAgICAgIChyZWN0VG9SZXZlYWxXaGVuWm9vbWluZ1RvRm9jdXNlZEVsZW1l
bnQpOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9lbGVtZW50RGlkRm9jdXM6dXNlcklzSW50
ZXJhY3Rpbmc6Ymx1clByZXZpb3VzTm9kZTpjaGFuZ2luZ0FjdGl2aXR5U3RhdGU6dXNlck9iamVj
dDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZWxlbWVudERpZEJsdXJdKToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBfZGlkUmVjZWl2ZUVkaXRvclN0YXRlVXBkYXRlQWZ0ZXJGb2N1
c10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHVwZGF0ZUN1cnJlbnRGb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHByZXNlbnRWaWV3Q29u
dHJvbGxlckZvckN1cnJlbnRGb2N1c2VkRWxlbWVudF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IGZvY3VzZWRGb3JtQ29udHJvbFZpZXdEaWRTdWJtaXQ6XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgZm9jdXNlZEZvcm1Db250cm9sVmlld0RpZENhbmNlbDpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBmb2N1c2VkRm9ybUNvbnRyb2xWaWV3RGlkQmVnaW5FZGl0aW5nOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlY3RGb3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3Ol0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG5leHRSZWN0Rm9yRm9jdXNlZEZvcm1Db250cm9s
VmlldzpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBwcmV2aW91c1JlY3RGb3JGb2N1c2Vk
Rm9ybUNvbnRyb2xWaWV3Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjdGlvbk5hbWVG
b3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGZv
Y3VzZWRGb3JtQ29udHJvbFZpZXdEaWRSZXF1ZXN0TmV4dE5vZGU6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgZm9jdXNlZEZvcm1Db250cm9sVmlld0RpZFJlcXVlc3RQcmV2aW91c05vZGU6
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaGFzTmV4dE5vZGVGb3JGb2N1c2VkRm9ybUNv
bnRyb2xWaWV3Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGhhc1ByZXZpb3VzTm9kZUZv
ckZvY3VzZWRGb3JtQ29udHJvbFZpZXc6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2Vs
ZWN0TWVudTpkaWRTZWxlY3RJdGVtQXRJbmRleDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBudW1iZXJPZkl0ZW1zSW5TZWxlY3RNZW51Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IHNlbGVjdE1lbnU6ZGlzcGxheVRleHRGb3JJdGVtQXRJbmRleDpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBzZWxlY3RNZW51OmRpZENoZWNrSXRlbUF0SW5kZXg6Y2hlY2tlZDpdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBzZWxlY3RNZW51VXNlc011bHRpcGxlU2VsZWN0aW9uOl0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVjdE1lbnU6aGFzU2VsZWN0ZWRPcHRpb25B
dEluZGV4Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF91cGRhdGVDaGFuZ2VkU2VsZWN0
aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hdXRvZmlsbENvbnRleHRdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBkaXNtaXNzUXVpY2tib2FyZFZpZXdDb250cm9sbGVyQW5k
UmV2ZWFsRm9jdXNlZEZvcm1PdmVybGF5SWZOZWNlc3Nhcnk6XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgYWxsb3dzTGFuZ3VhZ2VTZWxlY3Rpb25NZW51Rm9yTGlzdFZpZXdDb250cm9sbGVy
Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGlucHV0TGFiZWxUZXh0Rm9yVmlld0NvbnRy
b2xsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaW5pdGlhbFZhbHVlRm9yVmlld0Nv
bnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2hvdWxkRGlzcGxheUlucHV0
Q29udGV4dFZpZXdGb3JMaXN0Vmlld0NvbnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgbnVtZXJpY0lucHV0TW9kZUZvckxpc3RWaWV3Q29udHJvbGxlcjpdKToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyB0ZXh0Q29udGVudFR5cGVGb3JMaXN0Vmlld0NvbnRyb2xsZXI6XSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWxsb3dzRGljdGF0aW9uSW5wdXRGb3JMaXN0Vmll
d0NvbnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLRm9jdXNlZEVsZW1lbnRJbmZvIGluaXRXaXRo
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246aXNVc2VySW5pdGlhdGVkOnVzZXJPYmplY3Q6XSk6IERl
bGV0ZWQuCisgICAgICAgIChoYXNBc3Npc3RlZE5vZGUpOiBEZWxldGVkLgorCisgICAgICAgIFJl
cGxhY2VkIHdpdGggaGFzRm9jdXNlZEVsZW1lbnQuCisKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBfaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGVdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBhc3Npc3RlZE5vZGVJbmZvcm1hdGlvbl0pOiBEZWxldGVkLgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc3RhcnRBc3Npc3RpbmdOb2RlOnVzZXJJc0ludGVy
YWN0aW5nOmJsdXJQcmV2aW91c05vZGU6Y2hhbmdpbmdBY3Rpdml0eVN0YXRlOnVzZXJPYmplY3Q6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3N0b3BBc3Npc3RpbmdOb2Rl
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgdXBkYXRlQ3VycmVudEFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IHByZXNlbnRWaWV3Q29udHJvbGxlckZvckN1cnJlbnRBc3Npc3RlZE5vZGVdKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklP
Uy5tbToKKyAgICAgICAgKC1bV0tEYXRhTGlzdFN1Z2dlc3Rpb25zQ29udHJvbCB0ZXh0QWxpZ25t
ZW50XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXF1ZXN0Rm9jdXNlZEVsZW1l
bnRJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29tcHV0ZUN1
c3RvbUZpeGVkUG9zaXRpb25SZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkaWRDb21taXRMYXllclRyZWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNlbGVjdFdpdGhHZXN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZWxl
Y3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2lu
dEFuZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpibHVyRm9jdXNl
ZEVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmVsZW1lbnREaWRGb2N1
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRGb2N1c2VkRWxlbWVudFZhbHVlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRGb2N1c2VkRWxlbWVudFZhbHVlQXNOdW1i
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEZvY3VzZWRFbGVtZW50U2Vs
ZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb25DYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cmVxdWVzdEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpibHVyQXNzaXN0ZWROb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BBc3Npc3RpbmdOb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpmb2N1c05leHRBc3Npc3RlZE5vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFzc2lzdGVkTm9k
ZVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBc3Np
c3RlZE5vZGVWYWx1ZUFzTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybUNvbG9yUGlja2VyLm1tOgorICAgICAgICAoLVtX
S0NvbG9yUGlja2VyIGluaXRXaXRoVmlldzpdKToKKyAgICAgICAgKC1bV0tDb2xvclBpY2tlciBz
ZXRDb250cm9sVmFsdWVGcm9tVUlDb2xvcjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Zv
cm1zL1dLRm9ybUlucHV0Q29udHJvbC5tbToKKyAgICAgICAgKC1bV0tEYXRlVGltZVBpY2tlciBp
bml0V2l0aFZpZXc6ZGF0ZVBpY2tlck1vZGU6XSk6CisgICAgICAgICgtW1dLRGF0ZVRpbWVQaWNr
ZXIgc2hvdWxkUHJlc2VudEdyZWdvcmlhbkNhbGVuZGFyOl0pOgorICAgICAgICAoLVtXS0RhdGVU
aW1lUGlja2VyIF9kYXRlQ2hhbmdlZFNldEFzTnVtYmVyXSk6CisgICAgICAgICgtW1dLRGF0ZVRp
bWVQaWNrZXIgX2RhdGVDaGFuZ2VkU2V0QXNTdHJpbmddKToKKyAgICAgICAgKC1bV0tEYXRlVGlt
ZVBpY2tlciBjb250cm9sQmVnaW5FZGl0aW5nXSk6CisgICAgICAgICgtW1dLRm9ybUlucHV0Q29u
dHJvbCBpbml0V2l0aFZpZXc6XSk6CisgICAgICAgICgtW1dLRGF0ZVRpbWVQb3BvdmVyIGNsZWFy
Ol0pOgorICAgICAgICAoLVtXS0RhdGVUaW1lUG9wb3ZlciBpbml0V2l0aFZpZXc6ZGF0ZVBpY2tl
ck1vZGU6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1Qb3BvdmVyLm1t
OgorICAgICAgICAoLVtXS1JvdGF0aW5nUG9wb3ZlciBwcmVzZW50UG9wb3ZlckFuaW1hdGVkOl0p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0Q29udHJvbC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0Q29udHJvbC5tbToKKyAg
ICAgICAgKC1bV0tGb3JtU2VsZWN0Q29udHJvbCBpbml0V2l0aFZpZXc6XSk6CisgICAgICAgICog
VUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQaWNrZXIubW06CisgICAgICAgICgtW1dL
TXVsdGlwbGVTZWxlY3RQaWNrZXIgaW5pdFdpdGhWaWV3Ol0pOgorICAgICAgICAoLVtXS011bHRp
cGxlU2VsZWN0UGlja2VyIHBpY2tlclZpZXc6dmlld0ZvclJvdzpmb3JDb21wb25lbnQ6cmV1c2lu
Z1ZpZXc6XSk6CisgICAgICAgICgtW1dLTXVsdGlwbGVTZWxlY3RQaWNrZXIgcGlja2VyVmlldzpu
dW1iZXJPZlJvd3NJbkNvbXBvbmVudDpdKToKKyAgICAgICAgKC1bV0tNdWx0aXBsZVNlbGVjdFBp
Y2tlciBmaW5kSXRlbUluZGV4QXQ6XSk6CisgICAgICAgICgtW1dLTXVsdGlwbGVTZWxlY3RQaWNr
ZXIgcGlja2VyVmlldzpyb3c6Y29sdW1uOmNoZWNrZWQ6XSk6CisgICAgICAgICgtW1dLU2VsZWN0
U2luZ2xlUGlja2VyIGluaXRXaXRoVmlldzpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RTaW5nbGVQ
aWNrZXIgY29udHJvbEVuZEVkaXRpbmddKToKKyAgICAgICAgKC1bV0tTZWxlY3RTaW5nbGVQaWNr
ZXIgcGlja2VyVmlldzpudW1iZXJPZlJvd3NJbkNvbXBvbmVudDpdKToKKyAgICAgICAgKC1bV0tT
ZWxlY3RTaW5nbGVQaWNrZXIgcGlja2VyVmlldzphdHRyaWJ1dGVkVGl0bGVGb3JSb3c6Zm9yQ29t
cG9uZW50Ol0pOgorICAgICAgICAoLVtXS1NlbGVjdFNpbmdsZVBpY2tlciBwaWNrZXJWaWV3OmRp
ZFNlbGVjdFJvdzppbkNvbXBvbmVudDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Zvcm1z
L1dLRm9ybVNlbGVjdFBvcG92ZXIubW06CisgICAgICAgICgtW1dLU2VsZWN0VGFibGVWaWV3Q29u
dHJvbGxlciBpbml0V2l0aFZpZXc6aGFzR3JvdXBzOl0pOgorICAgICAgICAoLVtXS1NlbGVjdFRh
YmxlVmlld0NvbnRyb2xsZXIgdGFibGVWaWV3Om51bWJlck9mUm93c0luU2VjdGlvbjpdKToKKyAg
ICAgICAgKC1bV0tTZWxlY3RUYWJsZVZpZXdDb250cm9sbGVyIHRhYmxlVmlldzp0aXRsZUZvckhl
YWRlckluU2VjdGlvbjpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RUYWJsZVZpZXdDb250cm9sbGVy
IGZpbmRJdGVtSW5kZXhBdDpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RUYWJsZVZpZXdDb250cm9s
bGVyIGZpbmRJdGVtQXQ6XSk6CisgICAgICAgICgtW1dLU2VsZWN0VGFibGVWaWV3Q29udHJvbGxl
ciB0YWJsZVZpZXc6Y2VsbEZvclJvd0F0SW5kZXhQYXRoOl0pOgorICAgICAgICAoLVtXS1NlbGVj
dFRhYmxlVmlld0NvbnRyb2xsZXIgdGFibGVWaWV3OmRpZFNlbGVjdFJvd0F0SW5kZXhQYXRoOl0p
OgorICAgICAgICAoLVtXS1NlbGVjdFBvcG92ZXIgaW5pdFdpdGhWaWV3Omhhc0dyb3VwczpdKToK
KyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6ZWxlbWVudERpZEZvY3VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2hyb21lQ2xpZW50OjplbGVtZW50RGlkUmVmb2N1cyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNocm9tZUNsaWVudDo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkU3RhcnRQ
YWdlVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFRleHRBc3luYyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlc2V0Rm9jdXNlZEVsZW1lbnRGb3JGcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVsZW1lbnREaWRSZWZvY3VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6ZWxlbWVudERpZEZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRDb21t
aXRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVzZXRBc3Npc3RlZE5vZGVGb3JG
cmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KworICAgICAgICBSZWZhY3RvciBlbGVtZW50RGlke1JlZm9jdXN8Rm9jdXN8Qmx1cn0gdG8gdGFr
ZSBgRWxlbWVudCZgIHJhdGhlciB0aGFuIGBOb2RlKmAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW06CisKKyAgICAgICAgUmVwbGFjZSBtX2Fzc2lzdGVkTm9kZSAo
YSBgUmVmUHRyPE5vZGU+YCkgd2l0aCBtX2ZvY3VzZWRFbGVtZW50IChhIGBSZWZQdHI8RWxlbWVu
dD5gKS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUVkaXRvclN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcGxldGVTeW50aGV0aWNDbGljayk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RGb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Ymx1ckZvY3VzZWRFbGVtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnNldEZvY3VzZWRFbGVtZW50VmFsdWVBc051bWJlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEZvY3VzZWRFbGVtZW50U2VsZWN0ZWRJbmRleCk6Cisg
ICAgICAgIChXZWJLaXQ6OmlubmVyRnJhbWVRdWFkKToKKyAgICAgICAgKFdlYktpdDo6Y29uc3Ry
YWluUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9y
UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0UG9pbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRo
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmFuZ2VGb3JHcmFudWxhcml0
eUF0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51
bGFyaXR5QXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlv
bldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZv
Y3VzTmV4dEZvY3VzZWRFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0Rm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF1dG9m
aWxsTG9naW5DcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RB
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmJsdXJBc3Npc3RlZE5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpzZXRBc3Npc3RlZE5vZGVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Zm9jdXNOZXh0QXNzaXN0ZWROb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pOiBE
ZWxldGVkLgorCiAyMDE4LTEyLTIwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtpT1NdIEZvY3VzaW5nIGFuIGVkaXRhYmxlIGVsZW1lbnQgc2hvdWxk
IHNjcm9sbCB0byByZXZlYWwgdGhlIHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkZGU0YmVjMzcyOGUzNTA2ODUxYjU5ZTQ3OTc1YTVlZDFkNmJjYzE2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmgiCi0KLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBP
cHRpb25JdGVtOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgdGV4dDsKLSAgICBlbmNvZGVyIDw8IGlzR3JvdXA7Ci0gICAgZW5jb2RlciA8PCBp
c1NlbGVjdGVkOwotICAgIGVuY29kZXIgPDwgZGlzYWJsZWQ7Ci0gICAgZW5jb2RlciA8PCBwYXJl
bnRHcm91cElEOwotfQotCi1PcHRpb25hbDxPcHRpb25JdGVtPiBPcHRpb25JdGVtOjpkZWNvZGUo
SVBDOjpEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbkl0ZW0gcmVzdWx0OwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRleHQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNHcm91cCkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5p
c1NlbGVjdGVkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmRpc2FibGVkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBhcmVudEdyb3VwSUQpKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIAotICAgIHJldHVybiBXVEZNb3ZlKHJlc3Vs
dCk7Ci19Ci0KLXZvaWQgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmVuY29kZShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBlbGVtZW50UmVjdDsKLSAgICBl
bmNvZGVyIDw8IGVsZW1lbnRJbnRlcmFjdGlvbkxvY2F0aW9uOwotICAgIGVuY29kZXIgPDwgbWlu
aW11bVNjYWxlRmFjdG9yOwotICAgIGVuY29kZXIgPDwgbWF4aW11bVNjYWxlRmFjdG9yOwotICAg
IGVuY29kZXIgPDwgbWF4aW11bVNjYWxlRmFjdG9ySWdub3JpbmdBbHdheXNTY2FsYWJsZTsKLSAg
ICBlbmNvZGVyIDw8IG5vZGVGb250U2l6ZTsKLSAgICBlbmNvZGVyIDw8IGhhc05leHROb2RlOwot
ICAgIGVuY29kZXIgPDwgbmV4dE5vZGVSZWN0OwotICAgIGVuY29kZXIgPDwgaGFzUHJldmlvdXNO
b2RlOwotICAgIGVuY29kZXIgPDwgcHJldmlvdXNOb2RlUmVjdDsKLSAgICBlbmNvZGVyIDw8IGlz
QXV0b2NvcnJlY3Q7Ci0gICAgZW5jb2RlciA8PCBpc1JUTDsKLSAgICBlbmNvZGVyLmVuY29kZUVu
dW0oYXV0b2NhcGl0YWxpemVUeXBlKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0oZWxlbWVudFR5
cGUpOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShpbnB1dE1vZGUpOwotICAgIGVuY29kZXIgPDwg
Zm9ybUFjdGlvbjsKLSAgICBlbmNvZGVyIDw8IHNlbGVjdE9wdGlvbnM7Ci0gICAgZW5jb2RlciA8
PCBzZWxlY3RlZEluZGV4OwotICAgIGVuY29kZXIgPDwgaXNNdWx0aVNlbGVjdDsKLSAgICBlbmNv
ZGVyIDw8IGlzUmVhZE9ubHk7Ci0gICAgZW5jb2RlciA8PCBhbGxvd3NVc2VyU2NhbGluZzsKLSAg
ICBlbmNvZGVyIDw8IGFsbG93c1VzZXJTY2FsaW5nSWdub3JpbmdBbHdheXNTY2FsYWJsZTsKLSAg
ICBlbmNvZGVyIDw8IGluc2lkZUZpeGVkUG9zaXRpb247Ci0gICAgZW5jb2RlciA8PCB2YWx1ZTsK
LSAgICBlbmNvZGVyIDw8IHZhbHVlQXNOdW1iZXI7Ci0gICAgZW5jb2RlciA8PCB0aXRsZTsKLSAg
ICBlbmNvZGVyIDw8IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKLSAgICBlbmNv
ZGVyIDw8IGlzQXV0b2ZpbGxhYmxlVXNlcm5hbWVGaWVsZDsKLSAgICBlbmNvZGVyIDw8IGVsZW1l
bnRJc1RyYW5zcGFyZW50OwotICAgIGVuY29kZXIgPDwgcmVwcmVzZW50aW5nUGFnZVVSTDsKLSAg
ICBlbmNvZGVyLmVuY29kZUVudW0oYXV0b2ZpbGxGaWVsZE5hbWUpOwotICAgIGVuY29kZXIgPDwg
cGxhY2Vob2xkZXI7Ci0gICAgZW5jb2RlciA8PCBsYWJlbDsKLSAgICBlbmNvZGVyIDw8IGFyaWFM
YWJlbDsKLSAgICBlbmNvZGVyIDw8IGVtYmVkZGVkVmlld0lEOwotICAgIGVuY29kZXIgPDwgYXNz
aXN0ZWROb2RlSWRlbnRpZmllcjsKLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBl
bmNvZGVyIDw8IGhhc1N1Z2dlc3Rpb25zOwotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQot
ICAgIGVuY29kZXIgPDwgc3VnZ2VzdGVkQ29sb3JzOwotI2VuZGlmCi0jZW5kaWYKLX0KLQotYm9v
bCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIHJlc3VsdCkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5lbGVtZW50UmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmVsZW1lbnRJbnRlcmFjdGlvbkxvY2F0aW9uKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubWlu
aW11bVNjYWxlRmFjdG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQubWF4aW11bVNjYWxlRmFjdG9yKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1heGltdW1TY2FsZUZh
Y3Rvcklnbm9yaW5nQWx3YXlzU2NhbGFibGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ub2RlRm9udFNpemUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5oYXNOZXh0Tm9kZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
Lm5leHROb2RlUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0Lmhhc1ByZXZpb3VzTm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnByZXZpb3VzTm9kZVJlY3QpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0F1
dG9jb3JyZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuaXNSVEwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlRW51bShyZXN1bHQuYXV0b2NhcGl0YWxpemVUeXBlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmVsZW1lbnRU
eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVu
dW0ocmVzdWx0LmlucHV0TW9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmZvcm1BY3Rpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZWxlY3RPcHRpb25zKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2VsZWN0
ZWRJbmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmlzTXVsdGlTZWxlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1JlYWRPbmx5KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWxsb3dzVXNlclNjYWxpbmcp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuYWxsb3dzVXNlclNjYWxpbmdJZ25vcmluZ0Fsd2F5c1NjYWxhYmxlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaW5zaWRlRml4
ZWRQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQudmFsdWVBc051bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRpdGxlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWNjZXB0c0F1dG9m
aWxsZWRMb2dpbkNyZWRlbnRpYWxzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNBdXRvZmlsbGFibGVVc2VybmFtZUZpZWxkKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZWxl
bWVudElzVHJhbnNwYXJlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5yZXByZXNlbnRpbmdQYWdlVVJMKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmF1dG9maWxsRmll
bGROYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQucGxhY2Vob2xkZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5sYWJlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFyaWFMYWJlbCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmVtYmVkZGVkVmlld0lE
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuYXNzaXN0ZWROb2RlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lm
IEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
Lmhhc1N1Z2dlc3Rpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKElO
UFVUX1RZUEVfQ09MT1IpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc3VnZ2VzdGVk
Q29sb3JzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHJl
dHVybiB0cnVlOwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjQ3
Zjg5MDQzZWU3NTA0NzUxYjYxOWZmZWFiZjQyNjliYjU0YTI5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0F1dG9jYXBpdGFsaXplVHlwZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0F1
dG9maWxsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5wdXRNb2RlLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotZW51bSBjbGFzcyBJ
bnB1dFR5cGUgewotICAgIE5vbmUsCi0gICAgQ29udGVudEVkaXRhYmxlLAotICAgIFRleHQsCi0g
ICAgUGFzc3dvcmQsCi0gICAgVGV4dEFyZWEsCi0gICAgU2VhcmNoLAotICAgIEVtYWlsLAotICAg
IFVSTCwKLSAgICBQaG9uZSwKLSAgICBOdW1iZXIsCi0gICAgTnVtYmVyUGFkLAotICAgIERhdGUs
Ci0gICAgRGF0ZVRpbWUsCi0gICAgRGF0ZVRpbWVMb2NhbCwKLSAgICBNb250aCwKLSAgICBXZWVr
LAotICAgIFRpbWUsCi0gICAgU2VsZWN0LAotICAgIERyYXdpbmcsCi0jaWYgRU5BQkxFKElOUFVU
X1RZUEVfQ09MT1IpCi0gICAgQ29sb3IKLSNlbmRpZgotfTsKLQotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi1zdHJ1Y3QgT3B0aW9uSXRlbSB7Ci0gICAgT3B0aW9uSXRlbSgpIHsgfQotCi0gICAg
T3B0aW9uSXRlbShjb25zdCBPcHRpb25JdGVtJiBpdGVtKQotICAgICAgICA6IHRleHQoaXRlbS50
ZXh0KQotICAgICAgICAsIGlzR3JvdXAoaXRlbS5pc0dyb3VwKQotICAgICAgICAsIGlzU2VsZWN0
ZWQoaXRlbS5pc1NlbGVjdGVkKQotICAgICAgICAsIGRpc2FibGVkKGl0ZW0uZGlzYWJsZWQpCi0g
ICAgICAgICwgcGFyZW50R3JvdXBJRChpdGVtLnBhcmVudEdyb3VwSUQpCi0gICAgewotICAgIH0K
LQotICAgIE9wdGlvbkl0ZW0oY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIGlzR3JvdXAsIGludCBw
YXJlbnRJRCwgYm9vbCBzZWxlY3RlZCwgYm9vbCBkaXNhYmxlZCkKLSAgICAgICAgOiB0ZXh0KHRl
eHQpCi0gICAgICAgICwgaXNHcm91cChpc0dyb3VwKQotICAgICAgICAsIGlzU2VsZWN0ZWQoc2Vs
ZWN0ZWQpCi0gICAgICAgICwgZGlzYWJsZWQoZGlzYWJsZWQpCi0gICAgICAgICwgcGFyZW50R3Jv
dXBJRChwYXJlbnRJRCkKLSAgICB7Ci0gICAgfQotICAgIFN0cmluZyB0ZXh0OwotICAgIGJvb2wg
aXNHcm91cCB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc1NlbGVjdGVkIHsgZmFsc2UgfTsKLSAgICBi
b29sIGRpc2FibGVkIHsgZmFsc2UgfTsKLSAgICBpbnQgcGFyZW50R3JvdXBJRCB7IDAgfTsKLQot
ICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBPcHRpb25h
bDxPcHRpb25JdGVtPiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7Ci19OwotCi1zdHJ1Y3QgQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24gewotICAgIFdlYkNvcmU6OkludFJlY3QgZWxlbWVudFJlY3Q7Ci0g
ICAgV2ViQ29yZTo6SW50UG9pbnQgZWxlbWVudEludGVyYWN0aW9uTG9jYXRpb247Ci0gICAgZG91
YmxlIG1pbmltdW1TY2FsZUZhY3RvciB7IC1JTkZJTklUWSB9OwotICAgIGRvdWJsZSBtYXhpbXVt
U2NhbGVGYWN0b3IgeyBJTkZJTklUWSB9OwotICAgIGRvdWJsZSBtYXhpbXVtU2NhbGVGYWN0b3JJ
Z25vcmluZ0Fsd2F5c1NjYWxhYmxlIHsgSU5GSU5JVFkgfTsKLSAgICBkb3VibGUgbm9kZUZvbnRT
aXplIHsgMCB9OwotICAgIGJvb2wgaGFzTmV4dE5vZGUgeyBmYWxzZSB9OwotICAgIFdlYkNvcmU6
OkludFJlY3QgbmV4dE5vZGVSZWN0OwotICAgIGJvb2wgaGFzUHJldmlvdXNOb2RlIHsgZmFsc2Ug
fTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IHByZXZpb3VzTm9kZVJlY3Q7Ci0gICAgYm9vbCBpc0F1
dG9jb3JyZWN0IHsgZmFsc2UgfTsKLSAgICBib29sIGlzUlRMIHsgZmFsc2UgfTsKLSAgICBib29s
IGlzTXVsdGlTZWxlY3QgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNSZWFkT25seSB7ZmFsc2UgfTsK
LSAgICBib29sIGFsbG93c1VzZXJTY2FsaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93c1Vz
ZXJTY2FsaW5nSWdub3JpbmdBbHdheXNTY2FsYWJsZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBpbnNp
ZGVGaXhlZFBvc2l0aW9uIHsgZmFsc2UgfTsKLSAgICBBdXRvY2FwaXRhbGl6ZVR5cGUgYXV0b2Nh
cGl0YWxpemVUeXBlIHsgQXV0b2NhcGl0YWxpemVUeXBlRGVmYXVsdCB9OwotICAgIElucHV0VHlw
ZSBlbGVtZW50VHlwZSB7IElucHV0VHlwZTo6Tm9uZSB9OwotICAgIFdlYkNvcmU6OklucHV0TW9k
ZSBpbnB1dE1vZGUgeyBXZWJDb3JlOjpJbnB1dE1vZGU6OlVuc3BlY2lmaWVkIH07Ci0gICAgU3Ry
aW5nIGZvcm1BY3Rpb247Ci0gICAgVmVjdG9yPE9wdGlvbkl0ZW0+IHNlbGVjdE9wdGlvbnM7Ci0g
ICAgaW50IHNlbGVjdGVkSW5kZXggeyAtMSB9OwotICAgIFN0cmluZyB2YWx1ZTsKLSAgICBkb3Vi
bGUgdmFsdWVBc051bWJlciB7IDAgfTsKLSAgICBTdHJpbmcgdGl0bGU7Ci0gICAgYm9vbCBhY2Nl
cHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNBdXRv
ZmlsbGFibGVVc2VybmFtZUZpZWxkIHsgZmFsc2UgfTsKLSAgICBib29sIGVsZW1lbnRJc1RyYW5z
cGFyZW50IHsgZmFsc2UgfTsKLSAgICBVUkwgcmVwcmVzZW50aW5nUGFnZVVSTDsKLSAgICBXZWJD
b3JlOjpBdXRvZmlsbEZpZWxkTmFtZSBhdXRvZmlsbEZpZWxkTmFtZSB7IFdlYkNvcmU6OkF1dG9m
aWxsRmllbGROYW1lOjpOb25lIH07Ci0gICAgU3RyaW5nIHBsYWNlaG9sZGVyOwotICAgIFN0cmlu
ZyBsYWJlbDsKLSAgICBTdHJpbmcgYXJpYUxhYmVsOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI6OkVtYmVkZGVkVmlld0lEIGVtYmVkZGVkVmlld0lEOwotI2lmIEVOQUJMRShEQVRBTElTVF9F
TEVNRU5UKQotICAgIGJvb2wgaGFzU3VnZ2VzdGlvbnMgeyBmYWxzZSB9OwotI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX0NPTE9SKQotICAgIFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4gc3VnZ2VzdGVkQ29s
b3JzOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHVpbnQ2NF90IGFzc2lzdGVkTm9kZUlkZW50aWZp
ZXIgeyAwIH07Ci0KLSAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKLSAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24m
KTsKLX07Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Gb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODBiYjQ5MThkYThmNDRmMjUyNzJl
ZmMwMWI5OTQ2YzMzYjA4Y2NiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5jcHAKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQordm9pZCBPcHRp
b25JdGVtOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgdGV4dDsKKyAgICBlbmNvZGVyIDw8IGlzR3JvdXA7CisgICAgZW5jb2RlciA8PCBpc1Nl
bGVjdGVkOworICAgIGVuY29kZXIgPDwgZGlzYWJsZWQ7CisgICAgZW5jb2RlciA8PCBwYXJlbnRH
cm91cElEOworfQorCitPcHRpb25hbDxPcHRpb25JdGVtPiBPcHRpb25JdGVtOjpkZWNvZGUoSVBD
OjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbkl0ZW0gcmVzdWx0OworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRleHQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNHcm91cCkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1Nl
bGVjdGVkKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmRpc2FibGVkKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBhcmVudEdyb3VwSUQpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7
Cit9CisKK3ZvaWQgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbjo6ZW5jb2RlKElQQzo6RW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGVsZW1lbnRSZWN0OworICAgIGVu
Y29kZXIgPDwgZWxlbWVudEludGVyYWN0aW9uTG9jYXRpb247CisgICAgZW5jb2RlciA8PCBtaW5p
bXVtU2NhbGVGYWN0b3I7CisgICAgZW5jb2RlciA8PCBtYXhpbXVtU2NhbGVGYWN0b3I7CisgICAg
ZW5jb2RlciA8PCBtYXhpbXVtU2NhbGVGYWN0b3JJZ25vcmluZ0Fsd2F5c1NjYWxhYmxlOworICAg
IGVuY29kZXIgPDwgbm9kZUZvbnRTaXplOworICAgIGVuY29kZXIgPDwgaGFzTmV4dE5vZGU7Cisg
ICAgZW5jb2RlciA8PCBuZXh0Tm9kZVJlY3Q7CisgICAgZW5jb2RlciA8PCBoYXNQcmV2aW91c05v
ZGU7CisgICAgZW5jb2RlciA8PCBwcmV2aW91c05vZGVSZWN0OworICAgIGVuY29kZXIgPDwgaXNB
dXRvY29ycmVjdDsKKyAgICBlbmNvZGVyIDw8IGlzUlRMOworICAgIGVuY29kZXIuZW5jb2RlRW51
bShhdXRvY2FwaXRhbGl6ZVR5cGUpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShlbGVtZW50VHlw
ZSk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGlucHV0TW9kZSk7CisgICAgZW5jb2RlciA8PCBm
b3JtQWN0aW9uOworICAgIGVuY29kZXIgPDwgc2VsZWN0T3B0aW9uczsKKyAgICBlbmNvZGVyIDw8
IHNlbGVjdGVkSW5kZXg7CisgICAgZW5jb2RlciA8PCBpc011bHRpU2VsZWN0OworICAgIGVuY29k
ZXIgPDwgaXNSZWFkT25seTsKKyAgICBlbmNvZGVyIDw8IGFsbG93c1VzZXJTY2FsaW5nOworICAg
IGVuY29kZXIgPDwgYWxsb3dzVXNlclNjYWxpbmdJZ25vcmluZ0Fsd2F5c1NjYWxhYmxlOworICAg
IGVuY29kZXIgPDwgaW5zaWRlRml4ZWRQb3NpdGlvbjsKKyAgICBlbmNvZGVyIDw8IHZhbHVlOwor
ICAgIGVuY29kZXIgPDwgdmFsdWVBc051bWJlcjsKKyAgICBlbmNvZGVyIDw8IHRpdGxlOworICAg
IGVuY29kZXIgPDwgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOworICAgIGVuY29k
ZXIgPDwgaXNBdXRvZmlsbGFibGVVc2VybmFtZUZpZWxkOworICAgIGVuY29kZXIgPDwgZWxlbWVu
dElzVHJhbnNwYXJlbnQ7CisgICAgZW5jb2RlciA8PCByZXByZXNlbnRpbmdQYWdlVVJMOworICAg
IGVuY29kZXIuZW5jb2RlRW51bShhdXRvZmlsbEZpZWxkTmFtZSk7CisgICAgZW5jb2RlciA8PCBw
bGFjZWhvbGRlcjsKKyAgICBlbmNvZGVyIDw8IGxhYmVsOworICAgIGVuY29kZXIgPDwgYXJpYUxh
YmVsOworICAgIGVuY29kZXIgPDwgZW1iZWRkZWRWaWV3SUQ7CisgICAgZW5jb2RlciA8PCBmb2N1
c2VkRWxlbWVudElkZW50aWZpZXI7CisjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCisgICAg
ZW5jb2RlciA8PCBoYXNTdWdnZXN0aW9uczsKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikK
KyAgICBlbmNvZGVyIDw8IHN1Z2dlc3RlZENvbG9yczsKKyNlbmRpZgorI2VuZGlmCit9CisKK2Jv
b2wgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbjo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYgcmVzdWx0KQoreworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmVsZW1lbnRSZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZWxlbWVudEludGVyYWN0aW9uTG9jYXRpb24p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5taW5pbXVtU2NhbGVGYWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tYXhpbXVtU2NhbGVGYWN0b3IpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubWF4aW11bVNj
YWxlRmFjdG9ySWdub3JpbmdBbHdheXNTY2FsYWJsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm5vZGVGb250U2l6ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhhc05leHRO
b2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQubmV4dE5vZGVSZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuaGFzUHJldmlvdXNOb2RlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucHJldmlvdXNOb2RlUmVjdCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmlzQXV0b2NvcnJlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5pc1JUTCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5hdXRvY2FwaXRhbGl6ZVR5cGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuZWxl
bWVudFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRW51bShyZXN1bHQuaW5wdXRNb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZm9ybUFjdGlvbikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlbGVjdE9wdGlvbnMpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5z
ZWxlY3RlZEluZGV4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuaXNNdWx0aVNlbGVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzUmVhZE9ubHkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5hbGxvd3NVc2VyU2Nh
bGluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5hbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlzU2NhbGFibGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pbnNp
ZGVGaXhlZFBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQudmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC52YWx1ZUFzTnVtYmVyKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGl0bGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5hY2NlcHRz
QXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0F1dG9maWxsYWJsZVVzZXJuYW1lRmllbGQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5lbGVtZW50SXNUcmFuc3BhcmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJlcHJlc2VudGluZ1BhZ2VVUkwpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuYXV0b2Zp
bGxGaWVsZE5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5wbGFjZWhvbGRlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmxhYmVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYXJpYUxhYmVsKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZW1iZWRkZWRW
aWV3SUQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5mb2N1c2VkRWxlbWVudElkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5oYXNTdWdnZXN0aW9ucykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVO
QUJMRShJTlBVVF9UWVBFX0NPTE9SKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnN1
Z2dlc3RlZENvbG9ycykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorI2VuZGlmCisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Gb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Gb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE1YjQ2OWUxY2Ux
ODdiNDVkNGQzNjE3ODVhNzg3ZDJmMWI0ZDhjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaApAQCAtMCwwICsxLDE0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBcmd1bWVudENv
ZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXV0b2NhcGl0YWxpemVUeXBlcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvQXV0b2ZpbGwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnB1dE1v
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitlbnVtIGNsYXNzIElucHV0VHlwZSB7CisgICAgTm9uZSwKKyAgICBDb250ZW50RWRpdGFibGUs
CisgICAgVGV4dCwKKyAgICBQYXNzd29yZCwKKyAgICBUZXh0QXJlYSwKKyAgICBTZWFyY2gsCisg
ICAgRW1haWwsCisgICAgVVJMLAorICAgIFBob25lLAorICAgIE51bWJlciwKKyAgICBOdW1iZXJQ
YWQsCisgICAgRGF0ZSwKKyAgICBEYXRlVGltZSwKKyAgICBEYXRlVGltZUxvY2FsLAorICAgIE1v
bnRoLAorICAgIFdlZWssCisgICAgVGltZSwKKyAgICBTZWxlY3QsCisgICAgRHJhd2luZywKKyNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKKyAgICBDb2xvcgorI2VuZGlmCit9OworCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKK3N0cnVjdCBPcHRpb25JdGVtIHsKKyAgICBPcHRpb25JdGVt
KCkgeyB9CisKKyAgICBPcHRpb25JdGVtKGNvbnN0IE9wdGlvbkl0ZW0mIGl0ZW0pCisgICAgICAg
IDogdGV4dChpdGVtLnRleHQpCisgICAgICAgICwgaXNHcm91cChpdGVtLmlzR3JvdXApCisgICAg
ICAgICwgaXNTZWxlY3RlZChpdGVtLmlzU2VsZWN0ZWQpCisgICAgICAgICwgZGlzYWJsZWQoaXRl
bS5kaXNhYmxlZCkKKyAgICAgICAgLCBwYXJlbnRHcm91cElEKGl0ZW0ucGFyZW50R3JvdXBJRCkK
KyAgICB7CisgICAgfQorCisgICAgT3B0aW9uSXRlbShjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wg
aXNHcm91cCwgaW50IHBhcmVudElELCBib29sIHNlbGVjdGVkLCBib29sIGRpc2FibGVkKQorICAg
ICAgICA6IHRleHQodGV4dCkKKyAgICAgICAgLCBpc0dyb3VwKGlzR3JvdXApCisgICAgICAgICwg
aXNTZWxlY3RlZChzZWxlY3RlZCkKKyAgICAgICAgLCBkaXNhYmxlZChkaXNhYmxlZCkKKyAgICAg
ICAgLCBwYXJlbnRHcm91cElEKHBhcmVudElEKQorICAgIHsKKyAgICB9CisgICAgU3RyaW5nIHRl
eHQ7CisgICAgYm9vbCBpc0dyb3VwIHsgZmFsc2UgfTsKKyAgICBib29sIGlzU2VsZWN0ZWQgeyBm
YWxzZSB9OworICAgIGJvb2wgZGlzYWJsZWQgeyBmYWxzZSB9OworICAgIGludCBwYXJlbnRHcm91
cElEIHsgMCB9OworCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAg
c3RhdGljIE9wdGlvbmFsPE9wdGlvbkl0ZW0+IGRlY29kZShJUEM6OkRlY29kZXImKTsKK307CisK
K3VzaW5nIEZvY3VzZWRFbGVtZW50SWRlbnRpZmllciA9IHVpbnQ2NF90OworCitzdHJ1Y3QgRm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbiB7CisgICAgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50UmVj
dDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBlbGVtZW50SW50ZXJhY3Rpb25Mb2NhdGlvbjsKKyAg
ICBkb3VibGUgbWluaW11bVNjYWxlRmFjdG9yIHsgLUlORklOSVRZIH07CisgICAgZG91YmxlIG1h
eGltdW1TY2FsZUZhY3RvciB7IElORklOSVRZIH07CisgICAgZG91YmxlIG1heGltdW1TY2FsZUZh
Y3Rvcklnbm9yaW5nQWx3YXlzU2NhbGFibGUgeyBJTkZJTklUWSB9OworICAgIGRvdWJsZSBub2Rl
Rm9udFNpemUgeyAwIH07CisgICAgYm9vbCBoYXNOZXh0Tm9kZSB7IGZhbHNlIH07CisgICAgV2Vi
Q29yZTo6SW50UmVjdCBuZXh0Tm9kZVJlY3Q7CisgICAgYm9vbCBoYXNQcmV2aW91c05vZGUgeyBm
YWxzZSB9OworICAgIFdlYkNvcmU6OkludFJlY3QgcHJldmlvdXNOb2RlUmVjdDsKKyAgICBib29s
IGlzQXV0b2NvcnJlY3QgeyBmYWxzZSB9OworICAgIGJvb2wgaXNSVEwgeyBmYWxzZSB9OworICAg
IGJvb2wgaXNNdWx0aVNlbGVjdCB7IGZhbHNlIH07CisgICAgYm9vbCBpc1JlYWRPbmx5IHtmYWxz
ZSB9OworICAgIGJvb2wgYWxsb3dzVXNlclNjYWxpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgYWxs
b3dzVXNlclNjYWxpbmdJZ25vcmluZ0Fsd2F5c1NjYWxhYmxlIHsgZmFsc2UgfTsKKyAgICBib29s
IGluc2lkZUZpeGVkUG9zaXRpb24geyBmYWxzZSB9OworICAgIEF1dG9jYXBpdGFsaXplVHlwZSBh
dXRvY2FwaXRhbGl6ZVR5cGUgeyBBdXRvY2FwaXRhbGl6ZVR5cGVEZWZhdWx0IH07CisgICAgSW5w
dXRUeXBlIGVsZW1lbnRUeXBlIHsgSW5wdXRUeXBlOjpOb25lIH07CisgICAgV2ViQ29yZTo6SW5w
dXRNb2RlIGlucHV0TW9kZSB7IFdlYkNvcmU6OklucHV0TW9kZTo6VW5zcGVjaWZpZWQgfTsKKyAg
ICBTdHJpbmcgZm9ybUFjdGlvbjsKKyAgICBWZWN0b3I8T3B0aW9uSXRlbT4gc2VsZWN0T3B0aW9u
czsKKyAgICBpbnQgc2VsZWN0ZWRJbmRleCB7IC0xIH07CisgICAgU3RyaW5nIHZhbHVlOworICAg
IGRvdWJsZSB2YWx1ZUFzTnVtYmVyIHsgMCB9OworICAgIFN0cmluZyB0aXRsZTsKKyAgICBib29s
IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyB7IGZhbHNlIH07CisgICAgYm9vbCBp
c0F1dG9maWxsYWJsZVVzZXJuYW1lRmllbGQgeyBmYWxzZSB9OworICAgIGJvb2wgZWxlbWVudElz
VHJhbnNwYXJlbnQgeyBmYWxzZSB9OworICAgIFVSTCByZXByZXNlbnRpbmdQYWdlVVJMOworICAg
IFdlYkNvcmU6OkF1dG9maWxsRmllbGROYW1lIGF1dG9maWxsRmllbGROYW1lIHsgV2ViQ29yZTo6
QXV0b2ZpbGxGaWVsZE5hbWU6Ok5vbmUgfTsKKyAgICBTdHJpbmcgcGxhY2Vob2xkZXI7CisgICAg
U3RyaW5nIGxhYmVsOworICAgIFN0cmluZyBhcmlhTGFiZWw7CisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6RW1iZWRkZWRWaWV3SUQgZW1iZWRkZWRWaWV3SUQ7CisjaWYgRU5BQkxFKERBVEFM
SVNUX0VMRU1FTlQpCisgICAgYm9vbCBoYXNTdWdnZXN0aW9ucyB7IGZhbHNlIH07CisjaWYgRU5B
QkxFKElOUFVUX1RZUEVfQ09MT1IpCisgICAgVmVjdG9yPFdlYkNvcmU6OkNvbG9yPiBzdWdnZXN0
ZWRDb2xvcnM7CisjZW5kaWYKKyNlbmRpZgorCisgICAgRm9jdXNlZEVsZW1lbnRJZGVudGlmaWVy
IGZvY3VzZWRFbGVtZW50SWRlbnRpZmllciB7IDAgfTsKKworICAgIHZvaWQgZW5jb2RlKElQQzo6
RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29kZXImLCBG
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJik7Cit9OworI2VuZGlmCisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
bi5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmgKaW5kZXggNGEzMGFiZmUyZWExMWZjMjAwMGE4MTlmZGRmMTJlZDQyM2QwODU1MS4u
NzFiY2U4MDNjOGY0ZDJjMjlkMTM1ZGI3OWU3ZDlhYWYxNWQ0NWI2OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBzdHJ1Y3QgSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gewogICAgIEludGVyYWN0aW9uSW5mb3JtYXRp
b25SZXF1ZXN0IHJlcXVlc3Q7CiAKLSAgICBib29sIG5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5v
ZGUgeyBmYWxzZSB9OworICAgIGJvb2wgbm9kZUF0UG9zaXRpb25Jc0ZvY3VzZWRFbGVtZW50IHsg
ZmFsc2UgfTsKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICBib29sIGhhc1NlbGVj
dGlvbkF0UG9zaXRpb24geyBmYWxzZSB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9pb3MvSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24ubW0K
aW5kZXggZmQ3MDMxMDQ4Njk0MTFiMTIwM2YzYzg2ZWEyNmVlNTZjNTU2MjU0MS4uYWNkYTgxOTE1
YmNkODBhZWQ5MmYzOTg2YWEwMWMyNzMxMDA4MjhjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5t
bQpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9u
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwg
cmVxdWVzdDsKIAotICAgIGVuY29kZXIgPDwgbm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZTsK
KyAgICBlbmNvZGVyIDw8IG5vZGVBdFBvc2l0aW9uSXNGb2N1c2VkRWxlbWVudDsKICNpZiBFTkFC
TEUoREFUQV9JTlRFUkFDVElPTikKICAgICBlbmNvZGVyIDw8IGhhc1NlbGVjdGlvbkF0UG9zaXRp
b247CiAjZW5kaWYKQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbjo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgSW50ZXJhY3Rpb24KICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXF1ZXN0KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubm9kZUF0UG9zaXRpb25Jc0Fz
c2lzdGVkTm9kZSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubm9kZUF0UG9zaXRp
b25Jc0ZvY3VzZWRFbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxF
KERBVEFfSU5URVJBQ1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2Nv
YS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZWQ2NWI4ZmE3Mzll
OGUxOTYwYjNkY2U2Yjg2NGU1MTQ1ZTJmOTE4My4uOWQ3Y2M1Y2M2YzRlNzFjNGJjNjNjZDFmYmYz
NDI0ZGY0N2EzZmM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMTEwLDcgKzExMCw3IEBA
IFNoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQogCiBTaGFyZWQvQVBJV2Vi
QXJjaGl2ZS5tbQogU2hhcmVkL0FQSVdlYkFyY2hpdmVSZXNvdXJjZS5tbQotU2hhcmVkL0Fzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLmNwcAorU2hhcmVkL0ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24u
Y3BwCiBTaGFyZWQvVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5jcHAKIFNoYXJlZC9XZWJT
UUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDNkM2MxZWRkNzY3NzVlYzljYTkxZTk4ZDAwMWM3
YzNhMDA4MWIyMzEuLmIyZDMzYzQ0ZjQxOTgxMjhjZWM2ZmE3MDgzNmM1ZjViOTJjOTIxYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAt
MzE1MSw3ICszMTUxLDcgQEAgLSAodm9pZClfa2V5Ym9hcmRDaGFuZ2VkV2l0aEluZm86KE5TRGlj
dGlvbmFyeSAqKWtleWJvYXJkSW5mbyBhZGp1c3RTY3JvbGxWaWV3OigKIAogLSAoQk9PTClfc2hv
dWxkVXBkYXRlS2V5Ym9hcmRXaXRoSW5mbzooTlNEaWN0aW9uYXJ5ICopa2V5Ym9hcmRJbmZvCiB7
Ci0gICAgaWYgKFtfY29udGVudFZpZXcgaXNBc3Npc3RpbmdOb2RlXSkKKyAgICBpZiAoW19jb250
ZW50VmlldyBpc0ZvY3VzaW5nRWxlbWVudF0pCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBO
U051bWJlciAqaXNMb2NhbEtleWJvYXJkID0gW2tleWJvYXJkSW5mbyB2YWx1ZUZvcktleTpVSUtl
eWJvYXJkSXNMb2NhbFVzZXJJbmZvS2V5XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAppbmRleCBiZWQ2ZDE4Zjk5MzhiNDE1Y2RmZTcxZmU0YTE1MWEyNzJhN2E3OTNiLi5jNzIyYjdk
NzA2NjgxMmM3NDlkNzI3Y2I3ZjhkZDRiOTUyMDRkZTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCkBAIC0xMjMsNyArMTIzLDcgQEAgY2xhc3MgV2ViUG9wdXBNZW51UHJveHk7
CiAKIGVudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2FkIDogYm9vbCB7IE5vLCBZZXMgfTsKIAot
c3RydWN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOworc3RydWN0IEZvY3VzZWRFbGVtZW50SW5m
b3JtYXRpb247CiBzdHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb247CiBzdHJ1
Y3QgV2ViSGl0VGVzdFJlc3VsdERhdGE7CiAKQEAgLTM2MiwxMCArMzYyLDEwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVBhZ2VTdGF0ZShPcHRpb25hbDxXZWJDb3JlOjpGbG9h
dFBvaW50PiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Nyb2xs
T3JpZ2luLCBjb25zdCBXZWJDb3JlOjpGbG9hdEJveEV4dGVudCYgb2JzY3VyZWRJbnNldHNPblNh
dmUsIGRvdWJsZSBzY2FsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlUGFnZUNlbnRl
ckFuZFNjYWxlKE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+IGNlbnRlciwgZG91YmxlIHNj
YWxlKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRBc3Npc3RpbmdOb2RlKGNvbnN0IEFz
c2lzdGVkTm9kZUluZm9ybWF0aW9uJiwgYm9vbCB1c2VySXNJbnRlcmFjdGluZywgYm9vbCBibHVy
UHJldmlvdXNOb2RlLCBib29sIGNoYW5naW5nQWN0aXZpdHlTdGF0ZSwgQVBJOjpPYmplY3QqIHVz
ZXJEYXRhKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BBc3Npc3RpbmdOb2RlKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBlbGVtZW50RGlkRm9jdXMoY29uc3QgRm9jdXNlZEVsZW1lbnRJbmZv
cm1hdGlvbiYsIGJvb2wgdXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwg
Ym9vbCBjaGFuZ2luZ0FjdGl2aXR5U3RhdGUsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBlbGVtZW50RGlkQmx1cigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUVkaXRvclN0YXRlVXBkYXRlQWZ0ZXJGb2N1cygpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNBc3Npc3RpbmdOb2RlKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzaW5n
RWxlbWVudCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3Qg
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgaXNDaGFyRXZlbnQpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2F2ZUltYWdlVG9M
aWJyYXJ5KFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDRiMDEyNTJlYmI4ZmU5MjdjNWFhZjRjNTcw
ZGE4ZTQ1NWY4ZWNiNmQuLmY2NmY3M2RmYjMxMWU3N2I1Y2IxNjhlNWEyYzFmMWNiNDg0OWZjN2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNjQ4Myw3ICs2
NDgzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQo
UHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uIHRlcm1pbmEKIAogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgbV93YWl0aW5nRm9yUG9zdExheW91dEVkaXRvclN0YXRlVXBkYXRlQWZ0ZXJGb2N1
c2luZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICBtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVu
dHMgPSBudWxscHRyOworICAgIG1fZGVmZXJyZWRFbGVtZW50RGlkRm9jdXNBcmd1bWVudHMgPSBu
dWxscHRyOwogICAgIG1fYWN0aXZpdHlUb2tlbiA9IG51bGxwdHI7CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBjYTUxMDQ4ODVhNDZjZWYzMDFlZTZh
YjFmMzZiZWM4MWUzZGU2MmNiLi4xNTZmMTQ0YWE0MWJjZjkwYjU4ZTJmZmQzZjI2OThjZDljNDY0
OTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjYsNyArMjYs
NiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJB
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIkF1dG9Db3JyZWN0aW9uQ2FsbGJh
Y2suaCIKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250
ZXh0RGF0YS5oIgpAQCAtMzQsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyQWN0
aW9uLmgiCiAjaW5jbHVkZSAiRWRpdGluZ1JhbmdlLmgiCiAjaW5jbHVkZSAiRWRpdG9yU3RhdGUu
aCIKKyNpbmNsdWRlICJGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIkhpZGRl
blBhZ2VUaHJvdHRsaW5nQXV0b0luY3JlYXNlc0NvdW50ZXIuaCIKICNpbmNsdWRlICJMYXllclRy
ZWVDb250ZXh0LmgiCkBAIC0zMTEsMTMgKzMxMSwxMyBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFj
azxjb25zdCBTdHJpbmcmLCBkb3VibGUsIGJvb2w+IEZvbnRBdFNlbGVjdGlvbkNhbGxiYWNrOwog
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJf
dCwgdWludDMyX3QsIHVpbnQzMl90PiBHZXN0dXJlQ2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWND
YWxsYmFjazxjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdD4gVG91
Y2hlc0NhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlbGVjdGlvblJlY3Q+Jj4gU2VsZWN0aW9uUmVjdHNDYWxsYmFjazsKLXR5cGVkZWYgR2Vu
ZXJpY0NhbGxiYWNrPGNvbnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJj4gQXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb25DYWxsYmFjazsKLXN0cnVjdCBOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyB7Ci0g
ICAgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gbV9ub2RlSW5mb3JtYXRpb247Ci0gICAgYm9vbCBt
X3VzZXJJc0ludGVyYWN0aW5nOwotICAgIGJvb2wgbV9ibHVyUHJldmlvdXNOb2RlOwotICAgIGJv
b2wgbV9jaGFuZ2luZ0FjdGl2aXR5U3RhdGU7Ci0gICAgUmVmUHRyPEFQSTo6T2JqZWN0PiBtX3Vz
ZXJEYXRhOwordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgRm9jdXNlZEVsZW1lbnRJbmZv
cm1hdGlvbiY+IEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb25DYWxsYmFjazsKK3N0cnVjdCBFbGVt
ZW50RGlkRm9jdXNBcmd1bWVudHMgeworICAgIEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24gaW5m
b3JtYXRpb247CisgICAgYm9vbCB1c2VySXNJbnRlcmFjdGluZzsKKyAgICBib29sIGJsdXJQcmV2
aW91c05vZGU7CisgICAgYm9vbCBjaGFuZ2luZ0FjdGl2aXR5U3RhdGU7CisgICAgUmVmUHRyPEFQ
STo6T2JqZWN0PiB1c2VyRGF0YTsKIH07CiAKIHVzaW5nIERyYXdUb1BERkNhbGxiYWNrID0gR2Vu
ZXJpY0NhbGxiYWNrPGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSY+OwpAQCAtNjE1LDE5ICs2MTUs
MTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0T3ZlcnJpZGVWaWV3cG9ydEFyZ3VtZW50cyhjb25z
dCBPcHRpb25hbDxXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cz4mKTsKICAgICB2b2lkIHdpbGxD
b21taXRMYXllclRyZWUodWludDY0X3QgdHJhbnNhY3Rpb25JRCk7CiAKLSAgICB2b2lkIHNlbGVj
dFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVs
YXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIGJvb2wg
aXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCBDYWxsYmFj
a0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCBzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJl
VHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNl
ZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVp
bnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAg
ICB2b2lkIHVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCBXVEY6OkZ1bmN0aW9uPHZvaWQg
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCBDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCBmcm9tLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCB0bywgdWludDMyX3Qg
Z2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgV1RGOjpGdW5jdGlvbjx2b2lkIChj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENh
bGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAgICB2b2lkIGV4dGVuZFNlbGVjdGlvbihXZWJDb3Jl
OjpUZXh0R3JhbnVsYXJpdHkpOwogICAgIHZvaWQgc2VsZWN0V29yZEJhY2t3YXJkKCk7CiAgICAg
dm9pZCBtb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIFdURjo6RnVuY3Rpb248
dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwotICAgIHZvaWQgc2VsZWN0VGV4dFdpdGhH
cmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRH
cmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV1RGOjpGdW5j
dGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAgdm9pZCBzZWxlY3RQb3Np
dGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dp
dGhBc3Npc3RlZE5vZGUsIFdURjo6RnVuY3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+
JiYpOwotICAgIHZvaWQgc2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCBXZWJDb3JlOjpT
ZWxlY3Rpb25EaXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdU
Rjo6RnVuY3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOworICAgIHZvaWQgc2Vs
ZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdl
YkNvcmU6OlRleHRHcmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVt
ZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOworICAgIHZv
aWQgc2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBib29sIGlz
SW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFj
a0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCBzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRo
RGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJp
dHksIFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZv
Y3VzZWRFbGVtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYp
OwogICAgIHZvaWQgbW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSwgV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgYmVnaW5TZWxlY3Rp
b25JbkRpcmVjdGlvbihXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248
dm9pZCAodWludDY0X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKLSAgICB2b2lkIHVwZGF0
ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkICh1aW50NjRf
dCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwotICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0
aEV4dGVudFBvaW50QW5kQm91bmRhcnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV1RG
OjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAg
dm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV1RGOjpGdW5jdGlvbjx2
b2lkKHVpbnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCB1cGRhdGVT
ZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNl
ZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZCh1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJv
cik+JiYpOwogICAgIHZvaWQgcmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcm
IHRleHRGb3JBdXRvY29ycmVjdGlvbiwgV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBWZWN0b3I8
V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGNvbnN0IFN0cmluZyYsIGRvdWJsZSwgdWludDY0X3QsIENh
bGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAgICB2b2lkIGFwcGx5QXV0b2NvcnJlY3Rpb24oY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgV1RGOjpG
dW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAg
ICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29u
c3QgU3RyaW5nJiBvcmlnaW5hbFRleHQpOwpAQCAtNjQyLDEwICs2NDIsMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0aW9uT25FbGVt
ZW50KHVpbnQzMl90IGFjdGlvbik7CiAgICAgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnkoY29uc3Qg
U2hhcmVkTWVtb3J5OjpIYW5kbGUmIGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFnZVNpemUpOwot
ICAgIHZvaWQgZm9jdXNOZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNGb3J3YXJkLCBXVEY6OkZ1bmN0
aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmID0gW10gKGF1dG8pIHsgfSk7Ci0gICAg
dm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldEFz
c2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIoZG91YmxlKTsKLSAgICB2b2lkIHNldEFzc2lzdGVkTm9k
ZVNlbGVjdGVkSW5kZXgodWludDMyX3QgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlv
biA9IGZhbHNlKTsKKyAgICB2b2lkIGZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGJvb2wgaXNGb3J3
YXJkLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmID0gW10gKGF1
dG8pIHsgfSk7CisgICAgdm9pZCBzZXRGb2N1c2VkRWxlbWVudFZhbHVlKGNvbnN0IFN0cmluZyYp
OworICAgIHZvaWQgc2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZUFzTnVtYmVyKGRvdWJsZSk7CisgICAg
dm9pZCBzZXRGb2N1c2VkRWxlbWVudFNlbGVjdGVkSW5kZXgodWludDMyX3QgaW5kZXgsIGJvb2wg
YWxsb3dNdWx0aXBsZVNlbGVjdGlvbiA9IGZhbHNlKTsKICAgICB2b2lkIGFwcGxpY2F0aW9uRGlk
RW50ZXJCYWNrZ3JvdW5kKCk7CiAgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEZpbmlzaFNuYXBzaG90
dGluZ0FmdGVyRW50ZXJpbmdCYWNrZ3JvdW5kKCk7CiAgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxF
bnRlckZvcmVncm91bmQoKTsKQEAgLTExNTIsNyArMTE1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGluc3BlY3Rvck5vZGVTZWFyY2hNb3ZlZFRvUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYpOwogICAgIHZvaWQgaW5zcGVjdG9yTm9kZVNlYXJjaEVuZGVkQXRQb3NpdGlvbihjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAKLSAgICB2b2lkIGJsdXJBc3Npc3RlZE5vZGUoKTsK
KyAgICB2b2lkIGJsdXJGb2N1c2VkRWxlbWVudCgpOwogI2VuZGlmCiAKICAgICB2b2lkIHBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUEk6Ok9i
amVjdCogbWVzc2FnZUJvZHkpOwpAQCAtMTIwMSw3ICsxMjAxLDcgQEAgcHVibGljOgogICAgIHZv
aWQgcmVjb3JkQXV0b21hdGljTmF2aWdhdGlvblNuYXBzaG90KCk7CiAgICAgdm9pZCBzdXBwcmVz
c05leHRBdXRvbWF0aWNOYXZpZ2F0aW9uU25hcHNob3QoKSB7IG1fc2hvdWxkU3VwcHJlc3NOZXh0
QXV0b21hdGljTmF2aWdhdGlvblNuYXBzaG90ID0gdHJ1ZTsgfQogICAgIHZvaWQgcmVjb3JkTmF2
aWdhdGlvblNuYXBzaG90KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKTsKLSAgICB2b2lkIHJlcXVl
c3RBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihGdW5jdGlvbjx2b2lkKGNvbnN0IEFzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOworICAgIHZvaWQgcmVxdWVz
dEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24oRnVuY3Rpb248dm9pZChjb25zdCBGb2N1c2VkRWxl
bWVudEluZm9ybWF0aW9uJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgUmVmUHRyPFZpZXdTbmFwc2hvdD4gdGFrZVZpZXdTbmFwc2hvdCgpOwpA
QCAtMTc3Myw4ICsxNzczLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkR2V0VGFwSGlnaGxp
Z2h0R2VvbWV0cmllcyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBj
b2xvciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4mIGdlb21ldHJpZXMsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBib3R0b21MZWZ0UmFkaXVz
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBib3R0b21SaWdodFJhZGl1cyk7CiAKLSAgICB2b2lk
IHN0YXJ0QXNzaXN0aW5nTm9kZShjb25zdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYsIGJvb2wg
dXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwgYm9vbCBjaGFuZ2luZ0Fj
dGl2aXR5U3RhdGUsIGNvbnN0IFVzZXJEYXRhJik7Ci0gICAgdm9pZCBzdG9wQXNzaXN0aW5nTm9k
ZSgpOworICAgIHZvaWQgZWxlbWVudERpZEZvY3VzKGNvbnN0IEZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb24mLCBib29sIHVzZXJJc0ludGVyYWN0aW5nLCBib29sIGJsdXJQcmV2aW91c05vZGUsIGJv
b2wgY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCBjb25zdCBVc2VyRGF0YSYpOworICAgIHZvaWQgZWxl
bWVudERpZEJsdXIoKTsKICAgICB2b2lkIGRpZFJlY2VpdmVFZGl0b3JTdGF0ZVVwZGF0ZUFmdGVy
Rm9jdXMoKTsKIAogICAgIHZvaWQgc2hvd0luc3BlY3RvckhpZ2hsaWdodChjb25zdCBXZWJDb3Jl
OjpIaWdobGlnaHQmKTsKQEAgLTE3ODIsNyArMTc4Miw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGVuYWJsZUluc3BlY3Rvck5vZGVTZWFyY2goKTsKICAgICB2b2lkIGRpc2FibGVJbnNwZWN0b3JO
b2RlU2VhcmNoKCk7Ci0gICAgdm9pZCBhc3Npc3RlZE5vZGVJbmZvcm1hdGlvbkNhbGxiYWNrKGNv
bnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBmb2N1
c2VkRWxlbWVudEluZm9ybWF0aW9uQ2FsbGJhY2soY29uc3QgRm9jdXNlZEVsZW1lbnRJbmZvcm1h
dGlvbiYsIENhbGxiYWNrSUQpOwogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKICNp
ZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCkBAIC0yMjY3LDcgKzIyNjcsNyBAQCBwcml2YXRlOgog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxO
b2RlQXNzaXN0YW5jZUFyZ3VtZW50cz4gbV9kZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRz
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxFbGVtZW50RGlkRm9jdXNBcmd1bWVudHM+IG1fZGVmZXJy
ZWRFbGVtZW50RGlkRm9jdXNBcmd1bWVudHM7CiAgICAgYm9vbCBtX3dhaXRpbmdGb3JQb3N0TGF5
b3V0RWRpdG9yU3RhdGVVcGRhdGVBZnRlckZvY3VzaW5nRWxlbWVudCB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX2ZvcmNlQWx3YXlzVXNlclNjYWxhYmxlIHsgZmFsc2UgfTsKICAgICBXZWJDb3JlOjpG
bG9hdFNpemUgbV92aWV3cG9ydENvbmZpZ3VyYXRpb25WaWV3TGF5b3V0U2l6ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBiMTFm
Y2IxZDZhOTY4YTVjY2U3MmE0ZDg0YWY5ZDA2NjU4YTAxN2UzLi4xZTQ1MThmNzFjNDFmZDFlNjI4
ODg2ZmMwM2UzNTEyZjAxOGFhMWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC00MDMsMTMgKzQwMywxMyBAQCBtZXNzYWdlcyAt
PiBXZWJQYWdlUHJveHkgewogICAgIFJlc3RvcmVQYWdlQ2VudGVyQW5kU2NhbGUoT3B0aW9uYWw8
V2ViQ29yZTo6RmxvYXRQb2ludD4gdW5vYnNjdXJlZENlbnRlciwgZG91YmxlIHNjYWxlKQogICAg
IERpZEdldFRhcEhpZ2hsaWdodEdlb21ldHJpZXModWludDY0X3QgcmVxdWVzdElELCBXZWJDb3Jl
OjpDb2xvciBjb2xvciwgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4gZ2VvbWV0cmllcywgV2Vi
Q29yZTo6SW50U2l6ZSB0b3BMZWZ0UmFkaXVzLCBXZWJDb3JlOjpJbnRTaXplIHRvcFJpZ2h0UmFk
aXVzLCBXZWJDb3JlOjpJbnRTaXplIGJvdHRvbUxlZnRSYWRpdXMsIFdlYkNvcmU6OkludFNpemUg
Ym90dG9tUmlnaHRSYWRpdXMpCiAKLSAgICBTdGFydEFzc2lzdGluZ05vZGUoc3RydWN0IFdlYktp
dDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gaW5mb3JtYXRpb24sIGJvb2wgdXNlcklzSW50ZXJh
Y3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwgYm9vbCBjaGFuZ2luZ0FjdGl2aXR5U3RhdGUs
IFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCi0gICAgU3RvcEFzc2lzdGluZ05vZGUoKQorICAg
IEVsZW1lbnREaWRGb2N1cyhzdHJ1Y3QgV2ViS2l0OjpGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
IGluZm9ybWF0aW9uLCBib29sIHVzZXJJc0ludGVyYWN0aW5nLCBib29sIGJsdXJQcmV2aW91c05v
ZGUsIGJvb2wgY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRh
KQorICAgIEVsZW1lbnREaWRCbHVyKCkKICAgICBTY3JvbGxpbmdOb2RlU2Nyb2xsV2lsbFN0YXJ0
U2Nyb2xsKCkKICAgICBTY3JvbGxpbmdOb2RlU2Nyb2xsRGlkRW5kU2Nyb2xsKCkKICAgICBTaG93
SW5zcGVjdG9ySGlnaGxpZ2h0KHN0cnVjdCBXZWJDb3JlOjpIaWdobGlnaHQgaGlnaGxpZ2h0KQog
ICAgIEhpZGVJbnNwZWN0b3JIaWdobGlnaHQoKQotICAgIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
Q2FsbGJhY2soc3RydWN0IFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gaW5mb3JtYXRp
b24sIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIEZvY3VzZWRFbGVtZW50SW5m
b3JtYXRpb25DYWxsYmFjayhzdHJ1Y3QgV2ViS2l0OjpGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
IGluZm9ybWF0aW9uLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIAogICAgIFNob3dJ
bnNwZWN0b3JJbmRpY2F0aW9uKCkKICAgICBIaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCmluZGV4IDE1
N2EzMTA4MmY0Njk5N2IzMjNjYzM0N2YwM2UwYWE5MmNmODQyZGYuLmE4ZTFkNmEzNjA5NGEzZDhl
MjA1ZjNhN2RmZGE0Njc4N2ZiYmFiOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCkBAIC0xMzksMTAgKzEzOSwxMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcmVzdG9yZVBhZ2VTdGF0ZShPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50Piwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Qm94RXh0ZW50
JiwgZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmVQYWdlQ2VudGVyQW5kU2NhbGUo
T3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRQb2ludD4sIGRvdWJsZSkgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIHN0YXJ0QXNzaXN0aW5nTm9kZShjb25zdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYsIGJv
b2wgdXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwgYm9vbCBjaGFuZ2lu
Z0FjdGl2aXR5U3RhdGUsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzdG9wQXNzaXN0aW5nTm9kZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZWxlbWVudERpZEZvY3Vz
KGNvbnN0IEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24mLCBib29sIHVzZXJJc0ludGVyYWN0aW5n
LCBib29sIGJsdXJQcmV2aW91c05vZGUsIGJvb2wgY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCBBUEk6
Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlOworICAgIHZvaWQgZWxlbWVudERpZEJsdXIoKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVFZGl0b3JTdGF0ZVVwZGF0ZUFmdGVyRm9jdXMo
KSBvdmVycmlkZTsKLSAgICBib29sIGlzQXNzaXN0aW5nTm9kZSgpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNGb2N1c2luZ0VsZW1lbnQoKSBvdmVycmlkZTsKICAgICB2b2lkIHNlbGVjdGlvbkRpZENo
YW5nZSgpIG92ZXJyaWRlOwogICAgIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgaXNDaGFyRXZlbnQpIG92ZXJyaWRlOwogICAgIHZvaWQg
cG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbiYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IGI4YTZmZTdkZmRkYzE4YzFiYzQ5MDE4MjllYzUw
NWM4NTA3ZDQ5NWMuLmU5MjllMjBkYzE2ZTViYjVmNjM1NjZhZmRkMWM2OWNhODljNjNhNjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0K
QEAgLTU1NSw3ICs1NTUsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXN0b3JlUGFnZUNlbnRl
ckFuZFNjYWxlKE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+IGNlbgogICAgIFttX3dlYlZp
ZXcgX3Jlc3RvcmVQYWdlU3RhdGVUb1Vub2JzY3VyZWRDZW50ZXI6Y2VudGVyIHNjYWxlOnNjYWxl
XTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c3RhcnRBc3Npc3RpbmdOb2RlKGNvbnN0IEFz
c2lzdGVkTm9kZUluZm9ybWF0aW9uJiBub2RlSW5mb3JtYXRpb24sIGJvb2wgdXNlcklzSW50ZXJh
Y3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwgYm9vbCBjaGFuZ2luZ0FjdGl2aXR5U3RhdGUs
IEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmVsZW1lbnREaWRG
b2N1cyhjb25zdCBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJiBub2RlSW5mb3JtYXRpb24sIGJv
b2wgdXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwgYm9vbCBjaGFuZ2lu
Z0FjdGl2aXR5U3RhdGUsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkKIHsKICAgICBNRVNTQUdFX0NI
RUNLKCF1c2VyRGF0YSB8fCB1c2VyRGF0YS0+dHlwZSgpID09IEFQSTo6T2JqZWN0OjpUeXBlOjpE
YXRhKTsKIApAQCAtNTcwLDE3ICs1NzAsMTcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c3RhcnRB
c3Npc3RpbmdOb2RlKGNvbnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBub2RlSW5mb3IKICAg
ICAgICAgfQogICAgIH0KIAotICAgIFttX2NvbnRlbnRWaWV3IF9zdGFydEFzc2lzdGluZ05vZGU6
bm9kZUluZm9ybWF0aW9uIHVzZXJJc0ludGVyYWN0aW5nOnVzZXJJc0ludGVyYWN0aW5nIGJsdXJQ
cmV2aW91c05vZGU6Ymx1clByZXZpb3VzTm9kZSBjaGFuZ2luZ0FjdGl2aXR5U3RhdGU6Y2hhbmdp
bmdBY3Rpdml0eVN0YXRlIHVzZXJPYmplY3Q6dXNlck9iamVjdF07CisgICAgW21fY29udGVudFZp
ZXcgX2VsZW1lbnREaWRGb2N1czpub2RlSW5mb3JtYXRpb24gdXNlcklzSW50ZXJhY3Rpbmc6dXNl
cklzSW50ZXJhY3RpbmcgYmx1clByZXZpb3VzTm9kZTpibHVyUHJldmlvdXNOb2RlIGNoYW5naW5n
QWN0aXZpdHlTdGF0ZTpjaGFuZ2luZ0FjdGl2aXR5U3RhdGUgdXNlck9iamVjdDp1c2VyT2JqZWN0
XTsKIH0KIAotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNBc3Npc3RpbmdOb2RlKCkKK2Jvb2wgUGFn
ZUNsaWVudEltcGw6OmlzRm9jdXNpbmdFbGVtZW50KCkKIHsKLSAgICByZXR1cm4gW21fY29udGVu
dFZpZXcgaXNBc3Npc3RpbmdOb2RlXTsKKyAgICByZXR1cm4gW21fY29udGVudFZpZXcgaXNGb2N1
c2luZ0VsZW1lbnRdOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzdG9wQXNzaXN0aW5nTm9k
ZSgpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjplbGVtZW50RGlkQmx1cigpCiB7Ci0gICAgW21fY29u
dGVudFZpZXcgX3N0b3BBc3Npc3RpbmdOb2RlXTsKKyAgICBbbV9jb250ZW50VmlldyBfZWxlbWVu
dERpZEJsdXJdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZWNlaXZlRWRpdG9yU3Rh
dGVVcGRhdGVBZnRlckZvY3VzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlldy5oCmluZGV4IDY4N2EyMGIyMTNlMzVmNjBkMWI1NmYyZjczNDYwZTZjZGYyYjA3Yzcu
LjExZmQ4YTA0MGZmOThmYjMwZDIzODg5NDRhNDQyNjFiZGRhNmEzNTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaApAQCAtNjEsNyArNjEsNyBAQCBjbGFz
cyBXZWJQcm9jZXNzUG9vbDsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIAogQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZTsKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBpc0Fzc2lzdGluZ05vZGU7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgaXNGb2N1c2luZ0VsZW1lbnQ7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlzU2hvd2luZ0luc3BlY3RvckluZGljYXRpb24pIEJP
T0wgc2hvd2luZ0luc3BlY3RvckluZGljYXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHksIGdldHRlcj1pc1Jlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyKSBCT09MIHJlc2lnbmluZ0Zp
cnN0UmVzcG9uZGVyOwogQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgc2l6ZUNoYW5nZWRTaW5j
ZUxhc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3Lm1tCmluZGV4IDZhZmJjYjgyYmQxNWJlM2E2ZjYyNjQ2YWJjN2Zi
Njc0NzZlYzQ1YmEuLmViMmFlZDU0ZDMwMDAwODA1NzVhY2Q2M2U1NmFhOGY4NDgyMjQ0ZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0zMDAs
NyArMzAwLDcgQEAgLSAoV0tQYWdlUmVmKV9wYWdlUmVmCiAgICAgcmV0dXJuIHRvQVBJKF9wYWdl
LmdldCgpKTsKIH0KIAotLSAoQk9PTClpc0Fzc2lzdGluZ05vZGUKKy0gKEJPT0wpaXNGb2N1c2lu
Z0VsZW1lbnQKIHsKICAgICByZXR1cm4gW3NlbGYgaXNFZGl0YWJsZV07CiB9CkBAIC01NDQsNyAr
NTQ0LDcgQEAgLSAodm9pZClfZGlkUmVsYXVuY2hQcm9jZXNzCiAKIC0gKHZvaWQpX2RpZENvbW1p
dExvYWRGb3JNYWluRnJhbWUKIHsKLSAgICBbc2VsZiBfc3RvcEFzc2lzdGluZ05vZGVdOworICAg
IFtzZWxmIF9lbGVtZW50RGlkQmx1cl07CiAgICAgW3NlbGYgX2NhbmNlbExvbmdQcmVzc0dlc3R1
cmVSZWNvZ25pemVyXTsKICAgICBbX3dlYlZpZXcgX2RpZENvbW1pdExvYWRGb3JNYWluRnJhbWVd
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5oCmluZGV4IDRkOGMxNDA2YTMzNTA3ZDg1YzA4ZDFmNjdiNjRmODQ2MjRl
YzBiMGUuLmMxZjY0NzQwMmQ5YWJlMjYxNjgxNTJjMWU3MTAxMjg3ZDYxYmIxOTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLmgKQEAgLTMxLDkgKzMxLDkgQEAKICNpbXBvcnQgIldLU2hhcmVTaGVldC5oIgogI2VuZGlm
CiAKLSNpbXBvcnQgIkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgiCiAjaW1wb3J0ICJEcmFnRHJv
cEludGVyYWN0aW9uU3RhdGUuaCIKICNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCisjaW1wb3J0ICJG
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmgiCiAjaW1wb3J0ICJHZXN0dXJlVHlwZXMuaCIKICNp
bXBvcnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCiAjaW1wb3J0ICJVSUtp
dFNQSS5oIgpAQCAtMjYxLDcgKzI2MSw3IEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7
CiAKICAgICBXZWJLaXQ6OldLQXV0b0NvcnJlY3Rpb25EYXRhIF9hdXRvY29ycmVjdGlvbkRhdGE7
CiAgICAgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBfcG9zaXRpb25J
bmZvcm1hdGlvbjsKLSAgICBXZWJLaXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uIF9hc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbjsKKyAgICBXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24g
X2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb247CiAgICAgUmV0YWluUHRyPE5TT2JqZWN0PFdLRm9y
bVBlcmlwaGVyYWw+PiBfaW5wdXRQZXJpcGhlcmFsOwogICAgIFJldGFpblB0cjxVSUV2ZW50PiBf
dWlFdmVudEJlaW5nUmVzZW50OwogICAgIEJsb2NrUHRyPHZvaWQoOjpXZWJFdmVudCAqLCBCT09M
KT4gX2tleVdlYkV2ZW50SGFuZGxlcjsKQEAgLTM1Myw3ICszNTMsNyBAQCBzdHJ1Y3QgV0tBdXRv
Q29ycmVjdGlvbkRhdGEgewogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHNo
b3VsZEhpZGVTZWxlY3Rpb25XaGVuU2Nyb2xsaW5nOwogQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBjb25zdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiBw
b3NpdGlvbkluZm9ybWF0aW9uOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBjb25z
dCBXZWJLaXQ6OldLQXV0b0NvcnJlY3Rpb25EYXRhJiBhdXRvY29ycmVjdGlvbkRhdGE7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIGNvbnN0IFdlYktpdDo6QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24mIGFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBjb25zdCBXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24mIGZvY3Vz
ZWRFbGVtZW50SW5mb3JtYXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJ
V2ViRm9ybUFjY2Vzc29yeSAqZm9ybUFjY2Vzc29yeVZpZXc7CiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFVJVGV4dElucHV0QXNzaXN0YW50SXRlbSAqaW5wdXRBc3Npc3RhbnRJdGVt
Rm9yV2ViVmlldzsKIApAQCAtMzkzLDggKzM5Myw4IEBAIEZPUl9FQUNIX1BSSVZBVEVfV0tDT05U
RU5UVklFV19BQ1RJT04oREVDTEFSRV9XS0NPTlRFTlRWSUVXX0FDVElPTl9GT1JfV0VCX1ZJRVcp
CiAKIC0gKEJPT0wpX21heURpc2FibGVEb3VibGVUYXBHZXN0dXJlc0R1cmluZ1NpbmdsZVRhcDsK
IC0gKHZvaWQpX2Rpc2FibGVEb3VibGVUYXBHZXN0dXJlc0R1cmluZ1RhcElmTmVjZXNzYXJ5Oih1
aW50NjRfdClyZXF1ZXN0SUQ7Ci0tICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU6KGNvbnN0IFdl
YktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mKWluZm9ybWF0aW9uIHVzZXJJc0ludGVyYWN0
aW5nOihCT09MKXVzZXJJc0ludGVyYWN0aW5nIGJsdXJQcmV2aW91c05vZGU6KEJPT0wpYmx1clBy
ZXZpb3VzTm9kZSBjaGFuZ2luZ0FjdGl2aXR5U3RhdGU6KEJPT0wpY2hhbmdpbmdBY3Rpdml0eVN0
YXRlIHVzZXJPYmplY3Q6KE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4gKil1c2VyT2JqZWN0Owot
LSAodm9pZClfc3RvcEFzc2lzdGluZ05vZGU7CistICh2b2lkKV9lbGVtZW50RGlkRm9jdXM6KGNv
bnN0IFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYpaW5mb3JtYXRpb24gdXNlcklz
SW50ZXJhY3Rpbmc6KEJPT0wpdXNlcklzSW50ZXJhY3RpbmcgYmx1clByZXZpb3VzTm9kZTooQk9P
TClibHVyUHJldmlvdXNOb2RlIGNoYW5naW5nQWN0aXZpdHlTdGF0ZTooQk9PTCljaGFuZ2luZ0Fj
dGl2aXR5U3RhdGUgdXNlck9iamVjdDooTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPiAqKXVzZXJP
YmplY3Q7CistICh2b2lkKV9lbGVtZW50RGlkQmx1cjsKIC0gKHZvaWQpX2RpZFJlY2VpdmVFZGl0
b3JTdGF0ZVVwZGF0ZUFmdGVyRm9jdXM7CiAtICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkOwogLSAo
dm9pZClfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbjsKQEAgLTQxMSw3ICs0MTEsNyBAQCBGT1JfRUFD
SF9QUklWQVRFX1dLQ09OVEVOVFZJRVdfQUNUSU9OKERFQ0xBUkVfV0tDT05URU5UVklFV19BQ1RJ
T05fRk9SX1dFQl9WSUVXKQogLSAodm9pZClfc2hvd1NoYXJlU2hlZXQ6KGNvbnN0IFdlYkNvcmU6
OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmKXNoYXJlRGF0YSBjb21wbGV0aW9uSGFuZGxlcjooV1RG
OjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKWNvbXBsZXRpb25IYW5kbGVyOwogLSAo
dm9pZClhY2Nlc3NvcnlEb25lOwogLSAodm9pZClfZGlkSGFuZGxlS2V5RXZlbnQ6KDo6V2ViRXZl
bnQgKilldmVudCBldmVudFdhc0hhbmRsZWQ6KEJPT0wpZXZlbnRXYXNIYW5kbGVkOwotLSAoVmVj
dG9yPFdlYktpdDo6T3B0aW9uSXRlbT4mKSBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zOworLSAo
VmVjdG9yPFdlYktpdDo6T3B0aW9uSXRlbT4mKSBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnM7
CiAtICh2b2lkKV9lbmFibGVJbnNwZWN0b3JOb2RlU2VhcmNoOwogLSAodm9pZClfZGlzYWJsZUlu
c3BlY3Rvck5vZGVTZWFyY2g7CiAtICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxl
Y3Rpb25Nb3ZpbmdGb3J3YXJkOihCT09MKXNlbGVjdGluZ0ZvcndhcmQgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKEJPT0wgZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpKWNvbXBsZXRpb25IYW5k
bGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggNWUzOTlmZDEwNWUzYzY1MDZhMGY1YjYxMTY0ZWJjNjEz
ZmJlNGZhYS4uZjI2OTM5NTA2MWYyMGEyYWI5Y2YyNmE4ZTAxYmQ1ZTc4NTRjMWM3YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCkBAIC0yODEsNyArMjgxLDcgQEAgQGVuZAogQHByb3RvY29sIFVJU2VsZWN0aW9u
SW50ZXJhY3Rpb25Bc3Npc3RhbnQ7CiAKIEBpbnRlcmZhY2UgV0tGb2N1c2VkRWxlbWVudEluZm8g
OiBOU09iamVjdCA8X1dLRm9jdXNlZEVsZW1lbnRJbmZvPgotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246KGNvbnN0IFdlYktpdDo6QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24mKWluZm9ybWF0aW9uIGlzVXNlckluaXRpYXRlZDooQk9PTClpc1VzZXJJbml0aWF0
ZWQgdXNlck9iamVjdDooTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPiAqKXVzZXJPYmplY3Q7Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uOihjb25zdCBX
ZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24mKWluZm9ybWF0aW9uIGlzVXNlckluaXRp
YXRlZDooQk9PTClpc1VzZXJJbml0aWF0ZWQgdXNlck9iamVjdDooTlNPYmplY3QgPE5TU2VjdXJl
Q29kaW5nPiAqKXVzZXJPYmplY3Q7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS0Zvcm1JbnB1
dFNlc3Npb24gewpAQCAtNDQxLDcgKzQ0MSw3IEBAIEBpbXBsZW1lbnRhdGlvbiBXS0ZvY3VzZWRF
bGVtZW50SW5mbyB7CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbGFiZWw7CiB9CiAKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOihjb25zdCBXZWJLaXQ6
OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJilpbmZvcm1hdGlvbiBpc1VzZXJJbml0aWF0ZWQ6KEJP
T0wpaXNVc2VySW5pdGlhdGVkIHVzZXJPYmplY3Q6KE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4g
Kil1c2VyT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGb2N1c2VkRWxlbWVudEluZm9y
bWF0aW9uOihjb25zdCBXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24mKWluZm9ybWF0
aW9uIGlzVXNlckluaXRpYXRlZDooQk9PTClpc1VzZXJJbml0aWF0ZWQgdXNlck9iamVjdDooTlNP
YmplY3QgPE5TU2VjdXJlQ29kaW5nPiAqKXVzZXJPYmplY3QKIHsKICAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTYwOSw5ICs2MDksOSBAQCBA
ZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uKQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgaGFzQXNzaXN0ZWROb2RlKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24gYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pCitzdGF0aWMgaW5saW5lIGJvb2wgaGFz
Rm9jdXNlZEVsZW1lbnQoV2ViS2l0OjpGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uIGZvY3VzZWRF
bGVtZW50SW5mb3JtYXRpb24pCiB7Ci0gICAgcmV0dXJuIChhc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bi5lbGVtZW50VHlwZSAhPSBXZWJLaXQ6OklucHV0VHlwZTo6Tm9uZSk7CisgICAgcmV0dXJuIChm
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBlICE9IFdlYktpdDo6SW5wdXRUeXBl
OjpOb25lKTsKIH0KIAogLSAoV0tGb3JtSW5wdXRTZXNzaW9uICopX2Zvcm1JbnB1dFNlc3Npb24K
QEAgLTg0Myw3ICs4NDMsNyBAQCAtICh2b2lkKWNsZWFudXBJbnRlcmFjdGlvbgogI2VuZGlmCiAK
ICAgICBfaW5wdXRWaWV3VXBkYXRlRGVmZXJyZXIgPSBudWxscHRyOwotICAgIF9hc3Npc3RlZE5v
ZGVJbmZvcm1hdGlvbiA9IHsgfTsKKyAgICBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiA9IHsg
fTsKICAgICAKICAgICBbX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgaW52YWxpZGF0ZV07CiAg
ICAgX2tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgPSBuaWw7CkBAIC0xMDA4LDcgKzEwMDgsNyBA
QCAtIChDR1BvaW50KWxhc3RJbnRlcmFjdGlvbkxvY2F0aW9uCiAtIChCT09MKXNob3VsZEhpZGVT
ZWxlY3Rpb25XaGVuU2Nyb2xsaW5nCiB7CiAgICAgaWYgKF9pc0VkaXRhYmxlKQotICAgICAgICBy
ZXR1cm4gX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmluc2lkZUZpeGVkUG9zaXRpb247CisgICAg
ICAgIHJldHVybiBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5pbnNpZGVGaXhlZFBvc2l0aW9u
OwogCiAgICAgYXV0byYgZWRpdG9yU3RhdGUgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKTsKICAgICBy
ZXR1cm4gIWVkaXRvclN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhICYmIGVkaXRvclN0YXRl
LnBvc3RMYXlvdXREYXRhKCkuaW5zaWRlRml4ZWRQb3NpdGlvbjsKQEAgLTEwOTAsNyArMTA5MCw3
IEBAIC0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXJGb3JXZWJWaWV3CiAgICAgaWYgKCFfd2Vi
Vmlldy5fcmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlKSB7CiAgICAgICAgIC8vIFdlIG5lZWQg
dG8gY29tcGxldGUgdGhlIGVkaXRpbmcgb3BlcmF0aW9uIGJlZm9yZSB3ZSBibHVyIHRoZSBlbGVt
ZW50LgogICAgICAgICBbc2VsZiBfZW5kRWRpdGluZ107Ci0gICAgICAgIF9wYWdlLT5ibHVyQXNz
aXN0ZWROb2RlKCk7CisgICAgICAgIF9wYWdlLT5ibHVyRm9jdXNlZEVsZW1lbnQoKTsKICAgICB9
CiAKICAgICBbc2VsZiBfY2FuY2VsSW50ZXJhY3Rpb25dOwpAQCAtMTMwMCw3ICsxMzAwLDcgQEAg
LSAodm9pZClfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9yUmVxdWVzdDoodWludDY0X3QpcmVxdWVzdElE
IGNvbG9yOihjb25zdCBXZWJDb3JlOjoKICAgICBpZiAoIV9pc1RhcEhpZ2hsaWdodElEVmFsaWQg
fHwgX2xhdGVzdFRhcElEICE9IHJlcXVlc3RJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGhhc0Fzc2lzdGVkTm9kZShfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pICYmIF9wb3NpdGlvbklu
Zm9ybWF0aW9uLm5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUpCisgICAgaWYgKGhhc0ZvY3Vz
ZWRFbGVtZW50KF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKSAmJiBfcG9zaXRpb25JbmZvcm1h
dGlvbi5ub2RlQXRQb3NpdGlvbklzRm9jdXNlZEVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIF9pc1RhcEhpZ2hsaWdodElEVmFsaWQgPSBOTzsKQEAgLTEzNzIsNyArMTM3Miw3IEBAIC0g
KHZvaWQpX3Njcm9sbGluZ05vZGVTY3JvbGxpbmdEaWRFbmQKIC0gKEJPT0wpX3JlcXVpcmVzS2V5
Ym9hcmRXaGVuRmlyc3RSZXNwb25kZXIKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCB0
aGUgbG9naWMgdG8gaGFuZGxlIGtleWJvYXJkIHZpc2liaWxpdHkgZHVyaW5nIGZvY3VzIHJlZGly
ZWN0cy4KLSAgICBzd2l0Y2ggKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkg
eworICAgIHN3aXRjaCAoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUpIHsK
ICAgICBjYXNlIFdlYktpdDo6SW5wdXRUeXBlOjpOb25lOgogICAgIGNhc2UgV2ViS2l0OjpJbnB1
dFR5cGU6OkRyYXdpbmc6CiAgICAgICAgIHJldHVybiBOTzsKQEAgLTEzODYsNyArMTM4Niw3IEBA
IC0gKEJPT0wpX3JlcXVpcmVzS2V5Ym9hcmRXaGVuRmlyc3RSZXNwb25kZXIKICAgICBjYXNlIFdl
YktpdDo6SW5wdXRUeXBlOjpUaW1lOgogICAgICAgICByZXR1cm4gIWN1cnJlbnRVc2VySW50ZXJm
YWNlSWRpb21Jc1BhZCgpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAhX2Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmlzUmVhZE9ubHk7CisgICAgICAgIHJldHVybiAhX2ZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uaXNSZWFkT25seTsKICAgICB9CiAgICAgcmV0dXJuIE5POwogfQpAQCAt
MTQwNCwyNiArMTQwNCwyNiBAQCAtICh2b2lkKV96b29tVG9SZXZlYWxGb2N1c2VkRWxlbWVudAog
ICAgIFNldEZvclNjb3BlPEJPT0w+IGlzWm9vbWluZ1RvUmV2ZWFsRm9jdXNlZEVsZW1lbnRGb3JT
Y29wZSB7IF9pc1pvb21pbmdUb1JldmVhbEZvY3VzZWRFbGVtZW50LCBZRVMgfTsKICAgICAvLyBJ
biBjYXNlIHVzZXIgc2NhbGluZyBpcyBmb3JjZSBlbmFibGVkLCBkbyBub3QgdXNlIHRoYXQgc2Nh
bGluZyB3aGVuIHpvb21pbmcgaW4gd2l0aCBhbiBpbnB1dCBmaWVsZC4KICAgICAvLyBab29taW5n
IGFib3ZlIHRoZSBwYWdlJ3MgZGVmYXVsdCBzY2FsZSBmYWN0b3Igc2hvdWxkIG9ubHkgaGFwcGVu
IHdoZW4gdGhlIHVzZXIgcGVyZm9ybXMgaXQuCi0gICAgW3NlbGYgX3pvb21Ub0ZvY3VzUmVjdDpf
YXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFJlY3QKLSAgICAgICAgc2VsZWN0aW9uUmVj
dDpfZGlkQWNjZXNzb3J5VGFiSW5pdGlhdGVGb2N1cyA/IFdlYkNvcmU6OkZsb2F0UmVjdCgpIDog
cmVjdFRvUmV2ZWFsV2hlblpvb21pbmdUb0ZvY3VzZWRFbGVtZW50KF9hc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbiwgX3BhZ2UtPmVkaXRvclN0YXRlKCkpCi0gICAgICAgIGluc2lkZUZpeGVkOl9hc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbi5pbnNpZGVGaXhlZFBvc2l0aW9uCi0gICAgICAgIGZvbnRTaXpl
Ol9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5ub2RlRm9udFNpemUKLSAgICAgICAgbWluaW11bVNj
YWxlOl9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5taW5pbXVtU2NhbGVGYWN0b3IKLSAgICAgICAg
bWF4aW11bVNjYWxlOl9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5tYXhpbXVtU2NhbGVGYWN0b3JJ
Z25vcmluZ0Fsd2F5c1NjYWxhYmxlCi0gICAgICAgIGFsbG93U2NhbGluZzpfYXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24uYWxsb3dzVXNlclNjYWxpbmdJZ25vcmluZ0Fsd2F5c1NjYWxhYmxlICYmICFj
dXJyZW50VXNlckludGVyZmFjZUlkaW9tSXNQYWQoKQotICAgICAgICBmb3JjZVNjcm9sbDooX2Fz
c2lzdGVkTm9kZUluZm9ybWF0aW9uLmlucHV0TW9kZSA9PSBXZWJDb3JlOjpJbnB1dE1vZGU6Ok5v
bmUpID8gIWN1cnJlbnRVc2VySW50ZXJmYWNlSWRpb21Jc1BhZCgpIDogW3NlbGYgcmVxdWlyZXNB
Y2Nlc3NvcnlWaWV3XV07CisgICAgW3NlbGYgX3pvb21Ub0ZvY3VzUmVjdDpfZm9jdXNlZEVsZW1l
bnRJbmZvcm1hdGlvbi5lbGVtZW50UmVjdAorICAgICAgICBzZWxlY3Rpb25SZWN0Ol9kaWRBY2Nl
c3NvcnlUYWJJbml0aWF0ZUZvY3VzID8gV2ViQ29yZTo6RmxvYXRSZWN0KCkgOiByZWN0VG9SZXZl
YWxXaGVuWm9vbWluZ1RvRm9jdXNlZEVsZW1lbnQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24s
IF9wYWdlLT5lZGl0b3JTdGF0ZSgpKQorICAgICAgICBpbnNpZGVGaXhlZDpfZm9jdXNlZEVsZW1l
bnRJbmZvcm1hdGlvbi5pbnNpZGVGaXhlZFBvc2l0aW9uCisgICAgICAgIGZvbnRTaXplOl9mb2N1
c2VkRWxlbWVudEluZm9ybWF0aW9uLm5vZGVGb250U2l6ZQorICAgICAgICBtaW5pbXVtU2NhbGU6
X2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24ubWluaW11bVNjYWxlRmFjdG9yCisgICAgICAgIG1h
eGltdW1TY2FsZTpfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5tYXhpbXVtU2NhbGVGYWN0b3JJ
Z25vcmluZ0Fsd2F5c1NjYWxhYmxlCisgICAgICAgIGFsbG93U2NhbGluZzpfZm9jdXNlZEVsZW1l
bnRJbmZvcm1hdGlvbi5hbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlzU2NhbGFibGUgJiYg
IWN1cnJlbnRVc2VySW50ZXJmYWNlSWRpb21Jc1BhZCgpCisgICAgICAgIGZvcmNlU2Nyb2xsOihf
Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5pbnB1dE1vZGUgPT0gV2ViQ29yZTo6SW5wdXRNb2Rl
OjpOb25lKSA/ICFjdXJyZW50VXNlckludGVyZmFjZUlkaW9tSXNQYWQoKSA6IFtzZWxmIHJlcXVp
cmVzQWNjZXNzb3J5Vmlld11dOwogfQogCiAtIChVSVZpZXcgKilpbnB1dFZpZXcKIHsKLSAgICBp
ZiAoIWhhc0Fzc2lzdGVkTm9kZShfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pKQorICAgIGlmICgh
aGFzRm9jdXNlZEVsZW1lbnQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24pKQogICAgICAgICBy
ZXR1cm4gbmlsOwogCi0gICAgaWYgKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5pbnB1dE1vZGUg
PT0gV2ViQ29yZTo6SW5wdXRNb2RlOjpOb25lKQorICAgIGlmIChfZm9jdXNlZEVsZW1lbnRJbmZv
cm1hdGlvbi5pbnB1dE1vZGUgPT0gV2ViQ29yZTo6SW5wdXRNb2RlOjpOb25lKQogICAgICAgICBy
ZXR1cm4gW1tVSVZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CiAKICAgICBpZiAoIV9pbnB1dFBlcmlw
aGVyYWwpIHsKLSAgICAgICAgc3dpdGNoIChfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVu
dFR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVt
ZW50VHlwZSkgewogICAgICAgICBjYXNlIFdlYktpdDo6SW5wdXRUeXBlOjpTZWxlY3Q6CiAgICAg
ICAgICAgICBfaW5wdXRQZXJpcGhlcmFsID0gYWRvcHROUyhbW1dLRm9ybVNlbGVjdENvbnRyb2wg
YWxsb2NdIGluaXRXaXRoVmlldzpzZWxmXSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE0NjMs
NyArMTQ2Myw3IEBAIC0gKFVJVmlldyAqKWlucHV0VmlldwogCiAtIChDR1JlY3QpX3NlbGVjdGlv
bkNsaXBSZWN0CiB7Ci0gICAgaWYgKCFoYXNBc3Npc3RlZE5vZGUoX2Fzc2lzdGVkTm9kZUluZm9y
bWF0aW9uKSkKKyAgICBpZiAoIWhhc0ZvY3VzZWRFbGVtZW50KF9mb2N1c2VkRWxlbWVudEluZm9y
bWF0aW9uKSkKICAgICAgICAgcmV0dXJuIENHUmVjdE51bGw7CiAgICAgcmV0dXJuIF9wYWdlLT5l
ZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0aW9uQ2xpcFJlY3Q7CiB9CkBAIC0x
NzI1LDE4ICsxNzI1LDE4IEBAIC0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXJTaG91bGRCZWdpbjoo
VUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCiAgICAgICAgIHx8IGdlc3R1
cmVSZWNvZ25pemVyID09IF9ub25CbG9ja2luZ0RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyCiAg
ICAgICAgIHx8IGdlc3R1cmVSZWNvZ25pemVyID09IF90d29GaW5nZXJEb3VibGVUYXBHZXN0dXJl
UmVjb2duaXplcikgewogCi0gICAgICAgIGlmIChoYXNBc3Npc3RlZE5vZGUoX2Fzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uKSkgeworICAgICAgICBpZiAoaGFzRm9jdXNlZEVsZW1lbnQoX2ZvY3VzZWRF
bGVtZW50SW5mb3JtYXRpb24pKSB7CiAgICAgICAgICAgICAvLyBSZXF1ZXN0IGluZm9ybWF0aW9u
IGFib3V0IHRoZSBwb3NpdGlvbiB3aXRoIHN5bmMgbWVzc2FnZS4KICAgICAgICAgICAgIC8vIElm
IHRoZSBhc3Npc3RlZCBub2RlIGlzIHRoZSBzYW1lLCBwcmV2ZW50IHRoZSBnZXN0dXJlLgogICAg
ICAgICAgICAgaWYgKCFbc2VsZiBlbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZTpX
ZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0KFdlYkNvcmU6OnJvdW5kZWRJbnRQ
b2ludChwb2ludCkpXSkKICAgICAgICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgICAgICBp
ZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24ubm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSkKKyAg
ICAgICAgICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5ub2RlQXRQb3NpdGlvbklzRm9jdXNl
ZEVsZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5POwogICAgICAgICB9CiAgICAgfQog
CiAgICAgaWYgKGdlc3R1cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJl
UmVjb2duaXplcikgewotICAgICAgICBpZiAoaGFzQXNzaXN0ZWROb2RlKF9hc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbikpIHsKKyAgICAgICAgaWYgKGhhc0ZvY3VzZWRFbGVtZW50KF9mb2N1c2VkRWxl
bWVudEluZm9ybWF0aW9uKSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGRpZmZlcmVudCBu
b2RlIHRoYW4gdGhlIGFzc2lzdGVkIG9uZS4KICAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIGdl
c3R1cmUgaWYgdGhlcmUgaXMgbm8gbm9kZS4KICAgICAgICAgICAgIC8vIEFsbG93IHRoZSBnZXN0
dXJlIGlmIGl0IGlzIGEgbm9kZSB0aGF0IHdhbnRzIGhpZ2hsaWdodCBvciBpZiB0aGVyZSBpcyBh
biBhY3Rpb24gZm9yIGl0LgpAQCAtMTc3MCw5ICsxNzcwLDkgQEAgLSAoQk9PTClnZXN0dXJlUmVj
b2duaXplclNob3VsZEJlZ2luOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6
ZXIKICAgICAgICAgaWYgKCFbc2VsZiBlbnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0
ZTpyZXF1ZXN0XSkKICAgICAgICAgICAgIHJldHVybiBOTzsKIAotICAgICAgICBpZiAoaGFzQXNz
aXN0ZWROb2RlKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbikpIHsKKyAgICAgICAgaWYgKGhhc0Zv
Y3VzZWRFbGVtZW50KF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKSkgewogICAgICAgICAgICAg
Ly8gUHJldmVudCB0aGUgZ2VzdHVyZSBpZiBpdCBpcyB0aGUgc2FtZSBub2RlLgotICAgICAgICAg
ICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLm5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUp
CisgICAgICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24ubm9kZUF0UG9zaXRpb25Jc0Zv
Y3VzZWRFbGVtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBOTzsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIGdlc3R1cmUgaWYgdGhlcmUgaXMgbm8gYWN0
aW9uIGZvciB0aGUgbm9kZS4KQEAgLTE4NzcsOCArMTg3Nyw4IEBAIC0gKEJPT0wpdGV4dEludGVy
YWN0aW9uR2VzdHVyZTooVUlXS0dlc3R1cmVUeXBlKWdlc3R1cmUgc2hvdWxkQmVnaW5BdFBvaW50
OihDR1BvCiAjZW5kaWYKIAogICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nIGFuIGFz
c2lzdGVkIG5vZGUsIG9ubHkgYWxsb3cgdGhlIHNlbGVjdGlvbiB0byBtb3ZlIHdpdGhpbiB0aGF0
IGFzc2lzdGVkIG5vZGUuCi0gICAgaWYgKHNlbGYuaXNBc3Npc3RpbmdOb2RlKQotICAgICAgICBy
ZXR1cm4gX3Bvc2l0aW9uSW5mb3JtYXRpb24ubm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZTsK
KyAgICBpZiAoc2VsZi5pc0ZvY3VzaW5nRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIF9wb3NpdGlv
bkluZm9ybWF0aW9uLm5vZGVBdFBvc2l0aW9uSXNGb2N1c2VkRWxlbWVudDsKICAgICAKICAgICAv
LyBEb24ndCBhbGxvdyBkb3VibGUgdGFwIHRleHQgZ2VzdHVyZXMgaW4gbm9uZWRpdGFibGUgY29u
dGVudC4KICAgICBpZiAoZ2VzdHVyZSA9PSBVSVdLR2VzdHVyZURvdWJsZVRhcCkKQEAgLTIxNDEs
NyArMjE0MSw3IEBAIC0gKHZvaWQpc2V0VXBUZXh0U2VsZWN0aW9uQXNzaXN0YW50CiAKIC0gKHZv
aWQpY2xlYXJTZWxlY3Rpb24KIHsKLSAgICBbc2VsZiBfc3RvcEFzc2lzdGluZ05vZGVdOworICAg
IFtzZWxmIF9lbGVtZW50RGlkQmx1cl07CiAgICAgX3BhZ2UtPmNsZWFyU2VsZWN0aW9uKCk7CiB9
CiAKQEAgLTIxOTgsMTAgKzIxOTgsMTAgQEAgLSAoQk9PTClyZXF1aXJlc0FjY2Vzc29yeVZpZXcK
ICAgICBpZiAoW19mb3JtSW5wdXRTZXNzaW9uIGN1c3RvbUlucHV0QWNjZXNzb3J5Vmlld10pCiAg
ICAgICAgIHJldHVybiBZRVM7CiAKLSAgICBpZiAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmlu
cHV0TW9kZSA9PSBXZWJDb3JlOjpJbnB1dE1vZGU6Ok5vbmUpCisgICAgaWYgKF9mb2N1c2VkRWxl
bWVudEluZm9ybWF0aW9uLmlucHV0TW9kZSA9PSBXZWJDb3JlOjpJbnB1dE1vZGU6Ok5vbmUpCiAg
ICAgICAgIHJldHVybiBOTzsKIAotICAgIHN3aXRjaCAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LmVsZW1lbnRUeXBlKSB7CisgICAgc3dpdGNoIChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5l
bGVtZW50VHlwZSkgewogICAgIGNhc2UgV2ViS2l0OjpJbnB1dFR5cGU6Ok5vbmU6CiAgICAgY2Fz
ZSBXZWJLaXQ6OklucHV0VHlwZTo6RHJhd2luZzoKICAgICAgICAgcmV0dXJuIE5POwpAQCAtMjU0
Niw5ICsyNTQ2LDkgQEAgLSAoQk9PTCljYW5QZXJmb3JtQWN0aW9uOihTRUwpYWN0aW9uIHdpdGhT
ZW5kZXI6KGlkKXNlbmRlcgogLSAoQk9PTCljYW5QZXJmb3JtQWN0aW9uRm9yV2ViVmlldzooU0VM
KWFjdGlvbiB3aXRoU2VuZGVyOihpZClzZW5kZXIKIHsKICAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3RvcihfbmV4dEFjY2Vzc29yeVRhYjopKQotICAgICAgICByZXR1cm4gaGFzQXNzaXN0ZWROb2Rl
KF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbikgJiYgX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmhh
c05leHROb2RlOworICAgICAgICByZXR1cm4gaGFzRm9jdXNlZEVsZW1lbnQoX2ZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24pICYmIF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmhhc05leHROb2Rl
OwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9wcmV2aW91c0FjY2Vzc29yeVRhYjopKQot
ICAgICAgICByZXR1cm4gaGFzQXNzaXN0ZWROb2RlKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbikg
JiYgX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmhhc1ByZXZpb3VzTm9kZTsKKyAgICAgICAgcmV0
dXJuIGhhc0ZvY3VzZWRFbGVtZW50KF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKSAmJiBfZm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oYXNQcmV2aW91c05vZGU7CiAKICAgICBhdXRvIGVkaXRv
clN0YXRlID0gX3BhZ2UtPmVkaXRvclN0YXRlKCk7CiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3IoX3Nob3dUZXh0U3R5bGVPcHRpb25zOikpCkBAIC0zMDU1LDkgKzMwNTUsOSBAQCBzdGF0aWMg
dm9pZCBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoKFdLQ29udGVudFZpZXcgKnZpZXcsIGNvbnN0
IFdlYkNvcmU6OkludFBvaQogICAgIFsoVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKVt2
aWV3IGludGVyYWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoQXQ6KENH
UG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKChXZWJL
aXQ6OlNlbGVjdGlvblRvdWNoKXRvdWNoKSB3aXRoRmxhZ3M6c3RhdGljX2Nhc3Q8VUlXS1NlbGVj
dGlvbkZsYWdzPihmbGFncyldOwogfQogCi0tIChCT09MKV9pc0ludGVyYWN0aW5nV2l0aEFzc2lz
dGVkTm9kZQorLSAoQk9PTClfaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudAogewotICAg
IHJldHVybiBoYXNBc3Npc3RlZE5vZGUoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uKTsKKyAgICBy
ZXR1cm4gaGFzRm9jdXNlZEVsZW1lbnQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24pOwogfQog
CiAtICh2b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0
aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSB3aXRoU3RhdGU6KFVJR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZSlzdGF0ZQpAQCAtMzA2OCw3ICszMDY4LDcgQEAgLSAodm9pZCljaGFu
Z2VTZWxlY3Rpb25XaXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50IHdpdGhHZXN0dXJlOihVSVdL
R2VzdHVyZVR5cGUKIC0gKHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aEdlc3R1cmVBdDooQ0dQb2lu
dClwb2ludCB3aXRoR2VzdHVyZTooVUlXS0dlc3R1cmVUeXBlKWdlc3R1cmVUeXBlIHdpdGhTdGF0
ZTooVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKXN0YXRlIHdpdGhGbGFnczooVUlXS1NlbGVjdGlv
bkZsYWdzKWZsYWdzCiB7CiAgICAgX3VzaW5nR2VzdHVyZUZvclNlbGVjdGlvbiA9IFlFUzsKLSAg
ICBfcGFnZS0+c2VsZWN0V2l0aEdlc3R1cmUoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCBXZWJD
b3JlOjpDaGFyYWN0ZXJHcmFudWxhcml0eSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvR2VzdHVy
ZVR5cGUoZ2VzdHVyZVR5cGUpKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZShzdGF0ZSkpLCBbc2VsZiBfaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGVd
LCBbc2VsZiwgc3RhdGUsIGZsYWdzXShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVp
bnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGlubmVy
RmxhZ3MsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgIF9wYWdlLT5z
ZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIFdlYkNvcmU6OkNoYXJh
Y3RlckdyYW51bGFyaXR5LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9HZXN0dXJlVHlwZShnZXN0
dXJlVHlwZSkpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9HZXN0dXJlUmVjb2duaXplclN0YXRl
KHN0YXRlKSksIFtzZWxmIF9pc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50XSwgW3NlbGYs
IHN0YXRlLCBmbGFnc10oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBn
ZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBpbm5lckZsYWdzLCBX
ZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgc2VsZWN0aW9uQ2hh
bmdlZFdpdGhHZXN0dXJlKHNlbGYsIHBvaW50LCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCBm
bGFncyB8IGlubmVyRmxhZ3MsIGVycm9yKTsKICAgICAgICAgaWYgKHN0YXRlID09IFVJR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZUVuZGVkIHx8IHN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZUNhbmNlbGxlZCkKICAgICAgICAgICAgIF91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsK
QEAgLTMxNDgsNyArMzE0OCw3IEBAIC0gKHZvaWQpc2VsZWN0UG9zaXRpb25BdFBvaW50OihDR1Bv
aW50KXBvaW50IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljCiAgICAgVUlXS1Nl
bGVjdGlvbkNvbXBsZXRpb25IYW5kbGVyIHNlbGVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhh
bmRsZXIgY29weV07CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IHZpZXcgPSBzZWxmOwog
ICAgIAotICAgIF9wYWdlLT5zZWxlY3RQb3NpdGlvbkF0UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQo
cG9pbnQpLCBbc2VsZiBfaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGVdLCBbdmlldywgc2Vs
ZWN0aW9uSGFuZGxlcl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAg
X3BhZ2UtPnNlbGVjdFBvc2l0aW9uQXRQb2ludChXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIFtz
ZWxmIF9pc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50XSwgW3ZpZXcsIHNlbGVjdGlvbkhh
bmRsZXJdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewogICAgICAgICBzZWxl
Y3Rpb25IYW5kbGVyKCk7CiAgICAgICAgIHZpZXctPl91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24g
PSBOTzsKICAgICAgICAgW3NlbGVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CkBAIC0zMTYxLDcgKzMx
NjEsNyBAQCAtICh2b2lkKXNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeTooVUlUZXh0R3JhbnVsYXJp
dHkpZ3JhbnVsYXJpdHkgaW5EaXJlY3Rpb246KFVJVAogICAgIFVJV0tTZWxlY3Rpb25Db21wbGV0
aW9uSGFuZGxlciBzZWxlY3Rpb25IYW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOwog
ICAgIFJldGFpblB0cjxXS0NvbnRlbnRWaWV3PiB2aWV3ID0gc2VsZjsKICAgICAKLSAgICBfcGFn
ZS0+c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihXZWJDb3JlOjpJbnRQb2lu
dChwb2ludCksIHRvV0tUZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1dLU2VsZWN0aW9u
RGlyZWN0aW9uKGRpcmVjdGlvbiksIFtzZWxmIF9pc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9k
ZV0sIFt2aWV3LCBzZWxlY3Rpb25IYW5kbGVyXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3Ig
ZXJyb3IpIHsKKyAgICBfcGFnZS0+c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlv
bihXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIHRvV0tUZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJp
dHkpLCB0b1dLU2VsZWN0aW9uRGlyZWN0aW9uKGRpcmVjdGlvbiksIFtzZWxmIF9pc0ludGVyYWN0
aW5nV2l0aEZvY3VzZWRFbGVtZW50XSwgW3ZpZXcsIHNlbGVjdGlvbkhhbmRsZXJdKFdlYktpdDo6
Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewogICAgICAgICBzZWxlY3Rpb25IYW5kbGVyKCk7
CiAgICAgICAgIHZpZXctPl91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsKICAgICAgICAg
W3NlbGVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CkBAIC0zMTg3LDcgKzMxODcsNyBAQCAtICh2b2lk
KXNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHk6KFVJVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5
IGF0UG9pbnQ6KENHUG9pbgogICAgIFVJV0tTZWxlY3Rpb25Db21wbGV0aW9uSGFuZGxlciBzZWxl
Y3Rpb25IYW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOwogICAgIFJldGFpblB0cjxX
S0NvbnRlbnRWaWV3PiB2aWV3ID0gc2VsZjsKIAotICAgIF9wYWdlLT5zZWxlY3RUZXh0V2l0aEdy
YW51bGFyaXR5QXRQb2ludChXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIHRvV0tUZXh0R3JhbnVs
YXJpdHkoZ3JhbnVsYXJpdHkpLCBbc2VsZiBfaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGVd
LCBbdmlldywgc2VsZWN0aW9uSGFuZGxlcl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVy
cm9yKSB7CisgICAgX3BhZ2UtPnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KFdlYkNv
cmU6OkludFBvaW50KHBvaW50KSwgdG9XS1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIFtz
ZWxmIF9pc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50XSwgW3ZpZXcsIHNlbGVjdGlvbkhh
bmRsZXJdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewogICAgICAgICBzZWxl
Y3Rpb25IYW5kbGVyKCk7CiAgICAgICAgIHZpZXctPl91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24g
PSBOTzsKICAgICAgICAgW3NlbGVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CkBAIC0zMjA4LDcgKzMy
MDgsNyBAQCAtICh2b2lkKXVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludDooQ0dQb2ludClw
b2ludCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXgogewogICAgIFVJV0tTZWxlY3Rpb25XaXRo
RGlyZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIgc2VsZWN0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9u
SGFuZGxlciBjb3B5XTsKICAgICAKLSAgICBfcGFnZS0+dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVu
dFBvaW50KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgW3NlbGYgX2lzSW50ZXJhY3RpbmdXaXRo
QXNzaXN0ZWROb2RlXSwgW3NlbGVjdGlvbkhhbmRsZXJdKGJvb2wgZW5kSXNNb3ZpbmcsIFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgIF9wYWdlLT51cGRhdGVTZWxlY3Rp
b25XaXRoRXh0ZW50UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCBbc2VsZiBfaXNJbnRl
cmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudF0sIFtzZWxlY3Rpb25IYW5kbGVyXShib29sIGVuZElz
TW92aW5nLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgc2Vs
ZWN0aW9uSGFuZGxlcihlbmRJc01vdmluZyk7CiAgICAgICAgIFtzZWxlY3Rpb25IYW5kbGVyIHJl
bGVhc2VdOwogICAgIH0pOwpAQCAtMzIxOCw3ICszMjE4LDcgQEAgLSAodm9pZCl1cGRhdGVTZWxl
Y3Rpb25XaXRoRXh0ZW50UG9pbnQ6KENHUG9pbnQpcG9pbnQgd2l0aEJvdW5kYXJ5OihVSVRleHRH
cmFudWwKIHsKICAgICBVSVdLU2VsZWN0aW9uV2l0aERpcmVjdGlvbkNvbXBsZXRpb25IYW5kbGVy
IHNlbGVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CiAgICAgCi0gICAg
X3BhZ2UtPnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KFdlYkNvcmU6
OkludFBvaW50KHBvaW50KSwgdG9XS1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIFtzZWxm
IF9pc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZV0sIFtzZWxlY3Rpb25IYW5kbGVyXShib29s
IGVuZElzTW92aW5nLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBf
cGFnZS0+dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoV2ViQ29yZTo6
SW50UG9pbnQocG9pbnQpLCB0b1dLVGV4dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5KSwgW3NlbGYg
X2lzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnRdLCBbc2VsZWN0aW9uSGFuZGxlcl0oYm9v
bCBlbmRJc01vdmluZywgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CiAgICAg
ICAgIHNlbGVjdGlvbkhhbmRsZXIoZW5kSXNNb3ZpbmcpOwogICAgICAgICBbc2VsZWN0aW9uSGFu
ZGxlciByZWxlYXNlXTsKICAgICB9KTsKQEAgLTMzNTEsNyArMzM1MSw3IEBAIC0gKHZvaWQpYWNj
ZXNzb3J5VGFiOihCT09MKWlzTmV4dAogICAgIF9pc0NoYW5naW5nRm9jdXNVc2luZ0FjY2Vzc29y
eVRhYiA9IFlFUzsKICAgICBbc2VsZiBiZWdpblNlbGVjdGlvbkNoYW5nZV07CiAgICAgUmV0YWlu
UHRyPFdLQ29udGVudFZpZXc+IHZpZXcgPSBzZWxmOwotICAgIF9wYWdlLT5mb2N1c05leHRBc3Np
c3RlZE5vZGUoaXNOZXh0LCBbdmlld10oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7Cisg
ICAgX3BhZ2UtPmZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGlzTmV4dCwgW3ZpZXddKFdlYktpdDo6
Q2FsbGJhY2tCYXNlOjpFcnJvcikgewogICAgICAgICBbdmlldyBlbmRTZWxlY3Rpb25DaGFuZ2Vd
OwogICAgICAgICBbdmlldyByZWxvYWRJbnB1dFZpZXdzXTsKICAgICAgICAgdmlldy0+X2lzQ2hh
bmdpbmdGb2N1c1VzaW5nQWNjZXNzb3J5VGFiID0gTk87CkBAIC0zMzYzLDcgKzMzNjMsNyBAQCAt
ICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25Nb3ZpbmdGb3J3YXJkOihC
T09MKXNlbGVjdGluZ0ZvcndhcmQgYwogICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0g
QmxvY2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZp
ZXc+IHZpZXcgPSBzZWxmOwogICAgIF9wYWdlLT5zZXRJbml0aWFsRm9jdXMoc2VsZWN0aW5nRm9y
d2FyZCwgZmFsc2UsIFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVudCgpLCBbdmlldywgY29tcGxldGlv
bkhhbmRsZXJDb3B5XShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKLSAgICAgICAgQk9P
TCBkaWRCZWNvbWVGaXJzdFJlc3BvbmRlciA9IHZpZXctPl9hc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bi5lbGVtZW50VHlwZSAhPSBXZWJLaXQ6OklucHV0VHlwZTo6Tm9uZSAmJiBbdmlldyBiZWNvbWVG
aXJzdFJlc3BvbmRlcl07CisgICAgICAgIEJPT0wgZGlkQmVjb21lRmlyc3RSZXNwb25kZXIgPSB2
aWV3LT5fZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSAhPSBXZWJLaXQ6Oklu
cHV0VHlwZTo6Tm9uZSAmJiBbdmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlcl07CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyQ29weShkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcik7CiAgICAgICAgIEJs
b2NrX3JlbGVhc2UoY29tcGxldGlvbkhhbmRsZXJDb3B5KTsKICAgICB9KTsKQEAgLTM0MDIsMTgg
KzM0MDIsMTggQEAgLSAodm9pZClhY2Nlc3NvcnlBdXRvRmlsbAogCiAtICh2b2lkKWFjY2Vzc29y
eUNsZWFyCiB7Ci0gICAgX3BhZ2UtPnNldEFzc2lzdGVkTm9kZVZhbHVlKFN0cmluZygpKTsKKyAg
ICBfcGFnZS0+c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZShTdHJpbmcoKSk7CiB9CiAKIC0gKHZvaWQp
X3VwZGF0ZUFjY2Vzc29yeQogewotICAgIFtfZm9ybUFjY2Vzc29yeVZpZXcgc2V0TmV4dEVuYWJs
ZWQ6X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmhhc05leHROb2RlXTsKLSAgICBbX2Zvcm1BY2Nl
c3NvcnlWaWV3IHNldFByZXZpb3VzRW5hYmxlZDpfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaGFz
UHJldmlvdXNOb2RlXTsKKyAgICBbX2Zvcm1BY2Nlc3NvcnlWaWV3IHNldE5leHRFbmFibGVkOl9m
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmhhc05leHROb2RlXTsKKyAgICBbX2Zvcm1BY2Nlc3Nv
cnlWaWV3IHNldFByZXZpb3VzRW5hYmxlZDpfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oYXNQ
cmV2aW91c05vZGVdOwogCiAgICAgaWYgKGN1cnJlbnRVc2VySW50ZXJmYWNlSWRpb21Jc1BhZCgp
KQogICAgICAgICBbX2Zvcm1BY2Nlc3NvcnlWaWV3IHNldENsZWFyVmlzaWJsZTpOT107CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRU
eXBlKSB7CisgICAgICAgIHN3aXRjaCAoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVu
dFR5cGUpIHsKICAgICAgICAgY2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6RGF0ZToKICAgICAgICAg
Y2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6TW9udGg6CiAgICAgICAgIGNhc2UgV2ViS2l0OjpJbnB1
dFR5cGU6OkRhdGVUaW1lTG9jYWw6CkBAIC0zNDU2LDcgKzM0NTYsNyBAQCAtICh2b2lkKWluc2Vy
dFRleHRTdWdnZXN0aW9uOihVSVRleHRTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24KICAgICB9
CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgaWYgKFt0ZXh0U3VnZ2VzdGlvbiBp
c0tpbmRPZkNsYXNzOltXS0RhdGFMaXN0VGV4dFN1Z2dlc3Rpb24gY2xhc3NdXSkgewotICAgICAg
ICBfcGFnZS0+c2V0QXNzaXN0ZWROb2RlVmFsdWUoW3RleHRTdWdnZXN0aW9uIGlucHV0VGV4dF0p
OworICAgICAgICBfcGFnZS0+c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZShbdGV4dFN1Z2dlc3Rpb24g
aW5wdXRUZXh0XSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM1MzAsNyAr
MzUzMCw3IEBAIC0gKHZvaWQpc2V0U2VsZWN0ZWRUZXh0UmFuZ2U6KFVJVGV4dFJhbmdlICopcmFu
Z2UKICAgICBpZiAocmFuZ2UpCiAgICAgICAgIHJldHVybjsKICNpZiAhUExBVEZPUk0oSU9TTUFD
KQotICAgIGlmICghaGFzQXNzaXN0ZWROb2RlKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbikpCisg
ICAgaWYgKCFoYXNGb2N1c2VkRWxlbWVudChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbikpCiAg
ICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIFtzZWxmIGNsZWFyU2VsZWN0aW9uXTsKQEAgLTM4
MDYsMjMgKzM4MDYsMjMgQEAgLSAoVUlUZXh0SW5wdXRUcmFpdHMgKil0ZXh0SW5wdXRUcmFpdHMK
ICAgICBpZiAoIV90cmFpdHMpCiAgICAgICAgIF90cmFpdHMgPSBhZG9wdE5TKFtbVUlUZXh0SW5w
dXRUcmFpdHMgYWxsb2NdIGluaXRdKTsKIAotICAgIFtfdHJhaXRzIHNldFNlY3VyZVRleHRFbnRy
eTpfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPT0gV2ViS2l0OjpJbnB1dFR5
cGU6OlBhc3N3b3JkIHx8IFtfZm9ybUlucHV0U2Vzc2lvbiBmb3JjZVNlY3VyZVRleHRFbnRyeV1d
OwotICAgIFtfdHJhaXRzIHNldFNob3J0Y3V0Q29udmVyc2lvblR5cGU6X2Fzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uLmVsZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpQYXNzd29yZCA/IFVJ
VGV4dFNob3J0Y3V0Q29udmVyc2lvblR5cGVObyA6IFVJVGV4dFNob3J0Y3V0Q29udmVyc2lvblR5
cGVEZWZhdWx0XTsKKyAgICBbX3RyYWl0cyBzZXRTZWN1cmVUZXh0RW50cnk6X2ZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPT0gV2ViS2l0OjpJbnB1dFR5cGU6OlBhc3N3b3Jk
IHx8IFtfZm9ybUlucHV0U2Vzc2lvbiBmb3JjZVNlY3VyZVRleHRFbnRyeV1dOworICAgIFtfdHJh
aXRzIHNldFNob3J0Y3V0Q29udmVyc2lvblR5cGU6X2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24u
ZWxlbWVudFR5cGUgPT0gV2ViS2l0OjpJbnB1dFR5cGU6OlBhc3N3b3JkID8gVUlUZXh0U2hvcnRj
dXRDb252ZXJzaW9uVHlwZU5vIDogVUlUZXh0U2hvcnRjdXRDb252ZXJzaW9uVHlwZURlZmF1bHRd
OwogCi0gICAgaWYgKCFfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZm9ybUFjdGlvbi5pc0VtcHR5
KCkpCi0gICAgICAgIFtfdHJhaXRzIHNldFJldHVybktleVR5cGU6KF9hc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5lbGVtZW50VHlwZSA9PSBXZWJLaXQ6OklucHV0VHlwZTo6U2VhcmNoKSA/IFVJUmV0
dXJuS2V5U2VhcmNoIDogVUlSZXR1cm5LZXlHb107CisgICAgaWYgKCFfZm9jdXNlZEVsZW1lbnRJ
bmZvcm1hdGlvbi5mb3JtQWN0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgW190cmFpdHMgc2V0UmV0
dXJuS2V5VHlwZTooX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUgPT0gV2Vi
S2l0OjpJbnB1dFR5cGU6OlNlYXJjaCkgPyBVSVJldHVybktleVNlYXJjaCA6IFVJUmV0dXJuS2V5
R29dOwogCi0gICAgaWYgKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9PSBX
ZWJLaXQ6OklucHV0VHlwZTo6UGFzc3dvcmQgfHwgX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVs
ZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpFbWFpbCB8fCBfYXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uZWxlbWVudFR5cGUgPT0gV2ViS2l0OjpJbnB1dFR5cGU6OlVSTCB8fCBfYXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uZm9ybUFjdGlvbi5jb250YWlucygibG9naW4iKSkgeworICAgIGlm
IChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9PSBXZWJLaXQ6OklucHV0
VHlwZTo6UGFzc3dvcmQgfHwgX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUg
PT0gV2ViS2l0OjpJbnB1dFR5cGU6OkVtYWlsIHx8IF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
LmVsZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpVUkwgfHwgX2ZvY3VzZWRFbGVtZW50
SW5mb3JtYXRpb24uZm9ybUFjdGlvbi5jb250YWlucygibG9naW4iKSkgewogICAgICAgICBbX3Ry
YWl0cyBzZXRBdXRvY2FwaXRhbGl6YXRpb25UeXBlOlVJVGV4dEF1dG9jYXBpdGFsaXphdGlvblR5
cGVOb25lXTsKICAgICAgICAgW190cmFpdHMgc2V0QXV0b2NvcnJlY3Rpb25UeXBlOlVJVGV4dEF1
dG9jb3JyZWN0aW9uVHlwZU5vXTsKICAgICB9IGVsc2UgewotICAgICAgICBbX3RyYWl0cyBzZXRB
dXRvY2FwaXRhbGl6YXRpb25UeXBlOnRvVUlUZXh0QXV0b2NhcGl0YWxpemUoX2Fzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSldOwotICAgICAgICBbX3RyYWl0cyBzZXRB
dXRvY29ycmVjdGlvblR5cGU6X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3Qg
PyBVSVRleHRBdXRvY29ycmVjdGlvblR5cGVZZXMgOiBVSVRleHRBdXRvY29ycmVjdGlvblR5cGVO
b107CisgICAgICAgIFtfdHJhaXRzIHNldEF1dG9jYXBpdGFsaXphdGlvblR5cGU6dG9VSVRleHRB
dXRvY2FwaXRhbGl6ZShfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5hdXRvY2FwaXRhbGl6ZVR5
cGUpXTsKKyAgICAgICAgW190cmFpdHMgc2V0QXV0b2NvcnJlY3Rpb25UeXBlOl9mb2N1c2VkRWxl
bWVudEluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPyBVSVRleHRBdXRvY29ycmVjdGlvblR5cGVZ
ZXMgOiBVSVRleHRBdXRvY29ycmVjdGlvblR5cGVOb107CiAgICAgfQogCi0gICAgc3dpdGNoIChf
YXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaW5wdXRNb2RlKSB7CisgICAgc3dpdGNoIChfZm9jdXNl
ZEVsZW1lbnRJbmZvcm1hdGlvbi5pbnB1dE1vZGUpIHsKICAgICBjYXNlIFdlYkNvcmU6OklucHV0
TW9kZTo6VW5zcGVjaWZpZWQ6Ci0gICAgICAgIHN3aXRjaCAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0
aW9uLmVsZW1lbnRUeXBlKSB7CisgICAgICAgIHN3aXRjaCAoX2ZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb24uZWxlbWVudFR5cGUpIHsKICAgICAgICAgY2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6UGhv
bmU6CiAgICAgICAgICAgICBbX3RyYWl0cyBzZXRLZXlib2FyZFR5cGU6VUlLZXlib2FyZFR5cGVQ
aG9uZVBhZF07CiAgICAgICAgICAgICBicmVhazsKQEAgLTM4ODMsNyArMzg4Myw3IEBAIC0gKFVJ
VGV4dElucHV0VHJhaXRzICopdGV4dElucHV0VHJhaXRzCiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIFtfdHJhaXRzIHNldFRleHRDb250ZW50VHlwZTpjb250ZW50VHlwZUZyb21GaWVsZE5h
bWUoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmF1dG9maWxsRmllbGROYW1lKV07CisgICAgW190
cmFpdHMgc2V0VGV4dENvbnRlbnRUeXBlOmNvbnRlbnRUeXBlRnJvbUZpZWxkTmFtZShfZm9jdXNl
ZEVsZW1lbnRJbmZvcm1hdGlvbi5hdXRvZmlsbEZpZWxkTmFtZSldOwogCiAgICAgW3NlbGYgX3Vw
ZGF0ZUludGVyYWN0aW9uVGludENvbG9yXTsKIApAQCAtNDA4Miw3ICs0MDgyLDcgQEAgLSAoQk9P
TClpc1Njcm9sbGFibGVGb3JLZXlib2FyZFNjcm9sbFZpZXdBbmltYXRvcjooV0tLZXlib2FyZFNj
cm9sbFZpZXdBbmltYXRvcgogICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRF
ZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgaWYgKF9hc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5lbGVtZW50VHlwZSA9PSBXZWJLaXQ6OklucHV0VHlwZTo6U2VsZWN0KQorICAgIGlm
IChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9PSBXZWJLaXQ6OklucHV0
VHlwZTo6U2VsZWN0KQogICAgICAgICByZXR1cm4gTk87CiAKICAgICByZXR1cm4gWUVTOwpAQCAt
NDM1MSwxNCArNDM1MSwxNCBAQCAtICh2b2lkKV9zdG9wQXNzaXN0aW5nS2V5Ym9hcmQKICAgICBb
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgZGVhY3RpdmF0ZVNlbGVjdGlvbl07CiB9CiAKLS0gKGNv
bnN0IFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mKWFzc2lzdGVkTm9kZUluZm9ybWF0
aW9uCistIChjb25zdCBXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24mKWZvY3VzZWRF
bGVtZW50SW5mb3JtYXRpb24KIHsKLSAgICByZXR1cm4gX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9u
OworICAgIHJldHVybiBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbjsKIH0KIAotLSAoVmVjdG9y
PFdlYktpdDo6T3B0aW9uSXRlbT4mKWFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnMKKy0gKFZlY3Rv
cjxXZWJLaXQ6Ok9wdGlvbkl0ZW0+Jilmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnMKIHsKLSAg
ICByZXR1cm4gX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnM7CisgICAgcmV0
dXJuIF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnM7CiB9CiAKIC0gKFVJ
V2ViRm9ybUFjY2Vzc29yeSAqKWZvcm1BY2Nlc3NvcnlWaWV3CkBAIC00Mzg2LDcgKzQzODYsNyBA
QCBzdGF0aWMgYm9vbCBzaG91bGRab29tVG9SZXZlYWxTZWxlY3Rpb25SZWN0KFdlYktpdDo6SW5w
dXRUeXBlIHR5cGUpCiAgICAgfQogfQogCi1zdGF0aWMgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RU
b1JldmVhbFdoZW5ab29taW5nVG9Gb2N1c2VkRWxlbWVudChjb25zdCBXZWJLaXQ6OkFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uJiBlbGVtZW50SW5mbywgY29uc3QgV2ViS2l0OjpFZGl0b3JTdGF0ZSYg
ZWRpdG9yU3RhdGUpCitzdGF0aWMgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RUb1JldmVhbFdoZW5a
b29taW5nVG9Gb2N1c2VkRWxlbWVudChjb25zdCBXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb24mIGVsZW1lbnRJbmZvLCBjb25zdCBXZWJLaXQ6OkVkaXRvclN0YXRlJiBlZGl0b3JTdGF0
ZSkKIHsKICAgICBXZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRJbnRlcmFjdGlvblJlY3QoZWxlbWVu
dEluZm8uZWxlbWVudEludGVyYWN0aW9uTG9jYXRpb24sIHsgMSwgMSB9KTsKICAgICBpZiAoIXNo
b3VsZFpvb21Ub1JldmVhbFNlbGVjdGlvblJlY3QoZWxlbWVudEluZm8uZWxlbWVudFR5cGUpKQpA
QCAtNDQ0NiwxNSArNDQ0NiwxNSBAQCBzdGF0aWMgYm9vbCBpc0Fzc2lzdGFibGVJbnB1dFR5cGUo
V2ViS2l0OjpJbnB1dFR5cGUgdHlwZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS0gKHZvaWQp
X3N0YXJ0QXNzaXN0aW5nTm9kZTooY29uc3QgV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlv
biYpaW5mb3JtYXRpb24gdXNlcklzSW50ZXJhY3Rpbmc6KEJPT0wpdXNlcklzSW50ZXJhY3Rpbmcg
Ymx1clByZXZpb3VzTm9kZTooQk9PTClibHVyUHJldmlvdXNOb2RlIGNoYW5naW5nQWN0aXZpdHlT
dGF0ZTooQk9PTCljaGFuZ2luZ0FjdGl2aXR5U3RhdGUgdXNlck9iamVjdDooTlNPYmplY3QgPE5T
U2VjdXJlQ29kaW5nPiAqKXVzZXJPYmplY3QKKy0gKHZvaWQpX2VsZW1lbnREaWRGb2N1czooY29u
c3QgV2ViS2l0OjpGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJilpbmZvcm1hdGlvbiB1c2VySXNJ
bnRlcmFjdGluZzooQk9PTCl1c2VySXNJbnRlcmFjdGluZyBibHVyUHJldmlvdXNOb2RlOihCT09M
KWJsdXJQcmV2aW91c05vZGUgY2hhbmdpbmdBY3Rpdml0eVN0YXRlOihCT09MKWNoYW5naW5nQWN0
aXZpdHlTdGF0ZSB1c2VyT2JqZWN0OihOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmc+ICopdXNlck9i
amVjdAogewotICAgIFNldEZvclNjb3BlPEJPT0w+IGlzQ2hhbmdpbmdGb2N1c0ZvclNjb3BlIHsg
X2lzQ2hhbmdpbmdGb2N1cywgaGFzQXNzaXN0ZWROb2RlKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bikgfTsKKyAgICBTZXRGb3JTY29wZTxCT09MPiBpc0NoYW5naW5nRm9jdXNGb3JTY29wZSB7IF9p
c0NoYW5naW5nRm9jdXMsIGhhc0ZvY3VzZWRFbGVtZW50KF9mb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uKSB9OwogICAgIF9pbnB1dFZpZXdVcGRhdGVEZWZlcnJlciA9IG51bGxwdHI7CiAKICAgICBf
ZGlkQWNjZXNzb3J5VGFiSW5pdGlhdGVGb2N1cyA9IF9pc0NoYW5naW5nRm9jdXNVc2luZ0FjY2Vz
c29yeVRhYjsKIAogICAgIGlkIDxfV0tJbnB1dERlbGVnYXRlPiBpbnB1dERlbGVnYXRlID0gW193
ZWJWaWV3IF9pbnB1dERlbGVnYXRlXTsKLSAgICBSZXRhaW5QdHI8V0tGb2N1c2VkRWxlbWVudElu
Zm8+IGZvY3VzZWRFbGVtZW50SW5mbyA9IGFkb3B0TlMoW1tXS0ZvY3VzZWRFbGVtZW50SW5mbyBh
bGxvY10gaW5pdFdpdGhBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjppbmZvcm1hdGlvbiBpc1VzZXJJ
bml0aWF0ZWQ6dXNlcklzSW50ZXJhY3RpbmcgdXNlck9iamVjdDp1c2VyT2JqZWN0XSk7CisgICAg
UmV0YWluUHRyPFdLRm9jdXNlZEVsZW1lbnRJbmZvPiBmb2N1c2VkRWxlbWVudEluZm8gPSBhZG9w
dE5TKFtbV0tGb2N1c2VkRWxlbWVudEluZm8gYWxsb2NdIGluaXRXaXRoRm9jdXNlZEVsZW1lbnRJ
bmZvcm1hdGlvbjppbmZvcm1hdGlvbiBpc1VzZXJJbml0aWF0ZWQ6dXNlcklzSW50ZXJhY3Rpbmcg
dXNlck9iamVjdDp1c2VyT2JqZWN0XSk7CiAKICAgICBCT09MIHNob3VsZFNob3dLZXlib2FyZCA9
IE5POwogICAgIF9XS0ZvY3VzU3RhcnRzSW5wdXRTZXNzaW9uUG9saWN5IHN0YXJ0SW5wdXRTZXNz
aW9uUG9saWN5ID0gX1dLRm9jdXNTdGFydHNJbnB1dFNlc3Npb25Qb2xpY3lBdXRvOwpAQCAtNDUw
MSw3ICs0NTAxLDcgQEAgLSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlOihjb25zdCBXZWJLaXQ6
OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJilpbmZvcm1hdGlvbgogICAgIH0KIAogICAgIGlmIChi
bHVyUHJldmlvdXNOb2RlKQotICAgICAgICBbc2VsZiBfc3RvcEFzc2lzdGluZ05vZGVdOworICAg
ICAgICBbc2VsZiBfZWxlbWVudERpZEJsdXJdOwogCiAjaWYgSEFWRShQRU5DSUxLSVQpCiAgICAg
aWYgKGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpEcmF3aW5n
KQpAQCAtNDUxNCw5ICs0NTE0LDkgQEAgLSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlOihjb25z
dCBXZWJLaXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJilpbmZvcm1hdGlvbgogICAgIGlmICgh
aXNBc3Npc3RhYmxlSW5wdXRUeXBlKGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhpcyBjaGVjayB3aGVu
IHdlIG1hbmFnZSB0byBzZW5kIFN0YXJ0QXNzaXN0aW5nTm9kZSBmcm9tIHRoZSBXZWJQcm9jZXNz
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhpcyBjaGVjayB3aGVuIHdlIG1hbmFn
ZSB0byBzZW5kIEVsZW1lbnREaWRGb2N1cyBmcm9tIHRoZSBXZWJQcm9jZXNzCiAgICAgLy8gb25s
eSB3aGVuIGl0IGlzIHRydWx5IHRpbWUgdG8gc2hvdyB0aGUga2V5Ym9hcmQuCi0gICAgaWYgKF9h
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9PSBpbmZvcm1hdGlvbi5lbGVtZW50
VHlwZSAmJiBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFJlY3QgPT0gaW5mb3JtYXRp
b24uZWxlbWVudFJlY3QpCisgICAgaWYgKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1l
bnRUeXBlID09IGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlICYmIF9mb2N1c2VkRWxlbWVudEluZm9y
bWF0aW9uLmVsZW1lbnRSZWN0ID09IGluZm9ybWF0aW9uLmVsZW1lbnRSZWN0KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBbX3dlYlZpZXcgX3Jlc2V0Rm9jdXNQcmVzZXJ2YXRpb25Db3VudF07CkBA
IC00NTM3LDcgKzQ1MzcsNyBAQCAtICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU6KGNvbnN0IFdl
YktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mKWluZm9ybWF0aW9uCiAgICAgICAgIFtpbnB1
dERlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHdpbGxTdGFydElucHV0U2Vzc2lvbjpfZm9ybUlu
cHV0U2Vzc2lvbi5nZXQoKV07CiAKICAgICBCT09MIGVkaXRhYmxlQ2hhbmdlZCA9IFtzZWxmIHNl
dElzRWRpdGFibGU6WUVTXTsKLSAgICBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gPSBpbmZvcm1h
dGlvbjsKKyAgICBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiA9IGluZm9ybWF0aW9uOwogICAg
IF9pbnB1dFBlcmlwaGVyYWwgPSBuaWw7CiAgICAgX3RyYWl0cyA9IG5pbDsKIApAQCAtNDU0Nyw3
ICs0NTQ3LDcgQEAgLSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlOihjb25zdCBXZWJLaXQ6OkFz
c2lzdGVkTm9kZUluZm9ybWF0aW9uJilpbmZvcm1hdGlvbgogI2lmIFBMQVRGT1JNKFdBVENIT1Mp
CiAgICAgW3NlbGYgYWRkRm9jdXNlZEZvcm1Db250cm9sT3ZlcmxheV07CiAgICAgaWYgKCFfaXND
aGFuZ2luZ0ZvY3VzKQotICAgICAgICBbc2VsZiBwcmVzZW50Vmlld0NvbnRyb2xsZXJGb3JDdXJy
ZW50QXNzaXN0ZWROb2RlXTsKKyAgICAgICAgW3NlbGYgcHJlc2VudFZpZXdDb250cm9sbGVyRm9y
Q3VycmVudEZvY3VzZWRFbGVtZW50XTsKICNlbHNlCiAgICAgW3NlbGYgcmVsb2FkSW5wdXRWaWV3
c107CiAjZW5kaWYKQEAgLTQ1NjgsMTEgKzQ1NjgsMTEgQEAgLSAodm9pZClfc3RhcnRBc3Npc3Rp
bmdOb2RlOihjb25zdCBXZWJLaXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJilpbmZvcm1hdGlv
bgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgLy8gVGhlIGN1c3RvbSBmaXhlZCBw
b3NpdGlvbiByZWN0IGJlaGF2aW9yIGlzIGFmZmVjdGVkIGJ5IC1pc0Fzc2lzdGluZ05vZGUsIHNv
IGlmIHRoYXQgY2hhbmdlcyB3ZSBuZWVkIHRvIHJlY29tcHV0ZSByZWN0cy4KKyAgICAvLyBUaGUg
Y3VzdG9tIGZpeGVkIHBvc2l0aW9uIHJlY3QgYmVoYXZpb3IgaXMgYWZmZWN0ZWQgYnkgLWlzRm9j
dXNpbmdFbGVtZW50LCBzbyBpZiB0aGF0IGNoYW5nZXMgd2UgbmVlZCB0byByZWNvbXB1dGUgcmVj
dHMuCiAgICAgaWYgKGVkaXRhYmxlQ2hhbmdlZCkKICAgICAgICAgW193ZWJWaWV3IF9zY2hlZHVs
ZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07CiAgICAgCi0gICAgaWYgKCFzaG91bGRab29tVG9S
ZXZlYWxTZWxlY3Rpb25SZWN0KF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkp
CisgICAgaWYgKCFzaG91bGRab29tVG9SZXZlYWxTZWxlY3Rpb25SZWN0KF9mb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSkKICAgICAgICAgW3NlbGYgX3pvb21Ub1JldmVhbEZv
Y3VzZWRFbGVtZW50XTsKIAogICAgIFtzZWxmIF9lbnN1cmVGb3JtQWNjZXNzb3J5Vmlld107CkBA
IC00NTkyLDcgKzQ1OTIsNyBAQCAtICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU6KGNvbnN0IFdl
YktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mKWluZm9ybWF0aW9uCiAgICAgW193ZWJWaWV3
IGRpZFN0YXJ0Rm9ybUNvbnRyb2xJbnRlcmFjdGlvbl07CiB9CiAKLS0gKHZvaWQpX3N0b3BBc3Np
c3RpbmdOb2RlCistICh2b2lkKV9lbGVtZW50RGlkQmx1cgogewogICAgIFNldEZvclNjb3BlPEJP
T0w+IGlzQmx1cnJpbmdGb2N1c2VkTm9kZUZvclNjb3BlIHsgX2lzQmx1cnJpbmdGb2N1c2VkTm9k
ZSwgWUVTIH07CiAKQEAgLTQ2MTEsNyArNDYxMSw3IEBAIC0gKHZvaWQpX3N0b3BBc3Npc3RpbmdO
b2RlCiAKICAgICBCT09MIGVkaXRhYmxlQ2hhbmdlZCA9IFtzZWxmIHNldElzRWRpdGFibGU6Tk9d
OwogCi0gICAgX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gV2ViS2l0OjpJ
bnB1dFR5cGU6Ok5vbmU7CisgICAgX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5
cGUgPSBXZWJLaXQ6OklucHV0VHlwZTo6Tm9uZTsKICAgICBfaW5wdXRQZXJpcGhlcmFsID0gbmls
OwogICAgIF9mb2N1c1JlcXVpcmVzU3Ryb25nUGFzc3dvcmRBc3Npc3RhbmNlID0gTk87CiAKQEAg
LTQ2MjYsNyArNDYyNiw3IEBAIC0gKHZvaWQpX3N0b3BBc3Npc3RpbmdOb2RlCiAgICAgICAgIFtz
ZWxmIHJlbW92ZUZvY3VzZWRGb3JtQ29udHJvbE92ZXJsYXldOwogI2VuZGlmCiAKLSAgICAvLyBU
aGUgY3VzdG9tIGZpeGVkIHBvc2l0aW9uIHJlY3QgYmVoYXZpb3IgaXMgYWZmZWN0ZWQgYnkgLWlz
QXNzaXN0aW5nTm9kZSwgc28gaWYgdGhhdCBjaGFuZ2VzIHdlIG5lZWQgdG8gcmVjb21wdXRlIHJl
Y3RzLgorICAgIC8vIFRoZSBjdXN0b20gZml4ZWQgcG9zaXRpb24gcmVjdCBiZWhhdmlvciBpcyBh
ZmZlY3RlZCBieSAtaXNGb2N1c2luZ0VsZW1lbnQsIHNvIGlmIHRoYXQgY2hhbmdlcyB3ZSBuZWVk
IHRvIHJlY29tcHV0ZSByZWN0cy4KICAgICBpZiAoZWRpdGFibGVDaGFuZ2VkKQogICAgICAgICBb
X3dlYlZpZXcgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKIApAQCAtNDY0NCw3
ICs0NjQ0LDcgQEAgLSAodm9pZClfZGlkUmVjZWl2ZUVkaXRvclN0YXRlVXBkYXRlQWZ0ZXJGb2N1
cwogCiAgICAgLy8gRklYTUU6IElmIHRoZSBpbml0aWFsIHdyaXRpbmcgZGlyZWN0aW9uIGp1c3Qg
Y2hhbmdlZCwgd2Ugc2hvdWxkIHdhaXQgdW50aWwgd2UgZ2V0IHRoZSBuZXh0IHBvc3QtbGF5b3V0
IGVkaXRvciBzdGF0ZQogICAgIC8vIGJlZm9yZSB6b29taW5nIHRvIHJldmVhbCB0aGUgc2VsZWN0
aW9uIHJlY3QuCi0gICAgaWYgKHNob3VsZFpvb21Ub1JldmVhbFNlbGVjdGlvblJlY3QoX2Fzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSkKKyAgICBpZiAoc2hvdWxkWm9vbVRvUmV2
ZWFsU2VsZWN0aW9uUmVjdChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkp
CiAgICAgICAgIFtzZWxmIF96b29tVG9SZXZlYWxGb2N1c2VkRWxlbWVudF07CiB9CiAKQEAgLTQ2
NjUsMTggKzQ2NjUsMTggQEAgLSAodm9pZClfdXBkYXRlSW5pdGlhbFdyaXRpbmdEaXJlY3Rpb25J
Zk5lY2Vzc2FyeQogICAgIFtrZXlib2FyZCBzZXRJbml0aWFsRGlyZWN0aW9uXTsKIH0KIAotLSAo
dm9pZCl1cGRhdGVDdXJyZW50QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246KEZ1bmN0aW9uPHZvaWQo
Ym9vbCBkaWRVcGRhdGUpPiYmKWNhbGxiYWNrCistICh2b2lkKXVwZGF0ZUN1cnJlbnRGb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uOihGdW5jdGlvbjx2b2lkKGJvb2wgZGlkVXBkYXRlKT4mJiljYWxs
YmFjawogewogICAgIFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+IHdlYWtTZWxmIHsgc2VsZiB9
OwotICAgIGF1dG8gaWRlbnRpZmllckJlZm9yZVVwZGF0ZSA9IF9hc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbi5hc3Npc3RlZE5vZGVJZGVudGlmaWVyOwotICAgIF9wYWdlLT5yZXF1ZXN0QXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24oW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGlkZW50aWZpZXJC
ZWZvcmVVcGRhdGUsIHdlYWtTZWxmXSAoYXV0byYgaW5mbywgYXV0byBlcnJvcikgewotICAgICAg
ICBpZiAoIXdlYWtTZWxmIHx8IGVycm9yICE9IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6
Tm9uZSB8fCBpbmZvLmFzc2lzdGVkTm9kZUlkZW50aWZpZXIgIT0gaWRlbnRpZmllckJlZm9yZVVw
ZGF0ZSkgeworICAgIGF1dG8gaWRlbnRpZmllckJlZm9yZVVwZGF0ZSA9IF9mb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uLmZvY3VzZWRFbGVtZW50SWRlbnRpZmllcjsKKyAgICBfcGFnZS0+cmVxdWVz
dEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24oW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IGlkZW50aWZpZXJCZWZvcmVVcGRhdGUsIHdlYWtTZWxmXSAoYXV0byYgaW5mbywgYXV0byBlcnJv
cikgeworICAgICAgICBpZiAoIXdlYWtTZWxmIHx8IGVycm9yICE9IFdlYktpdDo6Q2FsbGJhY2tC
YXNlOjpFcnJvcjo6Tm9uZSB8fCBpbmZvLmZvY3VzZWRFbGVtZW50SWRlbnRpZmllciAhPSBpZGVu
dGlmaWVyQmVmb3JlVXBkYXRlKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgYXNzaXN0ZWQgbm9k
ZSBtYXkgaGF2ZSBjaGFuZ2VkIGluIHRoZSBtZWFudGltZSwgZG9uJ3Qgb3ZlcndyaXRlIGFzc2lz
dGVkIG5vZGUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB3ZWFrU2VsZi5nZXQoKS0+X2Fz
c2lzdGVkTm9kZUluZm9ybWF0aW9uID0gaW5mbzsKKyAgICAgICAgd2Vha1NlbGYuZ2V0KCktPl9m
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uID0gaW5mbzsKICAgICAgICAgY2FsbGJhY2sodHJ1ZSk7
CiAgICAgfSk7CiB9CkBAIC00NzE3LDcgKzQ3MTcsNyBAQCAtICh2b2lkKXJlbW92ZUZvY3VzZWRG
b3JtQ29udHJvbE92ZXJsYXkKICAgICBbc2VsZiBzZXRJbnB1dERlbGVnYXRlOm5pbF07CiB9CiAK
LS0gKHZvaWQpcHJlc2VudFZpZXdDb250cm9sbGVyRm9yQ3VycmVudEFzc2lzdGVkTm9kZQorLSAo
dm9pZClwcmVzZW50Vmlld0NvbnRyb2xsZXJGb3JDdXJyZW50Rm9jdXNlZEVsZW1lbnQKIHsKICAg
ICBbc2VsZiBkaXNtaXNzQWxsSW5wdXRWaWV3Q29udHJvbGxlcnM6Tk9dOwogCkBAIC00NzI4LDcg
KzQ3MjgsNyBAQCAtICh2b2lkKXByZXNlbnRWaWV3Q29udHJvbGxlckZvckN1cnJlbnRBc3Npc3Rl
ZE5vZGUKIAogICAgIEJPT0wgcHJlZmVyc01vZGFsUHJlc2VudGF0aW9uID0gTk87CiAKLSAgICBz
d2l0Y2ggKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkgeworICAgIHN3aXRj
aCAoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUpIHsKICAgICBjYXNlIFdl
YktpdDo6SW5wdXRUeXBlOjpTZWxlY3Q6CiAgICAgICAgIF9wcmVzZW50ZWRGdWxsU2NyZWVuSW5w
dXRWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS1NlbGVjdE1lbnVMaXN0Vmlld0NvbnRyb2xs
ZXIgYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6c2VsZl0pOwogICAgICAgICBicmVhazsKQEAgLTQ4
MDgsNDUgKzQ4MDgsNDUgQEAgLSAodm9pZClkaXNtaXNzQWxsSW5wdXRWaWV3Q29udHJvbGxlcnM6
KEJPT0wpYW5pbWF0ZWQKIC0gKHZvaWQpZm9jdXNlZEZvcm1Db250cm9sVmlld0RpZFN1Ym1pdDoo
V0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3ICopdmlldwogewogICAgIFtzZWxmIGluc2VydFRleHQ6
QCJcbiJdOwotICAgIF9wYWdlLT5ibHVyQXNzaXN0ZWROb2RlKCk7CisgICAgX3BhZ2UtPmJsdXJG
b2N1c2VkRWxlbWVudCgpOwogfQogCiAtICh2b2lkKWZvY3VzZWRGb3JtQ29udHJvbFZpZXdEaWRD
YW5jZWw6KFdLRm9jdXNlZEZvcm1Db250cm9sVmlldyAqKXZpZXcKIHsKLSAgICBfcGFnZS0+Ymx1
ckFzc2lzdGVkTm9kZSgpOworICAgIF9wYWdlLT5ibHVyRm9jdXNlZEVsZW1lbnQoKTsKIH0KIAog
LSAodm9pZClmb2N1c2VkRm9ybUNvbnRyb2xWaWV3RGlkQmVnaW5FZGl0aW5nOihXS0ZvY3VzZWRG
b3JtQ29udHJvbFZpZXcgKil2aWV3CiB7Ci0gICAgW3NlbGYgdXBkYXRlQ3VycmVudEFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uOlt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KHNl
bGYpXSAoYm9vbCBkaWRVcGRhdGUpIHsKKyAgICBbc2VsZiB1cGRhdGVDdXJyZW50Rm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbjpbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3Pihz
ZWxmKV0gKGJvb2wgZGlkVXBkYXRlKSB7CiAgICAgICAgIGlmICghZGlkVXBkYXRlKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgp
OwotICAgICAgICBbc3Ryb25nU2VsZiBwcmVzZW50Vmlld0NvbnRyb2xsZXJGb3JDdXJyZW50QXNz
aXN0ZWROb2RlXTsKKyAgICAgICAgW3N0cm9uZ1NlbGYgcHJlc2VudFZpZXdDb250cm9sbGVyRm9y
Q3VycmVudEZvY3VzZWRFbGVtZW50XTsKICAgICAgICAgW3N0cm9uZ1NlbGYtPl9mb2N1c2VkRm9y
bUNvbnRyb2xWaWV3IGhpZGU6WUVTXTsKICAgICB9XTsKIH0KIAogLSAoQ0dSZWN0KXJlY3RGb3JG
b2N1c2VkRm9ybUNvbnRyb2xWaWV3OihXS0ZvY3VzZWRGb3JtQ29udHJvbFZpZXcgKil2aWV3CiB7
Ci0gICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0Ol9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5l
bGVtZW50UmVjdCB0b1ZpZXc6dmlld107CisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0Ol9m
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRSZWN0IHRvVmlldzp2aWV3XTsKIH0KIAog
LSAoQ0dSZWN0KW5leHRSZWN0Rm9yRm9jdXNlZEZvcm1Db250cm9sVmlldzooV0tGb2N1c2VkRm9y
bUNvbnRyb2xWaWV3ICopdmlldwogewotICAgIGlmICghX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9u
Lmhhc05leHROb2RlKQorICAgIGlmICghX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaGFzTmV4
dE5vZGUpCiAgICAgICAgIHJldHVybiBDR1JlY3ROdWxsOwogCi0gICAgcmV0dXJuIFtzZWxmIGNv
bnZlcnRSZWN0Ol9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5uZXh0Tm9kZVJlY3QgdG9WaWV3OnZp
ZXddOworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDpfZm9jdXNlZEVsZW1lbnRJbmZvcm1h
dGlvbi5uZXh0Tm9kZVJlY3QgdG9WaWV3OnZpZXddOwogfQogCiAtIChDR1JlY3QpcHJldmlvdXNS
ZWN0Rm9yRm9jdXNlZEZvcm1Db250cm9sVmlldzooV0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3ICop
dmlldwogewotICAgIGlmICghX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmhhc1ByZXZpb3VzTm9k
ZSkKKyAgICBpZiAoIV9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmhhc1ByZXZpb3VzTm9kZSkK
ICAgICAgICAgcmV0dXJuIENHUmVjdE51bGw7CiAKLSAgICByZXR1cm4gW3NlbGYgY29udmVydFJl
Y3Q6X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnByZXZpb3VzTm9kZVJlY3QgdG9WaWV3OnZpZXdd
OworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDpfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlv
bi5wcmV2aW91c05vZGVSZWN0IHRvVmlldzp2aWV3XTsKIH0KIAogLSAoVUlTY3JvbGxWaWV3ICop
c2Nyb2xsVmlld0ZvckZvY3VzZWRGb3JtQ29udHJvbFZpZXc6KFdLRm9jdXNlZEZvcm1Db250cm9s
VmlldyAqKXZpZXcKQEAgLTQ4NTYsMTAgKzQ4NTYsMTAgQEAgLSAoVUlTY3JvbGxWaWV3ICopc2Ny
b2xsVmlld0ZvckZvY3VzZWRGb3JtQ29udHJvbFZpZXc6KFdLRm9jdXNlZEZvcm1Db250cm9sVmll
dwogCiAtIChOU1N0cmluZyAqKWFjdGlvbk5hbWVGb3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3OihX
S0ZvY3VzZWRGb3JtQ29udHJvbFZpZXcgKil2aWV3CiB7Ci0gICAgaWYgKF9hc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbi5mb3JtQWN0aW9uLmlzRW1wdHkoKSkKKyAgICBpZiAoX2ZvY3VzZWRFbGVtZW50
SW5mb3JtYXRpb24uZm9ybUFjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICBzd2l0Y2ggKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSkgeworICAg
IHN3aXRjaCAoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVudFR5cGUpIHsKICAgICBj
YXNlIFdlYktpdDo6SW5wdXRUeXBlOjpTZWxlY3Q6CiAgICAgY2FzZSBXZWJLaXQ6OklucHV0VHlw
ZTo6VGltZToKICAgICBjYXNlIFdlYktpdDo6SW5wdXRUeXBlOjpEYXRlOgpAQCAtNDg3NiwyNCAr
NDg3NiwyNCBAQCAtIChOU1N0cmluZyAqKWFjdGlvbk5hbWVGb3JGb2N1c2VkRm9ybUNvbnRyb2xW
aWV3OihXS0ZvY3VzZWRGb3JtQ29udHJvbFZpZXcgKil2aQogCiAtICh2b2lkKWZvY3VzZWRGb3Jt
Q29udHJvbFZpZXdEaWRSZXF1ZXN0TmV4dE5vZGU6KFdLRm9jdXNlZEZvcm1Db250cm9sVmlldyAq
KXZpZXcKIHsKLSAgICBpZiAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmhhc05leHROb2RlKQot
ICAgICAgICBfcGFnZS0+Zm9jdXNOZXh0QXNzaXN0ZWROb2RlKHRydWUpOworICAgIGlmIChfZm9j
dXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oYXNOZXh0Tm9kZSkKKyAgICAgICAgX3BhZ2UtPmZvY3Vz
TmV4dEZvY3VzZWRFbGVtZW50KHRydWUpOwogfQogCiAtICh2b2lkKWZvY3VzZWRGb3JtQ29udHJv
bFZpZXdEaWRSZXF1ZXN0UHJldmlvdXNOb2RlOihXS0ZvY3VzZWRGb3JtQ29udHJvbFZpZXcgKil2
aWV3CiB7Ci0gICAgaWYgKF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oYXNQcmV2aW91c05vZGUp
Ci0gICAgICAgIF9wYWdlLT5mb2N1c05leHRBc3Npc3RlZE5vZGUoZmFsc2UpOworICAgIGlmIChf
Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oYXNQcmV2aW91c05vZGUpCisgICAgICAgIF9wYWdl
LT5mb2N1c05leHRGb2N1c2VkRWxlbWVudChmYWxzZSk7CiB9CiAKIC0gKEJPT0wpaGFzTmV4dE5v
ZGVGb3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3OihXS0ZvY3VzZWRGb3JtQ29udHJvbFZpZXcgKil2
aWV3CiB7Ci0gICAgcmV0dXJuIF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oYXNOZXh0Tm9kZTsK
KyAgICByZXR1cm4gX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaGFzTmV4dE5vZGU7CiB9CiAK
IC0gKEJPT0wpaGFzUHJldmlvdXNOb2RlRm9yRm9jdXNlZEZvcm1Db250cm9sVmlldzooV0tGb2N1
c2VkRm9ybUNvbnRyb2xWaWV3ICopdmlldwogewotICAgIHJldHVybiBfYXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uaGFzUHJldmlvdXNOb2RlOworICAgIHJldHVybiBfZm9jdXNlZEVsZW1lbnRJbmZv
cm1hdGlvbi5oYXNQcmV2aW91c05vZGU7CiB9CiAKIC0gKHZvaWQpZm9jdXNlZEZvcm1Db250cm9s
bGVyRGlkVXBkYXRlU3VnZ2VzdGlvbnM6KFdLRm9jdXNlZEZvcm1Db250cm9sVmlldyAqKXZpZXcK
QEAgLTQ5MDgsMTggKzQ5MDgsMTggQEAgLSAodm9pZClmb2N1c2VkRm9ybUNvbnRyb2xsZXJEaWRV
cGRhdGVTdWdnZXN0aW9uczooV0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3ICopdmkKIAogLSAodm9p
ZClzZWxlY3RNZW51OihXS1NlbGVjdE1lbnVMaXN0Vmlld0NvbnRyb2xsZXIgKilzZWxlY3RNZW51
IGRpZFNlbGVjdEl0ZW1BdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4CiB7Ci0gICAgQVNTRVJUKCFf
YXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdCk7Ci0gICAgX3BhZ2UtPnNldEFz
c2lzdGVkTm9kZVNlbGVjdGVkSW5kZXgoaW5kZXgsIGZhbHNlKTsKKyAgICBBU1NFUlQoIV9mb2N1
c2VkRWxlbWVudEluZm9ybWF0aW9uLmlzTXVsdGlTZWxlY3QpOworICAgIF9wYWdlLT5zZXRGb2N1
c2VkRWxlbWVudFNlbGVjdGVkSW5kZXgoaW5kZXgsIGZhbHNlKTsKIH0KIAogLSAoTlNVSW50ZWdl
ciludW1iZXJPZkl0ZW1zSW5TZWxlY3RNZW51OihXS1NlbGVjdE1lbnVMaXN0Vmlld0NvbnRyb2xs
ZXIgKilzZWxlY3RNZW51CiB7Ci0gICAgcmV0dXJuIHNlbGYuYXNzaXN0ZWROb2RlU2VsZWN0T3B0
aW9ucy5zaXplKCk7CisgICAgcmV0dXJuIHNlbGYuZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25z
LnNpemUoKTsKIH0KIAogLSAoTlNTdHJpbmcgKilzZWxlY3RNZW51OihXS1NlbGVjdE1lbnVMaXN0
Vmlld0NvbnRyb2xsZXIgKilzZWxlY3RNZW51IGRpc3BsYXlUZXh0Rm9ySXRlbUF0SW5kZXg6KE5T
VUludGVnZXIpaW5kZXgKIHsKLSAgICBhdXRvJiBvcHRpb25zID0gc2VsZi5hc3Npc3RlZE5vZGVT
ZWxlY3RPcHRpb25zOworICAgIGF1dG8mIG9wdGlvbnMgPSBzZWxmLmZvY3VzZWRTZWxlY3RFbGVt
ZW50T3B0aW9uczsKICAgICBpZiAoaW5kZXggPj0gb3B0aW9ucy5zaXplKCkpIHsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBAIiI7CkBAIC00OTMwLDM1ICs0
OTMwLDM1IEBAIC0gKE5TU3RyaW5nICopc2VsZWN0TWVudTooV0tTZWxlY3RNZW51TGlzdFZpZXdD
b250cm9sbGVyICopc2VsZWN0TWVudSBkaXNwbGF5VGV4CiAKIC0gKHZvaWQpc2VsZWN0TWVudToo
V0tTZWxlY3RNZW51TGlzdFZpZXdDb250cm9sbGVyICopc2VsZWN0TWVudSBkaWRDaGVja0l0ZW1B
dEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IGNoZWNrZWQ6KEJPT0wpY2hlY2tlZAogewotICAgIEFT
U0VSVChfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdCk7Ci0gICAgaWYgKGlu
ZGV4ID49IHNlbGYuYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9ucy5zaXplKCkpIHsKKyAgICBBU1NF
UlQoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdCk7CisgICAgaWYgKGlu
ZGV4ID49IHNlbGYuZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zLnNpemUoKSkgewogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8mIG9wdGlvbiA9IHNlbGYuYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc1tpbmRleF07CisgICAg
YXV0byYgb3B0aW9uID0gc2VsZi5mb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNbaW5kZXhdOwog
ICAgIGlmIChvcHRpb24uaXNTZWxlY3RlZCA9PSBjaGVja2VkKSB7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgX3BhZ2UtPnNldEFz
c2lzdGVkTm9kZVNlbGVjdGVkSW5kZXgoaW5kZXgsIHRydWUpOworICAgIF9wYWdlLT5zZXRGb2N1
c2VkRWxlbWVudFNlbGVjdGVkSW5kZXgoaW5kZXgsIHRydWUpOwogICAgIG9wdGlvbi5pc1NlbGVj
dGVkID0gY2hlY2tlZDsKIH0KIAogLSAoQk9PTClzZWxlY3RNZW51VXNlc011bHRpcGxlU2VsZWN0
aW9uOihXS1NlbGVjdE1lbnVMaXN0Vmlld0NvbnRyb2xsZXIgKilzZWxlY3RNZW51CiB7Ci0gICAg
cmV0dXJuIF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5pc011bHRpU2VsZWN0OworICAgIHJldHVy
biBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5pc011bHRpU2VsZWN0OwogfQogCiAtIChCT09M
KXNlbGVjdE1lbnU6KFdLU2VsZWN0TWVudUxpc3RWaWV3Q29udHJvbGxlciAqKXNlbGVjdE1lbnUg
aGFzU2VsZWN0ZWRPcHRpb25BdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4CiB7Ci0gICAgaWYgKGlu
ZGV4ID49IHNlbGYuYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9ucy5zaXplKCkpIHsKKyAgICBpZiAo
aW5kZXggPj0gc2VsZi5mb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnMuc2l6ZSgpKSB7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gTk87CiAgICAgfQogCi0g
ICAgcmV0dXJuIHNlbGYuYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc1tpbmRleF0uaXNTZWxlY3Rl
ZDsKKyAgICByZXR1cm4gc2VsZi5mb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNbaW5kZXhdLmlz
U2VsZWN0ZWQ7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShXQVRDSE9TKQpAQCAtNTAwMCw3ICs1
MDAwLDcgQEAgLSAodm9pZClfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbjooQk9PTClmb3JjZQogICAg
ICAgICByZXR1cm47CiAKICAgICBhdXRvJiBwb3N0TGF5b3V0RGF0YSA9IHN0YXRlLnBvc3RMYXlv
dXREYXRhKCk7Ci0gICAgaWYgKGhhc0Fzc2lzdGVkTm9kZShfYXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24pKSB7CisgICAgaWYgKGhhc0ZvY3VzZWRFbGVtZW50KF9mb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uKSkgewogICAgICAgICBpZiAocG9zdExheW91dERhdGEuZWxlbWVudElzVHJhbnNwYXJlbnQp
CiAgICAgICAgICAgICBbc2VsZiBfYmVnaW5TdXBwcmVzc2luZ1NlbGVjdGlvbkFzc2lzdGFudEZv
clJlYXNvbjpXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SXNUcmFuc3BhcmVudF07CiAgICAgICAgIGVs
c2UKQEAgLTU3NDQsMTQgKzU3NDQsMTQgQEAgLSAoTlNBcnJheTxVSURyYWdJdGVtICo+ICopX2l0
ZW1zRm9yQmVnaW5uaW5nT3JBZGRpbmdUb1Nlc3Npb25XaXRoUmVnaXN0cmF0aW9uTGkKIAogLSAo
TlNEaWN0aW9uYXJ5ICopX2F1dG9maWxsQ29udGV4dAogewotICAgIEJPT0wgcHJvdmlkZVN0cm9u
Z1Bhc3N3b3JkQXNzaXN0YW5jZSA9IF9mb2N1c1JlcXVpcmVzU3Ryb25nUGFzc3dvcmRBc3Npc3Rh
bmNlICYmIF9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9PSBXZWJLaXQ6Oklu
cHV0VHlwZTo6UGFzc3dvcmQ7Ci0gICAgaWYgKCFoYXNBc3Npc3RlZE5vZGUoX2Fzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uKSB8fCAoIV9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5hY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHMgJiYgIXByb3ZpZGVTdHJvbmdQYXNzd29yZEFzc2lzdGFuY2Up
KQorICAgIEJPT0wgcHJvdmlkZVN0cm9uZ1Bhc3N3b3JkQXNzaXN0YW5jZSA9IF9mb2N1c1JlcXVp
cmVzU3Ryb25nUGFzc3dvcmRBc3Npc3RhbmNlICYmIF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
LmVsZW1lbnRUeXBlID09IFdlYktpdDo6SW5wdXRUeXBlOjpQYXNzd29yZDsKKyAgICBpZiAoIWhh
c0ZvY3VzZWRFbGVtZW50KF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKSB8fCAoIV9mb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyAmJiAh
cHJvdmlkZVN0cm9uZ1Bhc3N3b3JkQXNzaXN0YW5jZSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
ICAgICBpZiAocHJvdmlkZVN0cm9uZ1Bhc3N3b3JkQXNzaXN0YW5jZSkKICAgICAgICAgcmV0dXJu
IEB7IEAiX2F1dG9tYXRpY1Bhc3N3b3JkS2V5Ym9hcmQiIDogQFlFUyB9OwogCi0gICAgTlNVUkwg
KnBsYXRmb3JtVVJMID0gX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnJlcHJlc2VudGluZ1BhZ2VV
Ukw7CisgICAgTlNVUkwgKnBsYXRmb3JtVVJMID0gX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24u
cmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBpZiAocGxhdGZvcm1VUkwpCiAgICAgICAgIHJldHVy
biBAeyBAIl9XZWJWaWV3VVJMIiA6IHBsYXRmb3JtVVJMIH07CiAKQEAgLTYwOTQsMTIgKzYwOTQs
MTIgQEAgLSAodm9pZClkaXNtaXNzUXVpY2tib2FyZFZpZXdDb250cm9sbGVyQW5kUmV2ZWFsRm9j
dXNlZEZvcm1PdmVybGF5SWZOZWNlc3Nhcnk6KFAKICAgICBCT09MIHNob3VsZFJldmVhbEZvY3Vz
T3ZlcmxheSA9IE5POwogICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoZXJlJ3Mgbm90aGluZyB0
aGUgdXNlciBjb3VsZCBwb3RlbnRpYWxseSBkbyBiZXNpZGVzIGRpc21pc3MgdGhlIG92ZXJsYXks
IHdlIGNhbiBqdXN0IGF1dG9tYXRpY2FsbHkgd2l0aG91dCBhc2tpbmcgdGhlIGRlbGVnYXRlLgog
ICAgIGlmIChbX3dlYlZpZXcuX2lucHV0RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihfd2ViVmlldzpzaG91bGRSZXZlYWxGb2N1c092ZXJsYXlGb3JJbnB1dFNlc3Npb246KV0K
LSAgICAgICAgJiYgKFtzZWxmIGFjdGlvbk5hbWVGb3JGb2N1c2VkRm9ybUNvbnRyb2xWaWV3Ol9m
b2N1c2VkRm9ybUNvbnRyb2xWaWV3LmdldCgpXSB8fCBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
aGFzTmV4dE5vZGUgfHwgX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmhhc1ByZXZpb3VzTm9kZSkp
CisgICAgICAgICYmIChbc2VsZiBhY3Rpb25OYW1lRm9yRm9jdXNlZEZvcm1Db250cm9sVmlldzpf
Zm9jdXNlZEZvcm1Db250cm9sVmlldy5nZXQoKV0gfHwgX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRp
b24uaGFzTmV4dE5vZGUgfHwgX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaGFzUHJldmlvdXNO
b2RlKSkKICAgICAgICAgc2hvdWxkUmV2ZWFsRm9jdXNPdmVybGF5ID0gW193ZWJWaWV3Ll9pbnB1
dERlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHNob3VsZFJldmVhbEZvY3VzT3ZlcmxheUZvcklu
cHV0U2Vzc2lvbjpfZm9ybUlucHV0U2Vzc2lvbi5nZXQoKV07CiAKICAgICBpZiAoc2hvdWxkUmV2
ZWFsRm9jdXNPdmVybGF5KSB7CiAgICAgICAgIFtfZm9jdXNlZEZvcm1Db250cm9sVmlldyBzaG93
Ok5PXTsKLSAgICAgICAgW3NlbGYgdXBkYXRlQ3VycmVudEFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
Olt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KHNlbGYpXSAoYm9vbCBkaWRV
cGRhdGUpIHsKKyAgICAgICAgW3NlbGYgdXBkYXRlQ3VycmVudEZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb246W3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4oc2VsZildIChib29s
IGRpZFVwZGF0ZSkgewogICAgICAgICAgICAgaWYgKCFkaWRVcGRhdGUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCkBAIC02MTA4LDcgKzYxMDgsNyBAQCAtICh2b2lkKWRpc21pc3NRdWlja2Jv
YXJkVmlld0NvbnRyb2xsZXJBbmRSZXZlYWxGb2N1c2VkRm9ybU92ZXJsYXlJZk5lY2Vzc2FyeToo
UAogICAgICAgICAgICAgW2ZvY3VzZWRGb3JtQ29udHJvbGxlciBlbmdhZ2VGb2N1c2VkRm9ybUNv
bnRyb2xOYXZpZ2F0aW9uXTsKICAgICAgICAgfV07CiAgICAgfSBlbHNlCi0gICAgICAgIF9wYWdl
LT5ibHVyQXNzaXN0ZWROb2RlKCk7CisgICAgICAgIF9wYWdlLT5ibHVyRm9jdXNlZEVsZW1lbnQo
KTsKIAogICAgIC8vIFRoZSBRdWlja2JvYXJkIHZpZXcgY29udHJvbGxlciBwYXNzZWQgaW50byB0
aGlzIGRlbGVnYXRlIG1ldGhvZCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHZpZXcgY29udHJvbGxl
ciB3ZSBvcmlnaW5hbGx5IHByZXNlbnRlZDsKICAgICAvLyB0aGlzIGhhcHBlbnMgaW4gdGhlIGNh
c2Ugd2hlbiB0aGUgdXNlciBjaG9vc2VzIGFuIGlucHV0IG1ldGhvZCAoZS5nLiBzY3JpYmJsZSkg
YW5kIGEgbmV3IFF1aWNrYm9hcmQgdmlldyBjb250cm9sbGVyIGlzIHByZXNlbnRlZC4KQEAgLTYx
NDYsNyArNjE0Niw3IEBAIC0gKENHRmxvYXQpdmlld0NvbnRyb2xsZXI6KFBVSUNRdWlja2JvYXJk
Vmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyIGlucHV0Q29udGV4CiAKIC0gKEJPT0wpYWxsb3dz
TGFuZ3VhZ2VTZWxlY3Rpb25NZW51Rm9yTGlzdFZpZXdDb250cm9sbGVyOihQVUlDUXVpY2tib2Fy
ZFZpZXdDb250cm9sbGVyICopY29udHJvbGxlcgogewotICAgIHN3aXRjaCAoX2Fzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSB7CisgICAgc3dpdGNoIChfZm9jdXNlZEVsZW1lbnRJ
bmZvcm1hdGlvbi5lbGVtZW50VHlwZSkgewogICAgIGNhc2UgV2ViS2l0OjpJbnB1dFR5cGU6OkNv
bnRlbnRFZGl0YWJsZToKICAgICBjYXNlIFdlYktpdDo6SW5wdXRUeXBlOjpUZXh0OgogICAgIGNh
c2UgV2ViS2l0OjpJbnB1dFR5cGU6OlRleHRBcmVhOgpAQCAtNjE3MCwyNiArNjE3MCwyNiBAQCAt
IChVSVZpZXcgKilpbnB1dENvbnRleHRWaWV3Rm9yVmlld0NvbnRyb2xsZXI6KFBVSUNRdWlja2Jv
YXJkVmlld0NvbnRyb2xsZXIgKiljbwogCiAtIChOU1N0cmluZyAqKWlucHV0TGFiZWxUZXh0Rm9y
Vmlld0NvbnRyb2xsZXI6KFBVSUNRdWlja2JvYXJkVmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVy
CiB7Ci0gICAgaWYgKCFfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24ubGFiZWwuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmxhYmVsOworICAgIGlmICgh
X2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24ubGFiZWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24ubGFiZWw7CiAKLSAgICBpZiAoIV9hc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbi5hcmlhTGFiZWwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gX2Fz
c2lzdGVkTm9kZUluZm9ybWF0aW9uLmFyaWFMYWJlbDsKKyAgICBpZiAoIV9mb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uLmFyaWFMYWJlbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBfZm9jdXNl
ZEVsZW1lbnRJbmZvcm1hdGlvbi5hcmlhTGFiZWw7CiAKLSAgICBpZiAoIV9hc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbi50aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBfYXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24udGl0bGU7CisgICAgaWYgKCFfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi50
aXRsZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlv
bi50aXRsZTsKIAotICAgIHJldHVybiBfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24ucGxhY2Vob2xk
ZXI7CisgICAgcmV0dXJuIF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLnBsYWNlaG9sZGVyOwog
fQogCiAtIChOU1N0cmluZyAqKWluaXRpYWxWYWx1ZUZvclZpZXdDb250cm9sbGVyOihQVUlDUXVp
Y2tib2FyZFZpZXdDb250cm9sbGVyICopY29udHJvbGxlcgogewotICAgIHJldHVybiBfYXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24udmFsdWU7CisgICAgcmV0dXJuIF9mb2N1c2VkRWxlbWVudEluZm9y
bWF0aW9uLnZhbHVlOwogfQogCiAtIChCT09MKXNob3VsZERpc3BsYXlJbnB1dENvbnRleHRWaWV3
Rm9yTGlzdFZpZXdDb250cm9sbGVyOihQVUlDUXVpY2tib2FyZFZpZXdDb250cm9sbGVyICopY29u
dHJvbGxlcgogewotICAgIHN3aXRjaCAoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRU
eXBlKSB7CisgICAgc3dpdGNoIChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50VHlw
ZSkgewogICAgIGNhc2UgV2ViS2l0OjpJbnB1dFR5cGU6OkNvbnRlbnRFZGl0YWJsZToKICAgICBj
YXNlIFdlYktpdDo6SW5wdXRUeXBlOjpUZXh0OgogICAgIGNhc2UgV2ViS2l0OjpJbnB1dFR5cGU6
OlBhc3N3b3JkOgpAQCAtNjIwOCw3ICs2MjA4LDcgQEAgLSAoQk9PTClzaG91bGREaXNwbGF5SW5w
dXRDb250ZXh0Vmlld0Zvckxpc3RWaWV3Q29udHJvbGxlcjooUFVJQ1F1aWNrYm9hcmRWaWV3Q28K
IAogLSAoV0tOdW1iZXJQYWRJbnB1dE1vZGUpbnVtZXJpY0lucHV0TW9kZUZvckxpc3RWaWV3Q29u
dHJvbGxlcjooV0tUZXh0SW5wdXRMaXN0Vmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyCiB7Ci0g
ICAgc3dpdGNoIChfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFR5cGUpIHsKKyAgICBz
d2l0Y2ggKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRUeXBlKSB7CiAgICAgY2Fz
ZSBXZWJLaXQ6OklucHV0VHlwZTo6UGhvbmU6CiAgICAgICAgIHJldHVybiBXS051bWJlclBhZElu
cHV0TW9kZVRlbGVwaG9uZTsKICAgICBjYXNlIFdlYktpdDo6SW5wdXRUeXBlOjpOdW1iZXI6CkBA
IC02MjIyLDcgKzYyMjIsNyBAQCAtIChXS051bWJlclBhZElucHV0TW9kZSludW1lcmljSW5wdXRN
b2RlRm9yTGlzdFZpZXdDb250cm9sbGVyOihXS1RleHRJbnB1dExpc3RWaQogCiAtIChOU1N0cmlu
ZyAqKXRleHRDb250ZW50VHlwZUZvckxpc3RWaWV3Q29udHJvbGxlcjooV0tUZXh0SW5wdXRMaXN0
Vmlld0NvbnRyb2xsZXIgKiljb250cm9sbGVyCiB7Ci0gICAgc3dpdGNoIChfYXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24uZWxlbWVudFR5cGUpIHsKKyAgICBzd2l0Y2ggKF9mb2N1c2VkRWxlbWVudElu
Zm9ybWF0aW9uLmVsZW1lbnRUeXBlKSB7CiAgICAgY2FzZSBXZWJLaXQ6OklucHV0VHlwZTo6UGFz
c3dvcmQ6CiAgICAgICAgIHJldHVybiBVSVRleHRDb250ZW50VHlwZVBhc3N3b3JkOwogICAgIGNh
c2UgV2ViS2l0OjpJbnB1dFR5cGU6OlVSTDoKQEAgLTYyMzMsMTAgKzYyMzMsMTAgQEAgLSAoTlNT
dHJpbmcgKil0ZXh0Q29udGVudFR5cGVGb3JMaXN0Vmlld0NvbnRyb2xsZXI6KFdLVGV4dElucHV0
TGlzdFZpZXdDb250cm9sbGUKICAgICAgICAgcmV0dXJuIFVJVGV4dENvbnRlbnRUeXBlVGVsZXBo
b25lTnVtYmVyOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFRoZSBlbGVtZW50IHR5cGUgYWxv
bmUgaXMgaW5zdWZmaWNpZW50IHRvIGluZmVyIGNvbnRlbnQgdHlwZTsgZmFsbCBiYWNrIHRvIGF1
dG9maWxsIGRhdGEuCi0gICAgICAgIGlmIChOU1N0cmluZyAqY29udGVudFR5cGUgPSBjb250ZW50
VHlwZUZyb21GaWVsZE5hbWUoX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmF1dG9maWxsRmllbGRO
YW1lKSkKKyAgICAgICAgaWYgKE5TU3RyaW5nICpjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlRnJv
bUZpZWxkTmFtZShfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5hdXRvZmlsbEZpZWxkTmFtZSkp
CiAgICAgICAgICAgICByZXR1cm4gY29udGVudFR5cGU7CiAKLSAgICAgICAgaWYgKF9hc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbi5pc0F1dG9maWxsYWJsZVVzZXJuYW1lRmllbGQpCisgICAgICAgIGlm
IChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5pc0F1dG9maWxsYWJsZVVzZXJuYW1lRmllbGQp
CiAgICAgICAgICAgICByZXR1cm4gVUlUZXh0Q29udGVudFR5cGVVc2VybmFtZTsKIAogICAgICAg
ICByZXR1cm4gbmlsOwpAQCAtNjI1Niw3ICs2MjU2LDcgQEAgLSAodm9pZClsaXN0Vmlld0NvbnRy
b2xsZXI6KFdLVGV4dElucHV0TGlzdFZpZXdDb250cm9sbGVyICopY29udHJvbGxlciBkaWRTZWxl
Y3QKIAogLSAoQk9PTClhbGxvd3NEaWN0YXRpb25JbnB1dEZvckxpc3RWaWV3Q29udHJvbGxlcjoo
UFVJQ1F1aWNrYm9hcmRWaWV3Q29udHJvbGxlciAqKWNvbnRyb2xsZXIKIHsKLSAgICByZXR1cm4g
X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1lbnRUeXBlICE9IFdlYktpdDo6SW5wdXRUeXBl
OjpQYXNzd29yZDsKKyAgICByZXR1cm4gX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxlbWVu
dFR5cGUgIT0gV2ViS2l0OjpJbnB1dFR5cGU6OlBhc3N3b3JkOwogfQogCiAjZW5kaWYgLy8gUExB
VEZPUk0oV0FUQ0hPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
ZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duSU9TLm1tCmluZGV4IDZmMDdk
ODkzYWY1OTFiMzY0OWIzNGU2YzhlZGNhNzdkM2FhNTEzOGQuLjdiMzg4MzNmYmVmZmNkZTc3MzBk
MDEyOWQ4MzNlODc5YjU0MDU5YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25JT1MubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5tbQpA
QCAtMTkwLDcgKzE5MCw3IEBAIC0gKFN0cmluZylzdWdnZXN0aW9uQXRJbmRleDooTlNJbnRlZ2Vy
KWluZGV4CiAKIC0gKE5TVGV4dEFsaWdubWVudCl0ZXh0QWxpZ25tZW50CiB7Ci0gICAgcmV0dXJu
IF92aWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmlzUlRMID8gTlNUZXh0QWxpZ25tZW50Umln
aHQgOiBOU1RleHRBbGlnbm1lbnRMZWZ0OworICAgIHJldHVybiBfdmlldy5mb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uLmlzUlRMID8gTlNUZXh0QWxpZ25tZW50UmlnaHQgOiBOU1RleHRBbGlnbm1l
bnRMZWZ0OwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbQppbmRleCA2OGFhMmIxMDE1YzBkY2ViYmQyNTUyMzQwMWE3NTRiM2YyNWQz
YjIzLi5mNmQzMDRiODEwNjFiNWFkNDE4ODA2YmQ4OWQ2Yjc2N2FmNGRiYmMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTE4Nyw5ICsx
ODcsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0aW9uUmVjdHNDYWxsYmFjayhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mCiAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxs
YmFja1dpdGhSZXR1cm5WYWx1ZShzZWxlY3Rpb25SZWN0cyk7CiB9CiAKLXZvaWQgV2ViUGFnZVBy
b3h5Ojphc3Npc3RlZE5vZGVJbmZvcm1hdGlvbkNhbGxiYWNrKGNvbnN0IEFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uJiBpbmZvLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdlYlBhZ2VQcm94
eTo6Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbkNhbGxiYWNrKGNvbnN0IEZvY3VzZWRFbGVtZW50
SW5mb3JtYXRpb24mIGluZm8sIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKLSAgICBhdXRvIGNh
bGxiYWNrID0gbV9jYWxsYmFja3MudGFrZTxBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbkNhbGxiYWNr
PihjYWxsYmFja0lEKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZTxGb2N1
c2VkRWxlbWVudEluZm9ybWF0aW9uQ2FsbGJhY2s+KGNhbGxiYWNrSUQpOwogICAgIGlmICghY2Fs
bGJhY2spIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb25DYWxsYmFjayhjb25zdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbgogICAgIGNhbGxiYWNr
LT5wZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUoaW5mbyk7CiB9CiAKLXZvaWQgV2ViUGFn
ZVByb3h5OjpyZXF1ZXN0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oRnVuY3Rpb248dm9pZChjb25z
dCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxi
YWNrKQordm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
KEZ1bmN0aW9uPHZvaWQoY29uc3QgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYsIENhbGxiYWNr
QmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQogewogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAg
ICAgIGNhbGxiYWNrKHsgfSwgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRl
ZCk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbihGdW5jdGlvbjx2b2lkKGNvbnN0IEFzc2lzdGVkTm8KICAgICB9CiAK
ICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayks
IG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKSk7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXF1ZXN0QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24oY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlJlcXVlc3RGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKGNhbGxiYWNr
SUQpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVWaXNpYmxlQ29u
dGVudFJlY3RzKGNvbnN0IFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8mIHZpc2libGVDb250
ZW50UmVjdFVwZGF0ZSkKQEAgLTI0OCw3ICsyNDgsNyBAQCBXZWJDb3JlOjpGbG9hdFJlY3QgV2Vi
UGFnZVByb3h5Ojpjb21wdXRlQ3VzdG9tRml4ZWRQb3NpdGlvblJlY3QoY29uc3QgRmxvYXRSZWN0
JgogICAgIEZsb2F0UmVjdCBjb25zdHJhaW5lZFVub2JzY3VyZWRSZWN0ID0gdW5vYnNjdXJlZENv
bnRlbnRSZWN0OwogICAgIEZsb2F0UmVjdCBkb2N1bWVudFJlY3QgPSBwYWdlQ2xpZW50KCkuZG9j
dW1lbnRSZWN0KCk7CiAKLSAgICBpZiAoIXZpc3VhbFZpZXdwb3J0RW5hYmxlZCAmJiBwYWdlQ2xp
ZW50KCkuaXNBc3Npc3RpbmdOb2RlKCkpCisgICAgaWYgKCF2aXN1YWxWaWV3cG9ydEVuYWJsZWQg
JiYgcGFnZUNsaWVudCgpLmlzRm9jdXNpbmdFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBkb2N1
bWVudFJlY3Q7CiAKICAgICBpZiAoY29uc3RyYWludCA9PSBGcmFtZVZpZXc6OkxheW91dFZpZXdw
b3J0Q29uc3RyYWludDo6Q29uc3RyYWluZWRUb0RvY3VtZW50UmVjdCkKQEAgLTM4MSwxMSArMzgx
LDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExheWVyVHJlZShjb25zdCBXZWJLaXQ6
OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJgogICAgICAgICBkaWRSZWFjaExheW91dE1pbGVz
dG9uZShXZWJDb3JlOjpSZWFjaGVkU2Vzc2lvblJlc3RvcmF0aW9uUmVuZGVyVHJlZVNpemVUaHJl
c2hvbGQpOwogICAgIH0KIAotICAgIGlmIChtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVu
dHMpIHsKLSAgICAgICAgcGFnZUNsaWVudCgpLnN0YXJ0QXNzaXN0aW5nTm9kZShtX2RlZmVycmVk
Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHMtPm1fbm9kZUluZm9ybWF0aW9uLCBtX2RlZmVycmVkTm9k
ZUFzc2lzdGFuY2VBcmd1bWVudHMtPm1fdXNlcklzSW50ZXJhY3RpbmcsIG1fZGVmZXJyZWROb2Rl
QXNzaXN0YW5jZUFyZ3VtZW50cy0+bV9ibHVyUHJldmlvdXNOb2RlLAotICAgICAgICAgICAgbV9k
ZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzLT5tX2NoYW5naW5nQWN0aXZpdHlTdGF0ZSwg
bV9kZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzLT5tX3VzZXJEYXRhLmdldCgpKTsKLSAg
ICAgICAgbV9kZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzID0gbnVsbHB0cjsKLSAgICB9
CisgICAgaWYgKGF1dG8gYXJndW1lbnRzID0gc3RkOjpleGNoYW5nZShtX2RlZmVycmVkRWxlbWVu
dERpZEZvY3VzQXJndW1lbnRzLCBudWxscHRyKSkKKyAgICAgICAgcGFnZUNsaWVudCgpLmVsZW1l
bnREaWRGb2N1cyhhcmd1bWVudHMtPmluZm9ybWF0aW9uLCBhcmd1bWVudHMtPnVzZXJJc0ludGVy
YWN0aW5nLCBhcmd1bWVudHMtPmJsdXJQcmV2aW91c05vZGUsIGFyZ3VtZW50cy0+Y2hhbmdpbmdB
Y3Rpdml0eVN0YXRlLCBhcmd1bWVudHMtPnVzZXJEYXRhLmdldCgpKTsKIH0KIAogYm9vbCBXZWJQ
YWdlUHJveHk6OnVwZGF0ZUxheW91dFZpZXdwb3J0UGFyYW1ldGVycyhjb25zdCBXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiBsYXllclRyZWVUcmFuc2FjdGlvbikKQEAgLTQwOSw3
ICs0MDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bGF5ZXJUcmVlQ29tbWl0Q29tcGxldGUoKQog
ICAgIHBhZ2VDbGllbnQoKS5sYXllclRyZWVDb21taXRDb21wbGV0ZSgpOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9p
bnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVy
ZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lz
dGVkTm9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVp
bnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCit2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCBDYWxsYmFj
a0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICghaXNWYWxpZCgp
KSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oV2ViQ29yZTo6SW50UG9pbnQoKSwgMCwgMCwg
MCwgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6VW5rbm93bik7CkBAIC00MTcsNyArNDE0LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
IHBvaW50LCBXZWJDb3JlOjpUZXgKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2Nh
bGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNlbGVjdFdpdGhHZXN0dXJlKHBvaW50LCAodWludDMyX3QpZ3JhbnVs
YXJpdHksIGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0
ZWROb2RlLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2VsZWN0V2l0aEdlc3R1cmUocG9pbnQsICh1aW50MzJfdClncmFudWxh
cml0eSwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2Vk
RWxlbWVudCwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50
LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCBXVEY6OkZ1bmN0aW9uPHZvaWQg
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCBDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtNDcwLDcgKzQ2Nyw3IEBAIGJvb2wg
V2ViUGFnZVByb3h5OjphcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
biwgY29uc3QgU3RyaW5nJiBvCiAgICAgcmV0dXJuIGF1dG9jb3JyZWN0aW9uQXBwbGllZDsKIH0K
IAotdm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdURjo6RnVuY3Rp
b248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQg
V2ViUGFnZVByb3h5OjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9p
ZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICgh
aXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJhY2tCYXNlOjpFcnJv
cjo6VW5rbm93bik7CkBAIC00NzgsMTAgKzQ3NSwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2Vs
ZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9p
bgogICAgIH0KICAgICAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5k
QWN0aXZpdHlUb2tlbigpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KHBvaW50LCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oZ3JhbnVsYXJpdHkpLCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgY2FsbGJh
Y2tJRCksIG1fcGFnZUlEKTsKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KHBvaW50LCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oZ3JhbnVsYXJpdHkpLCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBjYWxs
YmFja0lEKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRp
b25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxlY3Rpb25E
aXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rp
b24pCit2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVj
dGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBi
b29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChD
YWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICghaXNW
YWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJhY2tCYXNlOjpFcnJvcjo6
VW5rbm93bik7CkBAIC00ODksNyArNDg2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFBv
c2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQKICAg
ICB9CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2
aXR5VG9rZW4oKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZWxl
Y3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKHBvaW50LCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oZ3JhbnVsYXJpdHkpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGlyZWN0aW9uKSwgaXNJ
bnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CisgICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZWxlY3RQb3NpdGlvbkF0Qm91bmRh
cnlXaXRoRGlyZWN0aW9uKHBvaW50LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ3JhbnVsYXJpdHkp
LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGlyZWN0aW9uKSwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1
c2VkRWxlbWVudCwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6Om1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihXZWJDb3JlOjpUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24sIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQpAQCAtNTAzLDcgKzUwMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojptb3ZlU2VsZWN0
aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5CiAgICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpNb3ZlU2VsZWN0aW9uQXRCb3VuZGFy
eVdpdGhEaXJlY3Rpb24oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGdyYW51bGFyaXR5KSwgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGRpcmVjdGlvbiksIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAg
ICAgCi12b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50IHBvaW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rp
b24pCit2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50IHBvaW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQs
IFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24o
Q2FsbGJhY2tCYXNlOjpFcnJvcjo6VW5rbm93bik7CkBAIC01MTEsNyArNTA4LDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnNlbGVjdFBvc2l0aW9uQXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCBwb2ludCwgYm9vbCBpc0kKICAgICB9CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9j
YWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0
bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZWxlY3RQb3NpdGlvbkF0UG9pbnQocG9pbnQsIGlzSW50ZXJhY3Rp
bmdXaXRoQXNzaXN0ZWROb2RlLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0UG9zaXRpb25BdFBvaW50KHBvaW50LCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6YmVnaW5TZWxlY3Rpb25JbkRpcmVjdGlvbihXZWJDb3Jl
OjpTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKHVpbnQ2
NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtNTI1LDcg
KzUyMiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpiZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKFdl
YkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3RpCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpCZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKGRpcmVjdGlvbiwgY2Fs
bGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVNlbGVj
dGlvbldpdGhFeHRlbnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkICh1aW50NjRf
dCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViUGFn
ZVByb3h5Ojp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQgcG9pbnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV1RGOjpG
dW5jdGlvbjx2b2lkKHVpbnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rp
b24oMCwgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6VW5rbm93bik7CkBAIC01MzMsMTEgKzUzMCwxMSBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50IHBvaW50LAogICAgIH0KICAgICAKICAgICBhdXRvIGNhbGxiYWNr
SUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNz
LT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChw
b2ludCwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJ
RCk7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVTZWxlY3Rp
b25XaXRoRXh0ZW50UG9pbnQocG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQs
IGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiAgICAgCiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp1
cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29s
IGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0
X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCit2b2lkIFdlYlBh
Z2VQcm94eTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXVEY6OkZ1bmN0aW9u
PHZvaWQodWludDY0X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigwLCBD
YWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsKQEAgLTU0NSw3ICs1NDIsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoY29u
c3QgV2ViQ29yZTo6SW50UAogICAgIH0KICAgICAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2Nh
bGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5
KHBvaW50LCBncmFudWxhcml0eSwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIGNhbGxi
YWNrSUQpLCBtX3BhZ2VJRCk7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpVcGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShwb2ludCwgZ3JhbnVs
YXJpdHksIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIGNhbGxiYWNrSUQpLCBtX3Bh
Z2VJRCk7CiAgICAgCiB9CiAKQEAgLTg0OCw5ICs4NDUsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
aW5zcGVjdG9yTm9kZVNlYXJjaEVuZGVkQXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JgogICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNwZWN0b3JOb2Rl
U2VhcmNoRW5kZWRBdFBvc2l0aW9uKHBvc2l0aW9uKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6Ymx1ckFzc2lzdGVkTm9kZSgpCit2b2lkIFdlYlBhZ2VQcm94eTo6Ymx1ckZv
Y3VzZWRFbGVtZW50KCkKIHsKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
Qmx1ckFzc2lzdGVkTm9kZSgpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkJsdXJGb2N1c2VkRWxlbWVudCgpLCBtX3BhZ2VJRCk7CiB9CiAKIEZsb2F0
U2l6ZSBXZWJQYWdlUHJveHk6OnNjcmVlblNpemUoKQpAQCAtODkzLDI0ICs4OTAsMjUgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZEdldFRhcEhpZ2hsaWdodEdlb21ldHJpZXModWludDY0X3QgcmVx
dWVzdElELCBjb25zdCBXZWJDb3IKICAgICBwYWdlQ2xpZW50KCkuZGlkR2V0VGFwSGlnaGxpZ2h0
R2VvbWV0cmllcyhyZXF1ZXN0SUQsIGNvbG9yLCBoaWdobGlnaHRlZFF1YWRzLCB0b3BMZWZ0UmFk
aXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRBc3Npc3RpbmdOb2RlKGNvbnN0IEFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbiwgYm9vbCB1c2VySXNJbnRlcmFjdGluZywg
Ym9vbCBibHVyUHJldmlvdXNOb2RlLCBib29sIGNoYW5naW5nQWN0aXZpdHlTdGF0ZSwgY29uc3Qg
VXNlckRhdGEmIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmVsZW1lbnREaWRGb2N1cyhj
b25zdCBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbiwgYm9vbCB1c2VySXNJ
bnRlcmFjdGluZywgYm9vbCBibHVyUHJldmlvdXNOb2RlLCBib29sIGNoYW5naW5nQWN0aXZpdHlT
dGF0ZSwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQogewogICAgIG1fd2FpdGluZ0ZvclBvc3RM
YXlvdXRFZGl0b3JTdGF0ZVVwZGF0ZUFmdGVyRm9jdXNpbmdFbGVtZW50ID0gdHJ1ZTsKIAogICAg
IEFQSTo6T2JqZWN0KiB1c2VyRGF0YU9iamVjdCA9IHByb2Nlc3MoKS50cmFuc2Zvcm1IYW5kbGVz
VG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKTsKICAgICBpZiAobV9lZGl0b3JTdGF0
ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkgewotICAgICAgICBtX2RlZmVycmVkTm9kZUFzc2lz
dGFuY2VBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE5vZGVBc3Npc3RhbmNlQXJndW1lbnRz
PihOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyB7IGluZm9ybWF0aW9uLCB1c2VySXNJbnRlcmFjdGlu
ZywgYmx1clByZXZpb3VzTm9kZSwgY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCB1c2VyRGF0YU9iamVj
dCB9KTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZWxpbWluYXRlIG1fZGVm
ZXJyZWRFbGVtZW50RGlkRm9jdXNBcmd1bWVudHMgYWx0b2dldGhlciwgaW4gZmF2b3Igb2Ygb25s
eSBkZWZlcnJpbmcgYWN0aW9ucyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gcG9zdC1sYXlvdXQgZWRp
dG9yIHN0YXRlIGluZm9ybWF0aW9uLgorICAgICAgICBtX2RlZmVycmVkRWxlbWVudERpZEZvY3Vz
QXJndW1lbnRzID0gc3RkOjptYWtlX3VuaXF1ZTxFbGVtZW50RGlkRm9jdXNBcmd1bWVudHM+KEVs
ZW1lbnREaWRGb2N1c0FyZ3VtZW50cyB7IGluZm9ybWF0aW9uLCB1c2VySXNJbnRlcmFjdGluZywg
Ymx1clByZXZpb3VzTm9kZSwgY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCB1c2VyRGF0YU9iamVjdCB9
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBhZ2VDbGllbnQoKS5zdGFydEFzc2lz
dGluZ05vZGUoaW5mb3JtYXRpb24sIHVzZXJJc0ludGVyYWN0aW5nLCBibHVyUHJldmlvdXNOb2Rl
LCBjaGFuZ2luZ0FjdGl2aXR5U3RhdGUsIHVzZXJEYXRhT2JqZWN0KTsKKyAgICBwYWdlQ2xpZW50
KCkuZWxlbWVudERpZEZvY3VzKGluZm9ybWF0aW9uLCB1c2VySXNJbnRlcmFjdGluZywgYmx1clBy
ZXZpb3VzTm9kZSwgY2hhbmdpbmdBY3Rpdml0eVN0YXRlLCB1c2VyRGF0YU9iamVjdCk7CiB9CiAK
LXZvaWQgV2ViUGFnZVByb3h5OjpzdG9wQXNzaXN0aW5nTm9kZSgpCit2b2lkIFdlYlBhZ2VQcm94
eTo6ZWxlbWVudERpZEJsdXIoKQogewogICAgIG1fd2FpdGluZ0ZvclBvc3RMYXlvdXRFZGl0b3JT
dGF0ZVVwZGF0ZUFmdGVyRm9jdXNpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgbV9kZWZlcnJlZE5v
ZGVBc3Npc3RhbmNlQXJndW1lbnRzID0gbnVsbHB0cjsKLSAgICBwYWdlQ2xpZW50KCkuc3RvcEFz
c2lzdGluZ05vZGUoKTsKKyAgICBtX2RlZmVycmVkRWxlbWVudERpZEZvY3VzQXJndW1lbnRzID0g
bnVsbHB0cjsKKyAgICBwYWdlQ2xpZW50KCkuZWxlbWVudERpZEJsdXIoKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJu
YW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQpAQCAtOTQ4LDcgKzk0Niw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaXNhYmxlSW5zcGVjdG9yTm9kZVNlYXJjaCgpCiAgICAgcGFnZUNsaWVudCgp
LmRpc2FibGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpm
b2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQsIFdURjo6RnVuY3Rpb248dm9pZCAo
Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViUGFnZVBy
b3h5Ojpmb2N1c05leHRGb2N1c2VkRWxlbWVudChib29sIGlzRm9yd2FyZCwgV1RGOjpGdW5jdGlv
bjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAg
aWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jhc2U6
OkVycm9yOjpVbmtub3duKTsKQEAgLTk1NiwyMiArOTU0LDIyIEBAIHZvaWQgV2ViUGFnZVByb3h5
Ojpmb2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQsIFdURjo6RnVuY3Rpb248dm9p
ZCAoQ2FsCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1
dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eVRva2VuKCkpOwotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpGb2N1c05leHRBc3Npc3RlZE5vZGUoaXNGb3J3YXJkLCBjYWxsYmFja0lEKSwgbV9wYWdl
SUQpOworICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGb2N1c05leHRGb2N1
c2VkRWxlbWVudChpc0ZvcndhcmQsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpzZXRBc3Npc3RlZE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
dm9pZCBXZWJQYWdlUHJveHk6OnNldEZvY3VzZWRFbGVtZW50VmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIHsKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QXNzaXN0
ZWROb2RlVmFsdWUodmFsdWUpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldEZvY3VzZWRFbGVtZW50VmFsdWUodmFsdWUpLCBtX3BhZ2VJRCk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJs
ZSB2YWx1ZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRGb2N1c2VkRWxlbWVudFZhbHVlQXNOdW1i
ZXIoZG91YmxlIHZhbHVlKQogewotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKHZhbHVlKSwgbV9wYWdlSUQpOworICAgIHBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRGb2N1c2VkRWxlbWVudFZhbHVlQXNO
dW1iZXIodmFsdWUpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRBc3Np
c3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVT
ZWxlY3Rpb24pCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Rm9jdXNlZEVsZW1lbnRTZWxlY3RlZElu
ZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiB7Ci0gICAg
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFzc2lzdGVkTm9kZVNlbGVjdGVk
SW5kZXgoaW5kZXgsIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pLCBtX3BhZ2VJRCk7CisgICAgcHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEZvY3VzZWRFbGVtZW50U2VsZWN0ZWRJ
bmRleChpbmRleCwgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiksIG1fcGFnZUlEKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0IERpY3Rpb25h
cnlQb3B1cEluZm8mKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zv
cm1zL1dLRm9ybUNvbG9yUGlja2VyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zv
cm1zL1dLRm9ybUNvbG9yUGlja2VyLm1tCmluZGV4IDM0YjRmOGQxZTg2YWY0ODYzZWU4OTgzMTQ5
YTkyYTMyYWQ5MmRiNTUuLmRhYWM5MGFhMGY4YjVkNjQyZjYyN2M4ZThjMjc2MDQzOTdiM2UyZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1Db2xv
clBpY2tlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3Jt
Q29sb3JQaWNrZXIubW0KQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBF
X0NPTE9SKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogCi0jaW1wb3J0ICJBc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbi5oIgorI2ltcG9ydCAiRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oIgogI2lt
cG9ydCAiVUlLaXRTUEkuaCIKICNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIgog
I2ltcG9ydCAiV0tGb3JtUG9wb3Zlci5oIgpAQCAtMTk2LDExICsxOTYsMTEgQEAgLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXcKICAgICBOU0FycmF5PE5T
QXJyYXk8VUlDb2xvciAqPiAqPiAqdG9wQ29sb3JNYXRyaXggPSBbW3NlbGYgY2xhc3NdIGRlZmF1
bHRUb3BDb2xvck1hdHJpeF07CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBz
aXplX3QgbnVtQ29sb3JTdWdnZXN0aW9ucyA9IHZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
c3VnZ2VzdGVkQ29sb3JzLnNpemUoKTsKKyAgICBzaXplX3QgbnVtQ29sb3JTdWdnZXN0aW9ucyA9
IHZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5zdWdnZXN0ZWRDb2xvcnMuc2l6ZSgpOwog
ICAgIGlmIChudW1Db2xvclN1Z2dlc3Rpb25zKSB7CiAgICAgICAgIE5TTXV0YWJsZUFycmF5PFVJ
Q29sb3IgKj4gKmNvbG9ycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3RkOjptaW4obnVtQ29sb3JTdWdnZXN0aW9ucywgbWF4Q29sb3JT
dWdnZXN0aW9ucyk7IGkrKykgewotICAgICAgICAgICAgV2ViQ29yZTo6Q29sb3IgY29sb3IgPSB2
aWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnN1Z2dlc3RlZENvbG9yc1tpXTsKKyAgICAgICAg
ICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yID0gdmlldy5mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
LnN1Z2dlc3RlZENvbG9yc1tpXTsKICAgICAgICAgICAgIFtjb2xvcnMgYWRkT2JqZWN0OltVSUNv
bG9yIGNvbG9yV2l0aENHQ29sb3I6Y2FjaGVkQ0dDb2xvcihjb2xvcildXTsKICAgICAgICAgfQog
ICAgICAgICB0b3BDb2xvck1hdHJpeCA9IEBbIGNvbG9ycyBdOwpAQCAtMjYzLDcgKzI2Myw3IEBA
IC0gKHZvaWQpZHJhd1NlbGVjdGlvbkluZGljYXRvckZvckNvbG9yQnV0dG9uOihXS0NvbG9yQnV0
dG9uICopY29sb3JCdXR0b24KIC0gKHZvaWQpc2V0Q29udHJvbFZhbHVlRnJvbVVJQ29sb3I6KFVJ
Q29sb3IgKil1aUNvbG9yCiB7CiAgICAgV2ViQ29yZTo6Q29sb3IgY29sb3IodWlDb2xvci5DR0Nv
bG9yKTsKLSAgICBbX3ZpZXcgcGFnZV0tPnNldEFzc2lzdGVkTm9kZVZhbHVlKGNvbG9yLnNlcmlh
bGl6ZWQoKSk7CisgICAgW192aWV3IHBhZ2VdLT5zZXRGb2N1c2VkRWxlbWVudFZhbHVlKGNvbG9y
LnNlcmlhbGl6ZWQoKSk7CiB9CiAKICNwcmFnbWEgbWFyayBXS0Zvcm1Db250cm9sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtSW5wdXRDb250cm9s
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybUlucHV0Q29udHJv
bC5tbQppbmRleCAyYmIwMmNhNjdlYjhlYjg0ZDFhMGZiNzc2NzdmNzBlYmI4ZTc1NTFjLi45OGUx
NDY3OGUxN2Q0NmRhOTk0NTlmNWI2ZDFkMDU0ZTgwZDUwNDU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtSW5wdXRDb250cm9sLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1JbnB1dENvbnRyb2wubW0KQEAg
LTg3LDcgKzg3LDcgQEAgLSAoaWQpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldyBk
YXRlUGlja2VyTW9kZTooVUlEYXRlUGlja2VyTW9kZSltb2RlCiAgICAgX3ZpZXcgPSB2aWV3Owog
ICAgIF9zaG91bGRSZW1vdmVUaW1lWm9uZUluZm9ybWF0aW9uID0gTk87CiAgICAgX2lzVGltZUlu
cHV0ID0gTk87Ci0gICAgc3dpdGNoICh2aWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVsZW1l
bnRUeXBlKSB7CisgICAgc3dpdGNoICh2aWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uZWxl
bWVudFR5cGUpIHsKICAgICBjYXNlIElucHV0VHlwZTo6RGF0ZToKICAgICAgICAgX2Zvcm1hdFN0
cmluZyA9IGtEYXRlRm9ybWF0U3RyaW5nOwogICAgICAgICBicmVhazsKQEAgLTExMSw3ICsxMTEs
NyBAQCAtIChpZClpbml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3IGRhdGVQaWNrZXJN
b2RlOihVSURhdGVQaWNrZXJNb2RlKW1vZGUKICAgICBfZGF0ZVBpY2tlci5nZXQoKS5kYXRlUGlj
a2VyTW9kZSA9IG1vZGU7CiAgICAgX2RhdGVQaWNrZXIuZ2V0KCkuaGlkZGVuID0gTk87CiAgICAg
Ci0gICAgaWYgKFtzZWxmIHNob3VsZFByZXNlbnRHcmVnb3JpYW5DYWxlbmRhcjp2aWV3LmFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uXSkKKyAgICBpZiAoW3NlbGYgc2hvdWxkUHJlc2VudEdyZWdvcmlh
bkNhbGVuZGFyOnZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbl0pCiAgICAgICAgIF9kYXRl
UGlja2VyLmdldCgpLmNhbGVuZGFyID0gW05TQ2FsZW5kYXIgY2FsZW5kYXJXaXRoSWRlbnRpZmll
cjpOU0NhbGVuZGFySWRlbnRpZmllckdyZWdvcmlhbl07CiAgICAgCiAgICAgW19kYXRlUGlja2Vy
IGFkZFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2RhdGVDaGFuZ2VIYW5kbGVyOikgZm9y
Q29udHJvbEV2ZW50czpVSUNvbnRyb2xFdmVudFZhbHVlQ2hhbmdlZF07CkBAIC0xMzAsNyArMTMw
LDcgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCi0tIChCT09M
KXNob3VsZFByZXNlbnRHcmVnb3JpYW5DYWxlbmRhcjooY29uc3QgQXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24mKW5vZGVJbmZvCistIChCT09MKXNob3VsZFByZXNlbnRHcmVnb3JpYW5DYWxlbmRhcjoo
Y29uc3QgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYpbm9kZUluZm8KIHsKICAgICByZXR1cm4g
bm9kZUluZm8uYXV0b2ZpbGxGaWVsZE5hbWUgPT0gV2ViQ29yZTo6QXV0b2ZpbGxGaWVsZE5hbWU6
OkNjRXhwTW9udGgKICAgICAgICAgfHwgbm9kZUluZm8uYXV0b2ZpbGxGaWVsZE5hbWUgPT0gV2Vi
Q29yZTo6QXV0b2ZpbGxGaWVsZE5hbWU6OkNjRXhwCkBAIC0xNjMsNyArMTYzLDcgQEAgLSAoTlNT
dHJpbmcgKilfc2FuaXRpemVJbnB1dFZhbHVlRm9yRm9ybWF0dGVyOihOU1N0cmluZyAqKXZhbHVl
CiAtICh2b2lkKV9kYXRlQ2hhbmdlZFNldEFzTnVtYmVyCiB7CiAgICAgTlNEYXRlICpkYXRlID0g
W19kYXRlUGlja2VyIGRhdGVdOwotICAgIFtfdmlldyBwYWdlXS0+c2V0QXNzaXN0ZWROb2RlVmFs
dWVBc051bWJlcigoW2RhdGUgdGltZUludGVydmFsU2luY2UxOTcwXSArIFtzZWxmIF90aW1lWm9u
ZU9mZnNldEZyb21HTVQ6ZGF0ZV0pICoga01pbGxpc2Vjb25kc1BlclNlY29uZCk7CisgICAgW192
aWV3IHBhZ2VdLT5zZXRGb2N1c2VkRWxlbWVudFZhbHVlQXNOdW1iZXIoKFtkYXRlIHRpbWVJbnRl
cnZhbFNpbmNlMTk3MF0gKyBbc2VsZiBfdGltZVpvbmVPZmZzZXRGcm9tR01UOmRhdGVdKSAqIGtN
aWxsaXNlY29uZHNQZXJTZWNvbmQpOwogfQogCiAtIChSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVy
PilkYXRlRm9ybWF0dGVyRm9yUGlja2VyCkBAIC0xODEsNyArMTgxLDcgQEAgLSAodm9pZClfZGF0
ZUNoYW5nZWRTZXRBc1N0cmluZwogICAgIC8vIEZvcmNlIEVuZ2xpc2ggbG9jYWxlIGJlY2F1c2Ug
dGhhdCBpcyB3aGF0IEhUTUw1IHZhbHVlIHBhcnNpbmcgZXhwZWN0cy4KICAgICBSZXRhaW5QdHI8
TlNEYXRlRm9ybWF0dGVyPiBkYXRlRm9ybWF0dGVyID0gW3NlbGYgZGF0ZUZvcm1hdHRlckZvclBp
Y2tlcl07CiAKLSAgICBbX3ZpZXcgcGFnZV0tPnNldEFzc2lzdGVkTm9kZVZhbHVlKFtkYXRlRm9y
bWF0dGVyIHN0cmluZ0Zyb21EYXRlOltfZGF0ZVBpY2tlciBkYXRlXV0pOworICAgIFtfdmlldyBw
YWdlXS0+c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZShbZGF0ZUZvcm1hdHRlciBzdHJpbmdGcm9tRGF0
ZTpbX2RhdGVQaWNrZXIgZGF0ZV1dKTsKIH0KIAogLSAodm9pZClfZGF0ZUNoYW5nZWQKQEAgLTIw
OCw4ICsyMDgsOCBAQCAtICh2b2lkKWNvbnRyb2xCZWdpbkVkaXRpbmcKIAogICAgIC8vIEN1cnJl
bnRseSBubyB2YWx1ZSBmb3IgdGhlIDxpbnB1dD4uIFN0YXJ0IHRoZSBwaWNrZXIgd2l0aCB0aGUg
Y3VycmVudCB0aW1lLgogICAgIC8vIEFsc28sIHVwZGF0ZSB0aGUgYWN0dWFsIDxpbnB1dD4gdmFs
dWUuCi0gICAgTlNTdHJpbmcgKnZhbHVlID0gX3ZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
dmFsdWU7Ci0gICAgaWYgKF92aWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnZhbHVlLmlzRW1w
dHkoKSkgeworICAgIE5TU3RyaW5nICp2YWx1ZSA9IF92aWV3LmZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb24udmFsdWU7CisgICAgaWYgKF92aWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24udmFs
dWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIFtfZGF0ZVBpY2tlciBzZXREYXRlOltOU0RhdGUgZGF0
ZV1dOwogICAgICAgICBbc2VsZiBfZGF0ZUNoYW5nZWRdOwogICAgICAgICByZXR1cm47CkBAIC0y
MjUsNyArMjI1LDcgQEAgLSAodm9pZCljb250cm9sQmVnaW5FZGl0aW5nCiAgICAgfQogCiAgICAg
Ly8gQ29udmVydCB0aGUgbnVtYmVyIHZhbHVlIHRvIGEgZGF0ZSBvYmplY3QgZm9yIHRoZSBmaWVs
ZHMgYWZmZWN0ZWQgYnkgdGltZXpvbmVzLgotICAgIE5TVGltZUludGVydmFsIHNlY29uZHNTaW5j
ZTE5NzAgPSBfdmlldy5hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi52YWx1ZUFzTnVtYmVyIC8ga01p
bGxpc2Vjb25kc1BlclNlY29uZDsKKyAgICBOU1RpbWVJbnRlcnZhbCBzZWNvbmRzU2luY2UxOTcw
ID0gX3ZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi52YWx1ZUFzTnVtYmVyIC8ga01pbGxp
c2Vjb25kc1BlclNlY29uZDsKICAgICBOU0ludGVnZXIgdGltZVpvbmVPZmZzZXQgPSBbc2VsZiBf
dGltZVpvbmVPZmZzZXRGcm9tR01UOltOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5
NzA6c2Vjb25kc1NpbmNlMTk3MF1dOwogICAgIE5TVGltZUludGVydmFsIGFkanVzdGVkU2Vjb25k
c1NpbmNlMTk3MCA9IHNlY29uZHNTaW5jZTE5NzAgLSB0aW1lWm9uZU9mZnNldDsKICAgICBbX2Rh
dGVQaWNrZXIgc2V0RGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOmFk
anVzdGVkU2Vjb25kc1NpbmNlMTk3MF1dOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIC0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3CiAKICAgICBVSURhdGVQaWNr
ZXJNb2RlIG1vZGU7CiAKLSAgICBzd2l0Y2ggKHZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
ZWxlbWVudFR5cGUpIHsKKyAgICBzd2l0Y2ggKHZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlv
bi5lbGVtZW50VHlwZSkgewogICAgIGNhc2UgSW5wdXRUeXBlOjpEYXRlOgogICAgICAgICBtb2Rl
ID0gVUlEYXRlUGlja2VyTW9kZURhdGU7CiAgICAgICAgIGJyZWFrOwpAQCAtMzM0LDcgKzMzNCw3
IEBAIEBpbXBsZW1lbnRhdGlvbiBXS0RhdGVUaW1lUG9wb3ZlcgogCiAtICh2b2lkKWNsZWFyOihp
ZClzZW5kZXIKIHsKLSAgICBbX3ZpZXcgcGFnZV0tPnNldEFzc2lzdGVkTm9kZVZhbHVlKFN0cmlu
ZygpKTsKKyAgICBbX3ZpZXcgcGFnZV0tPnNldEZvY3VzZWRFbGVtZW50VmFsdWUoU3RyaW5nKCkp
OwogfQogCiAtIChpZClpbml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3IGRhdGVQaWNr
ZXJNb2RlOihVSURhdGVQaWNrZXJNb2RlKW1vZGUKQEAgLTM0OSw3ICszNDksNyBAQCAtIChpZClp
bml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3IGRhdGVQaWNrZXJNb2RlOihVSURhdGVQ
aWNrZXJNb2RlKW1vZGUKICAgICBDR0Zsb2F0IHBvcG92ZXJIZWlnaHQgPSBfdmlld0NvbnRyb2xs
ZXIuZ2V0KCkudmlldy5mcmFtZS5zaXplLmhlaWdodDsKICAgICBbX3ZpZXdDb250cm9sbGVyIHNl
dFByZWZlcnJlZENvbnRlbnRTaXplOkNHU2l6ZU1ha2UocG9wb3ZlcldpZHRoLCBwb3BvdmVySGVp
Z2h0KV07CiAgICAgW192aWV3Q29udHJvbGxlciBzZXRFZGdlc0ZvckV4dGVuZGVkTGF5b3V0OlVJ
UmVjdEVkZ2VOb25lXTsKLSAgICBbX3ZpZXdDb250cm9sbGVyIHNldFRpdGxlOl92aWV3LmFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLnRpdGxlXTsKKyAgICBbX3ZpZXdDb250cm9sbGVyIHNldFRpdGxl
Ol92aWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24udGl0bGVdOwogCiAgICAgLy8gQWx3YXlz
IGhhdmUgYSBuYXZpZ2F0aW9uIGNvbnRyb2xsZXIgd2l0aCBhIGNsZWFyIGJ1dHRvbiwgYW5kIGEg
dGl0bGUgaWYgdGhlIGlucHV0IGVsZW1lbnQgaGFzIGEgdGl0bGUuCiAgICAgUmV0YWluUHRyPFVJ
TmF2aWdhdGlvbkNvbnRyb2xsZXI+IG5hdmlnYXRpb25Db250cm9sbGVyID0gYWRvcHROUyhbW1VJ
TmF2aWdhdGlvbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoUm9vdFZpZXdDb250cm9sbGVyOl92
aWV3Q29udHJvbGxlci5nZXQoKV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL2Zvcm1zL1dLRm9ybVBvcG92ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvZm9ybXMvV0tGb3JtUG9wb3Zlci5tbQppbmRleCA5OWZmNzJiMWUyZWJlOTExZDhmM2FjOTA3
ZDZhZDdiNTZlMDdmZjFjLi4wN2VlZTAzY2E2ZGM5MzRhYjU3OTc5Mzk5MGEzOGEyNGJjOTg0MGU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtUG9w
b3Zlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtUG9w
b3Zlci5tbQpAQCAtMTQyLDcgKzE0Miw3IEBAIC0gKHZvaWQpcHJlc2VudFBvcG92ZXJBbmltYXRl
ZDooQk9PTClhbmltYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXR0ZWRBcnJv
d0RpcmVjdGlvbnM6ZGlyZWN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYW5pbWF0ZWQ6YW5pbWF0ZWRdOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIENHUmVj
dCBib3VuZGluZ0JveE9mRE9NTm9kZSA9IF92aWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVs
ZW1lbnRSZWN0OworICAgICAgICBDR1JlY3QgYm91bmRpbmdCb3hPZkRPTU5vZGUgPSBfdmlldy5m
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmVsZW1lbnRSZWN0OwogICAgICAgICBbX3BvcG92ZXJD
b250cm9sbGVyIHByZXNlbnRQb3BvdmVyRnJvbVJlY3Q6Q0dSZWN0SW50ZWdyYWwoYm91bmRpbmdC
b3hPZkRPTU5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluVmlldzpfdmlldwogICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXR0ZWRBcnJvd0Rp
cmVjdGlvbnM6ZGlyZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL2Zvcm1zL1dLRm9ybVNlbGVjdENvbnRyb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RDb250cm9sLmgKaW5kZXggNDAyNTIwYTIwZTcxNTk1OTQ5
MjI1NzQ5MzljYWU0ZWYzNDNmNTkwNS4uN2JlNjUxYTgwNGE4OTZlOTBkNjFjZDU4OGU2Mjk0ODA1
ZjgyNjI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dL
Rm9ybVNlbGVjdENvbnRyb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9y
bXMvV0tGb3JtU2VsZWN0Q29udHJvbC5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogCi0jaW1wb3J0ICJBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIgorI2lt
cG9ydCAiRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIK
ICNpbXBvcnQgIldLRm9ybVBlcmlwaGVyYWwuaCIKICNpbXBvcnQgIldLRm9ybVBvcG92ZXIuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxl
Y3RDb250cm9sLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNl
bGVjdENvbnRyb2wubW0KaW5kZXggMDk3ODY1YTEwMTliZGI3MWVlYTE1N2M5OWY2OThmNDNmMDIw
MjcyYS4uM2I5NDhkMWFkNGRiNTFmZjEyYjJlYjA3OTQzMjk5YzFhMzExMmY4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdENvbnRyb2wu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdENv
bnRyb2wubW0KQEAgLTY5LDggKzY5LDggQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlldzoo
V0tDb250ZW50VmlldyAqKXZpZXcKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIGJvb2wgaGFz
R3JvdXBzID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aWV3LmFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KHZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uc2VsZWN0T3B0aW9uc1tpXS5pc0dyb3VwKSB7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRp
b24uc2VsZWN0T3B0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAodmlldy5mb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnNbaV0uaXNHcm91cCkgewogICAgICAgICAg
ICAgaGFzR3JvdXBzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03
OCw3ICs3OCw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcg
Kil2aWV3CiAKICAgICBpZiAoY3VycmVudFVzZXJJbnRlcmZhY2VJZGlvbUlzUGFkKCkpCiAgICAg
ICAgIF9jb250cm9sID0gYWRvcHROUyhbW1dLU2VsZWN0UG9wb3ZlciBhbGxvY10gaW5pdFdpdGhW
aWV3OnZpZXcgaGFzR3JvdXBzOmhhc0dyb3Vwc10pOwotICAgIGVsc2UgaWYgKHZpZXcuYXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdCB8fCBoYXNHcm91cHMpCisgICAgZWxzZSBp
ZiAodmlldy5mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmlzTXVsdGlTZWxlY3QgfHwgaGFzR3Jv
dXBzKQogICAgICAgICBfY29udHJvbCA9IGFkb3B0TlMoW1tXS011bHRpcGxlU2VsZWN0UGlja2Vy
IGFsbG9jXSBpbml0V2l0aFZpZXc6dmlld10pOwogICAgIGVsc2UKICAgICAgICAgX2NvbnRyb2wg
PSBhZG9wdE5TKFtbV0tTZWxlY3RTaW5nbGVQaWNrZXIgYWxsb2NdIGluaXRXaXRoVmlldzp2aWV3
XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3Jt
U2VsZWN0UGlja2VyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9y
bVNlbGVjdFBpY2tlci5tbQppbmRleCBkYTI2YmIzMGRhYzM4YTAxZjI2ZmZjOWQxYjlmMGFjMzNj
MjJiM2Q0Li41MjBhYTE0OGI0NjRmNzQ5ZDk2YzQ4MDJhMGM2NWM5YWRkNzZlNDUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0UGlja2Vy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQ
aWNrZXIubW0KQEAgLTE0Niw3ICsxNDYsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3
OihXS0NvbnRlbnRWaWV3ICopdmlldwogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgX3ZpZXcg
PSB2aWV3OwotICAgIF9hbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9IF92aWV3LmFzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uLmlzTXVsdGlTZWxlY3Q7CisgICAgX2FsbG93c011bHRpcGxlU2VsZWN0aW9u
ID0gX3ZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5pc011bHRpU2VsZWN0OwogICAgIF9z
aW5nbGVTZWxlY3Rpb25JbmRleCA9IE5TTm90Rm91bmQ7CiAgICAgW3NlbGYgc2V0QXV0b3Jlc2l6
aW5nTWFzazpVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6
aW5nRmxleGlibGVIZWlnaHRdOwogICAgIFtzZWxmIHNldERhdGFTb3VyY2U6c2VsZl07CkBAIC0x
NjUsNyArMTY1LDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlldzooV0tDb250ZW50Vmll
dyAqKXZpZXcKICAgICBbc2VsZiByZWxvYWRBbGxDb21wb25lbnRzXTsKIAogICAgIGlmICghX2Fs
bG93c011bHRpcGxlU2VsZWN0aW9uKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxPcHRpb25JdGVt
PiYgc2VsZWN0T3B0aW9ucyA9IFtfdmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXTsKKyAg
ICAgICAgY29uc3QgVmVjdG9yPE9wdGlvbkl0ZW0+JiBzZWxlY3RPcHRpb25zID0gW192aWV3IGZv
Y3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc107CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2VsZWN0T3B0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgT3B0aW9u
SXRlbSYgaXRlbSA9IHNlbGVjdE9wdGlvbnNbaV07CiAgICAgICAgICAgICBpZiAoaXRlbS5pc0dy
b3VwKQpAQCAtMjE5LDcgKzIxOSw3IEBAIC0gKHZvaWQpbGF5b3V0U3Vidmlld3MKIAogLSAoVUlW
aWV3ICopcGlja2VyVmlldzooVUlQaWNrZXJWaWV3ICopcGlja2VyVmlldyB2aWV3Rm9yUm93OihO
U0ludGVnZXIpcm93SW5kZXggZm9yQ29tcG9uZW50OihOU0ludGVnZXIpY29sdW1uSW5kZXggcmV1
c2luZ1ZpZXc6KFVJVmlldyAqKXZpZXcKIHsKLSAgICBjb25zdCBPcHRpb25JdGVtJiBpdGVtID0g
W192aWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdW3Jvd0luZGV4XTsKKyAgICBjb25zdCBP
cHRpb25JdGVtJiBpdGVtID0gW192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc11bcm93
SW5kZXhdOwogICAgIFVJUGlja2VyQ29udGVudFZpZXcqIHBpY2tlckl0ZW0gPSBpdGVtLmlzR3Jv
dXAgPyBbW1tXS09wdGlvbkdyb3VwUGlja2VyQ2VsbCBhbGxvY10gaW5pdFdpdGhPcHRpb25JdGVt
Oml0ZW1dIGF1dG9yZWxlYXNlXSA6IFtbW1dLT3B0aW9uUGlja2VyQ2VsbCBhbGxvY10gaW5pdFdp
dGhPcHRpb25JdGVtOml0ZW1dIGF1dG9yZWxlYXNlXTsKIAogICAgIC8vIFRoZSBjZWxsIHN0YXJ0
cyBvdXQgd2l0aCBhIG51bGwgZnJhbWUuIFdlIG5lZWQgdG8gc2V0IGl0cyBmcmFtZSBub3cgc28g
d2UgY2FuIGZpbmQgdGhlIHJpZ2h0IGZvbnQgc2l6ZS4KQEAgLTIzNSw3ICsyMzUsNyBAQCAtIChV
SVZpZXcgKilwaWNrZXJWaWV3OihVSVBpY2tlclZpZXcgKilwaWNrZXJWaWV3IHZpZXdGb3JSb3c6
KE5TSW50ZWdlcilyb3dJbmRleAogICAgIFVJRm9udCAqZm9udCA9IHRpdGxlVGV4dExhYmVsLmZv
bnQ7CiAgICAgaWYgKHdpZHRoICE9IF9tYXhpbXVtVGV4dFdpZHRoIHx8IF9mb250U2l6ZSA9PSAw
KSB7CiAgICAgICAgIF9tYXhpbXVtVGV4dFdpZHRoID0gd2lkdGg7Ci0gICAgICAgIF9mb250U2l6
ZSA9IGFkanVzdGVkRm9udFNpemUoX21heGltdW1UZXh0V2lkdGgsIGZvbnQsIHRpdGxlVGV4dExh
YmVsLmZvbnQucG9pbnRTaXplLCBbX3ZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc10pOwor
ICAgICAgICBfZm9udFNpemUgPSBhZGp1c3RlZEZvbnRTaXplKF9tYXhpbXVtVGV4dFdpZHRoLCBm
b250LCB0aXRsZVRleHRMYWJlbC5mb250LnBvaW50U2l6ZSwgW192aWV3IGZvY3VzZWRTZWxlY3RF
bGVtZW50T3B0aW9uc10pOwogICAgIH0KIAogICAgIFt0aXRsZVRleHRMYWJlbCBzZXRGb250Oltm
b250IGZvbnRXaXRoU2l6ZTpfZm9udFNpemVdXTsKQEAgLTI1MywxNSArMjUzLDE1IEBAIC0gKE5T
SW50ZWdlciludW1iZXJPZkNvbXBvbmVudHNJblBpY2tlclZpZXc6KFVJUGlja2VyVmlldyAqKWFQ
aWNrZXJWaWV3CiAKIC0gKE5TSW50ZWdlcilwaWNrZXJWaWV3OihVSVBpY2tlclZpZXcgKilwaWNr
ZXJWaWV3IG51bWJlck9mUm93c0luQ29tcG9uZW50OihOU0ludGVnZXIpY29sdW1uSW5kZXgKIHsK
LSAgICByZXR1cm4gW192aWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdLnNpemUoKTsKKyAg
ICByZXR1cm4gW192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc10uc2l6ZSgpOwogfQog
CiAtIChOU0ludGVnZXIpZmluZEl0ZW1JbmRleEF0OihpbnQpcm93SW5kZXgKIHsKLSAgICBBU1NF
UlQocm93SW5kZXggPj0gMCAmJiAoc2l6ZV90KXJvd0luZGV4IDwgW192aWV3IGFzc2lzdGVkTm9k
ZVNlbGVjdE9wdGlvbnNdLnNpemUoKSk7CisgICAgQVNTRVJUKHJvd0luZGV4ID49IDAgJiYgKHNp
emVfdClyb3dJbmRleCA8IFtfdmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdLnNpemUo
KSk7CiAgICAgTlNJbnRlZ2VyIGl0ZW1JbmRleCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByb3dJbmRleDsgKytpKSB7Ci0gICAgICAgIGlmIChbX3ZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0
T3B0aW9uc11baV0uaXNHcm91cCkKKyAgICAgICAgaWYgKFtfdmlldyBmb2N1c2VkU2VsZWN0RWxl
bWVudE9wdGlvbnNdW2ldLmlzR3JvdXApCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
aXRlbUluZGV4Kys7CiAgICAgfQpAQCAtMjcyLDEwICsyNzIsMTAgQEAgLSAoTlNJbnRlZ2VyKWZp
bmRJdGVtSW5kZXhBdDooaW50KXJvd0luZGV4CiAKIC0gKHZvaWQpcGlja2VyVmlldzooVUlQaWNr
ZXJWaWV3ICopcGlja2VyVmlldyByb3c6KGludClyb3dJbmRleCBjb2x1bW46KGludCljb2x1bW5J
bmRleCBjaGVja2VkOihCT09MKWlzQ2hlY2tlZAogewotICAgIGlmICgoc2l6ZV90KXJvd0luZGV4
ID49IFtfdmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXS5zaXplKCkpCisgICAgaWYgKChz
aXplX3Qpcm93SW5kZXggPj0gW192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc10uc2l6
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPcHRpb25JdGVtJiBpdGVtID0gW192aWV3IGFz
c2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdW3Jvd0luZGV4XTsKKyAgICBPcHRpb25JdGVtJiBpdGVt
ID0gW192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc11bcm93SW5kZXhdOwogCiAgICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIHdvcmthcm91bmQgb25jZSA8cmRhcjovL3Byb2JsZW0vMTg3
NDUyNTM+IGlzIGZpeGVkLgogICAgIC8vIEdyb3VwIHJvd3Mgc2hvdWxkIG5vdCBiZSBjaGVja2Fi
bGUsIGJ1dCB3ZSBhcmUgZ2V0dGluZyB0aGlzIGRlbGVnYXRlIGZvcgpAQCAtMjg5LDcgKzI4OSw3
IEBAIC0gKHZvaWQpcGlja2VyVmlldzooVUlQaWNrZXJWaWV3ICopcGlja2VyVmlldyByb3c6KGlu
dClyb3dJbmRleCBjb2x1bW46KGludCljb2x1CiAgICAgfQogCiAgICAgaWYgKFtzZWxmIGFsbG93
c011bHRpcGxlU2VsZWN0aW9uXSkgewotICAgICAgICBbX3ZpZXcgcGFnZV0tPnNldEFzc2lzdGVk
Tm9kZVNlbGVjdGVkSW5kZXgoW3NlbGYgZmluZEl0ZW1JbmRleEF0OnJvd0luZGV4XSwgdHJ1ZSk7
CisgICAgICAgIFtfdmlldyBwYWdlXS0+c2V0Rm9jdXNlZEVsZW1lbnRTZWxlY3RlZEluZGV4KFtz
ZWxmIGZpbmRJdGVtSW5kZXhBdDpyb3dJbmRleF0sIHRydWUpOwogICAgICAgICBpdGVtLmlzU2Vs
ZWN0ZWQgPSBpc0NoZWNrZWQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gU2luZ2xlIHNlbGVj
dGlvbi4KQEAgLTI5OSw3ICsyOTksNyBAQCAtICh2b2lkKXBpY2tlclZpZXc6KFVJUGlja2VyVmll
dyAqKXBpY2tlclZpZXcgcm93OihpbnQpcm93SW5kZXggY29sdW1uOihpbnQpY29sdQogICAgICAg
ICAvLyBUaGlzIHByaXZhdGUgZGVsZWdhdGUgb2Z0ZW4gZ2V0cyBjYWxsZWQgZm9yIG11bHRpcGxl
IHJvd3MgaW4gdGhlIHBpY2tlciwKICAgICAgICAgLy8gc28gd2Ugb25seSBhY3RpdmF0ZSBhbmQg
c2V0IGFzIHNlbGVjdGVkIHRoZSBjaGVja2VkIGl0ZW0gaW4gc2luZ2xlIHNlbGVjdGlvbi4KICAg
ICAgICAgaWYgKGlzQ2hlY2tlZCkgewotICAgICAgICAgICAgW192aWV3IHBhZ2VdLT5zZXRBc3Np
c3RlZE5vZGVTZWxlY3RlZEluZGV4KFtzZWxmIGZpbmRJdGVtSW5kZXhBdDpyb3dJbmRleF0pOwor
ICAgICAgICAgICAgW192aWV3IHBhZ2VdLT5zZXRGb2N1c2VkRWxlbWVudFNlbGVjdGVkSW5kZXgo
W3NlbGYgZmluZEl0ZW1JbmRleEF0OnJvd0luZGV4XSk7CiAgICAgICAgICAgICBpdGVtLmlzU2Vs
ZWN0ZWQgPSBZRVM7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzMsOCArMzMzLDggQEAgLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXcKIAogICAgIF9zZWxl
Y3RlZEluZGV4ID0gTlNOb3RGb3VuZDsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgW3Zp
ZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc10uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KFtfdmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXVtpXS5pc1NlbGVjdGVkKSB7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBbdmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNd
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChbX3ZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRP
cHRpb25zXVtpXS5pc1NlbGVjdGVkKSB7CiAgICAgICAgICAgICBfc2VsZWN0ZWRJbmRleCA9IGk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzcwLDkgKzM3MCw5IEBAIC0gKHZv
aWQpY29udHJvbEVuZEVkaXRpbmcKICAgICBpZiAoX3NlbGVjdGVkSW5kZXggPT0gTlNOb3RGb3Vu
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKF9zZWxlY3RlZEluZGV4IDwgKE5TSW50ZWdl
cilbX3ZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc10uc2l6ZSgpKSB7Ci0gICAgICAgIFtf
dmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXVtfc2VsZWN0ZWRJbmRleF0uaXNTZWxlY3Rl
ZCA9IHRydWU7Ci0gICAgICAgIFtfdmlldyBwYWdlXS0+c2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJ
bmRleChfc2VsZWN0ZWRJbmRleCk7CisgICAgaWYgKF9zZWxlY3RlZEluZGV4IDwgKE5TSW50ZWdl
cilbX3ZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXS5zaXplKCkpIHsKKyAgICAgICAg
W192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc11bX3NlbGVjdGVkSW5kZXhdLmlzU2Vs
ZWN0ZWQgPSB0cnVlOworICAgICAgICBbX3ZpZXcgcGFnZV0tPnNldEZvY3VzZWRFbGVtZW50U2Vs
ZWN0ZWRJbmRleChfc2VsZWN0ZWRJbmRleCk7CiAgICAgfQogfQogCkBAIC0zODMsMTUgKzM4Mywx
NSBAQCAtIChOU0ludGVnZXIpbnVtYmVyT2ZDb21wb25lbnRzSW5QaWNrZXJWaWV3OihVSVBpY2tl
clZpZXcgKilwaWNrZXJWaWV3CiAKIC0gKE5TSW50ZWdlcilwaWNrZXJWaWV3OihVSVBpY2tlclZp
ZXcgKilwaWNrZXJWaWV3IG51bWJlck9mUm93c0luQ29tcG9uZW50OihOU0ludGVnZXIpY29sdW1u
SW5kZXgKIHsKLSAgICByZXR1cm4gX3ZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uc2VsZWN0
T3B0aW9ucy5zaXplKCk7CisgICAgcmV0dXJuIF92aWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRp
b24uc2VsZWN0T3B0aW9ucy5zaXplKCk7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXBp
Y2tlclZpZXc6KFVJUGlja2VyVmlldyAqKXBpY2tlclZpZXcgYXR0cmlidXRlZFRpdGxlRm9yUm93
OihOU0ludGVnZXIpcm93IGZvckNvbXBvbmVudDooTlNJbnRlZ2VyKWNvbXBvbmVudAogewotICAg
IGlmIChyb3cgPCAwIHx8IHJvdyA+PSAoTlNJbnRlZ2VyKVtfdmlldyBhc3Npc3RlZE5vZGVTZWxl
Y3RPcHRpb25zXS5zaXplKCkpCisgICAgaWYgKHJvdyA8IDAgfHwgcm93ID49IChOU0ludGVnZXIp
W192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc10uc2l6ZSgpKQogICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgY29uc3QgT3B0aW9uSXRlbSYgb3B0aW9uID0gW192aWV3IGFzc2lzdGVk
Tm9kZVNlbGVjdE9wdGlvbnNdW3Jvd107CisgICAgY29uc3QgT3B0aW9uSXRlbSYgb3B0aW9uID0g
W192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc11bcm93XTsKICAgICBOU011dGFibGVT
dHJpbmcgKnRyaW1tZWRUZXh0ID0gW1tvcHRpb24udGV4dCBtdXRhYmxlQ29weV0gYXV0b3JlbGVh
c2VdOwogICAgIENGU3RyaW5nVHJpbVdoaXRlc3BhY2UoKENGTXV0YWJsZVN0cmluZ1JlZil0cmlt
bWVkVGV4dCk7CiAKQEAgLTQwNCwxNiArNDA0LDE2IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAq
KXBpY2tlclZpZXc6KFVJUGlja2VyVmlldyAqKXBpY2tlclZpZXcgYXR0cmlidXRlZFRpdGxlRm9y
CiAKIC0gKHZvaWQpcGlja2VyVmlldzooVUlQaWNrZXJWaWV3ICopcGlja2VyVmlldyBkaWRTZWxl
Y3RSb3c6KE5TSW50ZWdlcilyb3cgaW5Db21wb25lbnQ6KE5TSW50ZWdlciljb21wb25lbnQKIHsK
LSAgICBpZiAocm93IDwgMCB8fCByb3cgPj0gKE5TSW50ZWdlcilbX3ZpZXcgYXNzaXN0ZWROb2Rl
U2VsZWN0T3B0aW9uc10uc2l6ZSgpKQorICAgIGlmIChyb3cgPCAwIHx8IHJvdyA+PSAoTlNJbnRl
Z2VyKVtfdmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdLnNpemUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgY29uc3QgT3B0aW9uSXRlbSYgbmV3U2VsZWN0ZWRPcHRpb24gPSBbX3Zp
ZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc11bcm93XTsKKyAgICBjb25zdCBPcHRpb25JdGVt
JiBuZXdTZWxlY3RlZE9wdGlvbiA9IFtfdmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNd
W3Jvd107CiAgICAgaWYgKG5ld1NlbGVjdGVkT3B0aW9uLmRpc2FibGVkKSB7CiAgICAgICAgIE5T
SW50ZWdlciByb3dUb1NlbGVjdCA9IE5TTm90Rm91bmQ7CiAKICAgICAgICAgLy8gU2VhcmNoIGJh
Y2t3YXJkcyBmb3IgdGhlIHByZXZpb3VzIGVuYWJsZWQgb3B0aW9uLgogICAgICAgICBmb3IgKE5T
SW50ZWdlciBpID0gcm93IC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIGNvbnN0IE9w
dGlvbkl0ZW0mIGVhcmxpZXJPcHRpb24gPSBbX3ZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9u
c11baV07CisgICAgICAgICAgICBjb25zdCBPcHRpb25JdGVtJiBlYXJsaWVyT3B0aW9uID0gW192
aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc11baV07CiAgICAgICAgICAgICBpZiAoIWVh
cmxpZXJPcHRpb24uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICByb3dUb1NlbGVjdCA9IGk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MjIsOCArNDIyLDggQEAgLSAodm9pZClwaWNr
ZXJWaWV3OihVSVBpY2tlclZpZXcgKilwaWNrZXJWaWV3IGRpZFNlbGVjdFJvdzooTlNJbnRlZ2Vy
KXJvdyBpbkNvbXAKIAogICAgICAgICAvLyBJZiBub3RoaW5nIHByZXZpb3VzLCBzZWFyY2ggZm9y
d2FyZHMgZm9yIHRoZSBuZXh0IGVuYWJsZWQgb3B0aW9uLgogICAgICAgICBpZiAocm93VG9TZWxl
Y3QgPT0gTlNOb3RGb3VuZCkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHJvdyArIDE7
IGkgPCBbX3ZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc10uc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBPcHRpb25JdGVtJiBsYXRlck9wdGlvbiA9IFtfdmlldyBhc3Np
c3RlZE5vZGVTZWxlY3RPcHRpb25zXVtpXTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBy
b3cgKyAxOyBpIDwgW192aWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc10uc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25JdGVtJiBsYXRlck9wdGlvbiA9IFtf
dmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdW2ldOwogICAgICAgICAgICAgICAgIGlm
ICghbGF0ZXJPcHRpb24uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgcm93VG9TZWxl
Y3QgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQb3BvdmVyLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdFBvcG92ZXIubW0KaW5kZXgg
NTNjMjVkMDBiOTUwYjY0NGMyZDUxODZlN2ViYWVmNDM5YWEzYjQ3NC4uZjViNjY3MTVhMDc4ZDll
ZjQzM2U0NmQwNzFhYTljYjQ4ZmNmZmYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdFBvcG92ZXIubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdFBvcG92ZXIubW0KQEAgLTEwNCw4ICsx
MDQsOCBAQCAtIChpZClpbml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3IGhhc0dyb3Vw
czooQk9PTCloYXNHcm91cHMKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBfY29udGVu
dFZpZXcgPSB2aWV3OwotICAgIFZlY3RvcjxPcHRpb25JdGVtPiYgc2VsZWN0T3B0aW9ucyA9IFtf
Y29udGVudFZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc107Ci0gICAgX2FsbG93c011bHRp
cGxlU2VsZWN0aW9uID0gX2NvbnRlbnRWaWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmlzTXVs
dGlTZWxlY3Q7CisgICAgVmVjdG9yPE9wdGlvbkl0ZW0+JiBzZWxlY3RPcHRpb25zID0gW19jb250
ZW50VmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdOworICAgIF9hbGxvd3NNdWx0aXBs
ZVNlbGVjdGlvbiA9IF9jb250ZW50Vmlldy5mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmlzTXVs
dGlTZWxlY3Q7CiAgICAgCiAgICAgLy8gRXZlbiBpZiB0aGUgc2VsZWN0IGlzIGVtcHR5LCB0aGVy
ZSBpcyBhdCBsZWFzdCBvbmUgdGFibGV2aWV3IHNlY3Rpb24uCiAgICAgX251bWJlck9mU2VjdGlv
bnMgPSAxOwpAQCAtMTI2LDcgKzEyNiw3IEBAIC0gKGlkKWluaXRXaXRoVmlldzooV0tDb250ZW50
VmlldyAqKXZpZXcgaGFzR3JvdXBzOihCT09MKWhhc0dyb3VwcwogICAgIH0KIAogICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgVUlUZXh0V3JpdGluZ0RpcmVjdGlv
biB3cml0aW5nRGlyZWN0aW9uID0gX2NvbnRlbnRWaWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LmlzUlRMID8gVUlUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0IDogVUlUZXh0V3JpdGlu
Z0RpcmVjdGlvbkxlZnRUb1JpZ2h0OworICAgIFVJVGV4dFdyaXRpbmdEaXJlY3Rpb24gd3JpdGlu
Z0RpcmVjdGlvbiA9IF9jb250ZW50Vmlldy5mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmlzUlRM
ID8gVUlUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0IDogVUlUZXh0V3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0OwogICAgIEJPT0wgb3ZlcnJpZGUgPSBOTzsKICAgICBfdGV4dEFsaWdu
bWVudCA9ICh3cml0aW5nRGlyZWN0aW9uID09IFVJVGV4dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9S
aWdodCkgPyBOU1RleHRBbGlnbm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25tZW50UmlnaHQ7CiAKQEAg
LTEzNSw3ICsxMzUsNyBAQCAtIChpZClpbml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3
IGhhc0dyb3VwczooQk9PTCloYXNHcm91cHMKICAgICAvLyBGb3IgdGhhdCByZWFzb24gd2UgaGF2
ZSB0byBvdmVycmlkZSB3aGF0IHRoZSBzeXN0ZW0gdGhpbmtzLgogICAgIGlmICh3cml0aW5nRGly
ZWN0aW9uID09IFVJVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdCkKICAgICAgICAgc2Vs
Zi52aWV3LnNlbWFudGljQ29udGVudEF0dHJpYnV0ZSA9IFVJU2VtYW50aWNDb250ZW50QXR0cmli
dXRlRm9yY2VSaWdodFRvTGVmdDsKLSAgICBbc2VsZiBzZXRUaXRsZTpzdHJpbmdXaXRoV3JpdGlu
Z0RpcmVjdGlvbihfY29udGVudFZpZXcuYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24udGl0bGUsIHdy
aXRpbmdEaXJlY3Rpb24sIG92ZXJyaWRlKV07CisgICAgW3NlbGYgc2V0VGl0bGU6c3RyaW5nV2l0
aFdyaXRpbmdEaXJlY3Rpb24oX2NvbnRlbnRWaWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24u
dGl0bGUsIHdyaXRpbmdEaXJlY3Rpb24sIG92ZXJyaWRlKV07CiAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECiAKICAgICByZXR1cm4gc2VsZjsKQEAgLTE2NywxMiArMTY3LDEy
IEBAIC0gKE5TSW50ZWdlciludW1iZXJPZlNlY3Rpb25zSW5UYWJsZVZpZXc6KFVJVGFibGVWaWV3
ICopdGFibGVWaWV3CiAKIC0gKE5TSW50ZWdlcil0YWJsZVZpZXc6KFVJVGFibGVWaWV3ICopdGFi
bGVWaWV3IG51bWJlck9mUm93c0luU2VjdGlvbjooTlNJbnRlZ2VyKXNlY3Rpb24KIHsKLSAgICBp
ZiAoW19jb250ZW50VmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXS5pc0VtcHR5KCkpCisg
ICAgaWYgKFtfY29udGVudFZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiAxOwogICAgIAogICAgIGludCByb3dDb3VudCA9IDA7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBbX2NvbnRlbnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9w
dGlvbnNdLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE9wdGlvbkl0ZW0mIGl0ZW0gPSBb
X2NvbnRlbnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdW2ldOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgW19jb250ZW50VmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNd
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX2NvbnRl
bnRWaWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9uc11baV07CiAgICAgICAgIGlmIChpdGVt
LmlzR3JvdXApCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGl0ZW0ucGFyZW50
R3JvdXBJRCA9PSBzZWN0aW9uKQpAQCAtMTkwLDggKzE5MCw4IEBAIC0gKE5TU3RyaW5nICopdGFi
bGVWaWV3OihVSVRhYmxlVmlldyAqKXRhYmxlVmlldyB0aXRsZUZvckhlYWRlckluU2VjdGlvbjoo
TlNJbnRlCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgaW50IGdyb3VwQ291bnQgPSAw
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgW19jb250ZW50VmlldyBhc3Npc3RlZE5vZGVT
ZWxlY3RPcHRpb25zXS5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBPcHRpb25JdGVtJiBp
dGVtID0gW19jb250ZW50VmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXVtpXTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IFtfY29udGVudFZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRP
cHRpb25zXS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBPcHRpb25JdGVtJiBpdGVtID0g
W19jb250ZW50VmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdW2ldOwogICAgICAgICBp
ZiAoIWl0ZW0uaXNHcm91cCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBncm91cENv
dW50Kys7CkBAIC0yMTYsOCArMjE2LDggQEAgLSAoTlNJbnRlZ2VyKWZpbmRJdGVtSW5kZXhBdDoo
TlNJbmRleFBhdGggKilpbmRleFBhdGgKICAgICAKICAgICBpbnQgb3B0aW9uSW5kZXggPSAwOwog
ICAgIGludCByb3dJbmRleCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBbX2NvbnRl
bnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVjdE9wdGlvbnNdLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX2NvbnRlbnRWaWV3IGFzc2lzdGVkTm9kZVNlbGVj
dE9wdGlvbnNdW2ldOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgW19jb250ZW50VmlldyBm
b2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0
IE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX2NvbnRlbnRWaWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50T3B0
aW9uc11baV07CiAgICAgICAgIGlmIChpdGVtLmlzR3JvdXApIHsKICAgICAgICAgICAgIHJvd0lu
ZGV4ID0gMDsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjM2LDggKzIzNiw4IEBAIC0gKE9w
dGlvbkl0ZW0gKilmaW5kSXRlbUF0OihOU0luZGV4UGF0aCAqKWluZGV4UGF0aAogICAgIEFTU0VS
VChpbmRleFBhdGguc2VjdGlvbiA8PSBfbnVtYmVyT2ZTZWN0aW9ucyk7CiAKICAgICBpbnQgaW5k
ZXggPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgW19jb250ZW50VmlldyBhc3Npc3Rl
ZE5vZGVTZWxlY3RPcHRpb25zXS5zaXplKCk7ICsraSkgewotICAgICAgICBPcHRpb25JdGVtJiBp
dGVtID0gW19jb250ZW50VmlldyBhc3Npc3RlZE5vZGVTZWxlY3RPcHRpb25zXVtpXTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IFtfY29udGVudFZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRP
cHRpb25zXS5zaXplKCk7ICsraSkgeworICAgICAgICBPcHRpb25JdGVtJiBpdGVtID0gW19jb250
ZW50VmlldyBmb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnNdW2ldOwogICAgICAgICBpZiAoaXRl
bS5pc0dyb3VwIHx8IGl0ZW0ucGFyZW50R3JvdXBJRCAhPSBpbmRleFBhdGguc2VjdGlvbikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoaW5kZXggPT0gaW5kZXhQYXRoLnJvdykK
QEAgLTI1Niw3ICsyNTYsNyBAQCAtIChVSVRhYmxlVmlld0NlbGwgKil0YWJsZVZpZXc6KFVJVGFi
bGVWaWV3ICopdGFibGVWaWV3IGNlbGxGb3JSb3dBdEluZGV4UGF0aDooTgogICAgIGNlbGwuc2Vt
YW50aWNDb250ZW50QXR0cmlidXRlID0gc2VsZi52aWV3LnNlbWFudGljQ29udGVudEF0dHJpYnV0
ZTsKICAgICBjZWxsLnRleHRMYWJlbC50ZXh0QWxpZ25tZW50ID0gX3RleHRBbGlnbm1lbnQ7CiAg
ICAgCi0gICAgaWYgKF9jb250ZW50Vmlldy5hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5zZWxlY3RP
cHRpb25zLmlzRW1wdHkoKSkgeworICAgIGlmIChfY29udGVudFZpZXcuZm9jdXNlZEVsZW1lbnRJ
bmZvcm1hdGlvbi5zZWxlY3RPcHRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBjZWxsLnRleHRM
YWJlbC5lbmFibGVkID0gTk87CiAgICAgICAgIGNlbGwudGV4dExhYmVsLnRleHQgPSBXRUJfVUlf
U1RSSU5HX0tFWSgiTm8gT3B0aW9ucyIsICJObyBPcHRpb25zIFNlbGVjdCBQb3BvdmVyIiwgIkVt
cHR5IHNlbGVjdCBsaXN0Iik7CiAgICAgICAgIGNlbGwuYWNjZXNzb3J5VHlwZSA9IFVJVGFibGVW
aWV3Q2VsbEFjY2Vzc29yeU5vbmU7CkBAIC0yNzMsNyArMjczLDcgQEAgLSAoVUlUYWJsZVZpZXdD
ZWxsICopdGFibGVWaWV3OihVSVRhYmxlVmlldyAqKXRhYmxlVmlldyBjZWxsRm9yUm93QXRJbmRl
eFBhdGg6KE4KICAgICBBU1NFUlQoaW5pdGlhbEZvbnRTaXplKTsKICAgICBpZiAodGV4dFJlY3Qu
c2l6ZS53aWR0aCAhPSBfbWF4aW11bVRleHRXaWR0aCB8fCBfZm9udFNpemUgPT0gMCkgewogICAg
ICAgICBfbWF4aW11bVRleHRXaWR0aCA9IHRleHRSZWN0LnNpemUud2lkdGg7Ci0gICAgICAgIF9m
b250U2l6ZSA9IGFkanVzdGVkRm9udFNpemUoX21heGltdW1UZXh0V2lkdGgsIGZvbnQsIGluaXRp
YWxGb250U2l6ZSwgX2NvbnRlbnRWaWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnNlbGVjdE9w
dGlvbnMpOworICAgICAgICBfZm9udFNpemUgPSBhZGp1c3RlZEZvbnRTaXplKF9tYXhpbXVtVGV4
dFdpZHRoLCBmb250LCBpbml0aWFsRm9udFNpemUsIF9jb250ZW50Vmlldy5mb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uLnNlbGVjdE9wdGlvbnMpOwogICAgIH0KICAgICAKICAgICBjb25zdCBPcHRp
b25JdGVtKiBpdGVtID0gW3NlbGYgZmluZEl0ZW1BdDppbmRleFBhdGhdOwpAQCAtMjg4LDcgKzI4
OCw3IEBAIC0gKFVJVGFibGVWaWV3Q2VsbCAqKXRhYmxlVmlldzooVUlUYWJsZVZpZXcgKil0YWJs
ZVZpZXcgY2VsbEZvclJvd0F0SW5kZXhQYXRoOihOCiAKIC0gKHZvaWQpdGFibGVWaWV3OihVSVRh
YmxlVmlldyAqKXRhYmxlVmlldyBkaWRTZWxlY3RSb3dBdEluZGV4UGF0aDooTlNJbmRleFBhdGgg
KilpbmRleFBhdGgKIHsKLSAgICBpZiAoX2NvbnRlbnRWaWV3LmFzc2lzdGVkTm9kZUluZm9ybWF0
aW9uLnNlbGVjdE9wdGlvbnMuaXNFbXB0eSgpKQorICAgIGlmIChfY29udGVudFZpZXcuZm9jdXNl
ZEVsZW1lbnRJbmZvcm1hdGlvbi5zZWxlY3RPcHRpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIE5TSW50ZWdlciBpdGVtSW5kZXggPSBbc2VsZiBmaW5kSXRlbUluZGV4
QXQ6aW5kZXhQYXRoXTsKQEAgLTMxMSw4ICszMTEsOCBAQCAtICh2b2lkKXRhYmxlVmlldzooVUlU
YWJsZVZpZXcgKil0YWJsZVZpZXcgZGlkU2VsZWN0Um93QXRJbmRleFBhdGg6KE5TSW5kZXhQYXRo
CiAgICAgICAgIC8vIFNQSSB3aGljaCBtaW1pY3MgYSB1c2VyIGFjdGlvbiBvbiB0aGUgPHNlbGVj
dD4uIE5vcm1hbGx5IHByb2dyYW1tYXRpYwogICAgICAgICAvLyBjaGFuZ2VzIGRvIG5vdCB0cmln
Z2VyICJjaGFuZ2UiIGV2ZW50cyBvbiBzdWNoIHNlbGVjdHMuCiAgICAgCi0gICAgICAgIFtfY29u
dGVudFZpZXcgcGFnZV0tPnNldEFzc2lzdGVkTm9kZVNlbGVjdGVkSW5kZXgoaXRlbUluZGV4LCB0
cnVlKTsKLSAgICAgICAgT3B0aW9uSXRlbSYgaXRlbSA9IFtfY29udGVudFZpZXcgYXNzaXN0ZWRO
b2RlU2VsZWN0T3B0aW9uc11baXRlbUluZGV4XTsKKyAgICAgICAgW19jb250ZW50VmlldyBwYWdl
XS0+c2V0Rm9jdXNlZEVsZW1lbnRTZWxlY3RlZEluZGV4KGl0ZW1JbmRleCwgdHJ1ZSk7CisgICAg
ICAgIE9wdGlvbkl0ZW0mIGl0ZW0gPSBbX2NvbnRlbnRWaWV3IGZvY3VzZWRTZWxlY3RFbGVtZW50
T3B0aW9uc11baXRlbUluZGV4XTsKICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gbmV3U3RhdGVJ
c1NlbGVjdGVkOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFt0YWJsZVZpZXcgZGVzZWxlY3RSb3dB
dEluZGV4UGF0aDppbmRleFBhdGggYW5pbWF0ZWQ6Tk9dOwpAQCAtMzQ0LDggKzM0NCw4IEBAIC0g
KHZvaWQpdGFibGVWaWV3OihVSVRhYmxlVmlldyAqKXRhYmxlVmlldyBkaWRTZWxlY3RSb3dBdElu
ZGV4UGF0aDooTlNJbmRleFBhdGgKICAgICAgICAgICAgIF9zaW5nbGVTZWxlY3Rpb25JbmRleCA9
IGluZGV4UGF0aC5yb3c7CiAgICAgICAgICAgICBfc2luZ2xlU2VsZWN0aW9uU2VjdGlvbiA9IGlu
ZGV4UGF0aC5zZWN0aW9uOwogIAotICAgICAgICAgICAgW19jb250ZW50VmlldyBwYWdlXS0+c2V0
QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleChpdGVtSW5kZXgpOwotICAgICAgICAgICAgT3B0aW9u
SXRlbSYgbmV3SXRlbSA9IFtfY29udGVudFZpZXcgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uc11b
aXRlbUluZGV4XTsKKyAgICAgICAgICAgIFtfY29udGVudFZpZXcgcGFnZV0tPnNldEZvY3VzZWRF
bGVtZW50U2VsZWN0ZWRJbmRleChpdGVtSW5kZXgpOworICAgICAgICAgICAgT3B0aW9uSXRlbSYg
bmV3SXRlbSA9IFtfY29udGVudFZpZXcgZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zXVtpdGVt
SW5kZXhdOwogICAgICAgICAgICAgbmV3SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTM5Myw3ICszOTMsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhW
aWV3OihXS0NvbnRlbnRWaWV3ICopdmlldyBoYXNHcm91cHM6KEJPT0wpaGFzR3JvdXBzCiAgICAg
W190YWJsZVZpZXdDb250cm9sbGVyIHNldFBvcG92ZXI6c2VsZl07CiAgICAgVUlWaWV3Q29udHJv
bGxlciAqcG9wb3ZlclZpZXdDb250cm9sbGVyID0gX3RhYmxlVmlld0NvbnRyb2xsZXIuZ2V0KCk7
CiAgICAgVUlOYXZpZ2F0aW9uQ29udHJvbGxlciAqbmF2Q29udHJvbGxlciA9IG5pbDsKLSAgICBC
T09MIG5lZWRzTmF2aWdhdGlvbkNvbnRyb2xsZXIgPSAhdmlldy5hc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbi50aXRsZS5pc0VtcHR5KCk7CisgICAgQk9PTCBuZWVkc05hdmlnYXRpb25Db250cm9sbGVy
ID0gIXZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi50aXRsZS5pc0VtcHR5KCk7CiAgICAg
aWYgKG5lZWRzTmF2aWdhdGlvbkNvbnRyb2xsZXIpIHsKICAgICAgICAgbmF2Q29udHJvbGxlciA9
IFtbVUlOYXZpZ2F0aW9uQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhSb290Vmlld0NvbnRyb2xs
ZXI6X3RhYmxlVmlld0NvbnRyb2xsZXIuZ2V0KCldOwogICAgICAgICBwb3BvdmVyVmlld0NvbnRy
b2xsZXIgPSBuYXZDb250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDNiMWYyMzg2MjIyZjg4Mjc1OWE2YzI0YTlhMDRmZWM5
YjQxYzI2OC4uMmU5ZjBkODg4MWE1NWYxMDJjMDA3MTc0YzJlY2UzMTEyMjhlMmM4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTE5
LDcgKzE1MTksNyBAQAogCQlDNTQyNTZCQTE4QkVDMThDMDBERTQxNzkgLyogV0tGb3JtU2VsZWN0
Q29udHJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU0MjU2QjQxOEJFQzE4QzAwREU0MTc5IC8qIFdLRm9ybVNlbGVjdENvbnRyb2wuaCAqLzsgfTsK
IAkJQzU1RjkxNzExQzU5Njc2RTAwMjlFOTJEIC8qIERhdGFEZXRlY3Rpb25SZXN1bHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NUY5MTZDMUM1OTVF
NDQwMDI5RTkyRCAvKiBEYXRhRGV0ZWN0aW9uUmVzdWx0LmggKi87IH07CiAJCUM1NzRBNTgxMTJF
NjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NzRBNTdGMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0
ZWJvYXJkVHlwZXMuaCAqLzsgfTsKLQkJQzU5QzRBNTkxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTlDNEE1NzE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24uaCAqLzsgfTsKKwkJQzU5QzRBNTkxOEI4MTE3NDAwN0JEQ0I2IC8qIEZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1OUM0QTU3MThCODExNzQwMDdCRENCNiAvKiBGb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uLmggKi87IH07CiAJCUM1QkNFNURGMUM1MDc2NkEwMENERTNGQSAvKiBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzVCQ0U1REExQzUwNzYxRDAwQ0RFM0ZBIC8qIEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmggKi87IH07CiAJCUM1RTFBRkU5MTZCMjBCNzUwMDZDQzFGMiAvKiBX
S1dlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMzI5REE2MTZBQ0U1QTkwMDMxNkRFMiAvKiBXS1dlYkFyY2hpdmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNUUxQUZFQjE2QjIwQjdF
MDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzI5REFBMTZBQ0U1QzAwMDMxNkRFMiAvKiBXS1dl
YkFyY2hpdmVSZXNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC00MzIyLDggKzQzMjIsOCBAQAogCQlDNTcxOTNCRDE4QzE0QTQzMDAyRDBG
MTIgLyogV0tGb3JtU2VsZWN0Q29udHJvbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFdLRm9ybVNlbGVjdENvbnRyb2wubW07IHBhdGggPSBpb3MvZm9ybXMvV0tG
b3JtU2VsZWN0Q29udHJvbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU3NEE1
N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhc3RlYm9hcmRUeXBlcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU5QzRBNTYxOEI4MTE3NDAwN0JEQ0I2
IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQzU5QzRBNTcxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1OUM0QTU2MThC
ODExNzQwMDdCRENCNiAvKiBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTlDNEE1NzE4QjgxMTc0MDA3QkRDQjYg
LyogRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUM1QkNFNURBMUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0
aW9uQXRQb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJbnRlcmFj
dGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oOyBwYXRoID0gaW9zL0ludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1QkNFNURC
MUM1MDc2MUQwMENERTNGQSAvKiBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uLm1tOyBwYXRoID0gaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNUZBMUVEMTE4RTEwNjIy
MDBCM0Y0MDIgLyogV0tBaXJQbGF5Um91dGVQaWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV0tBaXJQbGF5Um91dGVQaWNrZXIuaDsgcGF0aCA9IGlvcy9mb3Jtcy9XS0Fp
clBsYXlSb3V0ZVBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTAwMiw4
ICs1MDAyLDYgQEAKIAkJCQlCQzMyOUQ5OTE2QUNDRTk5MDAzMTZERTIgLyogQVBJV2ViQXJjaGl2
ZS5tbSAqLywKIAkJCQlCQzMyOUQ5RjE2QUNENDc4MDAzMTZERTIgLyogQVBJV2ViQXJjaGl2ZVJl
c291cmNlLmggKi8sCiAJCQkJQkMzMjlEOUUxNkFDRDQ3ODAwMzE2REUyIC8qIEFQSVdlYkFyY2hp
dmVSZXNvdXJjZS5tbSAqLywKLQkJCQlDNTlDNEE1NjE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uY3BwICovLAotCQkJCUM1OUM0QTU3MThCODExNzQwMDdCRENCNiAv
KiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oICovLAogCQkJCTUxNUU3NzI1MTgzREQ2RjYwMDA3
MjAzRiAvKiBBc3luY1JlcXVlc3QuY3BwICovLAogCQkJCTUxNUU3NzI2MTgzREQ2RjYwMDA3MjAz
RiAvKiBBc3luY1JlcXVlc3QuaCAqLywKIAkJCQlFMTY0QTJFRjE5MUFGMTRFMDAxMDczN0QgLyog
QmxvYkRhdGFGaWxlUmVmZXJlbmNlV2l0aFNhbmRib3hFeHRlbnNpb24uY3BwICovLApAQCAtNTAy
NCw2ICs1MDIyLDggQEAKIAkJCQlFMTA1RkU1MzE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1Jh
bmdlLmggKi8sCiAJCQkJOENGRUNFOTMxNDkwRjE0MDAwMkFBQTMyIC8qIEVkaXRvclN0YXRlLmNw
cCAqLywKIAkJCQkxQUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9yU3RhdGUuaCAqLywK
KwkJCQlDNTlDNEE1NjE4QjgxMTc0MDA3QkRDQjYgLyogRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlv
bi5jcHAgKi8sCisJCQkJQzU5QzRBNTcxOEI4MTE3NDAwN0JEQ0I2IC8qIEZvY3VzZWRFbGVtZW50
SW5mb3JtYXRpb24uaCAqLywKIAkJCQlCQ0U4MUQ4QTEzMTlGN0VGMDAyNDE5MTAgLyogRm9udElu
Zm8uY3BwICovLAogCQkJCUJDRTgxRDhCMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5oICov
LAogCQkJCTFBMTRGOERGMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmNwcCAqLywK
QEAgLTg5MjcsNyArODkyNyw2IEBACiAJCQkJQTE3NUM0NEEyMUFBMzE3MTAwMDAzN0QwIC8qIEFy
Z3VtZW50Q29kZXJzQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNzlGRDlDMTM0RDM4MDYw
MDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxQTBC
RDIxQTQ4RTZDNjAwNTRFRjc0IC8qIEFzc2VydGlvblNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAq
LywKLQkJCQlDNTlDNEE1OTE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUU3NzI4MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3lu
Y1JlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUU5NjZEMTEyRkFGNTcwMDZCQ0MyNCAv
KiBBdHRhY2htZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUEzMTczMjEzNENFQTZDMDA3QzlB
NEYgLyogQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDAyLDYgKzkwMDEs
NyBAQAogCQkJCTFBQTU3NUZCMTQ5NkI1MjYwMEE0RUUwNiAvKiBFdmVudERpc3BhdGNoZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTAwQjk2NjFBMThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkwQzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1OUM0QTU5MThCODExNzQwMDdCRENCNiAv
KiBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U4MUQ4
RDEzMTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMTRG
OEUyMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUUwMEQ2MTE4MzE3OTIxMDAwODdERDcgLyogRnJhbWVMb2FkU3RhdGUuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCBiZjY0NzE0NDlmYmI4MTkwOTA4MWM4ZGRk
N2JmMmRhNTViYzhlZTg0Li5hMzI5MmFhYzk1YjA1MGIxM2ZlNzZjNmJkZTU5YjM1NTc3ZDViMTc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMjAwLDE3ICsyMDAsMTcgQEAgdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OnVuZm9jdXMoKQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZWxlbWVudERp
ZEZvY3VzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9wYWdlLmVsZW1lbnREaWRGb2N1cygm
ZWxlbWVudCk7CisgICAgbV9wYWdlLmVsZW1lbnREaWRGb2N1cyhlbGVtZW50KTsKIH0KIAogdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OmVsZW1lbnREaWRSZWZvY3VzKEVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgbV9wYWdlLmVsZW1lbnREaWRSZWZvY3VzKCZlbGVtZW50KTsKKyAgICBtX3BhZ2UuZWxl
bWVudERpZFJlZm9jdXMoZWxlbWVudCk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjplbGVt
ZW50RGlkQmx1cihFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fcGFnZS5lbGVtZW50RGlkQmx1
cigmZWxlbWVudCk7CisgICAgbV9wYWdlLmVsZW1lbnREaWRCbHVyKGVsZW1lbnQpOwogfQogCiB2
b2lkIFdlYkNocm9tZUNsaWVudDo6bWFrZUZpcnN0UmVzcG9uZGVyKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggYzI5YmQ0ZGM1ODI0YTU4OTU1
ZGQ3NzM2MGU2OWNkMTFjYzM3YjlhYi4uN2YwNDQzZTVjNmViMzU4MjM1MmU5N2ZjM2M5NWM0ZmFj
YWRiYmQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAi
QVBJR2VvbWV0cnkuaCIKLSNpbmNsdWRlICJBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIgogI2lu
Y2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlckFjdGlvbi5o
IgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCkBAIC0zMDU5LDcgKzMwNTgsNyBAQCB2b2lkIFdl
YlBhZ2U6OmRpZFN0YXJ0UGFnZVRyYW5zaXRpb24oKQogICAgIGJvb2wgaGFzUHJldmlvdXNseUZv
Y3VzZWREdWVUb1VzZXJJbnRlcmFjdGlvbiA9IG1faGFzRXZlckZvY3VzZWRFbGVtZW50RHVlVG9V
c2VySW50ZXJhY3Rpb25TaW5jZVBhZ2VUcmFuc2l0aW9uOwogI2VuZGlmCiAgICAgbV9oYXNFdmVy
Rm9jdXNlZEVsZW1lbnREdWVUb1VzZXJJbnRlcmFjdGlvblNpbmNlUGFnZVRyYW5zaXRpb24gPSBm
YWxzZTsKLSAgICBtX2lzQXNzaXN0aW5nTm9kZUR1ZVRvVXNlckludGVyYWN0aW9uID0gZmFsc2U7
CisgICAgbV9pc0ZvY3VzaW5nRWxlbWVudER1ZVRvVXNlckludGVyYWN0aW9uID0gZmFsc2U7CiAg
ICAgbV9sYXN0RWRpdG9yU3RhdGVXYXNDb250ZW50RWRpdGFibGUgPSBFZGl0b3JTdGF0ZUlzQ29u
dGVudEVkaXRhYmxlOjpVbnNldDsKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKGhhc1ByZXZp
b3VzbHlGb2N1c2VkRHVlVG9Vc2VySW50ZXJhY3Rpb24pCkBAIC00OTcxLDggKzQ5NzAsOCBAQCB2
b2lkIFdlYlBhZ2U6OnNldFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obV9hc3Npc3RlZE5v
ZGUuZ2V0KCkpKSB7Ci0gICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lz
dGVkTm9kZSkuc2V0VmFsdWVGb3JVc2VyKHRleHQpOworICAgIGlmIChpczxIVE1MSW5wdXRFbGVt
ZW50PihtX2ZvY3VzZWRFbGVtZW50LmdldCgpKSkgeworICAgICAgICBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqbV9mb2N1c2VkRWxlbWVudCkuc2V0VmFsdWVGb3JVc2VyKHRleHQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MjY0LDUyICs1MjYzLDUzIEBAIHZvaWQgV2ViUGFn
ZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKCkKICAgICBzZW5kUGFydGlhbEVkaXRvclN0YXRlQW5kU2No
ZWR1bGVQb3N0TGF5b3V0VXBkYXRlKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cmVzZXRBc3Npc3Rl
ZE5vZGVGb3JGcmFtZShXZWJGcmFtZSogZnJhbWUpCit2b2lkIFdlYlBhZ2U6OnJlc2V0Rm9jdXNl
ZEVsZW1lbnRGb3JGcmFtZShXZWJGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFtX2Fzc2lzdGVk
Tm9kZSkKKyAgICBpZiAoIW1fZm9jdXNlZEVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkgfHwgbV9hc3Npc3RlZE5vZGUtPmRvY3VtZW50KCkuZnJh
bWUoKSA9PSBmcmFtZS0+Y29yZUZyYW1lKCkpIHsKKworICAgIGlmIChmcmFtZS0+aXNNYWluRnJh
bWUoKSB8fCBtX2ZvY3VzZWRFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkgPT0gZnJhbWUtPmNv
cmVGcmFtZSgpKSB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpTdG9wQXNzaXN0aW5nTm9kZSgpKTsKKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFbGVtZW50RGlkQmx1cigpKTsKICNlbGlmIFBMQVRGT1JN
KE1BQykKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRFZGl0YWJsZUVs
ZW1lbnRJc0ZvY3VzZWQoZmFsc2UpKTsKICNlbmRpZgotICAgICAgICBtX2Fzc2lzdGVkTm9kZSA9
IG51bGxwdHI7CisgICAgICAgIG1fZm9jdXNlZEVsZW1lbnQgPSBudWxscHRyOwogICAgIH0KIH0K
IAotdm9pZCBXZWJQYWdlOjplbGVtZW50RGlkUmVmb2N1cyhXZWJDb3JlOjpOb2RlKiBub2RlKQor
dm9pZCBXZWJQYWdlOjplbGVtZW50RGlkUmVmb2N1cyhXZWJDb3JlOjpFbGVtZW50JiBlbGVtZW50
KQogewotICAgIGVsZW1lbnREaWRGb2N1cyhub2RlKTsKKyAgICBlbGVtZW50RGlkRm9jdXMoZWxl
bWVudCk7CiAgICAgbV9oYXNQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUgPSB0cnVlOwogfQogCi12
b2lkIFdlYlBhZ2U6OmVsZW1lbnREaWRGb2N1cyhXZWJDb3JlOjpOb2RlKiBub2RlKQordm9pZCBX
ZWJQYWdlOjplbGVtZW50RGlkRm9jdXMoV2ViQ29yZTo6RWxlbWVudCYgZWxlbWVudCkKIHsKLSAg
ICBpZiAobV9hc3Npc3RlZE5vZGUgPT0gbm9kZSAmJiBtX2lzQXNzaXN0aW5nTm9kZUR1ZVRvVXNl
ckludGVyYWN0aW9uKQorICAgIGlmIChtX2ZvY3VzZWRFbGVtZW50ID09ICZlbGVtZW50ICYmIG1f
aXNGb2N1c2luZ0VsZW1lbnREdWVUb1VzZXJJbnRlcmFjdGlvbikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRNTE5hbWVzOjpzZWxlY3RUYWcp
IHx8IG5vZGUtPmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRNTE5hbWVzOjppbnB1dFRhZykgfHwgbm9k
ZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OnRleHRhcmVhVGFnKSB8fCBub2RlLT5o
YXNFZGl0YWJsZVN0eWxlKCkpIHsKLSAgICAgICAgbV9hc3Npc3RlZE5vZGUgPSBub2RlOwotICAg
ICAgICBtX2lzQXNzaXN0aW5nTm9kZUR1ZVRvVXNlckludGVyYWN0aW9uIHw9IG1fdXNlcklzSW50
ZXJhY3Rpbmc7CisgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnNlbGVjdFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6aW5w
dXRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6OnRleHRhcmVh
VGFnKSB8fCBlbGVtZW50Lmhhc0VkaXRhYmxlU3R5bGUoKSkgeworICAgICAgICBtX2ZvY3VzZWRF
bGVtZW50ID0gJmVsZW1lbnQ7CisgICAgICAgIG1faXNGb2N1c2luZ0VsZW1lbnREdWVUb1VzZXJJ
bnRlcmFjdGlvbiB8PSBtX3VzZXJJc0ludGVyYWN0aW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgaWYgKG5vZGUtPmRv
Y3VtZW50KCkud2Via2l0SXNGdWxsU2NyZWVuKCkpCi0gICAgICAgICAgICBub2RlLT5kb2N1bWVu
dCgpLndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTsKKyAgICAgICAgaWYgKGVsZW1lbnQuZG9jdW1l
bnQoKS53ZWJraXRJc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgICAgIGVsZW1lbnQuZG9jdW1lbnQo
KS53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7CiAjZW5kaWYKIAotICAgICAgICArK21fY3VycmVu
dEFzc2lzdGVkTm9kZUlkZW50aWZpZXI7Ci0gICAgICAgIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
IGluZm9ybWF0aW9uOwotICAgICAgICBnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihpbmZvcm1h
dGlvbik7CisgICAgICAgICsrbV9jdXJyZW50Rm9jdXNlZEVsZW1lbnRJZGVudGlmaWVyOworICAg
ICAgICBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uIGluZm9ybWF0aW9uOworICAgICAgICBnZXRG
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKGluZm9ybWF0aW9uKTsKICAgICAgICAgUmVmUHRyPEFQ
STo6T2JqZWN0PiB1c2VyRGF0YTsKIAotICAgICAgICBtX2Zvcm1DbGllbnQtPndpbGxCZWdpbklu
cHV0U2Vzc2lvbih0aGlzLCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSwgV2ViRnJhbWU6OmZyb21D
b3JlRnJhbWUoKm5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKSksIG1fdXNlcklzSW50ZXJhY3Rpbmcs
IHVzZXJEYXRhKTsKKyAgICAgICAgbV9mb3JtQ2xpZW50LT53aWxsQmVnaW5JbnB1dFNlc3Npb24o
dGhpcywgJmVsZW1lbnQsIFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCplbGVtZW50LmRvY3VtZW50
KCkuZnJhbWUoKSksIG1fdXNlcklzSW50ZXJhY3RpbmcsIHVzZXJEYXRhKTsKIAotICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0QXNzaXN0aW5nTm9kZShpbmZvcm1hdGlv
biwgbV91c2VySXNJbnRlcmFjdGluZywgbV9oYXNQZW5kaW5nQmx1ck5vdGlmaWNhdGlvbiwgbV9j
aGFuZ2luZ0FjdGl2aXR5U3RhdGUsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRy
YW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVsZW1lbnREaWRGb2N1cyhpbmZvcm1hdGlv
biwgbV91c2VySXNJbnRlcmFjdGluZywgbV9oYXNQZW5kaW5nQmx1ck5vdGlmaWNhdGlvbiwgbV9j
aGFuZ2luZ0FjdGl2aXR5U3RhdGUsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRy
YW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogI2VsaWYg
UExBVEZPUk0oTUFDKQotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnNlbGVjdFRhZykpCisgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpzZWxlY3RUYWcpKQogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQoZmFsc2UpKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRFZGl0YWJs
ZUVsZW1lbnRJc0ZvY3VzZWQodHJ1ZSkpOwpAQCAtNTMxOCwxNSArNTMxOCwxNSBAQCB2b2lkIFdl
YlBhZ2U6OmVsZW1lbnREaWRGb2N1cyhXZWJDb3JlOjpOb2RlKiBub2RlKQogICAgIH0KIH0KIAot
dm9pZCBXZWJQYWdlOjplbGVtZW50RGlkQmx1cihXZWJDb3JlOjpOb2RlKiBub2RlKQordm9pZCBX
ZWJQYWdlOjplbGVtZW50RGlkQmx1cihXZWJDb3JlOjpFbGVtZW50JiBlbGVtZW50KQogewotICAg
IGlmIChtX2Fzc2lzdGVkTm9kZSA9PSBub2RlKSB7CisgICAgaWYgKG1fZm9jdXNlZEVsZW1lbnQg
PT0gJmVsZW1lbnQpIHsKICAgICAgICAgbV9oYXNQZW5kaW5nQmx1ck5vdGlmaWNhdGlvbiA9IHRy
dWU7CiAgICAgICAgIFJlZlB0cjxXZWJQYWdlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzXSB7CiAgICAgICAgICAgICBpZiAocHJv
dGVjdGVkVGhpcy0+bV9oYXNQZW5kaW5nQmx1ck5vdGlmaWNhdGlvbikgewogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpTdG9wQXNzaXN0aW5nTm9kZSgpKTsKKyAgICAgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVsZW1lbnREaWRCbHVy
KCkpOwogI2VsaWYgUExBVEZPUk0oTUFDKQogICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2Vk
KGZhbHNlKSk7CiAjZW5kaWYKQEAgLTUzMzQsOCArNTMzNCw4IEBAIHZvaWQgV2ViUGFnZTo6ZWxl
bWVudERpZEJsdXIoV2ViQ29yZTo6Tm9kZSogbm9kZSkKICAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPm1faGFzUGVuZGluZ0JsdXJOb3RpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgfSk7CiAK
LSAgICAgICAgbV9pc0Fzc2lzdGluZ05vZGVEdWVUb1VzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOwot
ICAgICAgICBtX2Fzc2lzdGVkTm9kZSA9IG51bGxwdHI7CisgICAgICAgIG1faXNGb2N1c2luZ0Vs
ZW1lbnREdWVUb1VzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgICAgICBtX2ZvY3VzZWRFbGVt
ZW50ID0gbnVsbHB0cjsKICAgICB9CiB9CiAKQEAgLTU1MzUsNyArNTUzNSw3IEBAIHZvaWQgV2Vi
UGFnZTo6ZGlkQ29tbWl0TG9hZChXZWJGcmFtZSogZnJhbWUpCiAgICAgZnJhbWUtPnNldEZpcnN0
TGF5ZXJUcmVlVHJhbnNhY3Rpb25JREFmdGVyRGlkQ29tbWl0TG9hZChkb3duY2FzdDxSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYT4oKm1fZHJhd2luZ0FyZWEpLm5leHRUcmFuc2FjdGlvbklEKCkp
OwogICAgIGNhbmNlbFBvdGVudGlhbFRhcEluRnJhbWUoKmZyYW1lKTsKICNlbmRpZgotICAgIHJl
c2V0QXNzaXN0ZWROb2RlRm9yRnJhbWUoZnJhbWUpOworICAgIHJlc2V0Rm9jdXNlZEVsZW1lbnRG
b3JGcmFtZShmcmFtZSk7CiAKICAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5k
ZXggYTcxY2IwNDQzYzk3MGU0NDMwZmZlNDI2Y2I1ZDg3OGMzMzQ4ZDdiYS4uZmM0ZWExZGZiOTQy
NjRjYTFiOTdiZmQ4OTY1MzIwZTQwMmUwNzExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNhbGxiYWNr
SUQuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKICNpbmNsdWRlICJFZGl0aW5nUmFu
Z2UuaCIKKyNpbmNsdWRlICJGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJJbmplY3Rl
ZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQ
YWdlUG9saWN5Q2xpZW50LmgiCkBAIC0yNDAsNyArMjQxLDYgQEAgZW51bSBGaW5kT3B0aW9ucyA6
IHVpbnQxNl90OwogZW51bSBjbGFzcyBEcmFnQ29udHJvbGxlckFjdGlvbiA6IHVpbnQ4X3Q7CiBl
bnVtIGNsYXNzIFdlYlBvbGljeUFjdGlvbiA6IHVpbnQ4X3Q7CiAKLXN0cnVjdCBBc3Npc3RlZE5v
ZGVJbmZvcm1hdGlvbjsKIHN0cnVjdCBBdHRyaWJ1dGVkU3RyaW5nOwogc3RydWN0IERhdGFEZXRl
Y3Rpb25SZXN1bHQ7CiBzdHJ1Y3QgQmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlOwpAQCAtNTg1LDEx
ICs1ODUsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY2FwdHVyZURldmljZXNDaGFuZ2VkKCk7CiAj
ZW5kaWYKIAotICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYWxsIHRha2UgRWxlbWVudCYgaW5z
dGVhZCBvZiBOb2RlKi4KLSAgICB2b2lkIGVsZW1lbnREaWRGb2N1cyhXZWJDb3JlOjpOb2RlKik7
Ci0gICAgdm9pZCBlbGVtZW50RGlkUmVmb2N1cyhXZWJDb3JlOjpOb2RlKik7Ci0gICAgdm9pZCBl
bGVtZW50RGlkQmx1cihXZWJDb3JlOjpOb2RlKik7Ci0gICAgdm9pZCByZXNldEFzc2lzdGVkTm9k
ZUZvckZyYW1lKFdlYkZyYW1lKik7CisgICAgdm9pZCBlbGVtZW50RGlkRm9jdXMoV2ViQ29yZTo6
RWxlbWVudCYpOworICAgIHZvaWQgZWxlbWVudERpZFJlZm9jdXMoV2ViQ29yZTo6RWxlbWVudCYp
OworICAgIHZvaWQgZWxlbWVudERpZEJsdXIoV2ViQ29yZTo6RWxlbWVudCYpOworICAgIHZvaWQg
cmVzZXRGb2N1c2VkRWxlbWVudEZvckZyYW1lKFdlYkZyYW1lKik7CiAKICAgICB2b2lkIGRpc2Fi
bGVkQWRhcHRhdGlvbnNEaWRDaGFuZ2UoY29uc3QgT3B0aW9uU2V0PFdlYkNvcmU6OkRpc2FibGVk
QWRhcHRhdGlvbnM+Jik7CiAgICAgdm9pZCB2aWV3cG9ydFByb3BlcnRpZXNEaWRDaGFuZ2UoY29u
c3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKQEAgLTYyMiwyMSArNjIxLDIxIEBAIHB1
YmxpYzoKICAgICB2b2lkIGluc3BlY3Rvck5vZGVTZWFyY2hNb3ZlZFRvUG9zaXRpb24oY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYpOwogICAgIHZvaWQgaW5zcGVjdG9yTm9kZVNlYXJjaEVuZGVk
QXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAKLSAgICB2b2lkIGJsdXJB
c3Npc3RlZE5vZGUoKTsKLSAgICB2b2lkIHJlcXVlc3RBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihD
YWxsYmFja0lEKTsKLSAgICB2b2lkIHNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50
MzJfdCBnZXN0dXJlU3RhdGUsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIENh
bGxiYWNrSUQpOworICAgIHZvaWQgYmx1ckZvY3VzZWRFbGVtZW50KCk7CisgICAgdm9pZCByZXF1
ZXN0Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbihDYWxsYmFja0lEKTsKKyAgICB2b2lkIHNlbGVj
dFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJp
dHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIGJvb2wgaXNJ
bnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCB1cGRh
dGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90
IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIENhbGxiYWNrSUQpOwogICAgIHZvaWQgc2VsZWN0
V2l0aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGZyb20sIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVT
dGF0ZSwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBleHRlbmRTZWxlY3Rpb24odWludDMyX3QgZ3Jh
bnVsYXJpdHkpOwogICAgIHZvaWQgc2VsZWN0V29yZEJhY2t3YXJkKCk7CiAgICAgdm9pZCBtb3Zl
U2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENhbGxiYWNrSUQpOwotICAgIHZvaWQg
c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9k
ZSwgQ2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGly
ZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVp
bnQzMl90IGRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgQ2Fs
bGJhY2tJRCk7CisgICAgdm9pZCBzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJh
Y3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENhbGxiYWNrSUQpOworICAgIHZvaWQgc2VsZWN0UG9z
aXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVp
bnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGlu
Z1dpdGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBtb3ZlU2VsZWN0aW9u
QXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24odWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGRp
cmVjdGlvbiwgQ2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2Rl
LCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRQb2ludChjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ2Fs
bGJhY2tJRCk7CiAgICAgdm9pZCBiZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKHVpbnQzMl90IGRp
cmVjdGlvbiwgQ2FsbGJhY2tJRCk7Ci0gICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50
UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNz
aXN0ZWROb2RlLCBDYWxsYmFja0lEKTsKLSAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbldpdGhFeHRl
bnRQb2ludEFuZEJvdW5kYXJ5KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgZ3Jh
bnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIENhbGxiYWNrSUQp
OworICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFj
a0lEKTsKKyAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJ
bnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCk7CiAKICAgICB2b2lkIHJl
cXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNrSUQpOwogICAgIHZvaWQgcmVwbGFjZURpY3Rh
dGVkVGV4dChjb25zdCBTdHJpbmcmIG9sZFRleHQsIGNvbnN0IFN0cmluZyYgbmV3VGV4dCk7CkBA
IC02NTEsMTEgKzY1MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydEludGVyYWN0aW9uV2l0
aEVsZW1lbnRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdm9pZCBz
dG9wSW50ZXJhY3Rpb24oKTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMy
X3QgYWN0aW9uKTsKLSAgICB2b2lkIGZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2Fy
ZCwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBmb2N1c05leHRGb2N1c2VkRWxlbWVudChib29sIGlz
Rm9yd2FyZCwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBhdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVW
YWx1ZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1i
ZXIoZG91YmxlKTsKLSAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVNlbGVjdGVkSW5kZXgodWludDMy
X3QgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CisgICAgdm9pZCBzZXRGb2N1
c2VkRWxlbWVudFZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0Rm9jdXNlZEVsZW1l
bnRWYWx1ZUFzTnVtYmVyKGRvdWJsZSk7CisgICAgdm9pZCBzZXRGb2N1c2VkRWxlbWVudFNlbGVj
dGVkSW5kZXgodWludDMyX3QgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CiAg
ICAgV2ViQ29yZTo6SW50UmVjdCByZWN0Rm9yRWxlbWVudEF0SW50ZXJhY3Rpb25Mb2NhdGlvbigp
OwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uQXBwZWFyYW5jZSgpOwogICAgIHZvaWQgZ2V0U2Vs
ZWN0aW9uQ29udGV4dChDYWxsYmFja0lEKTsKQEAgLTExNjYsMTQgKzExNjUsMTQgQEAgcHJpdmF0
ZToKIAogICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRTZWxlY3Rpb25SZWN0c1RvUm9vdFZpZXcoV2Vi
Q29yZTo6RnJhbWVWaWV3KiwgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+Jik7CiAgICAg
UmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZUZvcldlYlNlbGVjdGlvbkF0UG9zaXRpb24oY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mLCBT
ZWxlY3Rpb25GbGFncyYpOwotICAgIHZvaWQgZ2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24mKTsKKyAgICB2b2lkIGdldEZvY3VzZWRFbGVtZW50SW5mb3Jt
YXRpb24oRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplQWNjZXNzaWJpbGl0eSgpOwogICAgIHZvaWQgaGFuZGxlU3ludGhldGljQ2xpY2soV2Vi
Q29yZTo6Tm9kZSogbm9kZVJlc3BvbmRpbmdUb0NsaWNrLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBsb2NhdGlvbik7CiAgICAgdm9pZCBjb21wbGV0ZVN5bnRoZXRpY0NsaWNrKFdlYkNvcmU6
Ok5vZGUqIG5vZGVSZXNwb25kaW5nVG9DbGljaywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
bG9jYXRpb24sIFdlYkNvcmU6OlN5bnRoZXRpY0NsaWNrVHlwZSk7CiAgICAgdm9pZCBzZW5kVGFw
SGlnaGxpZ2h0Rm9yTm9kZUlmTmVjZXNzYXJ5KHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
Tm9kZSopOwogICAgIHZvaWQgcmVzZXRUZXh0QXV0b3NpemluZygpOwotICAgIFdlYkNvcmU6OlZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoY29uc3Qg
V2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wgaXNJbnRlcmFj
dGluZ1dpdGhBc3Npc3RlZE5vZGUpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VG
b3JHcmFudWxhcml0eUF0UG9pbnQoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0
ZWROb2RlKTsKKyAgICBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uSW5G
b2N1c2VkTm9kZUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9pbnQoV2ViQ29yZTo6
RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBi
b29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpOwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKQEAgLTE2NzIsNyAr
MTY3MSw3IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6SW50U2l6ZT4gbV92aWV3
cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzOwogCiAgICAgYm9vbCBtX3VzZXJJc0ludGVyYWN0
aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNBc3Npc3RpbmdOb2RlRHVlVG9Vc2VySW50ZXJh
Y3Rpb24geyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0ZvY3VzaW5nRWxlbWVudER1ZVRvVXNlcklu
dGVyYWN0aW9uIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRXZlckZvY3VzZWRFbGVtZW50RHVl
VG9Vc2VySW50ZXJhY3Rpb25TaW5jZVBhZ2VUcmFuc2l0aW9uIHsgZmFsc2UgfTsKICAgICBib29s
IG1fbmVlZHNIaWRkZW5Db250ZW50RWRpdGFibGVRdWlyayB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X25lZWRzUGxhaW5UZXh0UXVpcmsgeyBmYWxzZSB9OwpAQCAtMTY4Miw3ICsxNjgxLDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faXNTaG93aW5nQ29udGV4dE1lbnUgeyBmYWxzZSB9OwogI2VuZGlm
CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9hc3Npc3RlZE5vZGU7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkVsZW1lbnQ+IG1fZm9jdXNlZEVsZW1lbnQ7CiAgICAgYm9vbCBtX2hhc1BlbmRp
bmdCbHVyTm90aWZpY2F0aW9uIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzUGVuZGluZ0VkaXRv
clN0YXRlVXBkYXRlIHsgZmFsc2UgfTsKICAgICAKQEAgLTE3MjQsNyArMTcyMyw3IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fcGVuZGluZ1N5bnRoZXRpY0NsaWNrTm9k
ZTsKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fcGVuZGluZ1N5bnRoZXRpY0NsaWNrTG9jYXRp
b247CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fcHJldmlvdXNFeHBvc2VkQ29udGVudFJlY3Q7
Ci0gICAgdWludDY0X3QgbV9jdXJyZW50QXNzaXN0ZWROb2RlSWRlbnRpZmllciB7IDAgfTsKKyAg
ICBGb2N1c2VkRWxlbWVudElkZW50aWZpZXIgbV9jdXJyZW50Rm9jdXNlZEVsZW1lbnRJZGVudGlm
aWVyIHsgMCB9OwogICAgIE9wdGlvbmFsPER5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVJRD4gbV9w
ZW5kaW5nRHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEOwogICAgIGRvdWJsZSBtX2xhc3RUcmFu
c2FjdGlvblBhZ2VTY2FsZUZhY3RvciB7IDAgfTsKICAgICB1aW50NjRfdCBtX2xhc3RUcmFuc2Fj
dGlvbklEV2l0aFNjYWxlQ2hhbmdlIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggYmM5ZTNlYzA4NWNmZDI5
OTZkOTE4MzJmN2U0MGQzZWMzYjYxYmQ0Mi4uZTI2NTRkOTQzY2Y0YzRmNmI1ZTQ5N2ViNzkyZmI4
ZDVkNjVjYmJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC01OCwyMCArNTgsMjAgQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgVGFwSGlnaGxpZ2h0QXRQb3NpdGlvbih1aW50NjRf
dCByZXF1ZXN0SUQsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQpCiAgICAgSW5zcGVjdG9yTm9k
ZVNlYXJjaE1vdmVkVG9Qb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQogICAgIElu
c3BlY3Rvck5vZGVTZWFyY2hFbmRlZEF0UG9zaXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBwb2lu
dCkKLSAgICBCbHVyQXNzaXN0ZWROb2RlKCkKLSAgICBTZWxlY3RXaXRoR2VzdHVyZShXZWJDb3Jl
OjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVU
eXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3Rl
ZE5vZGUsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIEJsdXJGb2N1c2VkRWxl
bWVudCgpCisgICAgU2VsZWN0V2l0aEdlc3R1cmUoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVp
bnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVy
ZVN0YXRlLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdlYktpdDo6Q2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNv
cmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCBX
ZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTZWxlY3RXaXRoVHdvVG91Y2hlcyhX
ZWJDb3JlOjpJbnRQb2ludCBmcm9tLCBXZWJDb3JlOjpJbnRQb2ludCB0bywgdWludDMyX3QgZ2Vz
dHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxi
YWNrSUQpCiAgICAgRXh0ZW5kU2VsZWN0aW9uKHVpbnQzMl90IGdyYW51bGFyaXR5KQogICAgIFNl
bGVjdFdvcmRCYWNrd2FyZCgpCiAgICAgTW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zm
c2V0LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLSAgICBTZWxlY3RUZXh0V2l0aEdy
YW51bGFyaXR5QXRQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgZ3JhbnVs
YXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdlYktpdDo6Q2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQotICAgIFNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rp
b24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJf
dCBkaXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdlYktpdDo6
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIFNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBv
aW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKKyAgICBTZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6
OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGlyZWN0aW9u
LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdlYktpdDo6Q2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogICAgIE1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbih1
aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGlyZWN0aW9uLCBXZWJLaXQ6OkNhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKLSAgICBTZWxlY3RQb3NpdGlvbkF0UG9pbnQoV2ViQ29yZTo6SW50UG9p
bnQgcG9pbnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdlYktpdDo6Q2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQorICAgIFNlbGVjdFBvc2l0aW9uQXRQb2ludChXZWJDb3JlOjpJ
bnRQb2ludCBwb2ludCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXZWJL
aXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBCZWdpblNlbGVjdGlvbkluRGlyZWN0aW9u
KHVpbnQzMl90IGRpcmVjdGlvbiwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCi0gICAg
VXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBi
b29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2Fs
bGJhY2tJRCkKLSAgICBVcGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShX
ZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRl
cmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQor
ICAgIFVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2lu
dCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXZWJLaXQ6OkNhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKKyAgICBVcGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3Vu
ZGFyeShXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wg
aXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxi
YWNrSUQpCiAgICAgUmVxdWVzdERpY3RhdGlvbkNvbnRleHQoV2ViS2l0OjpDYWxsYmFja0lEIGNh
bGxiYWNrSUQpCiAgICAgUmVwbGFjZURpY3RhdGVkVGV4dChTdHJpbmcgb2xkVGV4dCwgU3RyaW5n
IG5ld1RleHQpCiAgICAgUmVwbGFjZVNlbGVjdGVkVGV4dChTdHJpbmcgb2xkVGV4dCwgU3RyaW5n
IG5ld1RleHQpCkBAIC04NSwxMSArODUsMTEgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lS
ZWNlaXZlciB7CiAgICAgU3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbihXZWJD
b3JlOjpJbnRQb2ludCBwb2ludCkKICAgICBTdG9wSW50ZXJhY3Rpb24oKQogICAgIFBlcmZvcm1B
Y3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQotICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9k
ZShib29sIGlzRm9yd2FyZCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCi0gICAgU2V0
QXNzaXN0ZWROb2RlVmFsdWUoU3RyaW5nIHZhbHVlKQorICAgIEZvY3VzTmV4dEZvY3VzZWRFbGVt
ZW50KGJvb2wgaXNGb3J3YXJkLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyAgICBT
ZXRGb2N1c2VkRWxlbWVudFZhbHVlKFN0cmluZyB2YWx1ZSkKICAgICBBdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHMoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpCi0gICAgU2V0QXNzaXN0
ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUpCi0gICAgU2V0QXNzaXN0ZWROb2RlU2Vs
ZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKQor
ICAgIFNldEZvY3VzZWRFbGVtZW50VmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUpCisgICAgU2V0
Rm9jdXNlZEVsZW1lbnRTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVs
dGlwbGVTZWxlY3Rpb24pCiAgICAgQXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkKICAgICBB
cHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZChib29sIGlzU3VzcGVuZGVkVW5kZXJMb2NrKQog
ICAgIEFwcGxpY2F0aW9uRGlkRmluaXNoU25hcHNob3R0aW5nQWZ0ZXJFbnRlcmluZ0JhY2tncm91
bmQoKQpAQCAtMTA2LDcgKzEwNiw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2
ZXIgewogICAgIFN0b3JlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShib29sIHNob3VsZFN0b3Jl
KQogICAgIFN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBwb3Np
dGlvbkluV2luZG93KQogICAgIENhbmNlbEF1dG9zY3JvbGwoKQotICAgIFJlcXVlc3RBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbihXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyAgICBSZXF1
ZXN0Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbihXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJ
RCkKICAgICBIYXJkd2FyZUtleWJvYXJkQXZhaWxhYmlsaXR5Q2hhbmdlZCgpCiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQppbmRleCA5Zjk5YjRiZTVjZTg5NmExNWI4ZTM0ZjcwZjg5MDRiZWU5MDdlNWU3Li5jMTUwMmFj
YjQ2YWJhNDRlZThkNTYwN2ZhYzg0ZTliMGMyOTlhYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjksNyArMjksNiBA
QAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlJT1Mu
aCIKLSNpbXBvcnQgIkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgiCiAjaW1wb3J0ICJEYXRhUmVm
ZXJlbmNlLmgiCiAjaW1wb3J0ICJEcmF3aW5nQXJlYS5oIgogI2ltcG9ydCAiRWRpdGluZ1Jhbmdl
LmgiCkBAIC0yNDEsMTAgKzI0MCwxMCBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtRWRpdG9yU3Rh
dGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0LCBJbmNsdWRlUG9zdAogICAgIH0K
ICAgICBwb3N0TGF5b3V0RGF0YS5pbnNpZGVGaXhlZFBvc2l0aW9uID0gc3RhcnROb2RlSXNJbnNp
ZGVGaXhlZFBvc2l0aW9uIHx8IGVuZE5vZGVJc0luc2lkZUZpeGVkUG9zaXRpb247CiAgICAgaWYg
KCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKLSAgICAgICAgaWYgKG1fYXNzaXN0ZWROb2RlICYmIG1f
YXNzaXN0ZWROb2RlLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5z
ZWxlY3Rpb25DbGlwUmVjdCA9IHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhtX2Fzc2lzdGVkTm9k
ZS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7Ci0gICAgICAgICAgICBw
b3N0TGF5b3V0RGF0YS5jYXJldENvbG9yID0gbV9hc3Npc3RlZE5vZGUtPnJlbmRlcmVyKCktPnN0
eWxlKCkuY2FyZXRDb2xvcigpOwotICAgICAgICAgICAgcG9zdExheW91dERhdGEuZWxlbWVudElz
VHJhbnNwYXJlbnQgPSBtX2Fzc2lzdGVkTm9kZS0+cmVuZGVyZXIoKS0+aXNUcmFuc3BhcmVudFJl
c3BlY3RpbmdQYXJlbnRGcmFtZXMoKTsKKyAgICAgICAgaWYgKG1fZm9jdXNlZEVsZW1lbnQgJiYg
bV9mb2N1c2VkRWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgICAgICAgICAgcG9zdExheW91dERh
dGEuc2VsZWN0aW9uQ2xpcFJlY3QgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcobV9mb2N1c2Vk
RWxlbWVudC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CisgICAgICAg
ICAgICBwb3N0TGF5b3V0RGF0YS5jYXJldENvbG9yID0gbV9mb2N1c2VkRWxlbWVudC0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS5jYXJldENvbG9yKCk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5l
bGVtZW50SXNUcmFuc3BhcmVudCA9IG1fZm9jdXNlZEVsZW1lbnQtPnJlbmRlcmVyKCktPmlzVHJh
bnNwYXJlbnRSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCk7CiAgICAgICAgIH0KICAgICAgICAgY29t
cHV0ZUVkaXRhYmxlUm9vdEhhc0NvbnRlbnRBbmRQbGFpblRleHQoc2VsZWN0aW9uLCBwb3N0TGF5
b3V0RGF0YSk7CiAgICAgfQpAQCAtNjE1LDcgKzYxNCw3IEBAIHZvaWQgV2ViUGFnZTo6Y29tcGxl
dGVTeW50aGV0aWNDbGljayhOb2RlKiBub2RlUmVzcG9uZGluZ1RvQ2xpY2ssIGNvbnN0IFdlYkNv
cmU6CiAgICAgLy8gSWYgdGhlIG5vZGUgaGFzIGJlZW4gZm9jdXNlZCBieSBKYXZhU2NyaXB0IHdp
dGhvdXQgdXNlciBpbnRlcmFjdGlvbiwgdGhlCiAgICAgLy8ga2V5Ym9hcmQgaXMgbm90IG9uIHNj
cmVlbi4KICAgICBpZiAobmV3Rm9jdXNlZEVsZW1lbnQgJiYgbmV3Rm9jdXNlZEVsZW1lbnQgPT0g
b2xkRm9jdXNlZEVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnREaWRSZWZvY3VzKG5ld0ZvY3VzZWRF
bGVtZW50LmdldCgpKTsKKyAgICAgICAgZWxlbWVudERpZFJlZm9jdXMoKm5ld0ZvY3VzZWRFbGVt
ZW50KTsKIAogICAgIGlmICghdGFwV2FzSGFuZGxlZCB8fCAhbm9kZVJlc3BvbmRpbmdUb0NsaWNr
IHx8ICFub2RlUmVzcG9uZGluZ1RvQ2xpY2stPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWROb3RIYW5kbGVUYXBBc0NsaWNrKHJvdW5kZWRJ
bnRQb2ludChsb2NhdGlvbikpKTsKQEAgLTY0MywxMyArNjQyLDEzIEBAIHZvaWQgV2ViUGFnZTo6
aGFuZGxlVGFwKGNvbnN0IEludFBvaW50JiBwb2ludCwgdWludDY0X3QgbGFzdExheWVyVHJlZVRy
YW5zYWN0aW9uCiAgICAgICAgIGhhbmRsZVN5bnRoZXRpY0NsaWNrKG5vZGVSZXNwb25kaW5nVG9D
bGljaywgYWRqdXN0ZWRQb2ludCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cmVxdWVzdEFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQ
YWdlOjpyZXF1ZXN0Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbihXZWJLaXQ6OkNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKIHsKLSAgICBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiBpbmZvOwotICAgIGlm
IChtX2Fzc2lzdGVkTm9kZSkKLSAgICAgICAgZ2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oaW5m
byk7CisgICAgRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiBpbmZvOworICAgIGlmIChtX2ZvY3Vz
ZWRFbGVtZW50KQorICAgICAgICBnZXRGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKGluZm8pOwog
Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bkNhbGxiYWNrKGluZm8sIGNhbGxiYWNrSUQpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb25DYWxsYmFjayhpbmZvLCBjYWxsYmFja0lE
KSk7CiB9CiAKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKQEAgLTg3NCwyOSArODczLDMx
IEBAIHZvaWQgV2ViUGFnZTo6aW5zcGVjdG9yTm9kZVNlYXJjaEVuZGVkQXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvbikKICAgICAgICAgbm9kZS0+aW5zcGVjdCgpOwogfQogCi12
b2lkIFdlYlBhZ2U6OmJsdXJBc3Npc3RlZE5vZGUoKQordm9pZCBXZWJQYWdlOjpibHVyRm9jdXNl
ZEVsZW1lbnQoKQogewotICAgIGlmIChpczxFbGVtZW50PihtX2Fzc2lzdGVkTm9kZS5nZXQoKSkp
Ci0gICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkuYmx1cigpOworICAg
IGlmICghbV9mb2N1c2VkRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mb2N1c2Vk
RWxlbWVudC0+Ymx1cigpOwogfQogCi12b2lkIFdlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVZhbHVl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIFdlYlBhZ2U6OnNldEZvY3VzZWRFbGVtZW50VmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyBGSVhNRTogc2hvdWxkIGFsc28gaGFu
ZGxlIHRoZSBjYXNlIG9mIEhUTUxTZWxlY3RFbGVtZW50LgotICAgIGlmIChpczxIVE1MSW5wdXRF
bGVtZW50PihtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkuc2V0VmFsdWUodmFsdWUsIERpc3BhdGNoSW5wdXRB
bmRDaGFuZ2VFdmVudCk7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZm9jdXNlZEVs
ZW1lbnQuZ2V0KCkpKQorICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9mb2N1
c2VkRWxlbWVudCkuc2V0VmFsdWUodmFsdWUsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7
CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUg
dmFsdWUpCit2b2lkIFdlYlBhZ2U6OnNldEZvY3VzZWRFbGVtZW50VmFsdWVBc051bWJlcihkb3Vi
bGUgdmFsdWUpCiB7Ci0gICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fYXNzaXN0ZWROb2Rl
LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWRO
b2RlKS5zZXRWYWx1ZUFzTnVtYmVyKHZhbHVlLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQp
OworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihtX2ZvY3VzZWRFbGVtZW50LmdldCgpKSkK
KyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fZm9jdXNlZEVsZW1lbnQpLnNl
dFZhbHVlQXNOdW1iZXIodmFsdWUsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7CiB9CiAK
LXZvaWQgV2ViUGFnZTo6c2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRl
eCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKQordm9pZCBXZWJQYWdlOjpzZXRGb2N1c2Vk
RWxlbWVudFNlbGVjdGVkSW5kZXgodWludDMyX3QgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNl
bGVjdGlvbikKIHsKLSAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KG1fYXNzaXN0ZWROb2Rl
LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCptX2Fzc2lzdGVk
Tm9kZSkub3B0aW9uU2VsZWN0ZWRCeVVzZXIoaW5kZXgsIHRydWUsIGFsbG93TXVsdGlwbGVTZWxl
Y3Rpb24pOworICAgIGlmIChpczxIVE1MU2VsZWN0RWxlbWVudD4obV9mb2N1c2VkRWxlbWVudC5n
ZXQoKSkpCisgICAgICAgIGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50PigqbV9mb2N1c2VkRWxl
bWVudCkub3B0aW9uU2VsZWN0ZWRCeVVzZXIoaW5kZXgsIHRydWUsIGFsbG93TXVsdGlwbGVTZWxl
Y3Rpb24pOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNob3dJbnNwZWN0b3JIaWdobGlnaHQoY29uc3Qg
V2ViQ29yZTo6SGlnaGxpZ2h0JiBoaWdobGlnaHQpCkBAIC05MzUsMTMgKzkzNiwxMyBAQCB2b2lk
IFdlYlBhZ2U6OnNldEZvcmNlQWx3YXlzVXNlclNjYWxhYmxlKGJvb2wgdXNlclNjYWxhYmxlKQog
ICAgIG1fdmlld3BvcnRDb25maWd1cmF0aW9uLnNldEZvcmNlQWx3YXlzVXNlclNjYWxhYmxlKHVz
ZXJTY2FsYWJsZSk7CiB9CiAKLXN0YXRpYyBGbG9hdFF1YWQgaW5uZXJGcmFtZVF1YWQoY29uc3Qg
RnJhbWUmIGZyYW1lLCBjb25zdCBOb2RlJiBhc3Npc3RlZE5vZGUpCitzdGF0aWMgRmxvYXRRdWFk
IGlubmVyRnJhbWVRdWFkKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgRWxlbWVudCYgZm9jdXNl
ZEVsZW1lbnQpCiB7CiAgICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBudWxscHRy
OwotICAgIGlmIChhc3Npc3RlZE5vZGUuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnRleHRhcmVhVGFn
KSB8fCBhc3Npc3RlZE5vZGUuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSB8fCBhc3Np
c3RlZE5vZGUuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRhZykpCi0gICAgICAgIHJlbmRl
cmVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oYXNzaXN0ZWROb2RlLnJlbmRlcmVyKCkpOwot
ICAgIGVsc2UgaWYgKEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBhc3Npc3RlZE5vZGUu
cm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgIGlmIChmb2N1c2VkRWxlbWVudC5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGV4dGFyZWFUYWcpIHx8IGZvY3VzZWRFbGVtZW50Lmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjppbnB1dFRhZykgfHwgZm9jdXNlZEVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6
OnNlbGVjdFRhZykpCisgICAgICAgIHJlbmRlcmVyID0gZm9jdXNlZEVsZW1lbnQucmVuZGVyZXIo
KTsKKyAgICBlbHNlIGlmIChhdXRvKiByb290RWRpdGFibGVFbGVtZW50ID0gZm9jdXNlZEVsZW1l
bnQucm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICByZW5kZXJlciA9IHJvb3RFZGl0YWJs
ZUVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgCiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTk1Nywx
MSArOTU4LDExIEBAIHN0YXRpYyBGbG9hdFF1YWQgaW5uZXJGcmFtZVF1YWQoY29uc3QgRnJhbWUm
IGZyYW1lLCBjb25zdCBOb2RlJiBhc3Npc3RlZE5vZGUpCiAgICAgcmV0dXJuIEZsb2F0UXVhZChi
b3VuZGluZ0JveCk7CiB9CiAKLXN0YXRpYyBJbnRQb2ludCBjb25zdHJhaW5Qb2ludChjb25zdCBJ
bnRQb2ludCYgcG9pbnQsIGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgTm9kZSYgYXNzaXN0ZWRO
b2RlKQorc3RhdGljIEludFBvaW50IGNvbnN0cmFpblBvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCwgY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBFbGVtZW50JiBmb2N1c2VkRWxlbWVudCkKIHsK
LSAgICBBU1NFUlQoJmFzc2lzdGVkTm9kZS5kb2N1bWVudCgpID09IGZyYW1lLmRvY3VtZW50KCkp
OworICAgIEFTU0VSVCgmZm9jdXNlZEVsZW1lbnQuZG9jdW1lbnQoKSA9PSBmcmFtZS5kb2N1bWVu
dCgpKTsKICAgICBjb25zdCBpbnQgREVGQVVMVF9DT05TVFJBSU5fSU5TRVQgPSAyOwotICAgIElu
dFJlY3QgaW5uZXJGcmFtZSA9IGlubmVyRnJhbWVRdWFkKGZyYW1lLCBhc3Npc3RlZE5vZGUpLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCBpbm5lckZyYW1lID0gaW5uZXJGcmFt
ZVF1YWQoZnJhbWUsIGZvY3VzZWRFbGVtZW50KS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAg
IEludFBvaW50IGNvbnN0cmFpbmVkUG9pbnQgPSBwb2ludDsKIAogICAgIGludCBtaW5YID0gaW5u
ZXJGcmFtZS54KCkgKyBERUZBVUxUX0NPTlNUUkFJTl9JTlNFVDsKQEAgLTEwODksMTAgKzEwOTAs
MTAgQEAgUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvcldlYlNlbGVjdGlvbkF0UG9zaXRp
b24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBjb24KICAgICByZXR1cm4gcmFuZ2UtPmNvbGxhcHNl
ZCgpID8gbnVsbHB0ciA6IHJhbmdlOwogfQogCi12b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0
dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90
IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIGJvb2wgaXNJbnRlcmFjdGluZ1dp
dGhBc3Npc3RlZE5vZGUsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZTo6c2Vs
ZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0
eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0lu
dGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAg
ICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbklu
Rm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0
ZWROb2RlKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25J
bkZvY3VzZWROb2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3Vz
ZWRFbGVtZW50KTsKIAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkgewogICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5
cGUsIGdlc3R1cmVTdGF0ZSwgMCwgY2FsbGJhY2tJRCkpOwpAQCAtMTQ2Miw4ICsxNDYzLDggQEAg
dm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKICAgICAKIHZvaWQgV2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xsQXRQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbkluV2luZG93KQogewot
ICAgIGlmIChtX2Fzc2lzdGVkTm9kZSAmJiBtX2Fzc2lzdGVkTm9kZS0+cmVuZGVyZXIoKSkKLSAg
ICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zdGFydFNlbGVjdGlvbkF1
dG9zY3JvbGwobV9hc3Npc3RlZE5vZGUtPnJlbmRlcmVyKCksIHBvc2l0aW9uSW5XaW5kb3cpOwor
ICAgIGlmIChtX2ZvY3VzZWRFbGVtZW50ICYmIG1fZm9jdXNlZEVsZW1lbnQtPnJlbmRlcmVyKCkp
CisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc3RhcnRTZWxlY3Rp
b25BdXRvc2Nyb2xsKG1fZm9jdXNlZEVsZW1lbnQtPnJlbmRlcmVyKCksIHBvc2l0aW9uSW5XaW5k
b3cpOwogICAgIGVsc2UgewogICAgICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpAQCAtMTU2MywyNyAr
MTU2NCwyNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4
dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZQogICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFjayhzZWxlY3Rpb25SZWN0cywgY2FsbGJh
Y2tJRCkpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gV2ViUGFnZTo6dmlzaWJsZVBvc2l0aW9uSW5G
b2N1c2VkTm9kZUZvclBvaW50KGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIHBv
aW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKQorVmlzaWJsZVBvc2l0aW9u
IFdlYlBhZ2U6OnZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChjb25zdCBGcmFt
ZSYgZnJhbWUsIGNvbnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZv
Y3VzZWRFbGVtZW50KQogewogICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQoZnJhbWUudmlldygp
LT5yb290Vmlld1RvQ29udGVudHMocG9pbnQpKTsKLSAgICBJbnRQb2ludCBjb25zdHJhaW5lZFBv
aW50ID0gbV9hc3Npc3RlZE5vZGUgJiYgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUgPyBj
b25zdHJhaW5Qb2ludChhZGp1c3RlZFBvaW50LCBmcmFtZSwgKm1fYXNzaXN0ZWROb2RlKSA6IGFk
anVzdGVkUG9pbnQ7CisgICAgSW50UG9pbnQgY29uc3RyYWluZWRQb2ludCA9IG1fZm9jdXNlZEVs
ZW1lbnQgJiYgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCA/IGNvbnN0cmFpblBvaW50
KGFkanVzdGVkUG9pbnQsIGZyYW1lLCAqbV9mb2N1c2VkRWxlbWVudCkgOiBhZGp1c3RlZFBvaW50
OwogICAgIHJldHVybiBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdHJhaW5lZFBv
aW50KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvaW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2Rl
LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdlYlBhZ2U6OnNlbGVjdFBvc2l0aW9uQXRQ
b2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dp
dGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGF1dG8mIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2Rl
Rm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9k
ZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7
CiAgICAgCiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKQogICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lE
KSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVj
dGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5
LCB1aW50MzJfdCBkaXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUs
IENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdEJv
dW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQz
Ml90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGluZ1dp
dGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGF1dG8mIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2Rl
Rm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9k
ZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCk7
CiAKICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKICAgICAgICAgcG9zaXRpb24gPSBw
b3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5PihncmFudWxhcml0eSksIHN0YXRpY19jYXN0PFNlbGVj
dGlvbkRpcmVjdGlvbj4oZGlyZWN0aW9uKSk7CkBAIC0xNjA3LDkgKzE2MDgsOSBAQCB2b2lkIFdl
YlBhZ2U6Om1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbih1aW50MzJfdCBncmFu
dWxhcml0eSwgdWludDMyXwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENh
bGxiYWNrKGNhbGxiYWNrSUQpKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZv
ckdyYW51bGFyaXR5QXRQb2ludChGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Np
c3RlZE5vZGUpCitSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yR3JhbnVsYXJpdHlBdFBv
aW50KEZyYW1lJiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJf
dCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KQogewot
ICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5v
ZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWRO
b2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50
KTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CiAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSkgewpAQCAtMTYzNywxMSArMTYz
OCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmVjdElzVG9vQmlnRm9yU2VsZWN0aW9uKGNvbnN0
IEludFJlY3QmIGJsb2NrUmVjdCwgY29uc3QgRnJhbQogICAgIHJldHVybiBibG9ja1JlY3QuaGVp
Z2h0KCkgPiBmcmFtZS52aWV3KCktPnVub2JzY3VyZWRDb250ZW50UmVjdCgpLmhlaWdodCgpICog
ZmFjdG9yOwogfQogCi12b2lkIFdlYlBhZ2U6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHks
IGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIENhbGxiYWNrSUQgY2FsbGJhY2tJ
RCkKK3ZvaWQgV2ViUGFnZTo6c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0lu
dGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAg
ICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZUZvckdyYW51bGFyaXR5QXRQ
b2ludChmcmFtZSwgcG9pbnQsIGdyYW51bGFyaXR5LCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVk
Tm9kZSk7Ci0gICAgaWYgKCFpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSkgeworICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChmcmFtZSwgcG9p
bnQsIGdyYW51bGFyaXR5LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKKyAgICBp
ZiAoIWlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpIHsKICAgICAgICAgbV9ibG9ja1Nl
bGVjdGlvbkRlc2lyZWRTaXplLnNldFdpZHRoKGJsb2NrU2VsZWN0aW9uU3RhcnRXaWR0aCk7CiAg
ICAgICAgIG1fYmxvY2tTZWxlY3Rpb25EZXNpcmVkU2l6ZS5zZXRIZWlnaHQoYmxvY2tTZWxlY3Rp
b25TdGFydEhlaWdodCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrU2VsZWN0aW9uID0gbnVsbHB0
cjsKQEAgLTE2NDksNyArMTY1MCw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0VGV4dFdpdGhHcmFu
dWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1CiAgICAgICAg
IGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKSkKICAg
ICAgICAgICAgIG1fYmxvY2tSZWN0Rm9yVGV4dFNlbGVjdGlvbiA9IHJlbmRlcmVyLT5hYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRv
IHBhcmFncmFwaFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHZpc2libGVQ
b3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdX
aXRoQXNzaXN0ZWROb2RlKSwgUGFyYWdyYXBoR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQp
OworICAgICAgICAgICAgYXV0byBwYXJhZ3JhcGhSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZH
cmFudWxhcml0eSh2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoZnJhbWUsIHBv
aW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KSwgUGFyYWdyYXBoR3JhbnVsYXJp
dHksIERpcmVjdGlvbkZvcndhcmQpOwogICAgICAgICAgICAgaWYgKHBhcmFncmFwaFJhbmdlICYm
ICFwYXJhZ3JhcGhSYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgICAgICAgICAgbV9ibG9ja1Jl
Y3RGb3JUZXh0U2VsZWN0aW9uID0gc2VsZWN0aW9uQm94Rm9yUmFuZ2UocGFyYWdyYXBoUmFuZ2Uu
Z2V0KCkpOwogICAgICAgICB9CkBAIC0xNjcwLDExICsxNjcxLDExIEBAIHZvaWQgV2ViUGFnZTo6
YmVnaW5TZWxlY3Rpb25JbkRpcmVjdGlvbih1aW50MzJfdCBkaXJlY3Rpb24sIENhbGxiYWNrSUQg
Y2FsbGJhY2tJCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxi
YWNrKG1fc2VsZWN0aW9uQW5jaG9yID09IFN0YXJ0LCBjYWxsYmFja0lEKSk7CiB9CiAKLXZvaWQg
V2ViUGFnZTo6dXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0lu
dGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBX
ZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnRBbmRCb3VuZGFyeShjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50
ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAg
ICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5G
b2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3Rl
ZE5vZGUpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSByYW5nZUZvckdyYW51bGFyaXR5
QXRQb2ludChmcmFtZSwgcG9pbnQsIGdyYW51bGFyaXR5LCBpc0ludGVyYWN0aW5nV2l0aEFzc2lz
dGVkTm9kZSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9u
SW5Gb2N1c2VkTm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1
c2VkRWxlbWVudCk7CisgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IHJhbmdlRm9yR3JhbnVs
YXJpdHlBdFBvaW50KGZyYW1lLCBwb2ludCwgZ3JhbnVsYXJpdHksIGlzSW50ZXJhY3RpbmdXaXRo
Rm9jdXNlZEVsZW1lbnQpOwogICAgIAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSB8fCAhbV9p
bml0aWFsU2VsZWN0aW9uIHx8ICFuZXdSYW5nZSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soZmFsc2UsIGNhbGxiYWNrSUQpKTsKQEAgLTE2
OTksMTAgKzE3MDAsMTAgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50
UG9pbnRBbmRCb3VuZGFyeShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYKICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlVuc2lnbmVkQ2FsbGJhY2soc2VsZWN0aW9uU3RhcnQgPT0gbV9p
bml0aWFsU2VsZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIGNhbGxiYWNrSUQpKTsKIH0KIAotdm9p
ZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvaW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBDYWxs
YmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhFeHRl
bnRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvb2wgaXNJbnRlcmFjdGlu
Z1dpdGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGF1dG8m
IGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
LSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWRO
b2RlRm9yUG9pbnQoZnJhbWUsIHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2Vk
Tm9kZUZvclBvaW50KGZyYW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVu
dCk7CiAKICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpIHsKICAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKGZhbHNlLCBjYWxsYmFja0lEKSk7CkBA
IC0yMDg2LDE1ICsyMDg3LDE1IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UG9zaXRpb25JbmZvcm1hdGlv
bihjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdCYgcmVxdWVzCiAgICAgRmxvYXRQ
b2ludCBhZGp1c3RlZFBvaW50OwogICAgIE5vZGUqIGhpdE5vZGUgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLm5vZGVSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhyZXF1ZXN0LnBvaW50LCBhZGp1c3RlZFBv
aW50KTsKIAotICAgIGluZm8ubm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSA9IChoaXROb2Rl
ID09IG1fYXNzaXN0ZWROb2RlKTsKLSAgICBpZiAobV9hc3Npc3RlZE5vZGUpIHsKKyAgICBpbmZv
Lm5vZGVBdFBvc2l0aW9uSXNGb2N1c2VkRWxlbWVudCA9IGhpdE5vZGUgPT0gbV9mb2N1c2VkRWxl
bWVudDsKKyAgICBpZiAobV9mb2N1c2VkRWxlbWVudCkgewogICAgICAgICBjb25zdCBGcmFtZSYg
ZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwog
ICAgICAgICBpZiAoZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICAg
ICAgY29uc3QgdWludDMyX3Qga0hpdEFyZWFXaWR0aCA9IDY2OwogICAgICAgICAgICAgY29uc3Qg
dWludDMyX3Qga0hpdEFyZWFIZWlnaHQgPSA2NjsKICAgICAgICAgICAgIEZyYW1lVmlldyYgdmll
dyA9ICpmcmFtZS52aWV3KCk7CiAgICAgICAgICAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50KHZp
ZXcucm9vdFZpZXdUb0NvbnRlbnRzKHJlcXVlc3QucG9pbnQpKTsKLSAgICAgICAgICAgIEludFBv
aW50IGNvbnN0cmFpbmVkUG9pbnQgPSBtX2Fzc2lzdGVkTm9kZSA/IGNvbnN0cmFpblBvaW50KGFk
anVzdGVkUG9pbnQsIGZyYW1lLCAqbV9hc3Npc3RlZE5vZGUpIDogYWRqdXN0ZWRQb2ludDsKKyAg
ICAgICAgICAgIEludFBvaW50IGNvbnN0cmFpbmVkUG9pbnQgPSBtX2ZvY3VzZWRFbGVtZW50ID8g
Y29uc3RyYWluUG9pbnQoYWRqdXN0ZWRQb2ludCwgZnJhbWUsICptX2ZvY3VzZWRFbGVtZW50KSA6
IGFkanVzdGVkUG9pbnQ7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBm
cmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdHJhaW5lZFBvaW50KTsKIAogICAgICAg
ICAgICAgUmVmUHRyPFJhbmdlPiBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29t
cG9zaXRpb25SYW5nZSgpOwpAQCAtMjMzNiw5ICsyMzM3LDkgQEAgc3RhdGljIGlubGluZSBFbGVt
ZW50KiBuZXh0QXNzaXN0YWJsZUVsZW1lbnQoTm9kZSogc3RhcnROb2RlLCBQYWdlJiBwYWdlLCBi
b29sIGkKICAgICByZXR1cm4gbmV4dEVsZW1lbnQ7CiB9CiAKLXZvaWQgV2ViUGFnZTo6Zm9jdXNO
ZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNGb3J3YXJkLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2
b2lkIFdlYlBhZ2U6OmZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGJvb2wgaXNGb3J3YXJkLCBDYWxs
YmFja0lEIGNhbGxiYWNrSUQpCiB7Ci0gICAgRWxlbWVudCogbmV4dEVsZW1lbnQgPSBuZXh0QXNz
aXN0YWJsZUVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCksICptX3BhZ2UsIGlzRm9yd2FyZCk7
CisgICAgRWxlbWVudCogbmV4dEVsZW1lbnQgPSBuZXh0QXNzaXN0YWJsZUVsZW1lbnQobV9mb2N1
c2VkRWxlbWVudC5nZXQoKSwgKm1fcGFnZSwgaXNGb3J3YXJkKTsKICAgICBtX3VzZXJJc0ludGVy
YWN0aW5nID0gdHJ1ZTsKICAgICBpZiAobmV4dEVsZW1lbnQpCiAgICAgICAgIG5leHRFbGVtZW50
LT5mb2N1cygpOwpAQCAtMjM1OSwxNSArMjM2MCwxNSBAQCBzdGF0aWMgSW50UmVjdCBlbGVtZW50
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyhjb25zdCBOb2RlJiBub2RlLCBjb25zdCBGcmFtZSYg
ZgogICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFic29sdXRl
Qm91bmRpbmdCb3hSZWN0KCkpOwogfQogCi12b2lkIFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbikKK3ZvaWQgV2Vi
UGFnZTo6Z2V0Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbihGb2N1c2VkRWxlbWVudEluZm9ybWF0
aW9uJiBpbmZvcm1hdGlvbikKIHsKICAgICBsYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgaW5mb3Jt
YXRpb24uZWxlbWVudEludGVyYWN0aW9uTG9jYXRpb24gPSBtX2xhc3RJbnRlcmFjdGlvbkxvY2F0
aW9uOwogCi0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2Fzc2lzdGVkTm9kZS0+
cmVuZGVyZXIoKSkgewotICAgICAgICBGcmFtZSYgZWxlbWVudEZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICAgICAgaW5mb3JtYXRpb24u
ZWxlbWVudFJlY3QgPSBlbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygqbV9hc3Npc3Rl
ZE5vZGUsIGVsZW1lbnRGcmFtZSk7CisgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gbV9mb2N1c2Vk
RWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgICAgICBhdXRvJiBlbGVtZW50RnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgICAgICBpbmZv
cm1hdGlvbi5lbGVtZW50UmVjdCA9IGVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCpt
X2ZvY3VzZWRFbGVtZW50LCBlbGVtZW50RnJhbWUpOwogICAgICAgICBpbmZvcm1hdGlvbi5ub2Rl
Rm9udFNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNp
emUoKTsKICAgICAgICAgaW5mb3JtYXRpb24uZWxlbWVudElzVHJhbnNwYXJlbnQgPSByZW5kZXJl
ci0+aXNUcmFuc3BhcmVudFJlc3BlY3RpbmdQYXJlbnRGcmFtZXMoKTsKIApAQCAtMjM3Niw3ICsy
Mzc3LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCiAgICAgICAgIGluZm9ybWF0aW9uLmluc2lk
ZUZpeGVkUG9zaXRpb24gPSBpbkZpeGVkOwogICAgICAgICBpbmZvcm1hdGlvbi5pc1JUTCA9IHJl
bmRlcmVyLT5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKIAotICAg
ICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGVsZW1lbnRGcmFtZS52aWV3KCk7CisgICAgICAg
IGF1dG8qIGZyYW1lVmlldyA9IGVsZW1lbnRGcmFtZS52aWV3KCk7CiAgICAgICAgIGlmIChpbkZp
eGVkICYmIGVsZW1lbnRGcmFtZS5pc01haW5GcmFtZSgpICYmICFmcmFtZVZpZXctPmZyYW1lKCku
c2V0dGluZ3MoKS52aXN1YWxWaWV3cG9ydEVuYWJsZWQoKSkgewogICAgICAgICAgICAgSW50UmVj
dCBjdXJyZW50Rml4ZWRQb3NpdGlvblJlY3QgPSBmcmFtZVZpZXctPmN1c3RvbUZpeGVkUG9zaXRp
b25MYXlvdXRSZWN0KCk7CiAgICAgICAgICAgICBmcmFtZVZpZXctPnNldEN1c3RvbUZpeGVkUG9z
aXRpb25MYXlvdXRSZWN0KGZyYW1lVmlldy0+cmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSk7
CkBAIC0yMzk4LDIwICsyMzk5LDIwIEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgIGluZm9y
bWF0aW9uLm1heGltdW1TY2FsZUZhY3Rvcklnbm9yaW5nQWx3YXlzU2NhbGFibGUgPSBtYXhpbXVt
UGFnZVNjYWxlRmFjdG9ySWdub3JpbmdBbHdheXNTY2FsYWJsZSgpOwogICAgIGluZm9ybWF0aW9u
LmFsbG93c1VzZXJTY2FsaW5nID0gbV92aWV3cG9ydENvbmZpZ3VyYXRpb24uYWxsb3dzVXNlclNj
YWxpbmcoKTsKICAgICBpbmZvcm1hdGlvbi5hbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlz
U2NhbGFibGUgPSBtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5hbGxvd3NVc2VyU2NhbGluZ0lnbm9y
aW5nQWx3YXlzU2NhbGFibGUoKTsKLSAgICBpZiAoYXV0byogbmV4dEVsZW1lbnQgPSBuZXh0QXNz
aXN0YWJsZUVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCksICptX3BhZ2UsIHRydWUpKSB7Cisg
ICAgaWYgKGF1dG8qIG5leHRFbGVtZW50ID0gbmV4dEFzc2lzdGFibGVFbGVtZW50KG1fZm9jdXNl
ZEVsZW1lbnQuZ2V0KCksICptX3BhZ2UsIHRydWUpKSB7CiAgICAgICAgIGlmIChhdXRvKiBmcmFt
ZSA9IG5leHRFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBpbmZvcm1h
dGlvbi5uZXh0Tm9kZVJlY3QgPSBlbGVtZW50UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygqbmV4
dEVsZW1lbnQsICpmcmFtZSk7CiAgICAgICAgIGluZm9ybWF0aW9uLmhhc05leHROb2RlID0gdHJ1
ZTsKICAgICB9Ci0gICAgaWYgKGF1dG8qIHByZXZpb3VzRWxlbWVudCA9IG5leHRBc3Npc3RhYmxl
RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSwgKm1fcGFnZSwgZmFsc2UpKSB7CisgICAgaWYg
KGF1dG8qIHByZXZpb3VzRWxlbWVudCA9IG5leHRBc3Npc3RhYmxlRWxlbWVudChtX2ZvY3VzZWRF
bGVtZW50LmdldCgpLCAqbV9wYWdlLCBmYWxzZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGZyYW1l
ID0gcHJldmlvdXNFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBpbmZv
cm1hdGlvbi5wcmV2aW91c05vZGVSZWN0ID0gZWxlbWVudFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMoKnByZXZpb3VzRWxlbWVudCwgKmZyYW1lKTsKICAgICAgICAgaW5mb3JtYXRpb24uaGFzUHJl
dmlvdXNOb2RlID0gdHJ1ZTsKICAgICB9Ci0gICAgaW5mb3JtYXRpb24uYXNzaXN0ZWROb2RlSWRl
bnRpZmllciA9IG1fY3VycmVudEFzc2lzdGVkTm9kZUlkZW50aWZpZXI7CisgICAgaW5mb3JtYXRp
b24uZm9jdXNlZEVsZW1lbnRJZGVudGlmaWVyID0gbV9jdXJyZW50Rm9jdXNlZEVsZW1lbnRJZGVu
dGlmaWVyOwogCi0gICAgaWYgKGlzPExhYmVsYWJsZUVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkp
IHsKLSAgICAgICAgYXV0byBsYWJlbHMgPSBkb3duY2FzdDxMYWJlbGFibGVFbGVtZW50PigqbV9h
c3Npc3RlZE5vZGUpLmxhYmVscygpOworICAgIGlmIChpczxMYWJlbGFibGVFbGVtZW50PigqbV9m
b2N1c2VkRWxlbWVudCkpIHsKKyAgICAgICAgYXV0byBsYWJlbHMgPSBkb3duY2FzdDxMYWJlbGFi
bGVFbGVtZW50PigqbV9mb2N1c2VkRWxlbWVudCkubGFiZWxzKCk7CiAgICAgICAgIFZlY3RvcjxS
ZWY8RWxlbWVudD4+IGFzc29jaWF0ZWRMYWJlbHM7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IGxhYmVscy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAg
IGlmIChpczxFbGVtZW50PihsYWJlbHMtPml0ZW0oaW5kZXgpKSAmJiBsYWJlbHMtPml0ZW0oaW5k
ZXgpLT5yZW5kZXJlcigpKQpAQCAtMjQyNiwxNCArMjQyNywxMSBAQCB2b2lkIFdlYlBhZ2U6Omdl
dEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1h
dGlvbikKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChpczxFbGVtZW50PihtX2Fzc2lzdGVk
Tm9kZS5nZXQoKSkpIHsKLSAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KCptX2Fzc2lzdGVkTm9kZSk7Ci0gICAgICAgIGluZm9ybWF0aW9uLnRpdGxlID0gZWxlbWVudC50
aXRsZSgpOwotICAgICAgICBpbmZvcm1hdGlvbi5hcmlhTGFiZWwgPSBlbGVtZW50LmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjphcmlhX2xhYmVsQXR0cik7Ci0gICAg
fQorICAgIGluZm9ybWF0aW9uLnRpdGxlID0gbV9mb2N1c2VkRWxlbWVudC0+dGl0bGUoKTsKKyAg
ICBpbmZvcm1hdGlvbi5hcmlhTGFiZWwgPSBtX2ZvY3VzZWRFbGVtZW50LT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6YXJpYV9sYWJlbEF0dHIpOwogCi0gICAgaWYg
KGlzPEhUTUxTZWxlY3RFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKSB7Ci0gICAgICAgIEhUTUxT
ZWxlY3RFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCptX2Fz
c2lzdGVkTm9kZSk7CisgICAgaWYgKGlzPEhUTUxTZWxlY3RFbGVtZW50PigqbV9mb2N1c2VkRWxl
bWVudCkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MU2VsZWN0RWxlbWVudD4oKm1fZm9jdXNlZEVsZW1lbnQpOwogICAgICAgICBpbmZvcm1hdGlv
bi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6U2VsZWN0OwogICAgICAgICBjb25zdCBWZWN0b3I8
SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBlbGVtZW50Lmxpc3RJdGVtcygpOwogICAgICAgICBzaXpl
X3QgY291bnQgPSBpdGVtcy5zaXplKCk7CkBAIC0yNDU0LDggKzI0NTIsOCBAQCB2b2lkIFdlYlBh
Z2U6OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBp
bmZvcm1hdGlvbikKICAgICAgICAgfQogICAgICAgICBpbmZvcm1hdGlvbi5zZWxlY3RlZEluZGV4
ID0gZWxlbWVudC5zZWxlY3RlZEluZGV4KCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmlzTXVsdGlT
ZWxlY3QgPSBlbGVtZW50Lm11bHRpcGxlKCk7Ci0gICAgfSBlbHNlIGlmIChpczxIVE1MVGV4dEFy
ZWFFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKSB7Ci0gICAgICAgIEhUTUxUZXh0QXJlYUVsZW1l
bnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9hc3Npc3RlZE5v
ZGUpOworICAgIH0gZWxzZSBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKm1fZm9jdXNlZEVs
ZW1lbnQpKSB7CisgICAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50PigqbV9mb2N1c2VkRWxlbWVudCk7CiAgICAgICAgIGluZm9y
bWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSA9IGVsZW1lbnQuYXV0b2NhcGl0YWxpemVUeXBlKCk7
CiAgICAgICAgIGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LnNob3VsZEF1dG9j
b3JyZWN0KCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpU
ZXh0QXJlYTsKQEAgLTI0NjQsMTQgKzI0NjIsMTQgQEAgdm9pZCBXZWJQYWdlOjpnZXRBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbihBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCiAg
ICAgICAgIGluZm9ybWF0aW9uLmF1dG9maWxsRmllbGROYW1lID0gV2ViQ29yZTo6dG9BdXRvZmls
bEZpZWxkTmFtZShlbGVtZW50LmF1dG9maWxsRGF0YSgpLmZpZWxkTmFtZSk7CiAgICAgICAgIGlu
Zm9ybWF0aW9uLnBsYWNlaG9sZGVyID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKEhUTUxOYW1lczo6cGxhY2Vob2xkZXJBdHRyKTsKICAgICAgICAgaW5mb3JtYXRpb24u
aW5wdXRNb2RlID0gZWxlbWVudC5jYW5vbmljYWxJbnB1dE1vZGUoKTsKLSAgICB9IGVsc2UgaWYg
KGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkpIHsKLSAgICAgICAgSFRNTElu
cHV0RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lz
dGVkTm9kZSk7CisgICAgfSBlbHNlIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PigqbV9mb2N1c2Vk
RWxlbWVudCkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2ZvY3VzZWRFbGVtZW50KTsKICAgICAgICAgSFRNTEZvcm1F
bGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7CiAgICAgICAgIGlmIChmb3JtKQogICAgICAg
ICAgICAgaW5mb3JtYXRpb24uZm9ybUFjdGlvbiA9IGZvcm0tPmdldFVSTEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0dHIpOwogICAgICAgICBpZiAoYXV0byBhdXRvZmlsbEVs
ZW1lbnRzID0gV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVu
dHMoZWxlbWVudCkpIHsKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFscyA9IHRydWU7Ci0gICAgICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9m
aWxsYWJsZVVzZXJuYW1lRmllbGQgPSBhdXRvZmlsbEVsZW1lbnRzLT51c2VybmFtZSgpID09IG1f
YXNzaXN0ZWROb2RlOworICAgICAgICAgICAgaW5mb3JtYXRpb24uaXNBdXRvZmlsbGFibGVVc2Vy
bmFtZUZpZWxkID0gYXV0b2ZpbGxFbGVtZW50cy0+dXNlcm5hbWUoKSA9PSBtX2ZvY3VzZWRFbGVt
ZW50OwogICAgICAgICB9CiAgICAgICAgIGluZm9ybWF0aW9uLnJlcHJlc2VudGluZ1BhZ2VVUkwg
PSBlbGVtZW50LmRvY3VtZW50KCkudXJsRm9yQmluZGluZ3MoKTsKICAgICAgICAgaW5mb3JtYXRp
b24uYXV0b2NhcGl0YWxpemVUeXBlID0gZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKTsKQEAg
LTI1MjksMTMgKzI1MjcsMTMgQEAgdm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbihBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCiAgICAgICAgIGluZm9y
bWF0aW9uLnZhbHVlID0gZWxlbWVudC52YWx1ZSgpOwogICAgICAgICBpbmZvcm1hdGlvbi52YWx1
ZUFzTnVtYmVyID0gZWxlbWVudC52YWx1ZUFzTnVtYmVyKCk7CiAgICAgICAgIGluZm9ybWF0aW9u
LmF1dG9maWxsRmllbGROYW1lID0gV2ViQ29yZTo6dG9BdXRvZmlsbEZpZWxkTmFtZShlbGVtZW50
LmF1dG9maWxsRGF0YSgpLmZpZWxkTmFtZSk7Ci0gICAgfSBlbHNlIGlmIChpczxIVE1MSW1hZ2VF
bGVtZW50PigqbV9hc3Npc3RlZE5vZGUpICYmIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCpt
X2Fzc2lzdGVkTm9kZSkuaGFzRWRpdGFibGVJbWFnZUF0dHJpYnV0ZSgpKSB7CisgICAgfSBlbHNl
IGlmIChpczxIVE1MSW1hZ2VFbGVtZW50PigqbV9mb2N1c2VkRWxlbWVudCkgJiYgZG93bmNhc3Q8
SFRNTEltYWdlRWxlbWVudD4oKm1fZm9jdXNlZEVsZW1lbnQpLmhhc0VkaXRhYmxlSW1hZ2VBdHRy
aWJ1dGUoKSkgewogICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlwZTo6
RHJhd2luZzsKLSAgICAgICAgaW5mb3JtYXRpb24uZW1iZWRkZWRWaWV3SUQgPSBkb3duY2FzdDxI
VE1MSW1hZ2VFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpLmVkaXRhYmxlSW1hZ2VWaWV3SUQoKTsK
LSAgICB9IGVsc2UgaWYgKG1fYXNzaXN0ZWROb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKKyAg
ICAgICAgaW5mb3JtYXRpb24uZW1iZWRkZWRWaWV3SUQgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVt
ZW50PigqbV9mb2N1c2VkRWxlbWVudCkuZWRpdGFibGVJbWFnZVZpZXdJRCgpOworICAgIH0gZWxz
ZSBpZiAobV9mb2N1c2VkRWxlbWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIGlu
Zm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpDb250ZW50RWRpdGFibGU7Ci0gICAg
ICAgIGlmIChpczxIVE1MRWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgewotICAgICAgICAgICAg
YXV0byYgYXNzaXN0ZWRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCptX2Fzc2lzdGVk
Tm9kZSk7CisgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oKm1fZm9jdXNlZEVsZW1lbnQpKSB7
CisgICAgICAgICAgICBhdXRvJiBhc3Npc3RlZEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxlbWVu
dD4oKm1fZm9jdXNlZEVsZW1lbnQpOwogICAgICAgICAgICAgaW5mb3JtYXRpb24uaXNBdXRvY29y
cmVjdCA9IGFzc2lzdGVkRWxlbWVudC5zaG91bGRBdXRvY29ycmVjdCgpOwogICAgICAgICAgICAg
aW5mb3JtYXRpb24uYXV0b2NhcGl0YWxpemVUeXBlID0gYXNzaXN0ZWRFbGVtZW50LmF1dG9jYXBp
dGFsaXplVHlwZSgpOwogICAgICAgICAgICAgaW5mb3JtYXRpb24uaW5wdXRNb2RlID0gYXNzaXN0
ZWRFbGVtZW50LmNhbm9uaWNhbElucHV0TW9kZSgpOwpAQCAtMjU0OSw4ICsyNTQ3LDggQEAgdm9p
ZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbiYgaW5mb3JtYXRpb24pCiAKIHZvaWQgV2ViUGFnZTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRp
YWxzKGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCiB7Ci0g
ICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkgewotICAg
ICAgICBpZiAoYXV0byBhdXRvZmlsbEVsZW1lbnRzID0gQXV0b2ZpbGxFbGVtZW50czo6Y29tcHV0
ZUF1dG9maWxsRWxlbWVudHMoZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWRO
b2RlKSkpCisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fZm9jdXNlZEVsZW1lbnQuZ2V0
KCkpKSB7CisgICAgICAgIGlmIChhdXRvIGF1dG9maWxsRWxlbWVudHMgPSBBdXRvZmlsbEVsZW1l
bnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
bV9mb2N1c2VkRWxlbWVudCkpKQogICAgICAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy0+YXV0b2Zp
bGwodXNlcm5hbWUsIHBhc3N3b3JkKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>