<?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>153509</bug_id>
          
          <creation_ts>2016-01-26 13:56:34 -0800</creation_ts>
          <short_desc>Generalize ResourceUsageData gathering to be used outside of ResourceUsageOverlay</short_desc>
          <delta_ts>2016-01-26 17:32:20 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>153516</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>barraclough</cc>
    
    <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>kling</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1158985</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-01-26 13:56:34 -0800</bug_when>
    <thetext>* SUMMARY
Generalize ResourceUsageData gathering to be used outside of ResourceUsageOverlay.

Inspector wants to show some high level memory information. It could reuse the data, and data gathering, that ResourceUsageOverlay currently does. Rework this so that the ResourceUsageData to be used by inspector can be gathered in a platform independent way. Rename the enable flag now that this will not be specific to an Overlay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158986</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-01-26 13:57:01 -0800</bug_when>
    <thetext>&lt;rdar://problem/24354291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158993</commentid>
    <comment_count>2</comment_count>
      <attachid>269916</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-01-26 14:06:03 -0800</bug_when>
    <thetext>Created attachment 269916
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158995</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-26 14:07:45 -0800</bug_when>
    <thetext>Attachment 269916 did not pass style-queue:


ERROR: Source/WebCore/page/ResourceUsageThread.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/ResourceUsageThread.h:68:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/ResourceUsageData.h:63:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/page/ResourceUsageThread.cpp:48:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/ResourceUsageThread.cpp:83:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 24 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>1159068</commentid>
    <comment_count>4</comment_count>
      <attachid>269916</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-01-26 15:35:58 -0800</bug_when>
    <thetext>Comment on attachment 269916
[PATCH] Proposed Fix

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

r=me

&gt; Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm:173
&gt; +    ASSERT(categories.size = d.categories.size);
&gt; +    for (size_t i = 0; i &lt; categories.size; ++i)

size() vs size
= vs ==</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159069</commentid>
    <comment_count>5</comment_count>
      <attachid>269916</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-01-26 15:36:24 -0800</bug_when>
    <thetext>Comment on attachment 269916
[PATCH] Proposed Fix

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

&gt; Source/WebCore/page/scrolling/ScrollingThread.cpp:54
&gt; -        std::lock_guard&lt;Lock&gt; lock(singleton().m_functionsMutex);
&gt; +        std::lock_guard&lt;Lock&gt; lock(scrollingThread.m_functionsMutex);

joe pls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159138</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-01-26 17:32:20 -0800</bug_when>
    <thetext>&lt;http://trac.webkit.org/changeset/195644&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269916</attachid>
            <date>2016-01-26 14:06:03 -0800</date>
            <delta_ts>2016-01-26 15:35:58 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>gathering.patch</filename>
            <type>text/plain</type>
            <size>60856</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDI2MzlkZWYuLjM0M2M2NDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTAxLTI2ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgR2VuZXJhbGl6ZSBSZXNvdXJjZVVz
YWdlRGF0YSBnYXRoZXJpbmcgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIFJlc291cmNlVXNhZ2VPdmVy
bGF5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM1
MDkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0MzU0MjkxPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICog
aGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRBbGxvY2F0ZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGlkRnJlZUJsb2NrKToKKyAgICAgICAgUmVuYW1lIHRo
ZSBFTkFCTEUgZmxhZy4KKwogMjAxNi0wMS0yNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE5NTU1MC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCAzNmI3OGI1Li5iZWVlODY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC0yNDYsNyArMjQ2LDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBhZGRMb2dpY2FsbHlFbXB0eVdlYWtCbG9jayhXZWFrQmxvY2sqKTsKIAotI2lmIEVOQUJM
RShSRVNPVVJDRV9VU0FHRV9PVkVSTEFZKQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAg
ICBzaXplX3QgYmxvY2tCeXRlc0FsbG9jYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tCeXRl
c0FsbG9jYXRlZDsgfQogI2VuZGlmCiAKQEAgLTQ1Niw3ICs0NTYsNyBAQCBwcml2YXRlOgogCiAg
ICAgUGFyYWxsZWxIZWxwZXJDbGllbnQgbV9oZWxwZXJDbGllbnQ7CiAKLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfVVNBR0VfT1ZFUkxBWSkKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgc2l6
ZV90IG1fYmxvY2tCeXRlc0FsbG9jYXRlZCB7IDAgfTsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCmluZGV4IDVlZjY1YmYuLmNlZTcyMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaApAQCAtMzEwLDcgKzMxMCw3IEBA
IGlubGluZSB2b2lkIEhlYXA6OnVucmVnaXN0ZXJXZWFrR0NNYXAodm9pZCogd2Vha0dDTWFwKQog
CiBpbmxpbmUgdm9pZCBIZWFwOjpkaWRBbGxvY2F0ZUJsb2NrKHNpemVfdCBjYXBhY2l0eSkKIHsK
LSNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0VfT1ZFUkxBWSkKKyNpZiBFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpCiAgICAgbV9ibG9ja0J5dGVzQWxsb2NhdGVkICs9IGNhcGFjaXR5OwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0oY2FwYWNpdHkpOwpAQCAtMzE5LDcgKzMxOSw3IEBAIGlubGluZSB2b2lk
IEhlYXA6OmRpZEFsbG9jYXRlQmxvY2soc2l6ZV90IGNhcGFjaXR5KQogCiBpbmxpbmUgdm9pZCBI
ZWFwOjpkaWRGcmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KQogewotI2lmIEVOQUJMRShSRVNPVVJD
RV9VU0FHRV9PVkVSTEFZKQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICBtX2Jsb2Nr
Qnl0ZXNBbGxvY2F0ZWQgLT0gY2FwYWNpdHk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjYXBh
Y2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCmluZGV4IDY4YzhhZjUuLjkyYWY3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYt
MDEtMjYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBH
ZW5lcmFsaXplIFJlc291cmNlVXNhZ2VEYXRhIGdhdGhlcmluZyB0byBiZSB1c2VkIG91dHNpZGUg
b2YgUmVzb3VyY2VVc2FnZU92ZXJsYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MzUwOQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQzNTQyOTE+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm0uaDoKKyAgICAgICAgUmVuYW1lIHRoZSBFTkFCTEUgZmxhZy4KKwogMjAxNi0wMS0y
NSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IFtXaW5dIENvcHkgZm9yd2FyZGluZyBoZWFkZXJzIGJlZm9yZSBidWlsZGluZyBhIHByb2plY3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybS5oCmluZGV4IDE4YmY5NjAuLmViOTZmZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMTA5MSw3
ICsxMDkxLDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0jZGVmaW5lIEVOQUJM
RV9SRVNPVVJDRV9VU0FHRV9PVkVSTEFZIDEKKyNkZWZpbmUgRU5BQkxFX1JFU09VUkNFX1VTQUdF
IDEKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IDBiMjYxMjAuLjFmMDcyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC0yMDM4LDcgKzIwMzgsOSBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGFnZS9QZXJmb3Jt
YW5jZVVzZXJUaW1pbmcuY3BwCiAgICAgcGFnZS9Qb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwCiAg
ICAgcGFnZS9QcmludENvbnRleHQuY3BwCisgICAgcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAK
ICAgICBwYWdlL1Jlc291cmNlVXNhZ2VPdmVybGF5LmNwcAorICAgIHBhZ2UvUmVzb3VyY2VVc2Fn
ZVRocmVhZC5jcHAKICAgICBwYWdlL1NjcmVlbi5jcHAKICAgICBwYWdlL1NlY3VyaXR5T3JpZ2lu
LmNwcAogICAgIHBhZ2UvU2VjdXJpdHlPcmlnaW5EYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGEyYzMy
YjguLjJhNjdiM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAxNi0wMS0yNiAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIEdlbmVyYWxpemUg
UmVzb3VyY2VVc2FnZURhdGEgZ2F0aGVyaW5nIHRvIGJlIHVzZWQgb3V0c2lkZSBvZiBSZXNvdXJj
ZVVzYWdlT3ZlcmxheQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUzNTA5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDM1NDI5MT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAq
IHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAqIHBh
Z2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VPdmVybGF5LmNwcDoK
KyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VPdmVybGF5Lmg6CisgICAgICAgIEFkZCBuZXcg
ZmlsZXMgdG8gdGhlIGJ1aWxkIGFuZCB1cGRhdGVkIEVOQUJMRSBmbGFnIG5hbWUuCisKKyAgICAg
ICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVVzYWdlRGF0YTo6UmVzb3VyY2VVc2FnZURhdGEpOgorICAgICAgICAqIHBhZ2Uv
UmVzb3VyY2VVc2FnZURhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYXRl
Z29yeUluZm86Ok1lbW9yeUNhdGVnb3J5SW5mbyk6CisgICAgICAgIFBsYXRmb3JtIGFnbm9zdGlj
IHJlc291cmNlIGRhdGEgdGhhdCBtYXkgYmUgdXNlZCBieSBtdWx0aXBsZSBjbGllbnRzLAorICAg
ICAgICBzdWNoIGFzIHRoZSBSZXNvdXJjZVVzYWdlT3ZlcmxheSBhbmQgbGF0ZXIgdGhlIEluc3Bl
Y3Rvci4KKworICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OlJlc291cmNlVXNhZ2VUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6c2luZ2xldG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OmFkZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OndhaXRVbnRpbE9ic2VydmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVVzYWdlVGhyZWFkOjpub3RpZnlPYnNlcnZlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6dGhyZWFkQm9keSk6CisgICAgICAg
IFBsYXRmb3JtIGFnbm9zdGljIHJlc291cmNlIHVzYWdlIHRocmVhZCB0aGF0IGNhbiBiZSB1c2Vk
IHRvIGdhdGhlciBkYXRhCisgICAgICAgIGludG8gYSBSZXNvdXJjZVVzYWdlRGF0YSBzdHJ1Y3Qg
b24gYSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgbm90aWZ5IG9ic2VydmVycworICAgICAgICBvbiB0
aGUgbWFpbiB0aHJlYWQuIFBsYXRmb3JtcyBuZWVkIG9ubHkgaW1wbGVtZW50IFJlc291cmNlVXNh
Z2VUaHJlYWQ6OnBsYXRmb3JtVGhyZWFkQm9keQorICAgICAgICB0byBwb3B1bGF0ZSB0aGUgUmVz
b3VyY2VVc2FnZURhdGEgc3RydWN0IHdpdGggZGF0YS4KKworICAgICAgICAqIHBhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3Rvcmlj
TWVtb3J5Q2F0ZWdvcnlJbmZvOjpIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpIaXN0b3JpY1Jlc291cmNlVXNhZ2VEYXRhOjpIaXN0b3JpY1Jlc291cmNlVXNh
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Omhpc3RvcmljVXNhZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OmFwcGVuZERhdGFUb0hpc3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VVc2FnZU92ZXJsYXk6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZVVzYWdlT3ZlcmxheTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdNZW1IaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdNZW1vcnlQaWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZU92ZXJsYXk6OnBsYXRmb3JtRHJhdyk6CisgICAg
ICAgIE1vdmUgQ1BVIGFuZCBtZW1vcnkgcmVzb3VyY2UgdXNhZ2UgY2FsY3VsYXRpb25zIHRvIFJl
c291cmNlVXNhZ2VUaHJlYWQuCisgICAgICAgIFRoZSBvdmVybGF5IGFkZHMgaXRzZWxmIGFzIGFu
IG9ic2VydmVyLCBhbmQgYnVpbGRzIGl0cyBSaW5nQnVmZmVyIGxpc3QKKyAgICAgICAgb2YgZGF0
YSBmcm9tIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgUmVzb3VyY2VVc2FnZVRocmVhZC4gUmVuYW1l
ZAorICAgICAgICBzb21lIG9mIHRoZSBmaWVsZHMuCisKKyAgICAgICAgKiBwYWdlL2NvY29hL1Jl
c291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp2bVBh
Z2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRhZ0luZm86OlRhZ0luZm8pOgorICAgICAgICAo
V2ViQ29yZTo6cGFnZXNQZXJWTVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpjcHVVc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjYXRlZ29yeUZvclZNVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlVXNhZ2VUaHJlYWQ6OnBsYXRmb3JtVGhyZWFkQm9keSk6CisgICAgICAgIEV4dHJhY3Rl
ZCBmcm9tIFJlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EuCisKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhy
ZWFkOjpkaXNwYXRjaCk6CisgICAgICAgIERyaXZlLWJ5LCBkb24ndCBjYWxsIHNpbmdsZXRvbiBh
Z2Fpbiwgd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQuCisKIDIwMTYtMDEtMjUgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgY29tbWVudC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNDEzMTViYzcuLjFmMzI3YzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCkBAIC0yNzEsNiArMjcxLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAKICAgICBwYWdlL2NvY29hL1VzZXJBZ2VudC5tbQogICAgIHBhZ2UvY29jb2EvUmVz
b3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQorICAgIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92
ZXJsYXlUaHJlYWQubW0KICAgICBwYWdlL2NvY29hL1NldHRpbmdzQ29jb2EubW0KIAogICAgIHBh
Z2UvbWFjL0Nocm9tZU1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJiNzEzZTIuLjhiOTNlYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQxNTQsNiAr
NDE1NCwxMSBAQAogCQlBNDU2RkEyNzExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxzTm9kZUxpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE0NTZGQTI1
MTFBRDRBODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5oICovOyB9OwogCQlBNTAxOTIwRTEz
MkVCRjJFMDA4QkZFNTUgLyogQXV0b2NhcGl0YWxpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MDE5MjBDMTMyRUJGMkUwMDhCRkU1NSAvKiBBdXRv
Y2FwaXRhbGl6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE1MDJDNURGMTMwNDlCMzUwMEZDN0Q1MyAvKiBXZWJTYWZlR0NBY3Rpdml0eUNhbGxi
YWNrSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTAyQzVERDEzMDQ5QjM1MDBGQzdENTMgLyogV2ViU2FmZUdDQWN0aXZpdHlDYWxsYmFja0lPUy5o
ICovOyB9OworCQlBNTA3MUU4NTFDNTZEMERDMDA5OTUxQkUgLyogUmVzb3VyY2VVc2FnZURhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MDcxRTgy
MUM1NkQwNzkwMDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlRGF0YS5oICovOyB9OworCQlBNTA3MUU4
NjFDNTZEMERGMDA5OTUxQkUgLyogUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTA3MUU4MzFDNTZEMDc5MDA5OTUx
QkUgLyogUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAgKi87IH07CisJCUE1MDcxRTg3MUM1NkQwRTEw
MDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTA3MUU4NDFDNTZEMDc5MDA5OTUxQkUgLyogUmVzb3Vy
Y2VVc2FnZVRocmVhZC5oICovOyB9OworCQlBNTA3MUU4OTFDNTZENEZFMDA5OTUxQkUgLyogUmVz
b3VyY2VVc2FnZVRocmVhZENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTUwNzFFODgxQzU2RDRGQTAwOTk1MUJFIC8qIFJlc291cmNlVXNhZ2VU
aHJlYWRDb2NvYS5tbSAqLzsgfTsKKwkJQTUwNzFFOEIxQzU2RkIzMTAwOTk1MUJFIC8qIFJlc291
cmNlVXNhZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1MDcxRThBMUM1NkZBRkEwMDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlRGF0YS5jcHAg
Ki87IH07CiAJCUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUM5NzRDRjExNDg1
RkYxMDA2NkYyQUIgLyogS2V5RXZlbnRDb2NvYS5oICovOyB9OwogCQlBNTEzQjNEODExNEIxNjZB
MDAxQzQyOUIgLyogS2V5RXZlbnRDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1Qzk3NEQwMTE0ODVGRjEwMDY2RjJBQiAvKiBLZXlFdmVudENv
Y29hLm1tICovOyB9OwogCQlBNTE2RThCNzEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0
ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTE2RThCNDEzNkUwNERCMDA3NkMzQzAgLyogTG9jYWxpemVkRGF0ZUNhY2hlLmggKi87IH07CkBA
IC0xMTc1OCw2ICsxMTc2MywxMSBAQAogCQlBNDU2RkEyNTExQUQ0QTgzMDAyMEI0MjAgLyogTGFi
ZWxzTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxzTm9k
ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUwMTkyMEMxMzJFQkYyRTAw
OEJGRTU1IC8qIEF1dG9jYXBpdGFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEF1dG9jYXBpdGFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MDJD
NUREMTMwNDlCMzUwMEZDN0Q1MyAvKiBXZWJTYWZlR0NBY3Rpdml0eUNhbGxiYWNrSU9TLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNhZmVHQ0FjdGl2aXR5Q2FsbGJhY2tJ
T1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTUwNzFFODIxQzU2RDA3OTAwOTk1
MUJFIC8qIFJlc291cmNlVXNhZ2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc291cmNlVXNhZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1
MDcxRTgzMUM1NkQwNzkwMDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlVGhyZWFkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlVXNhZ2VUaHJlYWQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTA3MUU4NDFDNTZEMDc5MDA5OTUxQkUgLyog
UmVzb3VyY2VVc2FnZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZXNvdXJjZVVzYWdlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MDcx
RTg4MUM1NkQ0RkEwMDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZVVzYWdlVGhyZWFkQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MDcxRThBMUM1NkZBRkEwMDk5
NTFCRSAvKiBSZXNvdXJjZVVzYWdlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZXNvdXJjZVVzYWdlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1MTZFOEI0MTM2RTA0REIwMDc2QzNDMCAvKiBMb2NhbGl6ZWREYXRlQ2FjaGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxpemVkRGF0ZUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MTZFOEI1MTM2RTA0REIwMDc2QzNDMCAvKiBM
b2NhbGl6ZWREYXRlQ2FjaGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBMb2NhbGl6ZWREYXRlQ2FjaGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE1MTgyMjU0MTdFMkEwRDQwMEE5QkExRCAvKiBJbnNwZWN0b3JPdmVybGF5UGFnZS5jc3MgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LmNzczsg
cGF0aCA9IEluc3BlY3Rvck92ZXJsYXlQYWdlLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE3Mjk3LDYgKzE3MzA3LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCiAJCQkJQURGRTJCNTQxQkQ1RjQxMjAwREFCNDU3IC8qIFJlc291cmNlVXNhZ2VPdmVy
bGF5Q29jb2EubW0gKi8sCisJCQkJQTUwNzFFODgxQzU2RDRGQTAwOTk1MUJFIC8qIFJlc291cmNl
VXNhZ2VUaHJlYWRDb2NvYS5tbSAqLywKIAkJCQlBMTgyRDVCNjFCRTcyMjYyMDA4N0E3Q0MgLyog
U2V0dGluZ3NDb2NvYS5tbSAqLywKIAkJCQkyNjI1NUYwMTE4ODc4RTExMDAwNkUxRkQgLyogVXNl
ckFnZW50LmggKi8sCiAJCQkJNUQ1OTc1QjYxOTYzNjM3QjAwRDAwODc4IC8qIFVzZXJBZ2VudC5t
bSAqLywKQEAgLTE3ODczLDggKzE3ODg0LDEyIEBACiAJCQkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0
OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8sCiAJCQkJQjc3NkQ0M0MxMTA0NTI3NTAw
QkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgKi8sCiAJCQkJQjc3NkQ0M0ExMTA0NTI1RDAwQkVC
MEVDIC8qIFByaW50Q29udGV4dC5oICovLAorCQkJCUE1MDcxRThBMUM1NkZBRkEwMDk5NTFCRSAv
KiBSZXNvdXJjZVVzYWdlRGF0YS5jcHAgKi8sCisJCQkJQTUwNzFFODIxQzU2RDA3OTAwOTk1MUJF
IC8qIFJlc291cmNlVXNhZ2VEYXRhLmggKi8sCiAJCQkJQURCQUQ2RUMxQkNERDk1MDAwMzgxMzI1
IC8qIFJlc291cmNlVXNhZ2VPdmVybGF5LmNwcCAqLywKIAkJCQlBREJBRDZFRDFCQ0REOTUwMDAz
ODEzMjUgLyogUmVzb3VyY2VVc2FnZU92ZXJsYXkuaCAqLywKKwkJCQlBNTA3MUU4MzFDNTZEMDc5
MDA5OTUxQkUgLyogUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAgKi8sCisJCQkJQTUwNzFFODQxQzU2
RDA3OTAwOTk1MUJFIC8qIFJlc291cmNlVXNhZ2VUaHJlYWQuaCAqLywKIAkJCQlCQ0VDMDFCQTBD
Mjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmNwcCAqLywKIAkJCQlCQ0VDMDFCQjBDMjc0REFDMDA5
RjRFQzkgLyogU2NyZWVuLmggKi8sCiAJCQkJQkNFQzAxQkMwQzI3NERBQzAwOUY0RUM5IC8qIFNj
cmVlbi5pZGwgKi8sCkBAIC0yNTk0MSw2ICsyNTk1Niw3IEBACiAJCQkJMUFCNUVCRDIxOTRBNTBG
MzAwNTlBQzcwIC8qIEhUVFBIZWFkZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2
NzMwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
NzVDRDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCUE1MDcxRTg3MUM1NkQwRTEwMDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlVGhyZWFkLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjJGMTJBMDE4QzFERDAyMDA1QzU0QUYgLyogSHlzdGVyZXNpc0Fj
dGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU2RTBCMDUzODE0MDAyQ0U2NEYgLyog
SWNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdFNDAyOTAxM0E2OTZFRDAwOTEzRDY3IC8qIElj
b25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NjEyLDYgKzI2NjI4LDcgQEAKIAkJ
CQlCMkZBM0UwNTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUZXh0RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjIyMzYyMjkwQzNBRjA0QTAwMDhDQTlCIC8qIEpTU1ZHVGV4dFBhdGhFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0UwNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTA3MUU4NTFD
NTZEMERDMDA5OTUxQkUgLyogUmVzb3VyY2VVc2FnZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyRkEzRTA5MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RpdGxlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjJGQTNFMEIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVHJhbnNmb3JtLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0UwRDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUcmFu
c2Zvcm1MaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI4NzEyLDYgKzI4NzI5LDcgQEAKIAkJCQk3
QzFFOTcyNzFBOUY5ODM0MDA3QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ1ODMwRDREMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENGRjA1MDBBMTU0RjA5MDAwQTQyMzQg
LyogQXV0b1RhYmxlTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE1MDcxRTg5MUM1NkQ0
RkUwMDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwNzAzNjNFMTE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UubW0g
aW4gU291cmNlcyAqLywKIAkJCQkwNzAzNjNFMzE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJl
RGV2aWNlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3MDM2M0U1MTgxQTFDREMwMEMw
NzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICovLApAQCAtMjkwMzUs
NiArMjkwNTMsNyBAQAogCQkJCTU5QThGMUQ0MTFBNjk1MDgwMDFBQzM0QSAvKiBEZXZpY2VPcmll
bnRhdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTlEMUMxMDQxMUVCNURD
RjAwQjYzOEM4IC8qIERldmljZU9yaWVudGF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1OUE4NUVBMjExOUQ2OEQ5MDBERUYxRUYgLyogRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBNTA3MUU4NjFDNTZEMERGMDA5OTUxQkUgLyogUmVzb3VyY2VV
c2FnZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNjc3MjVGQzFBNUIzQUQ5MDAzQzI0
REQgLyogREZBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDOUE3QTc1MUFBMEY2RUEwMDk1OEFD
RiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDOUE3QTc2
MUFBMEY2RUQwMDk1OEFDRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzE2MjIsNiArMzE2NDEsNyBAQAogCQkJCTQ5QzdCOUU1MTA0MkQzMkYwMDA5RDQ0
NyAvKiBXZWJHTFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkY5OTVBMjMxQTcwNzhC
MTAwQTczNUY0IC8qIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUE1MDcxRThCMUM1NkZCMzEwMDk5NTFCRSAvKiBSZXNvdXJjZVVz
YWdlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Rjk5NUEyNTFBNzA3OEIxMDBBNzM1RjQg
LyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RjIyMkI3
NjFBQjUyRDhBMDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNzdBMTdBNzcxMkYyODY0MjAwNEUwMkY2IC8qIFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA3MTE5
ZTQzLi5lYWIxOWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTE4NDgsNyArMTg0OCw3IEBAIElE
QkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBQYWdlOjppZGJDb25uZWN0aW9uKCkKIH0K
ICNlbmRpZgogCi0jaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFX09WRVJMQVkpCisjaWYgRU5BQkxF
KFJFU09VUkNFX1VTQUdFKQogdm9pZCBQYWdlOjpzZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2li
bGUoYm9vbCB2aXNpYmxlKQogewogICAgIGlmICghdmlzaWJsZSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRl
eCAxOGQ0MmZjLi5kOWI3ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtMzQxLDcgKzM0MSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7CiAgICAgdm9pZCBz
dG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoKTsKIAotI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FH
RV9PVkVSTEFZKQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICB2b2lkIHNldFJlc291
cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShib29sKTsKICNlbmRpZgogCkBAIC02NTYsNyArNjU2LDcg
QEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8Vmlld1N0YXRlQ2hhbmdlT2JzZXJ2ZXIqPiBtX3Zp
ZXdTdGF0ZUNoYW5nZU9ic2VydmVyczsKIAotI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRV9PVkVS
TEFZKQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVz
b3VyY2VVc2FnZU92ZXJsYXk+IG1fcmVzb3VyY2VVc2FnZU92ZXJsYXk7CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jOTc1OWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9SZXNvdXJjZVVzYWdlRGF0YS5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVVzYWdlRGF0YS5oIgor
CisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Jl
c291cmNlVXNhZ2VEYXRhOjpSZXNvdXJjZVVzYWdlRGF0YSgpCit7CisgICAgLy8gVk0gdGFnIGNh
dGVnb3JpZXMuCisgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SlNKSVRdID0gTWVtb3J5
Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpKU0pJVCk7CisgICAgY2F0ZWdvcmllc1tNZW1v
cnlDYXRlZ29yeTo6SW1hZ2VzXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6
SW1hZ2VzKTsKKyAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMYXllcnNdID0gTWVtb3J5
Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpMYXllcnMpOworICAgIGNhdGVnb3JpZXNbTWVt
b3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2NdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVn
b3J5OjpMaWJjTWFsbG9jKTsKKyAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpibWFsbG9j
XSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6Ym1hbGxvYyk7CisgICAgY2F0
ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6T3RoZXJdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9y
eUNhdGVnb3J5OjpPdGhlcik7CisKKyAgICAvLyBTdWIgY2F0ZWdvcmllcyAoZS5nIGJyZWFrZG93
biBvZiBibWFsbG9jIHRhZy4pCisgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6R0NIZWFw
XSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6R0NIZWFwLCB0cnVlKTsKKyAg
ICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpHQ093bmVkXSA9IE1lbW9yeUNhdGVnb3J5SW5m
byhNZW1vcnlDYXRlZ29yeTo6R0NPd25lZCwgdHJ1ZSk7Cit9CisKK1Jlc291cmNlVXNhZ2VEYXRh
OjpSZXNvdXJjZVVzYWdlRGF0YShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYgb3RoZXIpCisgICAg
OiBjcHUob3RoZXIuY3B1KQorICAgICwgdG90YWxEaXJ0eVNpemUob3RoZXIudG90YWxEaXJ0eVNp
emUpCisgICAgLCB0aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb24ob3RoZXIudGltZU9mTmV4dEVkZW5D
b2xsZWN0aW9uKQorICAgICwgdGltZU9mTmV4dEZ1bGxDb2xsZWN0aW9uKG90aGVyLnRpbWVPZk5l
eHRGdWxsQ29sbGVjdGlvbikKK3sKKyAgICBzdGQ6OmNvcHkob3RoZXIuY2F0ZWdvcmllcy5iZWdp
bigpLCBvdGhlci5jYXRlZ29yaWVzLmVuZCgpLCBjYXRlZ29yaWVzLmJlZ2luKCkpOworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c291cmNlVXNhZ2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4
MDk0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2Fn
ZURhdGEuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZVVz
YWdlRGF0YV9oCisjZGVmaW5lIFJlc291cmNlVXNhZ2VEYXRhX2gKKworI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKKworI2luY2x1ZGUgPGFycmF5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBNZW1vcnlDYXRlZ29yeSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgYm1hbGxv
YyA9IDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTGliY01hbGxvYyA9IDE7CitzdGF0aWMgY29u
c3QgdW5zaWduZWQgSlNKSVQgPSAyOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltYWdlcyA9IDM7
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgR0NIZWFwID0gNDsKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBHQ093bmVkID0gNTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBPdGhlciA9IDY7CitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgTGF5ZXJzID0gNzsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBOdW1iZXJP
ZkNhdGVnb3JpZXMgPSA4OworfQorCitzdHJ1Y3QgTWVtb3J5Q2F0ZWdvcnlJbmZvIHsKKyAgICBN
ZW1vcnlDYXRlZ29yeUluZm8oKSB7IH0gLy8gTmVlZGVkIGZvciBzdGQ6OmFycmF5LgorICAgIE1l
bW9yeUNhdGVnb3J5SW5mbyh1bnNpZ25lZCBjYXRlZ29yeSwgYm9vbCBzdWJjYXRlZ29yeSA9IGZh
bHNlKQorICAgICAgICA6IGlzU3ViY2F0ZWdvcnkoc3ViY2F0ZWdvcnkpCisgICAgICAgICwgdHlw
ZShjYXRlZ29yeSkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IGRpcnR5U2l6ZSB7IDAgfTsK
KyAgICBzaXplX3QgcmVjbGFpbWFibGVTaXplIHsgMCB9OworICAgIGJvb2wgaXNTdWJjYXRlZ29y
eSB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgdHlwZSB7IE1lbW9yeUNhdGVnb3J5OjpOdW1iZXJP
ZkNhdGVnb3JpZXMgfTsKK307CisKK3N0cnVjdCBSZXNvdXJjZVVzYWdlRGF0YSB7CisgICAgUmVz
b3VyY2VVc2FnZURhdGEoKTsKKyAgICBSZXNvdXJjZVVzYWdlRGF0YShjb25zdCBSZXNvdXJjZVVz
YWdlRGF0YSYgZGF0YSk7CisKKyAgICBmbG9hdCBjcHUgeyAwIH07CisgICAgc2l6ZV90IHRvdGFs
RGlydHlTaXplIHsgMCB9OworICAgIHN0ZDo6YXJyYXk8TWVtb3J5Q2F0ZWdvcnlJbmZvLCBNZW1v
cnlDYXRlZ29yeTo6TnVtYmVyT2ZDYXRlZ29yaWVzPiBjYXRlZ29yaWVzOworICAgIGRvdWJsZSB0
aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb24geyAwIH07CisgICAgZG91YmxlIHRpbWVPZk5leHRGdWxs
Q29sbGVjdGlvbiB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFJlc291cmNlVXNhZ2VEYXRhX2gKKworI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9VU0FH
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZU92ZXJsYXku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlT3ZlcmxheS5jcHAKaW5kZXgg
MWZkNGNhYy4uNzlkYTAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJj
ZVVzYWdlT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdl
T3ZlcmxheS5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0j
aWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFX09WRVJMQVkpCisjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQogCiAjaW5jbHVkZSAiUmVzb3VyY2VVc2FnZU92ZXJsYXkuaCIKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlT3ZlcmxheS5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9SZXNvdXJjZVVzYWdlT3ZlcmxheS5oCmluZGV4IGZkOTJmNGMuLmUwMzlkZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZU92ZXJsYXkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VPdmVybGF5LmgKQEAgLTI2LDcgKzI2
LDcgQEAKICNpZm5kZWYgUmVzb3VyY2VVc2FnZU92ZXJsYXlfaAogI2RlZmluZSBSZXNvdXJjZVVz
YWdlT3ZlcmxheV9oCiAKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0VfT1ZFUkxBWSkKKyNpZiBF
TkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNh
Z2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzUwMGJlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcApAQCAt
MCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVVzYWdlVGhyZWFkLmgiCisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisK
KyNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZXNvdXJjZVVzYWdlVGhyZWFkOjpSZXNvdXJjZVVzYWdlVGhyZWFkKCkKK3sK
K30KKworUmVzb3VyY2VVc2FnZVRocmVhZCYgUmVzb3VyY2VVc2FnZVRocmVhZDo6c2luZ2xldG9u
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVzb3VyY2VVc2FnZVRocmVhZD4gcmVz
b3VyY2VVc2FnZVRocmVhZDsKKyAgICByZXR1cm4gcmVzb3VyY2VVc2FnZVRocmVhZDsKK30KKwor
dm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjphZGRPYnNlcnZlcih2b2lkKiBrZXksIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmKT4gZnVuY3Rpb24pCit7CisgICAg
YXV0byYgcmVzb3VyY2VVc2FnZVRocmVhZCA9IFJlc291cmNlVXNhZ2VUaHJlYWQ6OnNpbmdsZXRv
bigpOworICAgIHJlc291cmNlVXNhZ2VUaHJlYWQuY3JlYXRlVGhyZWFkSWZOZWVkZWQoKTsKKwor
ICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocmVzb3VyY2VVc2FnZVRocmVhZC5tX2xv
Y2spOworICAgICAgICBib29sIHdhc0VtcHR5ID0gcmVzb3VyY2VVc2FnZVRocmVhZC5tX29ic2Vy
dmVycy5pc0VtcHR5KCk7CisgICAgICAgIHJlc291cmNlVXNhZ2VUaHJlYWQubV9vYnNlcnZlcnMu
c2V0KGtleSwgZnVuY3Rpb24pOworCisgICAgICAgIGlmICh3YXNFbXB0eSkKKyAgICAgICAgICAg
IHJlc291cmNlVXNhZ2VUaHJlYWQubV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKHZvaWQqIGtleSkKK3sK
KyAgICBhdXRvJiByZXNvdXJjZVVzYWdlVGhyZWFkID0gUmVzb3VyY2VVc2FnZVRocmVhZDo6c2lu
Z2xldG9uKCk7CisKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHJlc291cmNlVXNh
Z2VUaHJlYWQubV9sb2NrKTsKKyAgICAgICAgcmVzb3VyY2VVc2FnZVRocmVhZC5tX29ic2VydmVy
cy5yZW1vdmUoa2V5KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6d2Fp
dFVudGlsT2JzZXJ2ZXJzKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAg
IHdoaWxlIChtX29ic2VydmVycy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29uZGl0aW9uLndhaXQo
bV9sb2NrKTsKK30KKwordm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpub3RpZnlPYnNlcnZlcnMo
UmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbZGF0YV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgUmVz
b3VyY2VVc2FnZURhdGEmKT4+IGZ1bmN0aW9uczsKKyAgICAgICAgCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIHJlc291cmNlVXNhZ2VUaHJlYWQgPSBSZXNvdXJjZVVzYWdlVGhyZWFkOjpz
aW5nbGV0b24oKTsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHJlc291cmNlVXNhZ2VU
aHJlYWQubV9sb2NrKTsKKyAgICAgICAgICAgIGNvcHlWYWx1ZXNUb1ZlY3RvcihyZXNvdXJjZVVz
YWdlVGhyZWFkLm1fb2JzZXJ2ZXJzLCBmdW5jdGlvbnMpOworICAgICAgICB9CisKKyAgICAgICAg
Zm9yIChhdXRvJiBmdW5jdGlvbiA6IGZ1bmN0aW9ucykKKyAgICAgICAgICAgIGZ1bmN0aW9uKGRh
dGEpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6OmNyZWF0ZVRocmVh
ZElmTmVlZGVkKCkKK3sKKyAgICBpZiAobV90aHJlYWRJZGVudGlmaWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3ZtID0gJkpTRE9NV2luZG93Ojpjb21tb25WTSgpOworICAgIG1fdGhyZWFk
SWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6
IFJlc291cmNlVXNhZ2UiKTsKK30KKwordm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjp0aHJlYWRD
YWxsYmFjayh2b2lkKiByZXNvdXJjZVVzYWdlVGhyZWFkKQoreworICAgIHN0YXRpY19jYXN0PFJl
c291cmNlVXNhZ2VUaHJlYWQqPihyZXNvdXJjZVVzYWdlVGhyZWFkKS0+dGhyZWFkQm9keSgpOwor
fQorCitOT19SRVRVUk4gdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjp0aHJlYWRCb2R5KCkKK3sK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAvLyBPbmx5IGRvIHdvcmsgaWYgd2UgaGF2ZSBv
YnNlcnZlcnMuCisgICAgICAgIHdhaXRVbnRpbE9ic2VydmVycygpOworCisgICAgICAgIGF1dG8g
c3RhcnQgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKworICAgICAgICBSZXNv
dXJjZVVzYWdlRGF0YSBkYXRhOworICAgICAgICBwbGF0Zm9ybVRocmVhZEJvZHkobV92bSwgZGF0
YSk7CisgICAgICAgIG5vdGlmeU9ic2VydmVycyhkYXRhKTsKKworICAgICAgICBhdXRvIGR1cmF0
aW9uID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cz4oc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydCk7CisgICAgICAgIGF1
dG8gZGlmZmVyZW5jZSA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTAwKSAtIGR1cmF0aW9u
OworICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoZGlmZmVyZW5jZSk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUkVTT1VS
Q0VfVVNBR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VU
aHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OWJiOWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaApAQCAtMCwwICsxLDc5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZVVzYWdlVGhyZWFkX2gKKyNkZWZpbmUg
UmVzb3VyY2VVc2FnZVRocmVhZF9oCisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisKKyNp
bmNsdWRlICJSZXNvdXJjZVVzYWdlRGF0YS5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5j
bHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBWTTsKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZVVzYWdlVGhyZWFkIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZVVzYWdlVGhyZWFkKTsKKworcHVibGljOgorICAg
IHN0YXRpYyB2b2lkIGFkZE9ic2VydmVyKHZvaWQqIGtleSwgc3RkOjpmdW5jdGlvbjx2b2lkIChj
b25zdCBSZXNvdXJjZVVzYWdlRGF0YSYpPik7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JzZXJ2
ZXIodm9pZCoga2V5KTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8UmVz
b3VyY2VVc2FnZVRocmVhZD47CisgICAgUmVzb3VyY2VVc2FnZVRocmVhZCgpOworICAgIHN0YXRp
YyBSZXNvdXJjZVVzYWdlVGhyZWFkJiBzaW5nbGV0b24oKTsKKworICAgIHZvaWQgd2FpdFVudGls
T2JzZXJ2ZXJzKCk7CisgICAgdm9pZCBub3RpZnlPYnNlcnZlcnMoUmVzb3VyY2VVc2FnZURhdGEm
KTsKKworICAgIHZvaWQgY3JlYXRlVGhyZWFkSWZOZWVkZWQoKTsKKyAgICBzdGF0aWMgdm9pZCB0
aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpOworICAgIHZvaWQgdGhyZWFkQm9k
eSgpOworICAgIHZvaWQgcGxhdGZvcm1UaHJlYWRCb2R5KEpTQzo6Vk0qLCBSZXNvdXJjZVVzYWdl
RGF0YSYpOworCisgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXIgeyAwIH07
CisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIEhhc2hN
YXA8dm9pZCosIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmKT4+
IG1fb2JzZXJ2ZXJzOworCisgICAgLy8gUGxhdGZvcm1zIG1heSBuZWVkIHRvIGFjY2VzcyBzb21l
IGRhdGEgZnJvbSB0aGUgY29tbW9uIFZNLgorICAgIC8vIFRoZXkgc2hvdWxkIGVuc3VyZSB0aGVp
ciB1c2Ugb2YgdGhlIFZNIGlzIHRocmVhZCBzYWZlLgorICAgIEpTQzo6Vk0qIG1fdm0geyBudWxs
cHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
UkVTT1VSQ0VfVVNBR0UpCisKKyNlbmRpZiAvLyBSZXNvdXJjZVVzYWdlVGhyZWFkX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZmM0MzVmYi4uZDg1ZDM2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRTaG93VGls
ZWRTY3JvbGxpbmdJbmRpY2F0b3IoYm9vbCBlbmFibGVkKQogICAgIG1fc2hvd1RpbGVkU2Nyb2xs
aW5nSW5kaWNhdG9yID0gZW5hYmxlZDsKIH0KIAotI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRV9P
VkVSTEFZKQorI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIHZvaWQgU2V0dGluZ3M6OnNldFJl
c291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShib29sIHZpc2libGUpCiB7CiAgICAgaWYgKG1fcmVz
b3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlID09IHZpc2libGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgK
aW5kZXggOGI2NTMyOC4uYmE0YTc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaApAQCAtMTkzLDcg
KzE5Myw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3dUaWxlZFNj
cm9sbGluZ0luZGljYXRvcihib29sKTsKICAgICBib29sIHNob3dUaWxlZFNjcm9sbGluZ0luZGlj
YXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yOyB9CiAK
LSNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0VfT1ZFUkxBWSkKKyNpZiBFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpCiAgICAgYm9vbCByZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZTsgfQogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wpOwogI2VuZGlmCkBAIC0z
NTIsNyArMzUyLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9mb3JjZVBlbmRpbmdXZWJHTFBv
bGljeSA6IDE7CiAKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0VfT1ZFUkxBWSkKKyNpZiBFTkFC
TEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgYm9vbCBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJs
ZSB7IGZhbHNlIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9j
b2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9j
b2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCmluZGV4IDA1ZjYwN2IuLjg2NGVkYTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJs
YXlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VP
dmVybGF5Q29jb2EubW0KQEAgLTI2LDIxICsyNiwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlc291cmNlVXNhZ2VPdmVybGF5LmgiCiAKLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0VfT1ZFUkxBWSkKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAKICNpbmNsdWRlICJK
U0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIk1hY2hWTVNQSS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
Q0FMYXllci5oIgorI2luY2x1ZGUgIlJlc291cmNlVXNhZ2VUaHJlYWQuaCIKICNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvR0NBY3Rp
dml0eUNhbGxiYWNrLmg+CiAjaW5jbHVkZSA8UXVhcnR6Q29yZS9DQUxheWVyLmg+CiAjaW5jbHVk
ZSA8UXVhcnR6Q29yZS9DQVRyYW5zYWN0aW9uLmg+Ci0jaW5jbHVkZSA8YXJyYXk+Ci0jaW5jbHVk
ZSA8bWFjaC9tYWNoLmg+Ci0jaW5jbHVkZSA8bWFjaC92bV9zdGF0aXN0aWNzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8
dGhyZWFkPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAKQEAgLTcxLDE5ICs2NCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBzaXplX3Qgdm1QYWdlU2l6ZSgpCi17
Ci0gICAgc3RhdGljIHNpemVfdCBwYWdlU2l6ZTsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZUZsYWc7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFsmXSB7Ci0gICAgICAgIHNp
emVfdCBvdXRwdXRTaXplID0gc2l6ZW9mKHBhZ2VTaXplKTsKLSAgICAgICAgaW50IHN0YXR1cyA9
IHN5c2N0bGJ5bmFtZSgidm0ucGFnZXNpemUiLCAmcGFnZVNpemUsICZvdXRwdXRTaXplLCBudWxs
cHRyLCAwKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0dXMsIHN0YXR1cyAhPSAtMSk7Ci0g
ICAgICAgIEFTU0VSVChwYWdlU2l6ZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHBhZ2VTaXplOwot
fQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qgc2l6ZSA9IDcwPgogY2xhc3MgUmluZ0J1
ZmZlciB7CiBwdWJsaWM6CkBAIC0xMzMsMTggKzExMyw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9jdXJyZW50IHsgMCB9OwogfTsKIAotbmFtZXNwYWNlIE1lbW9yeUNhdGVnb3J5IHsKLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBibWFsbG9jID0gMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBM
aWJjTWFsbG9jID0gMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBKU0pJVCA9IDI7Ci1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgSW1hZ2VzID0gMzsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBHQ0hlYXAg
PSA0Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEdDT3duZWQgPSA1Owotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIE90aGVyID0gNjsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBMYXllcnMgPSA3Owotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIE51bWJlck9mQ2F0ZWdvcmllcyA9IDg7Ci19Ci0KIHN0YXRpYyBD
R0NvbG9yUmVmIGNyZWF0ZUNvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEp
CiB7CiAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNl
Q3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpOwpAQCAtMTUyLDEwICsxMjAsMTAgQEAg
c3RhdGljIENHQ29sb3JSZWYgY3JlYXRlQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwg
ZmxvYXQgYSkKICAgICByZXR1cm4gQ0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLCBjb21wb25lbnRz
KTsKIH0KIAotc3RydWN0IE1lbW9yeUNhdGVnb3J5SW5mbyB7Ci0gICAgTWVtb3J5Q2F0ZWdvcnlJ
bmZvKCkgeyB9IC8vIE5lZWRlZCBmb3Igc3RkOjphcnJheS4KK3N0cnVjdCBIaXN0b3JpY01lbW9y
eUNhdGVnb3J5SW5mbyB7CisgICAgSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oKSB7IH0gLy8g
TmVlZGVkIGZvciBzdGQ6OmFycmF5LgogCi0gICAgTWVtb3J5Q2F0ZWdvcnlJbmZvKHVuc2lnbmVk
IGNhdGVnb3J5LCBSR0JBMzIgcmdiYSwgU3RyaW5nIG5hbWUsIGJvb2wgc3ViY2F0ZWdvcnkgPSBm
YWxzZSkKKyAgICBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyh1bnNpZ25lZCBjYXRlZ29yeSwg
UkdCQTMyIHJnYmEsIFN0cmluZyBuYW1lLCBib29sIHN1YmNhdGVnb3J5ID0gZmFsc2UpCiAgICAg
ICAgIDogbmFtZShXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIGlzU3ViY2F0ZWdvcnkoc3ViY2F0
ZWdvcnkpCiAgICAgICAgICwgdHlwZShjYXRlZ29yeSkKQEAgLTE2Nyw2NSArMTM1LDc2IEBAIHN0
cnVjdCBNZW1vcnlDYXRlZ29yeUluZm8gewogCiAgICAgU3RyaW5nIG5hbWU7CiAgICAgUmV0YWlu
UHRyPENHQ29sb3JSZWY+IGNvbG9yOwotICAgIFJpbmdCdWZmZXI8c2l6ZV90PiBoaXN0b3J5Owot
ICAgIFJpbmdCdWZmZXI8c2l6ZV90PiByZWNsYWltYWJsZUhpc3Rvcnk7CisgICAgUmluZ0J1ZmZl
cjxzaXplX3Q+IGRpcnR5U2l6ZTsKKyAgICBSaW5nQnVmZmVyPHNpemVfdD4gcmVjbGFpbWFibGVT
aXplOwogICAgIGJvb2wgaXNTdWJjYXRlZ29yeSB7IGZhbHNlIH07CiAgICAgdW5zaWduZWQgdHlw
ZSB7IE1lbW9yeUNhdGVnb3J5OjpOdW1iZXJPZkNhdGVnb3JpZXMgfTsKIH07CiAKLXN0cnVjdCBS
ZXNvdXJjZVVzYWdlRGF0YSB7Ci0gICAgUmVzb3VyY2VVc2FnZURhdGEoKTsKLQotICAgIExvY2sg
bG9jazsKLQotICAgIFJpbmdCdWZmZXI8c2l6ZV90PiB0b3RhbERpcnR5OwotICAgIHN0ZDo6YXJy
YXk8TWVtb3J5Q2F0ZWdvcnlJbmZvLCBNZW1vcnlDYXRlZ29yeTo6TnVtYmVyT2ZDYXRlZ29yaWVz
PiBjYXRlZ29yaWVzOwotCi0gICAgUmluZ0J1ZmZlcjxmbG9hdD4gY3B1SGlzdG9yeTsKLSAgICBS
aW5nQnVmZmVyPHNpemVfdD4gZ2NIZWFwU2l6ZUhpc3Rvcnk7Ci0KLSAgICBIYXNoU2V0PENBTGF5
ZXIgKj4gb3ZlcmxheUxheWVyczsKLSAgICBKU0M6OlZNKiB2bSB7IG51bGxwdHIgfTsKK3N0cnVj
dCBIaXN0b3JpY1Jlc291cmNlVXNhZ2VEYXRhIHsKKyAgICBIaXN0b3JpY1Jlc291cmNlVXNhZ2VE
YXRhKCk7CiAKKyAgICBSaW5nQnVmZmVyPGZsb2F0PiBjcHU7CisgICAgUmluZ0J1ZmZlcjxzaXpl
X3Q+IHRvdGFsRGlydHlTaXplOworICAgIFJpbmdCdWZmZXI8c2l6ZV90PiBnY0hlYXBTaXplOwor
ICAgIHN0ZDo6YXJyYXk8SGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8sIE1lbW9yeUNhdGVnb3J5
OjpOdW1iZXJPZkNhdGVnb3JpZXM+IGNhdGVnb3JpZXM7CiAgICAgZG91YmxlIHRpbWVPZk5leHRF
ZGVuQ29sbGVjdGlvbiB7IDAgfTsKICAgICBkb3VibGUgdGltZU9mTmV4dEZ1bGxDb2xsZWN0aW9u
IHsgMCB9OwogfTsKIAotUmVzb3VyY2VVc2FnZURhdGE6OlJlc291cmNlVXNhZ2VEYXRhKCkKK0hp
c3RvcmljUmVzb3VyY2VVc2FnZURhdGE6Okhpc3RvcmljUmVzb3VyY2VVc2FnZURhdGEoKQogewog
ICAgIC8vIFZNIHRhZyBjYXRlZ29yaWVzLgotICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6
OkpTSklUXSA9IE1lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6SlNKSVQsIDB4RkZG
RjYwRkYsICJKUyBKSVQiKTsKLSAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpJbWFnZXNd
ID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpJbWFnZXMsIDB4RkZGRkZGMDAs
ICJJbWFnZXMiKTsKLSAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMYXllcnNdID0gTWVt
b3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpMYXllcnMsIDB4RkYwMEZGRkYsICJMYXll
cnMiKTsKLSAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMaWJjTWFsbG9jXSA9IE1lbW9y
eUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxvYywgMHhGRjAwRkYwMCwgImxp
YmMgbWFsbG9jIik7Ci0gICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6Ym1hbGxvY10gPSBN
ZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OmJtYWxsb2MsIDB4RkZGRjYwNjAsICJi
bWFsbG9jIik7Ci0gICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6T3RoZXJdID0gTWVtb3J5
Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpPdGhlciwgMHhGRkMwRkYwMCwgIk90aGVyIik7
CisgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SlNKSVRdID0gSGlzdG9yaWNNZW1vcnlD
YXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkpTSklULCAweEZGRkY2MEZGLCAiSlMgSklUIik7
CisgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6SW1hZ2VzXSA9IEhpc3RvcmljTWVtb3J5
Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpJbWFnZXMsIDB4RkZGRkZGMDAsICJJbWFnZXMi
KTsKKyAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpMYXllcnNdID0gSGlzdG9yaWNNZW1v
cnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkxheWVycywgMHhGRjAwRkZGRiwgIkxheWVy
cyIpOworICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2NdID0gSGlzdG9y
aWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkxpYmNNYWxsb2MsIDB4RkYwMEZG
MDAsICJsaWJjIG1hbGxvYyIpOworICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OmJtYWxs
b2NdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OmJtYWxsb2Ms
IDB4RkZGRjYwNjAsICJibWFsbG9jIik7CisgICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6
T3RoZXJdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6Ok90aGVy
LCAweEZGQzBGRjAwLCAiT3RoZXIiKTsKIAogICAgIC8vIFN1YiBjYXRlZ29yaWVzIChlLmcgYnJl
YWtkb3duIG9mIGJtYWxsb2MgdGFnLikKLSAgICBjYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpH
Q0hlYXBdID0gTWVtb3J5Q2F0ZWdvcnlJbmZvKE1lbW9yeUNhdGVnb3J5OjpHQ0hlYXAsIDB4RkZB
MEEwRkYsICJHQyBoZWFwIiwgdHJ1ZSk7Ci0gICAgY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6
R0NPd25lZF0gPSBNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5Q2F0ZWdvcnk6OkdDT3duZWQsIDB4
RkZGRkMwNjAsICJHQyBvd25lZCIsIHRydWUpOworICAgIGNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdv
cnk6OkdDSGVhcF0gPSBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyhNZW1vcnlDYXRlZ29yeTo6
R0NIZWFwLCAweEZGQTBBMEZGLCAiR0MgaGVhcCIsIHRydWUpOworICAgIGNhdGVnb3JpZXNbTWVt
b3J5Q2F0ZWdvcnk6OkdDT3duZWRdID0gSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oTWVtb3J5
Q2F0ZWdvcnk6OkdDT3duZWQsIDB4RkZGRkMwNjAsICJHQyBvd25lZCIsIHRydWUpOworCisjaWZu
ZGVmIE5ERUJVRworICAgIC8vIEVuc3VyZSB0aGlzIGFsaWducyB3aXRoIFJlc291cmNlVXNhZ2VE
YXRhJ3MgY2F0ZWdvcnkgb3JkZXIuCisgICAgUmVzb3VyY2VVc2FnZURhdGEgZDsKKyAgICBBU1NF
UlQoY2F0ZWdvcmllcy5zaXplID0gZC5jYXRlZ29yaWVzLnNpemUpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2F0ZWdvcmllcy5zaXplOyArK2kpCisgICAgICAgIEFTU0VSVChjYXRlZ29y
aWVzW2ldLnR5cGUgPT0gZC5jYXRlZ29yaWVzW2ldLnR5cGUpOworI2VuZGlmCiB9CiAKLXN0YXRp
YyBSZXNvdXJjZVVzYWdlRGF0YSYgc2hhcmVkRGF0YSgpCitzdGF0aWMgSGlzdG9yaWNSZXNvdXJj
ZVVzYWdlRGF0YSYgaGlzdG9yaWNVc2FnZURhdGEoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxSZXNvdXJjZVVzYWdlRGF0YT4gZGF0YTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YT4gZGF0YTsKICAgICByZXR1cm4gZGF0YTsKIH0KIAot
dm9pZCBydW5TYW1wbGVyVGhyZWFkKHZvaWQqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZERhdGFUb0hp
c3RvcnkoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIGF1dG8mIGhpc3RvcmljRGF0YSA9IGhpc3RvcmljVXNhZ2VEYXRh
KCk7CisgICAgaGlzdG9yaWNEYXRhLmNwdS5hcHBlbmQoZGF0YS5jcHUpOworICAgIGhpc3Rvcmlj
RGF0YS50b3RhbERpcnR5U2l6ZS5hcHBlbmQoZGF0YS50b3RhbERpcnR5U2l6ZSk7CisgICAgZm9y
IChhdXRvJiBjYXRlZ29yeSA6IGhpc3RvcmljRGF0YS5jYXRlZ29yaWVzKSB7CisgICAgICAgIGNh
dGVnb3J5LmRpcnR5U2l6ZS5hcHBlbmQoZGF0YS5jYXRlZ29yaWVzW2NhdGVnb3J5LnR5cGVdLmRp
cnR5U2l6ZSk7CisgICAgICAgIGNhdGVnb3J5LnJlY2xhaW1hYmxlU2l6ZS5hcHBlbmQoZGF0YS5j
YXRlZ29yaWVzW2NhdGVnb3J5LnR5cGVdLnJlY2xhaW1hYmxlU2l6ZSk7CisgICAgfQorICAgIGhp
c3RvcmljRGF0YS50aW1lT2ZOZXh0RWRlbkNvbGxlY3Rpb24gPSBkYXRhLnRpbWVPZk5leHRFZGVu
Q29sbGVjdGlvbjsKKyAgICBoaXN0b3JpY0RhdGEudGltZU9mTmV4dEZ1bGxDb2xsZWN0aW9uID0g
ZGF0YS50aW1lT2ZOZXh0RnVsbENvbGxlY3Rpb247CisKKyAgICAvLyBGSVhNRTogRmluZCBhIHdh
eSB0byBhZGQgdGhpcyB0byBSZXNvdXJjZVVzYWdlRGF0YSBhbmQgY2FsY3VsYXRlIGl0IG9uIHRo
ZSByZXNvdXJjZSB1c2FnZSBzYW1wbGVyIHRocmVhZC4KKyAgICB7CisgICAgICAgIEpTQzo6Vk0q
IHZtID0gJkpTRE9NV2luZG93Ojpjb21tb25WTSgpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICAgICAgaGlzdG9yaWNEYXRhLmdjSGVhcFNpemUuYXBwZW5kKHZtLT5o
ZWFwLnNpemUoKSAtIHZtLT5oZWFwLmV4dHJhTWVtb3J5U2l6ZSgpKTsKKyAgICB9Cit9CiAKIHZv
aWQgUmVzb3VyY2VVc2FnZU92ZXJsYXk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7Ci0gICAgYXV0
byYgZGF0YSA9IHNoYXJlZERhdGEoKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihkYXRhLmxvY2sp
OwotCi0gICAgLy8gRklYTUU6IFRoZSBzYW1wbGVyIHRocmVhZCB3aWxsIG5ldmVyIHN0b3Agb25j
ZSBzdGFydGVkLgotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGQ6
OmNhbGxfb25jZShvbmNlRmxhZywgWyZdIHsKLSAgICAgICAgZGF0YS52bSA9ICZKU0RPTVdpbmRv
dzo6Y29tbW9uVk0oKTsKLSAgICAgICAgY3JlYXRlVGhyZWFkKHJ1blNhbXBsZXJUaHJlYWQsIG51
bGxwdHIsICJSZXNvdXJjZVVzYWdlT3ZlcmxheSBTYW1wbGVyIik7Ci0gICAgfSk7Ci0KICAgICBt
X2xheWVyID0gYWRvcHROUyhbW1dlYk92ZXJsYXlMYXllciBhbGxvY10gaW5pdFdpdGhSZXNvdXJj
ZVVzYWdlT3ZlcmxheTp0aGlzXSk7CiAKICAgICBtX2NvbnRhaW5lckxheWVyID0gYWRvcHROUyhb
W0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKQEAgLTI0MSwxNCArMjIwLDI0IEBAIHZvaWQgUmVzb3Vy
Y2VVc2FnZU92ZXJsYXk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAKICAgICBvdmVybGF5KCkubGF5
ZXIoKS5zZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihtX2xheWVyLmdldCgpLCBHcmFwaGljc0xh
eWVyOjpOb0NvbnRlbnRzTGF5ZXIpOwogCi0gICAgZGF0YS5vdmVybGF5TGF5ZXJzLmFkZChtX2xh
eWVyLmdldCgpKTsKKyAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjphZGRPYnNlcnZlcih0aGlzLCBb
dGhpc10gKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKSB7CisgICAgICAgIGFwcGVuZERh
dGFUb0hpc3RvcnkoZGF0YSk7CisKKyAgICAgICAgLy8gRklYTUU6IEl0IHNob3VsZG4ndCBiZSBu
ZWNlc3NhcnkgdG8gdXBkYXRlIHRoZSBib3VuZHMgb24gZXZlcnkgc2luZ2xlIHRocmVhZCBsb29w
IGl0ZXJhdGlvbiwKKyAgICAgICAgLy8gYnV0IHNvbWV0aGluZyBpcyBjYXVzaW5nIHRoZW0gdG8g
YmVjb21lIDB4MC4KKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgICAgICBDQUxh
eWVyICpjb250YWluZXJMYXllciA9IFttX2xheWVyIHN1cGVybGF5ZXJdOworICAgICAgICBDR1Jl
Y3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgUmVzb3VyY2VVc2FnZU92ZXJsYXk6Om5vcm1hbFdp
ZHRoLCBSZXNvdXJjZVVzYWdlT3ZlcmxheTo6bm9ybWFsSGVpZ2h0KTsKKyAgICAgICAgW21fbGF5
ZXIgc2V0Qm91bmRzOnJlY3RdOworICAgICAgICBbY29udGFpbmVyTGF5ZXIgc2V0Qm91bmRzOnJl
Y3RdOworICAgICAgICBbbV9sYXllciBzZXROZWVkc0Rpc3BsYXldOworICAgICAgICBbQ0FUcmFu
c2FjdGlvbiBjb21taXRdOworICAgIH0pOwogfQogCiB2b2lkIFJlc291cmNlVXNhZ2VPdmVybGF5
OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIGF1dG8mIGRhdGEgPSBzaGFyZWREYXRhKCk7Ci0g
ICAgTG9ja0hvbGRlciBsb2NrZXIoZGF0YS5sb2NrKTsKLSAgICBkYXRhLm92ZXJsYXlMYXllcnMu
cmVtb3ZlKG1fbGF5ZXIuZ2V0KCkpOworICAgIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnJlbW92ZU9i
c2VydmVyKHRoaXMpOwogfQogCiBzdGF0aWMgdm9pZCBzaG93VGV4dChDR0NvbnRleHRSZWYgY29u
dGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgQ0dDb2xvclJlZiBjb2xvciwgY29uc3QgU3RyaW5nJiB0
ZXh0KQpAQCAtMzUxLDEyICszNDAsMTIgQEAgc3RhdGljIHZvaWQgZHJhd0dDSGlzdG9yeShDR0Nv
bnRleHRSZWYgY29udGV4dCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB5MiwgUmkKICAgICBk
cmF3R3JhcGhMYWJlbChjb250ZXh0LCB4MSwgeTIsICJHQyIpOwogfQogCi1zdGF0aWMgdm9pZCBk
cmF3TWVtSGlzdG9yeShDR0NvbnRleHRSZWYgY29udGV4dCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBm
bG9hdCB5MiwgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCitzdGF0aWMgdm9pZCBkcmF3TWVtSGlz
dG9yeShDR0NvbnRleHRSZWYgY29udGV4dCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB5Miwg
SGlzdG9yaWNSZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkKIHsKICAgICBmbG9hdCB5U2NhbGUgPSB5
MiAtIHkxOwogCiAgICAgc2l6ZV90IHBlYWsgPSAwOwotICAgIGRhdGEudG90YWxEaXJ0eS5mb3JF
YWNoKFsmXShzaXplX3QgbSkgeworICAgIGRhdGEudG90YWxEaXJ0eVNpemUuZm9yRWFjaChbJl0o
c2l6ZV90IG0pIHsKICAgICAgICAgaWYgKG0gPiBwZWFrKQogICAgICAgICAgICAgcGVhayA9IG07
CiAgICAgfSk7CkBAIC0zNzIsNyArMzYxLDcgQEAgc3RhdGljIHZvaWQgZHJhd01lbUhpc3Rvcnko
Q0dDb250ZXh0UmVmIGNvbnRleHQsIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgeTIsIFIKIAog
ICAgIGZvciAoYXV0byYgY2F0ZWdvcnkgOiBkYXRhLmNhdGVnb3JpZXMpIHsKICAgICAgICAgdW5z
aWduZWQgeCA9IDA7Ci0gICAgICAgIGNhdGVnb3J5Lmhpc3RvcnkuZm9yRWFjaChbJl0oc2l6ZV90
IG0pIHsKKyAgICAgICAgY2F0ZWdvcnkuZGlydHlTaXplLmZvckVhY2goWyZdKHNpemVfdCBtKSB7
CiAgICAgICAgICAgICBjb2x1bW5zW3hdW2NhdGVnb3J5LnR5cGVdID0geyBjYXRlZ29yeS5jb2xv
ci5nZXQoKSwgbSB9OwogICAgICAgICAgICAgKyt4OwogICAgICAgICB9KTsKQEAgLTQxMSwxNSAr
NDAwLDE1IEBAIHN0YXRpYyB2b2lkIGRyYXdTbGljZShDR0NvbnRleHRSZWYgY29udGV4dCwgRmxv
YXRQb2ludCBjZW50ZXIsIGZsb2F0JiBhbmdsZSwgZmxvCiAgICAgYW5nbGUgKz0gcGFydCAqIGZ1
bGxDaXJjbGVJblJhZGlhbnM7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdNZW1vcnlQaWUoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIEZsb2F0UmVjdCYgcmVjdCwgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEp
CitzdGF0aWMgdm9pZCBkcmF3TWVtb3J5UGllKENHQ29udGV4dFJlZiBjb250ZXh0LCBGbG9hdFJl
Y3QmIHJlY3QsIEhpc3RvcmljUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCiB7CiAgICAgZmxvYXQg
cmFkaXVzID0gcmVjdC53aWR0aCgpIC8gMjsKICAgICBGbG9hdFBvaW50IGNlbnRlciA9IHJlY3Qu
Y2VudGVyKCk7Ci0gICAgc2l6ZV90IHRvdGFsRGlydHkgPSBkYXRhLnRvdGFsRGlydHkubGFzdCgp
OworICAgIHNpemVfdCB0b3RhbERpcnR5ID0gZGF0YS50b3RhbERpcnR5U2l6ZS5sYXN0KCk7CiAK
ICAgICBmbG9hdCBhbmdsZSA9IDA7CiAgICAgZm9yIChhdXRvJiBjYXRlZ29yeSA6IGRhdGEuY2F0
ZWdvcmllcykKLSAgICAgICAgZHJhd1NsaWNlKGNvbnRleHQsIGNlbnRlciwgYW5nbGUsIHJhZGl1
cywgY2F0ZWdvcnkuaGlzdG9yeS5sYXN0KCksIHRvdGFsRGlydHksIGNhdGVnb3J5LmNvbG9yLmdl
dCgpKTsKKyAgICAgICAgZHJhd1NsaWNlKGNvbnRleHQsIGNlbnRlciwgYW5nbGUsIHJhZGl1cywg
Y2F0ZWdvcnkuZGlydHlTaXplLmxhc3QoKSwgdG90YWxEaXJ0eSwgY2F0ZWdvcnkuY29sb3IuZ2V0
KCkpOwogfQogCiBzdGF0aWMgU3RyaW5nIGZvcm1hdEJ5dGVOdW1iZXIoc2l6ZV90IG51bWJlcikK
QEAgLTQ0Miw4ICs0MzEsNyBAQCBzdGF0aWMgU3RyaW5nIGdjVGltZXJTdHJpbmcoZG91YmxlIHRp
bWVyRmlyZURhdGUsIGRvdWJsZSBub3cpCiAKIHZvaWQgUmVzb3VyY2VVc2FnZU92ZXJsYXk6OnBs
YXRmb3JtRHJhdyhDR0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBhdXRvJiBkYXRhID0gc2hh
cmVkRGF0YSgpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKGRhdGEubG9jayk7CisgICAgYXV0byYg
ZGF0YSA9IGhpc3RvcmljVXNhZ2VEYXRhKCk7CiAKICAgICBpZiAoIVttX2xheWVyLmdldCgpIGNv
bnRlbnRzQXJlRmxpcHBlZF0pIHsKICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwg
MSwgLTEpOwpAQCAtNDU3LDEzICs0NDUsMTMgQEAgdm9pZCBSZXNvdXJjZVVzYWdlT3ZlcmxheTo6
cGxhdGZvcm1EcmF3KENHQ29udGV4dFJlZiBjb250ZXh0KQogICAgIENHQ29udGV4dENsZWFyUmVj
dChjb250ZXh0LCB2aWV3Qm91bmRzKTsKIAogICAgIHN0YXRpYyBDR0NvbG9yUmVmIGNvbG9yRm9y
TGFiZWxzID0gY3JlYXRlQ29sb3IoMC45LCAwLjksIDAuOSwgMSk7Ci0gICAgc2hvd1RleHQoY29u
dGV4dCwgMTAsIDIwLCBjb2xvckZvckxhYmVscywgU3RyaW5nOjpmb3JtYXQoIiAgICAgICAgQ1BV
OiAlZyIsIGRhdGEuY3B1SGlzdG9yeS5sYXN0KCkpKTsKLSAgICBzaG93VGV4dChjb250ZXh0LCAx
MCwgMzAsIGNvbG9yRm9yTGFiZWxzLCAiICBGb290cHJpbnQ6ICIgKyBmb3JtYXRCeXRlTnVtYmVy
KGRhdGEudG90YWxEaXJ0eS5sYXN0KCkpKTsKKyAgICBzaG93VGV4dChjb250ZXh0LCAxMCwgMjAs
IGNvbG9yRm9yTGFiZWxzLCBTdHJpbmc6OmZvcm1hdCgiICAgICAgICBDUFU6ICVnIiwgZGF0YS5j
cHUubGFzdCgpKSk7CisgICAgc2hvd1RleHQoY29udGV4dCwgMTAsIDMwLCBjb2xvckZvckxhYmVs
cywgIiAgRm9vdHByaW50OiAiICsgZm9ybWF0Qnl0ZU51bWJlcihkYXRhLnRvdGFsRGlydHlTaXpl
Lmxhc3QoKSkpOwogCiAgICAgZmxvYXQgeSA9IDUwOwogICAgIGZvciAoYXV0byYgY2F0ZWdvcnkg
OiBkYXRhLmNhdGVnb3JpZXMpIHsKLSAgICAgICAgU3RyaW5nIGxhYmVsID0gU3RyaW5nOjpmb3Jt
YXQoIiUgMTFzOiAlcyIsIGNhdGVnb3J5Lm5hbWUuYXNjaWkoKS5kYXRhKCksIGZvcm1hdEJ5dGVO
dW1iZXIoY2F0ZWdvcnkuaGlzdG9yeS5sYXN0KCkpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAg
c2l6ZV90IHJlY2xhaW1hYmxlID0gY2F0ZWdvcnkucmVjbGFpbWFibGVIaXN0b3J5Lmxhc3QoKTsK
KyAgICAgICAgU3RyaW5nIGxhYmVsID0gU3RyaW5nOjpmb3JtYXQoIiUgMTFzOiAlcyIsIGNhdGVn
b3J5Lm5hbWUuYXNjaWkoKS5kYXRhKCksIGZvcm1hdEJ5dGVOdW1iZXIoY2F0ZWdvcnkuZGlydHlT
aXplLmxhc3QoKSkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBzaXplX3QgcmVjbGFpbWFibGUg
PSBjYXRlZ29yeS5yZWNsYWltYWJsZVNpemUubGFzdCgpOwogICAgICAgICBpZiAocmVjbGFpbWFi
bGUpCiAgICAgICAgICAgICBsYWJlbCA9IGxhYmVsICsgU3RyaW5nOjpmb3JtYXQoIiBbJXNdIiwg
Zm9ybWF0Qnl0ZU51bWJlcihyZWNsYWltYWJsZSkuYXNjaWkoKS5kYXRhKCkpOwogCkBAIC00NzYs
MTg1ICs0NjQsMTQgQEAgdm9pZCBSZXNvdXJjZVVzYWdlT3ZlcmxheTo6cGxhdGZvcm1EcmF3KENH
Q29udGV4dFJlZiBjb250ZXh0KQogICAgIHNob3dUZXh0KGNvbnRleHQsIDEwLCB5ICsgMTAsIGNv
bG9yRm9yTGFiZWxzLCBTdHJpbmc6OmZvcm1hdCgiICAgIEVkZW4gR0M6ICVzIiwgZ2NUaW1lclN0
cmluZyhkYXRhLnRpbWVPZk5leHRFZGVuQ29sbGVjdGlvbiwgbm93KS5hc2NpaSgpLmRhdGEoKSkp
OwogICAgIHNob3dUZXh0KGNvbnRleHQsIDEwLCB5ICsgMjAsIGNvbG9yRm9yTGFiZWxzLCBTdHJp
bmc6OmZvcm1hdCgiICAgIEZ1bGwgR0M6ICVzIiwgZ2NUaW1lclN0cmluZyhkYXRhLnRpbWVPZk5l
eHRGdWxsQ29sbGVjdGlvbiwgbm93KS5hc2NpaSgpLmRhdGEoKSkpOwogCi0gICAgZHJhd0NwdUhp
c3RvcnkoY29udGV4dCwgdmlld0JvdW5kcy5zaXplLndpZHRoIC0gNzAsIDAsIHZpZXdCb3VuZHMu
c2l6ZS5oZWlnaHQsIGRhdGEuY3B1SGlzdG9yeSk7Ci0gICAgZHJhd0dDSGlzdG9yeShjb250ZXh0
LCB2aWV3Qm91bmRzLnNpemUud2lkdGggLSAxNDAsIDAsIHZpZXdCb3VuZHMuc2l6ZS5oZWlnaHQs
IGRhdGEuZ2NIZWFwU2l6ZUhpc3RvcnksIGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6
R0NIZWFwXS5oaXN0b3J5KTsKKyAgICBkcmF3Q3B1SGlzdG9yeShjb250ZXh0LCB2aWV3Qm91bmRz
LnNpemUud2lkdGggLSA3MCwgMCwgdmlld0JvdW5kcy5zaXplLmhlaWdodCwgZGF0YS5jcHUpOwor
ICAgIGRyYXdHQ0hpc3RvcnkoY29udGV4dCwgdmlld0JvdW5kcy5zaXplLndpZHRoIC0gMTQwLCAw
LCB2aWV3Qm91bmRzLnNpemUuaGVpZ2h0LCBkYXRhLmdjSGVhcFNpemUsIGRhdGEuY2F0ZWdvcmll
c1tNZW1vcnlDYXRlZ29yeTo6R0NIZWFwXS5kaXJ0eVNpemUpOwogICAgIGRyYXdNZW1IaXN0b3J5
KGNvbnRleHQsIHZpZXdCb3VuZHMuc2l6ZS53aWR0aCAtIDIxMCwgMCwgdmlld0JvdW5kcy5zaXpl
LmhlaWdodCwgZGF0YSk7CiAKICAgICBGbG9hdFJlY3QgcGllUmVjdCh2aWV3Qm91bmRzLnNpemUu
d2lkdGggLSAzMzAsIDAsIDEwMCwgdmlld0JvdW5kcy5zaXplLmhlaWdodCk7CiAgICAgZHJhd01l
bW9yeVBpZShjb250ZXh0LCBwaWVSZWN0LCBkYXRhKTsKIH0KIAotc3RydWN0IFRhZ0luZm8gewot
ICAgIFRhZ0luZm8oKSB7IH0KLSAgICBzaXplX3QgZGlydHkgeyAwIH07Ci0gICAgc2l6ZV90IHJl
Y2xhaW1hYmxlIHsgMCB9OwotfTsKLQotc3RhdGljIHN0ZDo6YXJyYXk8VGFnSW5mbywgMjU2PiBw
YWdlc1BlclZNVGFnKCkKLXsKLSAgICBzdGQ6OmFycmF5PFRhZ0luZm8sIDI1Nj4gdGFnczsKLSAg
ICB0YXNrX3QgdGFzayA9IG1hY2hfdGFza19zZWxmKCk7Ci0gICAgbWFjaF92bV9zaXplX3Qgc2l6
ZTsKLSAgICB1aW50MzJfdCBkZXB0aCA9IDA7Ci0gICAgc3RydWN0IHZtX3JlZ2lvbl9zdWJtYXBf
aW5mb182NCBpbmZvID0geyB9OwotICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgY291bnQgPSBW
TV9SRUdJT05fU1VCTUFQX0lORk9fQ09VTlRfNjQ7Ci0gICAgZm9yIChtYWNoX3ZtX2FkZHJlc3Nf
dCBhZGRyID0gMDsgOyBhZGRyICs9IHNpemUpIHsKLSAgICAgICAgaW50IHB1cmdlYWJsZVN0YXRl
OwotICAgICAgICBpZiAobWFjaF92bV9wdXJnYWJsZV9jb250cm9sKHRhc2ssIGFkZHIsIFZNX1BV
UkdBQkxFX0dFVF9TVEFURSwgJnB1cmdlYWJsZVN0YXRlKSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAg
ICAgICAgICBwdXJnZWFibGVTdGF0ZSA9IFZNX1BVUkdBQkxFX0RFTlk7Ci0KLSAgICAgICAga2Vy
bl9yZXR1cm5fdCBrciA9IG1hY2hfdm1fcmVnaW9uX3JlY3Vyc2UodGFzaywgJmFkZHIsICZzaXpl
LCAmZGVwdGgsICh2bV9yZWdpb25faW5mb190KSZpbmZvLCAmY291bnQpOwotICAgICAgICBpZiAo
a3IgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHB1
cmdlYWJsZVN0YXRlID09IFZNX1BVUkdBQkxFX1ZPTEFUSUxFKSB7Ci0gICAgICAgICAgICB0YWdz
W2luZm8udXNlcl90YWddLnJlY2xhaW1hYmxlICs9IGluZm8ucGFnZXNfcmVzaWRlbnQ7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwdXJnZWFibGVTdGF0
ZSA9PSBWTV9QVVJHQUJMRV9FTVBUWSkgewotICAgICAgICAgICAgdGFnc1tpbmZvLnVzZXJfdGFn
XS5yZWNsYWltYWJsZSArPSBzaXplIC8gdm1QYWdlU2l6ZSgpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGFub255bW91cyA9ICFpbmZvLmV4dGVybmFs
X3BhZ2VyOwotICAgICAgICBpZiAoYW5vbnltb3VzKSB7Ci0gICAgICAgICAgICB0YWdzW2luZm8u
dXNlcl90YWddLmRpcnR5ICs9IGluZm8ucGFnZXNfcmVzaWRlbnQgLSBpbmZvLnBhZ2VzX3JldXNh
YmxlOwotICAgICAgICAgICAgdGFnc1tpbmZvLnVzZXJfdGFnXS5yZWNsYWltYWJsZSArPSBpbmZv
LnBhZ2VzX3JldXNhYmxlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRhZ3NbaW5mby51
c2VyX3RhZ10uZGlydHkgKz0gaW5mby5wYWdlc19kaXJ0aWVkOwotICAgIH0KLQotICAgIHJldHVy
biB0YWdzOwotfQotCi1zdGF0aWMgZmxvYXQgY3B1VXNhZ2UoKQotewotICAgIHRocmVhZF9hcnJh
eV90IHRocmVhZExpc3Q7Ci0gICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB0aHJlYWRDb3VudDsK
LSAgICBrZXJuX3JldHVybl90IGtyID0gdGFza190aHJlYWRzKG1hY2hfdGFza19zZWxmKCksICZ0
aHJlYWRMaXN0LCAmdGhyZWFkQ291bnQpOwotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpCi0g
ICAgICAgIHJldHVybiAtMTsKLQotICAgIGZsb2F0IHVzYWdlID0gMDsKLQotICAgIGZvciAobWFj
aF9tc2dfdHlwZV9udW1iZXJfdCBpID0gMDsgaSA8IHRocmVhZENvdW50OyArK2kpIHsKLSAgICAg
ICAgdGhyZWFkX2luZm9fZGF0YV90IHRocmVhZEluZm87Ci0gICAgICAgIHRocmVhZF9iYXNpY19p
bmZvX3QgdGhyZWFkQmFzaWNJbmZvOwotCi0gICAgICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3Qg
dGhyZWFkSW5mb0NvdW50ID0gVEhSRUFEX0lORk9fTUFYOwotICAgICAgICBrciA9IHRocmVhZF9p
bmZvKHRocmVhZExpc3RbaV0sIFRIUkVBRF9CQVNJQ19JTkZPLCBzdGF0aWNfY2FzdDx0aHJlYWRf
aW5mb190Pih0aHJlYWRJbmZvKSwgJnRocmVhZEluZm9Db3VudCk7Ci0gICAgICAgIGlmIChrciAh
PSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICAgdGhyZWFk
QmFzaWNJbmZvID0gcmVpbnRlcnByZXRfY2FzdDx0aHJlYWRfYmFzaWNfaW5mb190Pih0aHJlYWRJ
bmZvKTsKLQotICAgICAgICBpZiAoISh0aHJlYWRCYXNpY0luZm8tPmZsYWdzICYgVEhfRkxBR1Nf
SURMRSkpCi0gICAgICAgICAgICB1c2FnZSArPSB0aHJlYWRCYXNpY0luZm8tPmNwdV91c2FnZSAv
IHN0YXRpY19jYXN0PGZsb2F0PihUSF9VU0FHRV9TQ0FMRSkgKiAxMDAuMDsKLSAgICB9Ci0KLSAg
ICBrciA9IHZtX2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgKHZtX29mZnNldF90KXRocmVh
ZExpc3QsIHRocmVhZENvdW50ICogc2l6ZW9mKHRocmVhZF90KSk7Ci0gICAgQVNTRVJUKGtyID09
IEtFUk5fU1VDQ0VTUyk7Ci0KLSAgICByZXR1cm4gdXNhZ2U7Ci19Ci0KLXN0YXRpYyB1bnNpZ25l
ZCBjYXRlZ29yeUZvclZNVGFnKHVuc2lnbmVkIHRhZykKLXsKLSAgICBzd2l0Y2ggKHRhZykgewot
ICAgIGNhc2UgVk1fTUVNT1JZX0lPS0lUOgotICAgIGNhc2UgVk1fTUVNT1JZX0xBWUVSS0lUOgot
ICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdvcnk6OkxheWVyczsKLSAgICBjYXNlIFZNX01FTU9S
WV9JTUFHRUlPOgotICAgIGNhc2UgVk1fTUVNT1JZX0NHSU1BR0U6Ci0gICAgICAgIHJldHVybiBN
ZW1vcnlDYXRlZ29yeTo6SW1hZ2VzOwotICAgIGNhc2UgVk1fTUVNT1JZX0pBVkFTQ1JJUFRfSklU
X0VYRUNVVEFCTEVfQUxMT0NBVE9SOgotICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdvcnk6OkpT
SklUOwotICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQzoKLSAgICBjYXNlIFZNX01FTU9SWV9NQUxM
T0NfSFVHRToKLSAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0NfTEFSR0U6Ci0gICAgY2FzZSBWTV9N
RU1PUllfTUFMTE9DX1NNQUxMOgotICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQ19USU5ZOgotICAg
IGNhc2UgVk1fTUVNT1JZX01BTExPQ19OQU5POgotICAgICAgICByZXR1cm4gTWVtb3J5Q2F0ZWdv
cnk6OkxpYmNNYWxsb2M7Ci0gICAgY2FzZSBWTV9NRU1PUllfVENNQUxMT0M6Ci0gICAgICAgIHJl
dHVybiBNZW1vcnlDYXRlZ29yeTo6Ym1hbGxvYzsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gTWVtb3J5Q2F0ZWdvcnk6Ok90aGVyOwotICAgIH0KLX07Ci0KLU5PX1JFVFVSTiB2b2lkIHJ1
blNhbXBsZXJUaHJlYWQodm9pZCopCi17Ci0gICAgYXV0byYgZGF0YSA9IHNoYXJlZERhdGEoKTsK
LSAgICB3aGlsZSAoMSkgewotICAgICAgICBmbG9hdCBjcHUgPSBjcHVVc2FnZSgpOwotICAgICAg
ICBhdXRvIHRhZ3MgPSBwYWdlc1BlclZNVGFnKCk7Ci0gICAgICAgIFZlY3RvcjxDQUxheWVyICos
IDg+IGxheWVyczsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihk
YXRhLmxvY2spOwotICAgICAgICAgICAgZGF0YS5jcHVIaXN0b3J5LmFwcGVuZChjcHUpOwotCi0g
ICAgICAgICAgICBzdGQ6OmFycmF5PFRhZ0luZm8sIE1lbW9yeUNhdGVnb3J5OjpOdW1iZXJPZkNh
dGVnb3JpZXM+IHBhZ2VzUGVyQ2F0ZWdvcnk7Ci0KLSAgICAgICAgICAgIHNpemVfdCB0b3RhbERp
cnR5UGFnZXMgPSAwOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1Njsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgcGFnZXNQZXJDYXRlZ29yeVtjYXRlZ29yeUZvclZNVGFn
KGkpXS5kaXJ0eSArPSB0YWdzW2ldLmRpcnR5OwotICAgICAgICAgICAgICAgIHBhZ2VzUGVyQ2F0
ZWdvcnlbY2F0ZWdvcnlGb3JWTVRhZyhpKV0ucmVjbGFpbWFibGUgKz0gdGFnc1tpXS5yZWNsYWlt
YWJsZTsKLSAgICAgICAgICAgICAgICB0b3RhbERpcnR5UGFnZXMgKz0gdGFnc1tpXS5kaXJ0eTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChhdXRvJiBjYXRlZ29yeSA6IGRhdGEu
Y2F0ZWdvcmllcykgewotICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS5pc1N1YmNhdGVnb3J5
KSAvLyBPbmx5IGRvIGF1dG9tYXRpYyB0YWxseWluZyBmb3IgdG9wLWxldmVsIGNhdGVnb3JpZXMu
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhdGVnb3J5
Lmhpc3RvcnkuYXBwZW5kKHBhZ2VzUGVyQ2F0ZWdvcnlbY2F0ZWdvcnkudHlwZV0uZGlydHkgKiB2
bVBhZ2VTaXplKCkpOwotICAgICAgICAgICAgICAgIGNhdGVnb3J5LnJlY2xhaW1hYmxlSGlzdG9y
eS5hcHBlbmQocGFnZXNQZXJDYXRlZ29yeVtjYXRlZ29yeS50eXBlXS5yZWNsYWltYWJsZSAqIHZt
UGFnZVNpemUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhLnRvdGFsRGlydHku
YXBwZW5kKHRvdGFsRGlydHlQYWdlcyAqIHZtUGFnZVNpemUoKSk7Ci0KLSAgICAgICAgICAgIGNv
cHlUb1ZlY3RvcihkYXRhLm92ZXJsYXlMYXllcnMsIGxheWVycyk7Ci0KLSAgICAgICAgICAgIHNp
emVfdCBjdXJyZW50R0NIZWFwQ2FwYWNpdHkgPSBkYXRhLnZtLT5oZWFwLmJsb2NrQnl0ZXNBbGxv
Y2F0ZWQoKTsKLSAgICAgICAgICAgIHNpemVfdCBjdXJyZW50R0NPd25lZCA9IGRhdGEudm0tPmhl
YXAuZXh0cmFNZW1vcnlTaXplKCk7Ci0KLSAgICAgICAgICAgIGRhdGEuY2F0ZWdvcmllc1tNZW1v
cnlDYXRlZ29yeTo6R0NIZWFwXS5oaXN0b3J5LmFwcGVuZChjdXJyZW50R0NIZWFwQ2FwYWNpdHkp
OwotICAgICAgICAgICAgZGF0YS5jYXRlZ29yaWVzW01lbW9yeUNhdGVnb3J5OjpHQ093bmVkXS5o
aXN0b3J5LmFwcGVuZChjdXJyZW50R0NPd25lZCk7Ci0KLSAgICAgICAgICAgIC8vIFN1YnRyYWN0
IGtub3duIHN1YmNodW5rcyBmcm9tIHRoZSBibWFsbG9jIGJ1Y2tldC4KLSAgICAgICAgICAgIC8v
IEZJWE1FOiBIYW5kbGUgcnVubmluZyB3aXRoIGJtYWxsb2MgZGlzYWJsZWQuCi0gICAgICAgICAg
ICBkYXRhLmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OmJtYWxsb2NdLmhpc3RvcnkubGFzdCgp
IC09IGN1cnJlbnRHQ0hlYXBDYXBhY2l0eSArIGN1cnJlbnRHQ093bmVkOwotCi0gICAgICAgICAg
ICBkYXRhLnRpbWVPZk5leHRFZGVuQ29sbGVjdGlvbiA9IGRhdGEudm0tPmhlYXAuZWRlbkFjdGl2
aXR5Q2FsbGJhY2soKS0+bmV4dEZpcmVUaW1lKCk7Ci0gICAgICAgICAgICBkYXRhLnRpbWVPZk5l
eHRGdWxsQ29sbGVjdGlvbiA9IGRhdGEudm0tPmhlYXAuZnVsbEFjdGl2aXR5Q2FsbGJhY2soKS0+
bmV4dEZpcmVUaW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdp
bl07Ci0gICAgICAgIGZvciAoQ0FMYXllciAqbGF5ZXIgOiBsYXllcnMpIHsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBJdCBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IHRvIHVwZGF0ZSB0aGUgYm91bmRz
IG9uIGV2ZXJ5IHNpbmdsZSB0aHJlYWQgbG9vcCBpdGVyYXRpb24sCi0gICAgICAgICAgICAvLyBi
dXQgc29tZXRoaW5nIGlzIGNhdXNpbmcgdGhlbSB0byBiZWNvbWUgMHgwLgotICAgICAgICAgICAg
Q0FMYXllciAqY29udGFpbmVyTGF5ZXIgPSBbbGF5ZXIgc3VwZXJsYXllcl07Ci0gICAgICAgICAg
ICBDR1JlY3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgUmVzb3VyY2VVc2FnZU92ZXJsYXk6Om5v
cm1hbFdpZHRoLCBSZXNvdXJjZVVzYWdlT3ZlcmxheTo6bm9ybWFsSGVpZ2h0KTsKLSAgICAgICAg
ICAgIFtsYXllciBzZXRCb3VuZHM6cmVjdF07Ci0gICAgICAgICAgICBbY29udGFpbmVyTGF5ZXIg
c2V0Qm91bmRzOnJlY3RdOwotICAgICAgICAgICAgW2xheWVyIHNldE5lZWRzRGlzcGxheV07Ci0g
ICAgICAgIH0KLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgICAgICAvLyBG
SVhNRTogRmluZCBhIHdheSB0byBnZXQgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgR0MgaGVhcCBz
aXplIHNhZmVseSBmcm9tIHRoZSBzYW1wbGVyIHRocmVhZC4KLSAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChbXSB7Ci0gICAgICAgICAgICBhdXRvJiBkYXRhID0gc2hhcmVkRGF0YSgpOwotICAgICAg
ICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhkYXRhLnZtKTsKLSAgICAgICAgICAgIHNpemVf
dCBnY0hlYXBTaXplID0gZGF0YS52bS0+aGVhcC5zaXplKCkgLSBkYXRhLnZtLT5oZWFwLmV4dHJh
TWVtb3J5U2l6ZSgpOwotCi0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihkYXRhLmxvY2sp
OwotICAgICAgICAgICAgZGF0YS5nY0hlYXBTaXplSGlzdG9yeS5hcHBlbmQoZ2NIZWFwU2l6ZSk7
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwMCkpOwotICAgIH0KLX0KLQogfQogCi0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjVlMzY0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQpAQCAtMCwwICsxLDE5
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVVzYWdlVGhyZWFkLmgiCisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisKKyNpbmNsdWRl
ICJNYWNoVk1TUEkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9HQ0FjdGl2aXR5Q2FsbGJh
Y2suaD4KKyNpbmNsdWRlIDxoZWFwL0hlYXAuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNp
bmNsdWRlIDxtYWNoL3ZtX3N0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Cisj
aW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBz
aXplX3Qgdm1QYWdlU2l6ZSgpCit7CisgICAgc3RhdGljIHNpemVfdCBwYWdlU2l6ZTsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZs
YWcsIFsmXSB7CisgICAgICAgIHNpemVfdCBvdXRwdXRTaXplID0gc2l6ZW9mKHBhZ2VTaXplKTsK
KyAgICAgICAgaW50IHN0YXR1cyA9IHN5c2N0bGJ5bmFtZSgidm0ucGFnZXNpemUiLCAmcGFnZVNp
emUsICZvdXRwdXRTaXplLCBudWxscHRyLCAwKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdGF0
dXMsIHN0YXR1cyAhPSAtMSk7CisgICAgICAgIEFTU0VSVChwYWdlU2l6ZSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHBhZ2VTaXplOworfQorCitzdHJ1Y3QgVGFnSW5mbyB7CisgICAgVGFnSW5mbygp
IHsgfQorICAgIHNpemVfdCBkaXJ0eSB7IDAgfTsKKyAgICBzaXplX3QgcmVjbGFpbWFibGUgeyAw
IH07Cit9OworCitzdGF0aWMgc3RkOjphcnJheTxUYWdJbmZvLCAyNTY+IHBhZ2VzUGVyVk1UYWco
KQoreworICAgIHN0ZDo6YXJyYXk8VGFnSW5mbywgMjU2PiB0YWdzOworICAgIHRhc2tfdCB0YXNr
ID0gbWFjaF90YXNrX3NlbGYoKTsKKyAgICBtYWNoX3ZtX3NpemVfdCBzaXplOworICAgIHVpbnQz
Ml90IGRlcHRoID0gMDsKKyAgICBzdHJ1Y3Qgdm1fcmVnaW9uX3N1Ym1hcF9pbmZvXzY0IGluZm8g
PSB7IH07CisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBjb3VudCA9IFZNX1JFR0lPTl9TVUJN
QVBfSU5GT19DT1VOVF82NDsKKyAgICBmb3IgKG1hY2hfdm1fYWRkcmVzc190IGFkZHIgPSAwOyA7
IGFkZHIgKz0gc2l6ZSkgeworICAgICAgICBpbnQgcHVyZ2VhYmxlU3RhdGU7CisgICAgICAgIGlm
IChtYWNoX3ZtX3B1cmdhYmxlX2NvbnRyb2wodGFzaywgYWRkciwgVk1fUFVSR0FCTEVfR0VUX1NU
QVRFLCAmcHVyZ2VhYmxlU3RhdGUpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAgIHB1cmdl
YWJsZVN0YXRlID0gVk1fUFVSR0FCTEVfREVOWTsKKworICAgICAgICBrZXJuX3JldHVybl90IGty
ID0gbWFjaF92bV9yZWdpb25fcmVjdXJzZSh0YXNrLCAmYWRkciwgJnNpemUsICZkZXB0aCwgKHZt
X3JlZ2lvbl9pbmZvX3QpJmluZm8sICZjb3VudCk7CisgICAgICAgIGlmIChrciAhPSBLRVJOX1NV
Q0NFU1MpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAocHVyZ2VhYmxlU3RhdGUg
PT0gVk1fUFVSR0FCTEVfVk9MQVRJTEUpIHsKKyAgICAgICAgICAgIHRhZ3NbaW5mby51c2VyX3Rh
Z10ucmVjbGFpbWFibGUgKz0gaW5mby5wYWdlc19yZXNpZGVudDsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHB1cmdlYWJsZVN0YXRlID09IFZNX1BVUkdB
QkxFX0VNUFRZKSB7CisgICAgICAgICAgICB0YWdzW2luZm8udXNlcl90YWddLnJlY2xhaW1hYmxl
ICs9IHNpemUgLyB2bVBhZ2VTaXplKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgYW5vbnltb3VzID0gIWluZm8uZXh0ZXJuYWxfcGFnZXI7CisgICAg
ICAgIGlmIChhbm9ueW1vdXMpIHsKKyAgICAgICAgICAgIHRhZ3NbaW5mby51c2VyX3RhZ10uZGly
dHkgKz0gaW5mby5wYWdlc19yZXNpZGVudCAtIGluZm8ucGFnZXNfcmV1c2FibGU7CisgICAgICAg
ICAgICB0YWdzW2luZm8udXNlcl90YWddLnJlY2xhaW1hYmxlICs9IGluZm8ucGFnZXNfcmV1c2Fi
bGU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGFnc1tpbmZvLnVzZXJfdGFnXS5kaXJ0
eSArPSBpbmZvLnBhZ2VzX2RpcnRpZWQ7CisgICAgfQorCisgICAgcmV0dXJuIHRhZ3M7Cit9CisK
K3N0YXRpYyBmbG9hdCBjcHVVc2FnZSgpCit7CisgICAgdGhyZWFkX2FycmF5X3QgdGhyZWFkTGlz
dDsKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90IHRocmVhZENvdW50OworICAgIGtlcm5fcmV0
dXJuX3Qga3IgPSB0YXNrX3RocmVhZHMobWFjaF90YXNrX3NlbGYoKSwgJnRocmVhZExpc3QsICZ0
aHJlYWRDb3VudCk7CisgICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJu
IC0xOworCisgICAgZmxvYXQgdXNhZ2UgPSAwOworCisgICAgZm9yIChtYWNoX21zZ190eXBlX251
bWJlcl90IGkgPSAwOyBpIDwgdGhyZWFkQ291bnQ7ICsraSkgeworICAgICAgICB0aHJlYWRfaW5m
b19kYXRhX3QgdGhyZWFkSW5mbzsKKyAgICAgICAgdGhyZWFkX2Jhc2ljX2luZm9fdCB0aHJlYWRC
YXNpY0luZm87CisKKyAgICAgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB0aHJlYWRJbmZvQ291
bnQgPSBUSFJFQURfSU5GT19NQVg7CisgICAgICAgIGtyID0gdGhyZWFkX2luZm8odGhyZWFkTGlz
dFtpXSwgVEhSRUFEX0JBU0lDX0lORk8sIHN0YXRpY19jYXN0PHRocmVhZF9pbmZvX3Q+KHRocmVh
ZEluZm8pLCAmdGhyZWFkSW5mb0NvdW50KTsKKyAgICAgICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VT
UykKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICB0aHJlYWRCYXNpY0luZm8gPSBy
ZWludGVycHJldF9jYXN0PHRocmVhZF9iYXNpY19pbmZvX3Q+KHRocmVhZEluZm8pOworCisgICAg
ICAgIGlmICghKHRocmVhZEJhc2ljSW5mby0+ZmxhZ3MgJiBUSF9GTEFHU19JRExFKSkKKyAgICAg
ICAgICAgIHVzYWdlICs9IHRocmVhZEJhc2ljSW5mby0+Y3B1X3VzYWdlIC8gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KFRIX1VTQUdFX1NDQUxFKSAqIDEwMC4wOworICAgIH0KKworICAgIGtyID0gdm1fZGVh
bGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCAodm1fb2Zmc2V0X3QpdGhyZWFkTGlzdCwgdGhyZWFk
Q291bnQgKiBzaXplb2YodGhyZWFkX3QpKTsKKyAgICBBU1NFUlQoa3IgPT0gS0VSTl9TVUNDRVNT
KTsKKworICAgIHJldHVybiB1c2FnZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNhdGVnb3J5Rm9y
Vk1UYWcodW5zaWduZWQgdGFnKQoreworICAgIHN3aXRjaCAodGFnKSB7CisgICAgY2FzZSBWTV9N
RU1PUllfSU9LSVQ6CisgICAgY2FzZSBWTV9NRU1PUllfTEFZRVJLSVQ6CisgICAgICAgIHJldHVy
biBNZW1vcnlDYXRlZ29yeTo6TGF5ZXJzOworICAgIGNhc2UgVk1fTUVNT1JZX0lNQUdFSU86Cisg
ICAgY2FzZSBWTV9NRU1PUllfQ0dJTUFHRToKKyAgICAgICAgcmV0dXJuIE1lbW9yeUNhdGVnb3J5
OjpJbWFnZXM7CisgICAgY2FzZSBWTV9NRU1PUllfSkFWQVNDUklQVF9KSVRfRVhFQ1VUQUJMRV9B
TExPQ0FUT1I6CisgICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29yeTo6SlNKSVQ7CisgICAgY2Fz
ZSBWTV9NRU1PUllfTUFMTE9DOgorICAgIGNhc2UgVk1fTUVNT1JZX01BTExPQ19IVUdFOgorICAg
IGNhc2UgVk1fTUVNT1JZX01BTExPQ19MQVJHRToKKyAgICBjYXNlIFZNX01FTU9SWV9NQUxMT0Nf
U01BTEw6CisgICAgY2FzZSBWTV9NRU1PUllfTUFMTE9DX1RJTlk6CisgICAgY2FzZSBWTV9NRU1P
UllfTUFMTE9DX05BTk86CisgICAgICAgIHJldHVybiBNZW1vcnlDYXRlZ29yeTo6TGliY01hbGxv
YzsKKyAgICBjYXNlIFZNX01FTU9SWV9UQ01BTExPQzoKKyAgICAgICAgcmV0dXJuIE1lbW9yeUNh
dGVnb3J5OjpibWFsbG9jOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBNZW1vcnlDYXRl
Z29yeTo6T3RoZXI7CisgICAgfQorfTsKKwordm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpwbGF0
Zm9ybVRocmVhZEJvZHkoSlNDOjpWTSogdm0sIFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKQorewor
ICAgIGRhdGEuY3B1ID0gY3B1VXNhZ2UoKTsKKworICAgIGF1dG8gdGFncyA9IHBhZ2VzUGVyVk1U
YWcoKTsKKyAgICBzdGQ6OmFycmF5PFRhZ0luZm8sIE1lbW9yeUNhdGVnb3J5OjpOdW1iZXJPZkNh
dGVnb3JpZXM+IHBhZ2VzUGVyQ2F0ZWdvcnk7CisgICAgc2l6ZV90IHRvdGFsRGlydHlQYWdlcyA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgKytpKSB7CisgICAgICAgIHBh
Z2VzUGVyQ2F0ZWdvcnlbY2F0ZWdvcnlGb3JWTVRhZyhpKV0uZGlydHkgKz0gdGFnc1tpXS5kaXJ0
eTsKKyAgICAgICAgcGFnZXNQZXJDYXRlZ29yeVtjYXRlZ29yeUZvclZNVGFnKGkpXS5yZWNsYWlt
YWJsZSArPSB0YWdzW2ldLnJlY2xhaW1hYmxlOworICAgICAgICB0b3RhbERpcnR5UGFnZXMgKz0g
dGFnc1tpXS5kaXJ0eTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGNhdGVnb3J5IDogZGF0YS5j
YXRlZ29yaWVzKSB7CisgICAgICAgIGlmIChjYXRlZ29yeS5pc1N1YmNhdGVnb3J5KSAvLyBPbmx5
IGRvIGF1dG9tYXRpYyB0YWxseWluZyBmb3IgdG9wLWxldmVsIGNhdGVnb3JpZXMuCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgY2F0ZWdvcnkuZGlydHlTaXplID0gcGFnZXNQZXJDYXRl
Z29yeVtjYXRlZ29yeS50eXBlXS5kaXJ0eSAqIHZtUGFnZVNpemUoKTsKKyAgICAgICAgY2F0ZWdv
cnkucmVjbGFpbWFibGVTaXplID0gcGFnZXNQZXJDYXRlZ29yeVtjYXRlZ29yeS50eXBlXS5yZWNs
YWltYWJsZSAqIHZtUGFnZVNpemUoKTsKKyAgICB9CisgICAgZGF0YS50b3RhbERpcnR5U2l6ZSA9
IHRvdGFsRGlydHlQYWdlcyAqIHZtUGFnZVNpemUoKTsKKworICAgIHNpemVfdCBjdXJyZW50R0NI
ZWFwQ2FwYWNpdHkgPSB2bS0+aGVhcC5ibG9ja0J5dGVzQWxsb2NhdGVkKCk7CisgICAgc2l6ZV90
IGN1cnJlbnRHQ093bmVkID0gdm0tPmhlYXAuZXh0cmFNZW1vcnlTaXplKCk7CisKKyAgICBkYXRh
LmNhdGVnb3JpZXNbTWVtb3J5Q2F0ZWdvcnk6OkdDSGVhcF0uZGlydHlTaXplID0gY3VycmVudEdD
SGVhcENhcGFjaXR5OworICAgIGRhdGEuY2F0ZWdvcmllc1tNZW1vcnlDYXRlZ29yeTo6R0NPd25l
ZF0uZGlydHlTaXplID0gY3VycmVudEdDT3duZWQ7CisKKyAgICAvLyBTdWJ0cmFjdCBrbm93biBz
dWJjaHVua3MgZnJvbSB0aGUgYm1hbGxvYyBidWNrZXQuCisgICAgLy8gRklYTUU6IEhhbmRsZSBy
dW5uaW5nIHdpdGggYm1hbGxvYyBkaXNhYmxlZC4KKyAgICBkYXRhLmNhdGVnb3JpZXNbTWVtb3J5
Q2F0ZWdvcnk6OmJtYWxsb2NdLmRpcnR5U2l6ZSAtPSBjdXJyZW50R0NIZWFwQ2FwYWNpdHkgKyBj
dXJyZW50R0NPd25lZDsKKworICAgIGRhdGEudGltZU9mTmV4dEVkZW5Db2xsZWN0aW9uID0gdm0t
PmhlYXAuZWRlbkFjdGl2aXR5Q2FsbGJhY2soKS0+bmV4dEZpcmVUaW1lKCk7CisgICAgZGF0YS50
aW1lT2ZOZXh0RnVsbENvbGxlY3Rpb24gPSB2bS0+aGVhcC5mdWxsQWN0aXZpdHlDYWxsYmFjaygp
LT5uZXh0RmlyZVRpbWUoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCmluZGV4IGU3M2U4NzYuLjQ2Njlh
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1Ro
cmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmNwcApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2go
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKICAgICBzY3JvbGxpbmdUaHJlYWQuY3Jl
YXRlVGhyZWFkSWZOZWVkZWQoKTsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2soc2luZ2xldG9uKCkubV9mdW5jdGlvbnNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKHNjcm9sbGluZ1RocmVhZC5tX2Z1bmN0aW9uc011dGV4KTsKICAg
ICAgICAgc2Nyb2xsaW5nVGhyZWFkLm1fZnVuY3Rpb25zLmFwcGVuZChmdW5jdGlvbik7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggOGEwMTAxNi4uMWQ1NGExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDE2LTAxLTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+
CisKKyAgICAgICAgR2VuZXJhbGl6ZSBSZXNvdXJjZVVzYWdlRGF0YSBnYXRoZXJpbmcgdG8gYmUg
dXNlZCBvdXRzaWRlIG9mIFJlc291cmNlVXNhZ2VPdmVybGF5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM1MDkKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzI0MzU0MjkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyk6CisgICAgICAgIFJlbmFtZSB0aGUgRU5BQkxF
IGZsYWcuCisKIDIwMTYtMDEtMjUgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgRGF0YURldGVjdG9ycyBpbiBXSyAoaU9TKS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBkYjQw
NDZjLi5kZTg5ODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCkBAIC0yODQ5LDcgKzI4NDksNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZl
cmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogICAgIHNldHRpbmdzLnNl
dEFsbG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShX
ZWJQcmVmZXJlbmNlc0tleTo6YWxsb3dzQWlyUGxheUZvck1lZGlhUGxheWJhY2tLZXkoKSkpOwog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0VfT1ZFUkxBWSkKKyNpZiBFTkFCTEUo
UkVTT1VSQ0VfVVNBR0UpCiAgICAgc2V0dGluZ3Muc2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNp
YmxlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6cmVzb3VyY2VV
c2FnZU92ZXJsYXlWaXNpYmxlS2V5KCkpKTsKICNlbmRpZgogCg==
</data>
<flag name="review"
          id="294786"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="294787"
          type_id="3"
          status="-"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>