<?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>16466</bug_id>
          
          <creation_ts>2007-12-16 22:53:49 -0800</creation_ts>
          <short_desc>Move the JS Location object to its own file</short_desc>
          <delta_ts>2007-12-16 23:19:26 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>64473</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-16 22:53:49 -0800</bug_when>
    <thetext>More kjs_window cleanup.  Yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64475</commentid>
    <comment_count>1</comment_count>
      <attachid>17951</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-16 22:56:07 -0800</bug_when>
    <thetext>Created attachment 17951
patch

Move and rename to JSLocation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64476</commentid>
    <comment_count>2</comment_count>
      <attachid>17951</attachid>
    <who name="">mitz</who>
    <bug_when>2007-12-16 23:14:26 -0800</bug_when>
    <thetext>Comment on attachment 17951
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64477</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-16 23:19:26 -0800</bug_when>
    <thetext>Landed in r28798.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17951</attachid>
            <date>2007-12-16 22:56:07 -0800</date>
            <delta_ts>2007-12-16 23:14:26 -0800</delta_ts>
            <desc>patch</desc>
            <filename>JSLocationPatch.diff</filename>
            <type>text/plain</type>
            <size>152697</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODc5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDctMTItMTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9y
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDY2CisgICAgICAgIE1v
dmUgdGhlIEpTIExvY2F0aW9uIG9iamVjdCB0byBpdHMgb3duIGZpbGUKKworICAgICAgICAtIE1v
dmUgTG9jYXRpb24gaW50byBpdHMgb3duIGZpbGUgYW5kIHJlbmFtZSBpdCBKU0xvY2F0aW9uLgor
CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMu
YmtsOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc193aW5kb3cuY3BwLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTTG9jYXRpb246OkpTTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2Nh
dGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cHV0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb25Qcm90b0Z1bmNSZXBsYWNlOjpjYWxsQXNGdW5j
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uUHJvdG9GdW5jUmVsb2FkOjpjYWxs
QXNGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uUHJvdG9GdW5jQXNzaWdu
OjpjYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uUHJvdG9GdW5j
VG9TdHJpbmc6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0
aW9uLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oLgorICAg
ICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRp
b246OmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmNsYXNzSW5mbyk6Cisg
ICAgICAgICogYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHA6CisgICAgICAgIChLSlM6OldpbmRv
dzo6bG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc193aW5kb3cuaDoKKyAgICAg
ICAgKiBoaXN0b3J5L0NhY2hlZFBhZ2UuY3BwOgorCiAyMDA3LTEyLTE2ICBEYW4gQmVybnN0ZWlu
ICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5k
ZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDI4Nzk2KQorKysgV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC00MDksNiArNDA5LDcgQEAgYWxsIDogXAogICAg
IEpTSFRNTFZpZGVvRWxlbWVudC5oIFwKICAgICBKU0hpc3RvcnkuaCBcCiAgICAgSlNLZXlib2Fy
ZEV2ZW50LmggXAorICAgIEpTTG9jYXRpb24ubHV0LmggXAogICAgIEpTTWVkaWFFcnJvci5oIFwK
ICAgICBKU01lZGlhTGlzdC5oIFwKICAgICBKU01vdXNlRXZlbnQuaCBcCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9u
IDI4Nzk2KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjMyLDYg
KzIzMiw3IEBAIFNUWUxFU0hFRVRTX0VNQkVEID0gJCRQV0QvY3NzL2h0bWw0LmNzcwogTFVUX0ZJ
TEVTICs9IFwKICAgICBiaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcCBc
CiAgICAgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuY3BwIFwKKyAgICBiaW5kaW5ncy9q
cy9KU0xvY2F0aW9uLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAg
XAogICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5jcHAgXAogICAgIGJpbmRpbmdzL2pz
L2tqc19jc3MuY3BwIFwKQEAgLTM5OCw2ICszOTksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBiaW5k
aW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwIFwKICAgICBiaW5kaW5n
cy9qcy9KU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pz
L0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU0xvY2F0
aW9uLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwIFwKICAg
ICBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcCAgXAogICAgIGJpbmRpbmdz
L2pzL0pTTm9kZUN1c3RvbS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDI4Nzk2
KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYg
KzcwLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAg
ICBiaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCiAgICAgICAg
IGJpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAogICAgICAgICBi
aW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAorICAgICAgICBiaW5kaW5n
cy9qcy9KU0xvY2F0aW9uLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1
c3RvbS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAK
ICAgICAgICAgYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAyODc5NikKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMjUsNiArMTEyNSwx
MCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIk
KFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTTG9j
YXRpb24ubHV0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXEpTTWVkaWFMaXN0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC03NDY0LDYgKzc0
NjgsMTQgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTTG9jYXRpb24uY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0Zp
bGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTTG9j
YXRpb24uaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU05hbWVkTm9kZU1hcEN1c3RvbS5jcHAiDQogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjg3OTYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzY0NCw2ICszNjQ0LDkgQEAKIAkJQkNB
MTY5QTMwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE2OUExMEJGRDU1
QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggKi87IH07CiAJCUJDQTM3
ODE2MEQxNUM2NDYwMEI3OTNENiAvKiBQYXVzZWRUaW1lb3V0cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzgxNDBEMTVDNjQ2MDBCNzkzRDYg
LyogUGF1c2VkVGltZW91dHMuY3BwICovOyB9OwogCQlCQ0EzNzgxNzBEMTVDNjQ2MDBCNzkzRDYg
LyogUGF1c2VkVGltZW91dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDQTM3ODE1MEQxNUM2NDYwMEI3OTNENiAvKiBQYXVzZWRUaW1lb3V0cy5oICov
OyB9OworCQlCQ0EzNzkxNDBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzkxMjBEMTYzRTU1
MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5jcHAgKi87IH07CisJCUJDQTM3OTE1MEQxNjNFNTUwMEI3
OTNENiAvKiBKU0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0EzNzkxMzBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5oICovOyB9
OworCQlCQ0EzNzkzRjBEMTY0N0UwMDBCNzkzRDYgLyogSlNMb2NhdGlvbi5sdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTM3OTNFMEQxNjQ3RTAw
MEI3OTNENiAvKiBKU0xvY2F0aW9uLmx1dC5oICovOyB9OwogCQlCQ0E4NUExMDBDM0FFQUY0MDA2
RjgzMDggLyogRE9NU1ZHTnVtYmVySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTg1QTBGMEMzQUVBRjQwMDZGODMwOCAvKiBET01TVkdO
dW1iZXJJbnRlcm5hbC5oICovOyB9OwogCQlCQ0FBOTBDMzBBN0VCQTYwMDA4QjEyMjkgLyogU2Ny
b2xsQmFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxCYXIuY3BwICovOyB9OwogCQlCQ0Ix
NkI4QjA5NzlCMDE0MDA0Njc3NDEgLyogRGVwcmVjYXRlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0IxNkI4ODA5NzlCMDE0MDA0Njc3NDEg
LyogRGVwcmVjYXRlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTc2NTUsNiArNzY1OCw5IEBACiAJCUJDQTM3ODE1MEQxNUM2NDYwMEI3
OTNENiAvKiBQYXVzZWRUaW1lb3V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYXVzZWRUaW1lb3V0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzNzhC
QTBEMTVGNjQyMDBCNzkzRDYgLyogU2NoZWR1bGVkQWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjaGVkdWxlZEFjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDQTM3OEJCMEQxNUY2NDIwMEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NoZWR1bGVkQWN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQTM3OTEyMEQxNjNFNTUwMEI3OTNENiAv
KiBKU0xvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
TG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0EzNzkxMzBEMTYz
RTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0xvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQTM3OTNF
MEQxNjQ3RTAwMEI3OTNENiAvKiBKU0xvY2F0aW9uLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0xvY2F0aW9uLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0E4NUEwRjBDM0FFQUY0MDA2RjgzMDggLyogRE9NU1ZHTnVtYmVySW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR051bWJlckludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAv
KiBTY3JvbGxCYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNj
cm9sbEJhci5jcHA7IHBhdGggPSBwbGF0Zm9ybS9TY3JvbGxCYXIuY3BwOyBzb3VyY2VUcmVlID0g
U09VUkNFX1JPT1Q7IH07CiAJCUJDQjE2Qjg4MDk3OUIwMTQwMDQ2Nzc0MSAvKiBEZXByZWNhdGVk
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcHJlY2F0ZWRBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODIxNiw2ICs4MjIyLDcgQEAKIAkJ
CQlBOEQwNkIzODBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmNwcCAqLywKIAkJCQlBOEQw
NkIzNzBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmggKi8sCiAJCQkJQkNEOUMyQzQwQzE3
QjZFQzAwNUM5MEEyIC8qIEpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IubHV0LmggKi8sCisJCQkJ
QkNBMzc5M0UwRDE2NDdFMDAwQjc5M0Q2IC8qIEpTTG9jYXRpb24ubHV0LmggKi8sCiAJCQkJNjU2
NTgxREEwOUQxNTA4RDAwMEU2MUQ3IC8qIGtqc19jc3MubHV0LmggKi8sCiAJCQkJNjU2NTgxREMw
OUQxNTA4RDAwMEU2MUQ3IC8qIGtqc19ldmVudHMubHV0LmggKi8sCiAJCQkJNjU2NTgxREUwOUQx
NTA4RDAwMEU2MUQ3IC8qIGtqc19uYXZpZ2F0b3IubHV0LmggKi8sCkBAIC0xMTM3Niw2ICsxMTM4
Myw4IEBACiAJCQkJQTgwRTdFNjMwQTFBODJFQzAwN0ZCOEM1IC8qIEpTSFRNTElucHV0RWxlbWVu
dEJhc2UuaCAqLywKIAkJCQlBODI2RThBRDBBMUE4RjIzMDBDRDFCQjYgLyogSlNIVE1MT3B0aW9u
RWxlbWVudENvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBODI2RThBQzBBMUE4RjIzMDBDRDFCQjYg
LyogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmggKi8sCisJCQkJQkNBMzc5MTIwRDE2
M0U1NTAwQjc5M0Q2IC8qIEpTTG9jYXRpb24uY3BwICovLAorCQkJCUJDQTM3OTEzMEQxNjNFNTUw
MEI3OTNENiAvKiBKU0xvY2F0aW9uLmggKi8sCiAJCQkJQkNEOUMyNkMwQzE3QUE4MTAwNUM5MEEy
IC8qIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwICovLAogCQkJCUJDRDlDMjZEMEMxN0FBODEw
MDVDOTBBMiAvKiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uLmggKi8sCiAJCQkJQkNCNzczNUUwQzE3
ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgKi8sCkBAIC0xNDEwNyw2
ICsxNDExNiw4IEBACiAJCQkJQkNCMTZDMkQwOTc5QzNCRDAwNDY3NzQxIC8qIGxvYWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjgwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUUwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5p
dHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQTM3OTE1MEQxNjNFNTUwMEI3OTNENiAvKiBKU0xv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0EzNzkzRjBEMTY0N0UwMDBCNzkzRDYgLyog
SlNMb2NhdGlvbi5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTU4MjAsNiArMTU4MzEsNyBAQAog
CQkJCUJDQjE2QzJDMDk3OUMzQkQwMDQ2Nzc0MSAvKiBsb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCQ0EzNzkxNDBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjg3OTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
SFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0hU
TUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTTG9jYXRpb24uaCIKICNpbmNsdWRlICJranNfYmlu
ZGluZy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNM
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDI4Nzk0KQkoZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c193aW5kb3cuY3BwOjI4Nzk0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MTcgQEAKKy8vIC0qLSBjLWJhc2ljLW9mZnNl
dDogNCAtKi0KKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEpvbiBTaGllciAoanNoaWVyQGlhc3Rh
dGUuZWR1KQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEKKyAq
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAia2pzX3dpbmRvdy5o
IgorCisjaW5jbHVkZSAiQmFzZTY0LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
IkNocm9tZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkdDQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkpTRXZl
bnQuaCIKKyNpbmNsdWRlICJKU0hUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJKU0hUTUxPcHRpb25FbGVtZW50Q29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYXVzZWRUaW1lb3V0cy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgi
CisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgor
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVk
ZSAia2pzX2Nzcy5oIgorI2luY2x1ZGUgImtqc19ldmVudHMuaCIKKyNpbmNsdWRlICJranNfbmF2
aWdhdG9yLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKworI2lmIEVOQUJMRShYU0xUKQorI2luY2x1ZGUgIkpTWFNMVFByb2Nlc3Nvci5oIgor
I2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50
TmFtZXM7CisKK25hbWVzcGFjZSBLSlMgeworCitzdGF0aWMgaW50IGxhc3RVc2VkVGltZW91dElk
OworCitzdGF0aWMgaW50IHRpbWVyTmVzdGluZ0xldmVsID0gMDsKK2NvbnN0IGludCBjTWF4VGlt
ZXJOZXN0aW5nTGV2ZWwgPSA1OworY29uc3QgZG91YmxlIGNNaW5pbXVtVGltZXJJbnRlcnZhbCA9
IDAuMDEwOworCitzdHJ1Y3QgV2luZG93UHJpdmF0ZSB7CisgICAgV2luZG93UHJpdmF0ZSgpCisg
ICAgICAgIDogbG9jKDApCisgICAgICAgICwgbV9ldnQoMCkKKyAgICAgICAgLCBtX3JldHVyblZh
bHVlU2xvdCgwKQorICAgIHsKKyAgICB9CisKKyAgICBXaW5kb3c6Okxpc3RlbmVyc01hcCBqc0V2
ZW50TGlzdGVuZXJzOworICAgIFdpbmRvdzo6TGlzdGVuZXJzTWFwIGpzSFRNTEV2ZW50TGlzdGVu
ZXJzOworICAgIFdpbmRvdzo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAganNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXJzOworICAgIFdpbmRvdzo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAganNVbnBy
b3RlY3RlZEhUTUxFdmVudExpc3RlbmVyczsKKyAgICBtdXRhYmxlIExvY2F0aW9uKiBsb2M7Cisg
ICAgV2ViQ29yZTo6RXZlbnQqIG1fZXZ0OworICAgIEpTVmFsdWUqKiBtX3JldHVyblZhbHVlU2xv
dDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIERPTVdpbmRvd1RpbWVyKj4gVGltZW91dHNN
YXA7CisgICAgVGltZW91dHNNYXAgbV90aW1lb3V0czsKK307CisKK2NsYXNzIERPTVdpbmRvd1Rp
bWVyIDogcHVibGljIFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgRE9NV2luZG93VGltZXIoaW50
IHRpbWVvdXRJZCwgaW50IG5lc3RpbmdMZXZlbCwgV2luZG93KiBvYmplY3QsIFdlYkNvcmU6OlNj
aGVkdWxlZEFjdGlvbiogYWN0aW9uKQorICAgICAgICA6IG1fdGltZW91dElkKHRpbWVvdXRJZCkK
KyAgICAgICAgLCBtX25lc3RpbmdMZXZlbChuZXN0aW5nTGV2ZWwpCisgICAgICAgICwgbV9vYmpl
Y3Qob2JqZWN0KQorICAgICAgICAsIG1fYWN0aW9uKGFjdGlvbikKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB+RE9NV2luZG93VGltZXIoKQorICAgIHsKKyAgICAgICAgSlNMb2NrIGxvY2s7
CisgICAgICAgIGRlbGV0ZSBtX2FjdGlvbjsKKyAgICB9CisKKyAgICBpbnQgdGltZW91dElkKCkg
Y29uc3QgeyByZXR1cm4gbV90aW1lb3V0SWQ7IH0KKworICAgIGludCBuZXN0aW5nTGV2ZWwoKSBj
b25zdCB7IHJldHVybiBtX25lc3RpbmdMZXZlbDsgfQorICAgIHZvaWQgc2V0TmVzdGluZ0xldmVs
KGludCBuKSB7IG1fbmVzdGluZ0xldmVsID0gbjsgfQorCisgICAgV2ViQ29yZTo6U2NoZWR1bGVk
QWN0aW9uKiBhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FjdGlvbjsgfQorICAgIFdlYkNvcmU6
OlNjaGVkdWxlZEFjdGlvbiogdGFrZUFjdGlvbigpIHsgV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9u
KiBhID0gbV9hY3Rpb247IG1fYWN0aW9uID0gMDsgcmV0dXJuIGE7IH0KKworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIHZvaWQgZmlyZWQoKTsKKworICAgIGludCBtX3RpbWVvdXRJZDsKKyAgICBpbnQg
bV9uZXN0aW5nTGV2ZWw7CisgICAgV2luZG93KiBtX29iamVjdDsKKyAgICBXZWJDb3JlOjpTY2hl
ZHVsZWRBY3Rpb24qIG1fYWN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgS0pTCisKKyNpbmNs
dWRlICJranNfd2luZG93Lmx1dC5oIgorCituYW1lc3BhY2UgS0pTIHsKKworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLyBXaW5kb3cgT2JqZWN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitjb25z
dCBDbGFzc0luZm8gV2luZG93OjppbmZvID0geyAiV2luZG93IiwgMCwgJldpbmRvd1RhYmxlIH07
CisKKy8qCitAYmVnaW4gV2luZG93VGFibGUgMTE4CisjIFdhcm5pbmcsIHdoZW4gYWRkaW5nIGEg
ZnVuY3Rpb24gdG8gdGhpcyBvYmplY3QgeW91IG5lZWQgdG8gYWRkIGEgY2FzZSBpbiBXaW5kb3c6
OmdldAorIyAtLSBGdW5jdGlvbnMgLS0KKyAgYXRvYiAgICAgICAgICAgICAgICAgICZXaW5kb3dQ
cm90b0Z1bmNBVG9COjpjcmVhdGUgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAx
CisgIGJ0b2EgICAgICAgICAgICAgICAgICAmV2luZG93UHJvdG9GdW5jQlRvQTo6Y3JlYXRlICAg
ICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQorICBvcGVuICAgICAgICAgICAgICAg
ICAgJldpbmRvd1Byb3RvRnVuY09wZW46OmNyZWF0ZSAgICAgICAgICAgICAgICBEb250RGVsZXRl
fEZ1bmN0aW9uIDMKKyAgc2V0VGltZW91dCAgICAgICAgICAgICZXaW5kb3dQcm90b0Z1bmNTZXRU
aW1lb3V0OjpjcmVhdGUgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAyCisgIGNsZWFyVGlt
ZW91dCAgICAgICAgICAmV2luZG93UHJvdG9GdW5jQ2xlYXJUaW1lb3V0OjpjcmVhdGUgICAgICAg
IERvbnREZWxldGV8RnVuY3Rpb24gMQorICBzZXRJbnRlcnZhbCAgICAgICAgICAgJldpbmRvd1By
b3RvRnVuY1NldEludGVydmFsOjpjcmVhdGUgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDIK
KyAgY2xlYXJJbnRlcnZhbCAgICAgICAgICZXaW5kb3dQcm90b0Z1bmNDbGVhclRpbWVvdXQ6OmNy
ZWF0ZSAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCisgIGFkZEV2ZW50TGlzdGVuZXIgICAg
ICAmV2luZG93UHJvdG9GdW5jQWRkRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlICAgIERvbnREZWxldGV8
RnVuY3Rpb24gMworICByZW1vdmVFdmVudExpc3RlbmVyICAgJldpbmRvd1Byb3RvRnVuY1JlbW92
ZUV2ZW50TGlzdGVuZXI6OmNyZWF0ZSBEb250RGVsZXRlfEZ1bmN0aW9uIDMKKyAgc2hvd01vZGFs
RGlhbG9nICAgICAgICZXaW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2c6OmNyZWF0ZSAgICAg
RG9udERlbGV0ZXxGdW5jdGlvbiAxCisjIE5vdCBpbXBsZW1lbnRlZAorICBjYXB0dXJlRXZlbnRz
ICAgICAgICAgJldpbmRvd1Byb3RvRnVuY05vdEltcGxlbWVudGVkOjpjcmVhdGUgICAgICBEb250
RGVsZXRlfEZ1bmN0aW9uIDAKKyAgcmVsZWFzZUV2ZW50cyAgICAgICAgICZXaW5kb3dQcm90b0Z1
bmNOb3RJbXBsZW1lbnRlZDo6Y3JlYXRlICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCisKKyMg
LS0gQXR0cmlidXRlcyAtLQorICBjcnlwdG8gICAgICAgICAgICAgICAgV2luZG93OjpDcnlwdG8g
ICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKKyAgZXZlbnQgICAgICAgICAgICAgICAg
IFdpbmRvdzo6RXZlbnRfICAgICAgICAgICAgICBEb250RGVsZXRlCisgIGxvY2F0aW9uICAgICAg
ICAgICAgICBXaW5kb3c6OkxvY2F0aW9uXyAgICAgICAgICAgRG9udERlbGV0ZQorICBuYXZpZ2F0
b3IgICAgICAgICAgICAgV2luZG93OjpOYXZpZ2F0b3JfICAgICAgICAgIERvbnREZWxldGV8UmVh
ZE9ubHkKKyAgY2xpZW50SW5mb3JtYXRpb24gICAgIFdpbmRvdzo6Q2xpZW50SW5mb3JtYXRpb24g
ICBEb250RGVsZXRlfFJlYWRPbmx5CisjIC0tIEV2ZW50IExpc3RlbmVycyAtLQorICBvbmFib3J0
ICAgICAgICAgICAgICAgV2luZG93OjpPbmFib3J0ICAgICAgICAgICAgIERvbnREZWxldGUKKyAg
b25ibHVyICAgICAgICAgICAgICAgIFdpbmRvdzo6T25ibHVyICAgICAgICAgICAgICBEb250RGVs
ZXRlCisgIG9uY2hhbmdlICAgICAgICAgICAgICBXaW5kb3c6Ok9uY2hhbmdlICAgICAgICAgICAg
RG9udERlbGV0ZQorICBvbmNsaWNrICAgICAgICAgICAgICAgV2luZG93OjpPbmNsaWNrICAgICAg
ICAgICAgIERvbnREZWxldGUKKyAgb25kYmxjbGljayAgICAgICAgICAgIFdpbmRvdzo6T25kYmxj
bGljayAgICAgICAgICBEb250RGVsZXRlCisgIG9uZXJyb3IgICAgICAgICAgICAgICBXaW5kb3c6
Ok9uZXJyb3IgICAgICAgICAgICAgRG9udERlbGV0ZQorICBvbmZvY3VzICAgICAgICAgICAgICAg
V2luZG93OjpPbmZvY3VzICAgICAgICAgICAgIERvbnREZWxldGUKKyAgb25rZXlkb3duICAgICAg
ICAgICAgIFdpbmRvdzo6T25rZXlkb3duICAgICAgICAgICBEb250RGVsZXRlCisgIG9ua2V5cHJl
c3MgICAgICAgICAgICBXaW5kb3c6Ok9ua2V5cHJlc3MgICAgICAgICAgRG9udERlbGV0ZQorICBv
bmtleXVwICAgICAgICAgICAgICAgV2luZG93OjpPbmtleXVwICAgICAgICAgICAgIERvbnREZWxl
dGUKKyAgb25sb2FkICAgICAgICAgICAgICAgIFdpbmRvdzo6T25sb2FkICAgICAgICAgICAgICBE
b250RGVsZXRlCisgIG9ubW91c2Vkb3duICAgICAgICAgICBXaW5kb3c6Ok9ubW91c2Vkb3duICAg
ICAgICAgRG9udERlbGV0ZQorICBvbm1vdXNlbW92ZSAgICAgICAgICAgV2luZG93OjpPbm1vdXNl
bW92ZSAgICAgICAgIERvbnREZWxldGUKKyAgb25tb3VzZW91dCAgICAgICAgICAgIFdpbmRvdzo6
T25tb3VzZW91dCAgICAgICAgICBEb250RGVsZXRlCisgIG9ubW91c2VvdmVyICAgICAgICAgICBX
aW5kb3c6Ok9ubW91c2VvdmVyICAgICAgICAgRG9udERlbGV0ZQorICBvbm1vdXNldXAgICAgICAg
ICAgICAgV2luZG93OjpPbm1vdXNldXAgICAgICAgICAgIERvbnREZWxldGUKKyAgb25tb3VzZXdo
ZWVsICAgICAgICAgIFdpbmRvdzo6T25XaW5kb3dNb3VzZVdoZWVsICBEb250RGVsZXRlCisgIG9u
cmVzZXQgICAgICAgICAgICAgICBXaW5kb3c6Ok9ucmVzZXQgICAgICAgICAgICAgRG9udERlbGV0
ZQorICBvbnJlc2l6ZSAgICAgICAgICAgICAgV2luZG93OjpPbnJlc2l6ZSAgICAgICAgICAgIERv
bnREZWxldGUKKyAgb25zY3JvbGwgICAgICAgICAgICAgIFdpbmRvdzo6T25zY3JvbGwgICAgICAg
ICAgICBEb250RGVsZXRlCisgIG9uc2VhcmNoICAgICAgICAgICAgICBXaW5kb3c6Ok9uc2VhcmNo
ICAgICAgICAgICAgRG9udERlbGV0ZQorICBvbnNlbGVjdCAgICAgICAgICAgICAgV2luZG93OjpP
bnNlbGVjdCAgICAgICAgICAgIERvbnREZWxldGUKKyAgb25zdWJtaXQgICAgICAgICAgICAgIFdp
bmRvdzo6T25zdWJtaXQgICAgICAgICAgICBEb250RGVsZXRlCisgIG9udW5sb2FkICAgICAgICAg
ICAgICBXaW5kb3c6Ok9udW5sb2FkICAgICAgICAgICAgRG9udERlbGV0ZQorICBvbmJlZm9yZXVu
bG9hZCAgICAgICAgV2luZG93OjpPbmJlZm9yZXVubG9hZCAgICAgIERvbnREZWxldGUKKyMgLS0g
Q29uc3RydWN0b3JzIC0tCisgIEF1ZGlvICAgICAgICAgICAgICAgICBXaW5kb3c6OkF1ZGlvICAg
ICAgICAgICAgICAgRG9udERlbGV0ZQorICBET01FeGNlcHRpb24gICAgICAgICAgV2luZG93OjpE
T01FeGNlcHRpb24gICAgICAgIERvbnREZWxldGUKKyAgSW1hZ2UgICAgICAgICAgICAgICAgIFdp
bmRvdzo6SW1hZ2UgICAgICAgICAgICAgICBEb250RGVsZXRlCisgIE9wdGlvbiAgICAgICAgICAg
ICAgICBXaW5kb3c6Ok9wdGlvbiAgICAgICAgICAgICAgRG9udERlbGV0ZQorICBYTUxIdHRwUmVx
dWVzdCAgICAgICAgV2luZG93OjpYTUxIdHRwUmVxdWVzdCAgICAgIERvbnREZWxldGUKKyAgWFNM
VFByb2Nlc3NvciAgICAgICAgIFdpbmRvdzo6WFNMVFByb2Nlc3Nvcl8gICAgICBEb250RGVsZXRl
CitAZW5kCisqLworCitXaW5kb3c6OldpbmRvdyhET01XaW5kb3cqIHdpbmRvdykKKyAgICA6IG1f
aW1wbCh3aW5kb3cpCisgICAgLCBkKG5ldyBXaW5kb3dQcml2YXRlKQoreworICAgIC8vIFdpbmRv
dyBkZXN0cnVjdGlvbiBpcyBub3QgdGhyZWFkLXNhZmUgYmVjYXVzZSBvZgorICAgIC8vIHRoZSBu
b24tdGhyZWFkLXNhZmUgV2ViQ29yZSBzdHJ1Y3R1cmVzIGl0IHJlZmVyZW5jZXMuCisgICAgQ29s
bGVjdG9yOjpjb2xsZWN0T25NYWluVGhyZWFkT25seSh0aGlzKTsKKworICAgIC8vIFRpbWUgaW4g
bWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgc2NyaXB0IHRpbWVvdXQgaGFuZGxlciBraWNrcyBpbi4K
KyAgICBzZXRUaW1lb3V0VGltZSgxMDAwMCk7Cit9CisKK1dpbmRvdzo6fldpbmRvdygpCit7Cisg
ICAgY2xlYXJBbGxUaW1lb3V0cygpOworCisgICAgLy8gQ2xlYXIgYW55IGJhY2twb2ludGVycyB0
byB0aGUgd2luZG93CisKKyAgICBMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGkyID0gZC0+anNFdmVu
dExpc3RlbmVycy5iZWdpbigpOworICAgIExpc3RlbmVyc01hcDo6aXRlcmF0b3IgZTIgPSBkLT5q
c0V2ZW50TGlzdGVuZXJzLmVuZCgpOworICAgIGZvciAoOyBpMiAhPSBlMjsgKytpMikKKyAgICAg
ICAgaTItPnNlY29uZC0+Y2xlYXJXaW5kb3dPYmooKTsKKyAgICBpMiA9IGQtPmpzSFRNTEV2ZW50
TGlzdGVuZXJzLmJlZ2luKCk7CisgICAgZTIgPSBkLT5qc0hUTUxFdmVudExpc3RlbmVycy5lbmQo
KTsKKyAgICBmb3IgKDsgaTIgIT0gZTI7ICsraTIpCisgICAgICAgIGkyLT5zZWNvbmQtPmNsZWFy
V2luZG93T2JqKCk7CisKKyAgICBVbnByb3RlY3RlZExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaTEg
PSBkLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsKKyAgICBVbnByb3RlY3Rl
ZExpc3RlbmVyc01hcDo6aXRlcmF0b3IgZTEgPSBkLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cnMuZW5kKCk7CisgICAgZm9yICg7IGkxICE9IGUxOyArK2kxKQorICAgICAgICBpMS0+c2Vjb25k
LT5jbGVhcldpbmRvd09iaigpOworICAgIGkxID0gZC0+anNVbnByb3RlY3RlZEhUTUxFdmVudExp
c3RlbmVycy5iZWdpbigpOworICAgIGUxID0gZC0+anNVbnByb3RlY3RlZEhUTUxFdmVudExpc3Rl
bmVycy5lbmQoKTsKKyAgICBmb3IgKDsgaTEgIT0gZTE7ICsraTEpCisgICAgICAgIGkxLT5zZWNv
bmQtPmNsZWFyV2luZG93T2JqKCk7Cit9CisKK1dpbmRvdyogV2luZG93OjpyZXRyaWV2ZVdpbmRv
dyhGcmFtZSogZnJhbWUpCit7CisgICAgSlNPYmplY3QqIG8gPSByZXRyaWV2ZShmcmFtZSktPmdl
dE9iamVjdCgpOworCisgICAgQVNTRVJUKG8gfHwgIWZyYW1lLT5zZXR0aW5ncygpIHx8ICFmcmFt
ZS0+c2V0dGluZ3MoKS0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V2luZG93Kj4obyk7Cit9CisKK1dpbmRvdyogV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKKyAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2luZG93Kj4oZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1
ZSogV2luZG93OjpyZXRyaWV2ZShGcmFtZSogZnJhbWUpCit7CisgICAgQVNTRVJUKGZyYW1lKTsK
KyAgICBpZiAoS0pTUHJveHkqIHByb3h5ID0gZnJhbWUtPnNjcmlwdFByb3h5KCkpCisgICAgICAg
IHJldHVybiBwcm94eS0+Z2xvYmFsT2JqZWN0KCk7IC8vIHRoZSBHbG9iYWwgb2JqZWN0IGlzIHRo
ZSAid2luZG93IgorCisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IC8vIFRoaXMgY2FuIGhhcHBl
biB3aXRoIEpTIGRpc2FibGVkIG9uIHRoZSBkb21haW4gb2YgdGhhdCB3aW5kb3cKK30KKworTG9j
YXRpb24qIFdpbmRvdzo6bG9jYXRpb24oKSBjb25zdAoreworICAgIGlmICghZC0+bG9jKQorICAg
ICAgICBkLT5sb2MgPSBuZXcgTG9jYXRpb24oaW1wbCgpLT5mcmFtZSgpKTsKKyAgICByZXR1cm4g
ZC0+bG9jOworfQorCisvLyByZWZlcmVuY2Ugb3VyIHNwZWNpYWwgb2JqZWN0cyBkdXJpbmcgZ2Fy
YmFnZSBjb2xsZWN0aW9uCit2b2lkIFdpbmRvdzo6bWFyaygpCit7CisgICAgSlNHbG9iYWxPYmpl
Y3Q6Om1hcmsoKTsKKyAgICBpZiAoZC0+bG9jICYmICFkLT5sb2MtPm1hcmtlZCgpKQorICAgICAg
ICBkLT5sb2MtPm1hcmsoKTsKK30KKworc3RhdGljIGJvb2wgYWxsb3dQb3BVcChGcmFtZSogZnJh
bWUpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChm
cmFtZS0+c2NyaXB0UHJveHkoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOwor
ICAgIHJldHVybiBzZXR0aW5ncyAmJiBzZXR0aW5ncy0+SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dz
QXV0b21hdGljYWxseSgpOworfQorCitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFy
c2VNb2RhbERpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZmVhdHVyZXNBcmcpCit7CisgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwOworCisgICAgVmVjdG9yPFN0cmluZz4gZmVhdHVy
ZXMgPSBmZWF0dXJlc0FyZy5zcGxpdCgnOycpOworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBmZWF0dXJlcy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGZlYXR1cmVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBTdHJpbmcgcyA9ICppdDsKKyAgICAgICAgaW50IHBvcyA9IHMuZmluZCgnPScpOwor
ICAgICAgICBpbnQgY29sb25Qb3MgPSBzLmZpbmQoJzonKTsKKyAgICAgICAgaWYgKHBvcyA+PSAw
ICYmIGNvbG9uUG9zID49IDApCisgICAgICAgICAgICBjb250aW51ZTsgLy8gaWdub3JlIGFueSBz
dHJpbmdzIHRoYXQgaGF2ZSBib3RoID0gYW5kIDoKKyAgICAgICAgaWYgKHBvcyA8IDApCisgICAg
ICAgICAgICBwb3MgPSBjb2xvblBvczsKKyAgICAgICAgaWYgKHBvcyA8IDApIHsKKyAgICAgICAg
ICAgIC8vIG51bGwgc3RyaW5nIGZvciB2YWx1ZSBtZWFucyBrZXkgd2l0aG91dCB2YWx1ZQorICAg
ICAgICAgICAgbWFwLnNldChzLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCksIFN0cmluZygpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBzLmxlZnQocG9zKS5z
dHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOworICAgICAgICAgICAgU3RyaW5nIHZhbCA9IHMuc3Vi
c3RyaW5nKHBvcyArIDEpLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7CisgICAgICAgICAgICBp
bnQgc3BhY2VQb3MgPSB2YWwuZmluZCgnICcpOworICAgICAgICAgICAgaWYgKHNwYWNlUG9zICE9
IC0xKQorICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5sZWZ0KHNwYWNlUG9zKTsKKyAgICAgICAg
ICAgIG1hcC5zZXQoa2V5LCB2YWwpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1h
cDsKK30KKworc3RhdGljIEZyYW1lKiBjcmVhdGVXaW5kb3coRXhlY1N0YXRlKiBleGVjLCBGcmFt
ZSogb3BlbmVyRnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLAorICAgIGNvbnN0IFN0cmluZyYgZnJh
bWVOYW1lLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIEpTVmFsdWUqIGRp
YWxvZ0FyZ3MpCit7CisgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gV2luZG93OjpyZXRyaWV2ZUFj
dGl2ZShleGVjKS0+aW1wbCgpLT5mcmFtZSgpOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3Q7CisgICAgaWYgKGFjdGl2ZUZyYW1lKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJl
cihhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSk7CisgICAgRnJhbWVM
b2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QocmVxdWVzdCwgZnJhbWVOYW1lKTsKKworICAgIC8vIEZJ
WE1FOiBJdCdzIG11Y2ggYmV0dGVyIGZvciBjbGllbnQgQVBJIGlmIGEgbmV3IHdpbmRvdyBzdGFy
dHMgd2l0aCBhIFVSTCwgaGVyZSB3aGVyZSB3ZQorICAgIC8vIGtub3cgd2hhdCBVUkwgd2UgYXJl
IGdvaW5nIHRvIG9wZW4uIFVuZm9ydHVuYXRlbHksIHRoaXMgY29kZSBwYXNzZXMgdGhlIGVtcHR5
IHN0cmluZworICAgIC8vIGZvciB0aGUgVVJMLCBidXQgdGhlcmUncyBhIHJlYXNvbiBmb3IgdGhh
dC4gQmVmb3JlIGxvYWRpbmcgd2UgaGF2ZSB0byBzZXQgdXAgdGhlIG9wZW5lciwKKyAgICAvLyBv
cGVuZWRCeURPTSwgYW5kIGRpYWxvZ0FyZ3VtZW50cyB2YWx1ZXMuIEFsc28sIHRvIGRlY2lkZSB3
aGV0aGVyIHRvIHVzZSB0aGUgVVJMIHdlIGN1cnJlbnRseQorICAgIC8vIGRvIGFuIGFsbG93c0Fj
Y2Vzc0Zyb20gY2FsbCB1c2luZyB0aGUgd2luZG93IHdlIGNyZWF0ZSwgd2hpY2ggY2FuJ3QgYmUg
ZG9uZSBiZWZvcmUgY3JlYXRpbmcgaXQuCisgICAgLy8gV2UnZCBoYXZlIHRvIHJlc29sdmUgYWxs
IHRob3NlIGlzc3VlcyB0byBwYXNzIHRoZSBVUkwgaW5zdGVhZCBvZiAiIi4KKworICAgIGJvb2wg
Y3JlYXRlZDsKKyAgICBGcmFtZSogbmV3RnJhbWUgPSBvcGVuZXJGcmFtZS0+bG9hZGVyKCktPmNy
ZWF0ZVdpbmRvdyhmcmFtZVJlcXVlc3QsIHdpbmRvd0ZlYXR1cmVzLCBjcmVhdGVkKTsKKyAgICBp
ZiAoIW5ld0ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG5ld0ZyYW1lLT5sb2FkZXIo
KS0+c2V0T3BlbmVyKG9wZW5lckZyYW1lKTsKKyAgICBuZXdGcmFtZS0+bG9hZGVyKCktPnNldE9w
ZW5lZEJ5RE9NKCk7CisKKyAgICBXaW5kb3cqIG5ld1dpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVX
aW5kb3cobmV3RnJhbWUpOworCisgICAgaWYgKGRpYWxvZ0FyZ3MpCisgICAgICAgIG5ld1dpbmRv
dy0+cHV0RGlyZWN0KCJkaWFsb2dBcmd1bWVudHMiLCBkaWFsb2dBcmdzKTsKKworICAgIGlmICgh
dXJsLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8IG5ld1dpbmRvdy0+YWxsb3dz
QWNjZXNzRnJvbShleGVjKSkgeworICAgICAgICBTdHJpbmcgY29tcGxldGVkVVJMID0gdXJsLmlz
RW1wdHkoKSA/IHVybCA6IGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwp
OworICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdFByb3h5KCkt
PnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworCisgICAgICAgIGlmIChjcmVhdGVkKSB7CisgICAg
ICAgICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9uKEtVUkwoY29tcGxldGVk
VVJMLmRlcHJlY2F0ZWRTdHJpbmcoKSksIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdS
ZWZlcnJlcigpLCBmYWxzZSwgdXNlckdlc3R1cmUpOworICAgICAgICAgICAgaWYgKERvY3VtZW50
KiBvbGREb2MgPSBvcGVuZXJGcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIG5l
d0ZyYW1lLT5kb2N1bWVudCgpLT5zZXREb21haW5JbnRlcm5hbChvbGREb2MtPmRvbWFpbigpKTsK
KyAgICAgICAgICAgICAgICBuZXdGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0QmFzZVVSTChvbGREb2Mt
PmJhc2VVUkwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIXVybC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRpb25D
aGFuZ2UoY29tcGxldGVkVVJMLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJy
ZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3RnJhbWU7
Cit9CisKK3N0YXRpYyBib29sIGNhblNob3dNb2RhbERpYWxvZyhjb25zdCBGcmFtZSogZnJhbWUp
Cit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBm
cmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2FuUnVuTW9kYWwoKTsKK30KKworc3RhdGljIGJvb2wg
Y2FuU2hvd01vZGFsRGlhbG9nTm93KGNvbnN0IEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZy
YW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZyYW1lLT5wYWdlKCktPmNo
cm9tZSgpLT5jYW5SdW5Nb2RhbE5vdygpOworfQorCitzdGF0aWMgSlNWYWx1ZSogc2hvd01vZGFs
RGlhbG9nKEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwg
SlNWYWx1ZSogZGlhbG9nQXJncywgY29uc3QgU3RyaW5nJiBmZWF0dXJlQXJncykKK3sKKyAgICBp
ZiAoIWNhblNob3dNb2RhbERpYWxvZ05vdyhmcmFtZSkgfHwgIWFsbG93UG9wVXAoZnJhbWUpKQor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IGZlYXR1cmVzID0gcGFyc2VNb2RhbERpYWxvZ0ZlYXR1cmVzKGZlYXR1cmVBcmdz
KTsKKworICAgIGNvbnN0IGJvb2wgdHJ1c3RlZCA9IGZhbHNlOworCisgICAgLy8gVGhlIGZvbGxv
d2luZyBmZWF0dXJlcyBmcm9tIE1pY3Jvc29mdCdzIGRvY3VtZW50YXRpb24gYXJlIG5vdCBpbXBs
ZW1lbnRlZDoKKyAgICAvLyAtIGRlZmF1bHQgZm9udCBzZXR0aW5ncworICAgIC8vIC0gd2lkdGgs
IGhlaWdodCwgbGVmdCwgYW5kIHRvcCBzcGVjaWZpZWQgaW4gdW5pdHMgb3RoZXIgdGhhbiAicHgi
CisgICAgLy8gLSBlZGdlIChzdW5rZW4gb3IgcmFpc2VkLCBkZWZhdWx0IGlzIHJhaXNlZCkKKyAg
ICAvLyAtIGRpYWxvZ0hpZGU6IHRydXN0ZWQgJiYgYm9vbEZlYXR1cmUoZmVhdHVyZXMsICJkaWFs
b2doaWRlIiksIG1ha2VzIGRpYWxvZyBoaWRlIHdoZW4geW91IHByaW50CisgICAgLy8gLSBoZWxw
OiBib29sRmVhdHVyZShmZWF0dXJlcywgImhlbHAiLCB0cnVlKSwgbWFrZXMgaGVscCBpY29uIGFw
cGVhciBpbiBkaWFsb2cgKHdoYXQgZG9lcyBpdCBkbyBvbiBXaW5kb3dzPykKKyAgICAvLyAtIHVu
YWRvcm5lZDogdHJ1c3RlZCAmJiBib29sRmVhdHVyZShmZWF0dXJlcywgInVuYWRvcm5lZCIpOwor
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBG
bG9hdFJlY3Qgc2NyZWVuUmVjdCA9IHNjcmVlbkF2YWlsYWJsZVJlY3QoZnJhbWUtPnZpZXcoKSk7
CisKKyAgICBXaW5kb3dGZWF0dXJlcyB3YXJnczsKKyAgICB3YXJncy53aWR0aCA9IFdpbmRvd0Zl
YXR1cmVzOjpmbG9hdEZlYXR1cmUoZmVhdHVyZXMsICJkaWFsb2d3aWR0aCIsIDEwMCwgc2NyZWVu
UmVjdC53aWR0aCgpLCA2MjApOyAvLyBkZWZhdWx0IGhlcmUgY2FtZSBmcm9tIGZyYW1lIHNpemUg
b2YgZGlhbG9nIGluIE1hY0lFCisgICAgd2FyZ3Mud2lkdGhTZXQgPSB0cnVlOworICAgIHdhcmdz
LmhlaWdodCA9IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUoZmVhdHVyZXMsICJkaWFsb2do
ZWlnaHQiLCAxMDAsIHNjcmVlblJlY3QuaGVpZ2h0KCksIDQ1MCk7IC8vIGRlZmF1bHQgaGVyZSBj
YW1lIGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUKKyAgICB3YXJncy5oZWlnaHRT
ZXQgPSB0cnVlOworCisgICAgd2FyZ3MueCA9IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUo
ZmVhdHVyZXMsICJkaWFsb2dsZWZ0Iiwgc2NyZWVuUmVjdC54KCksIHNjcmVlblJlY3QucmlnaHQo
KSAtIHdhcmdzLndpZHRoLCAtMSk7CisgICAgd2FyZ3MueFNldCA9IHdhcmdzLnggPiAwOworICAg
IHdhcmdzLnkgPSBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9n
dG9wIiwgc2NyZWVuUmVjdC55KCksIHNjcmVlblJlY3QuYm90dG9tKCkgLSB3YXJncy5oZWlnaHQs
IC0xKTsKKyAgICB3YXJncy55U2V0ID0gd2FyZ3MueSA+IDA7CisKKyAgICBpZiAoV2luZG93RmVh
dHVyZXM6OmJvb2xGZWF0dXJlKGZlYXR1cmVzLCAiY2VudGVyIiwgdHJ1ZSkpIHsKKyAgICAgICAg
aWYgKCF3YXJncy54U2V0KSB7CisgICAgICAgICAgICB3YXJncy54ID0gc2NyZWVuUmVjdC54KCkg
KyAoc2NyZWVuUmVjdC53aWR0aCgpIC0gd2FyZ3Mud2lkdGgpIC8gMjsKKyAgICAgICAgICAgIHdh
cmdzLnhTZXQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghd2FyZ3MueVNldCkgewor
ICAgICAgICAgICAgd2FyZ3MueSA9IHNjcmVlblJlY3QueSgpICsgKHNjcmVlblJlY3QuaGVpZ2h0
KCkgLSB3YXJncy5oZWlnaHQpIC8gMjsKKyAgICAgICAgICAgIHdhcmdzLnlTZXQgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgd2FyZ3MuZGlhbG9nID0gdHJ1ZTsKKyAgICB3YXJncy5y
ZXNpemFibGUgPSBXaW5kb3dGZWF0dXJlczo6Ym9vbEZlYXR1cmUoZmVhdHVyZXMsICJyZXNpemFi
bGUiKTsKKyAgICB3YXJncy5zY3JvbGxiYXJzVmlzaWJsZSA9IFdpbmRvd0ZlYXR1cmVzOjpib29s
RmVhdHVyZShmZWF0dXJlcywgInNjcm9sbCIsIHRydWUpOworICAgIHdhcmdzLnN0YXR1c0JhclZp
c2libGUgPSBXaW5kb3dGZWF0dXJlczo6Ym9vbEZlYXR1cmUoZmVhdHVyZXMsICJzdGF0dXMiLCAh
dHJ1c3RlZCk7CisgICAgd2FyZ3MubWVudUJhclZpc2libGUgPSBmYWxzZTsKKyAgICB3YXJncy50
b29sQmFyVmlzaWJsZSA9IGZhbHNlOworICAgIHdhcmdzLmxvY2F0aW9uQmFyVmlzaWJsZSA9IGZh
bHNlOworICAgIHdhcmdzLmZ1bGxzY3JlZW4gPSBmYWxzZTsKKworICAgIEZyYW1lKiBkaWFsb2dG
cmFtZSA9IGNyZWF0ZVdpbmRvdyhleGVjLCBmcmFtZSwgdXJsLCAiIiwgd2FyZ3MsIGRpYWxvZ0Fy
Z3MpOworICAgIGlmICghZGlhbG9nRnJhbWUpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworCisgICAgV2luZG93KiBkaWFsb2dXaW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGRp
YWxvZ0ZyYW1lKTsKKworICAgIC8vIEdldCB0aGUgcmV0dXJuIHZhbHVlIGVpdGhlciBqdXN0IGJl
Zm9yZSBjbGVhcmluZyB0aGUgZGlhbG9nIHdpbmRvdydzCisgICAgLy8gcHJvcGVydGllcyAoaW4g
V2luZG93OjpjbGVhciksIG9yIHdoZW4gb24gcmV0dXJuIGZyb20gcnVuTW9kYWwuCisgICAgSlNW
YWx1ZSogcmV0dXJuVmFsdWUgPSAwOworICAgIGRpYWxvZ1dpbmRvdy0+c2V0UmV0dXJuVmFsdWVT
bG90KCZyZXR1cm5WYWx1ZSk7CisgICAgZGlhbG9nRnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPnJ1
bk1vZGFsKCk7CisgICAgZGlhbG9nV2luZG93LT5zZXRSZXR1cm5WYWx1ZVNsb3QoMCk7CisKKyAg
ICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuIHZhbHVlLCBnZXQgaXQgbm93LgorICAgIC8v
IEVpdGhlciBXaW5kb3c6OmNsZWFyIHdhcyBub3QgY2FsbGVkIHlldCwgb3IgdGhlcmUgd2FzIG5v
IHJldHVybiB2YWx1ZSwKKyAgICAvLyBhbmQgaW4gdGhhdCBjYXNlLCB0aGVyZSdzIG5vIGhhcm0g
aW4gdHJ5aW5nIGFnYWluIChubyBiZW5lZml0IGVpdGhlcikuCisgICAgaWYgKCFyZXR1cm5WYWx1
ZSkKKyAgICAgICAgcmV0dXJuVmFsdWUgPSBkaWFsb2dXaW5kb3ctPmdldERpcmVjdCgicmV0dXJu
VmFsdWUiKTsKKworICAgIHJldHVybiByZXR1cm5WYWx1ZSA/IHJldHVyblZhbHVlIDoganNVbmRl
ZmluZWQoKTsKK30KKworSlNWYWx1ZSAqV2luZG93OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgQVNTRVJUKGltcGwoKS0+ZnJhbWUoKSk7
CisKKyAgIHN3aXRjaCAodG9rZW4pIHsKKyAgIGNhc2UgQ3J5cHRvOgorICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7IC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcworICAgY2FzZSBET01FeGNlcHRp
b246CisgICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgICAgcmV0dXJuIGdldERPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yKGV4
ZWMpOworICAgIGNhc2UgRXZlbnRfOgorICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMp
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgIGlmICghZC0+bV9ldnQpCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZC0+
bV9ldnQpOworICAgIGNhc2UgTG9jYXRpb25fOgorICAgICAgcmV0dXJuIGxvY2F0aW9uKCk7Cisg
ICAgY2FzZSBOYXZpZ2F0b3JfOgorICAgIGNhc2UgQ2xpZW50SW5mb3JtYXRpb246IHsKKyAgICAg
IGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgICAvLyBTdG9yZSB0aGUgbmF2aWdhdG9yIGluIHRoZSBvYmplY3Qgc28gd2UgZ2V0
IHRoZSBzYW1lIG9uZSBlYWNoIHRpbWUuCisgICAgICBOYXZpZ2F0b3IgKm4gPSBuZXcgTmF2aWdh
dG9yKGV4ZWMsIGltcGwoKS0+ZnJhbWUoKSk7CisgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIG1h
a2UgdGhlICJuYXZpZ2F0b3IiIG9iamVjdCBhY2Nlc3NpYmxlIGZyb20gd2luZG93cyB0aGF0IGZh
aWwKKyAgICAgIC8vIHRoZSBzZWN1cml0eSBjaGVjayB0aGUgZmlyc3QgdGltZSwgYnV0IG5vdCBz
dWJzZXF1ZW50IHRpbWVzLCBzZWVtcyB3ZWlyZC4KKyAgICAgIGNvbnN0X2Nhc3Q8V2luZG93ICo+
KHRoaXMpLT5wdXREaXJlY3QoIm5hdmlnYXRvciIsIG4sIERvbnREZWxldGV8UmVhZE9ubHkpOwor
ICAgICAgY29uc3RfY2FzdDxXaW5kb3cgKj4odGhpcyktPnB1dERpcmVjdCgiY2xpZW50SW5mb3Jt
YXRpb24iLCBuLCBEb250RGVsZXRlfFJlYWRPbmx5KTsKKyAgICAgIHJldHVybiBuOworICAgIH0K
KyAgICBjYXNlIEltYWdlOgorICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgIC8vIEZJWE1FOiB0aGlzIHByb3BlcnR5
IChhbmQgdGhlIGZldyBiZWxvdykgcHJvYmFibHkgc2hvdWxkbid0IGNyZWF0ZSBhIG5ldyBvYmpl
Y3QgZXZlcnkKKyAgICAgIC8vIHRpbWUKKyAgICAgIHJldHVybiBuZXcgSW1hZ2VDb25zdHJ1Y3Rv
ckltcChleGVjLCBpbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCkpOworICAgIGNhc2UgT3B0aW9u
OgorICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgIHJldHVybiBuZXcgSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVj
dG9yKGV4ZWMsIGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgY2FzZSBYTUxIdHRw
UmVxdWVzdDoKKyAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gbmV3IEpTWE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3RvckltcChleGVjLCBpbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCkpOworICAgIGNhc2Ug
QXVkaW86CisjaWYgRU5BQkxFKFZJREVPKQorICAgICAgcmV0dXJuIG5ldyBKU0hUTUxBdWRpb0Vs
ZW1lbnRDb25zdHJ1Y3RvcihleGVjLCBpbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCkpOworI2Vs
c2UKKyAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworI2VuZGlmCisjaWYgRU5BQkxFKFhTTFQp
CisgICAgY2FzZSBYU0xUUHJvY2Vzc29yXzoKKyAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShl
eGVjKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gbmV3IFhT
TFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcChleGVjKTsKKyNlbHNlCisgICAgY2FzZSBYU0xUUHJv
Y2Vzc29yXzoKKyAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworI2VuZGlmCisgICB9CisKKyAg
IGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKKyAgIHN3aXRjaCAodG9rZW4pIHsKKyAgIGNhc2UgT25hYm9ydDoKKyAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKGV4ZWMsIGFib3J0RXZlbnQpOworICAgY2FzZSBPbmJsdXI6CisgICAgIHJldHVy
biBnZXRMaXN0ZW5lcihleGVjLCBibHVyRXZlbnQpOworICAgY2FzZSBPbmNoYW5nZToKKyAgICAg
cmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGNoYW5nZUV2ZW50KTsKKyAgIGNhc2UgT25jbGljazoK
KyAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGNsaWNrRXZlbnQpOworICAgY2FzZSBPbmRi
bGNsaWNrOgorICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgZGJsY2xpY2tFdmVudCk7Cisg
ICBjYXNlIE9uZXJyb3I6CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBlcnJvckV2ZW50
KTsKKyAgIGNhc2UgT25mb2N1czoKKyAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGZvY3Vz
RXZlbnQpOworICAgY2FzZSBPbmtleWRvd246CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVj
LCBrZXlkb3duRXZlbnQpOworICAgY2FzZSBPbmtleXByZXNzOgorICAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoZXhlYywga2V5cHJlc3NFdmVudCk7CisgICBjYXNlIE9ua2V5dXA6CisgICAgIHJldHVy
biBnZXRMaXN0ZW5lcihleGVjLCBrZXl1cEV2ZW50KTsKKyAgIGNhc2UgT25sb2FkOgorICAgICBy
ZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgbG9hZEV2ZW50KTsKKyAgIGNhc2UgT25tb3VzZWRvd246
CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBtb3VzZWRvd25FdmVudCk7CisgICBjYXNl
IE9ubW91c2Vtb3ZlOgorICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgbW91c2Vtb3ZlRXZl
bnQpOworICAgY2FzZSBPbm1vdXNlb3V0OgorICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywg
bW91c2VvdXRFdmVudCk7CisgICBjYXNlIE9ubW91c2VvdmVyOgorICAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoZXhlYywgbW91c2VvdmVyRXZlbnQpOworICAgY2FzZSBPbm1vdXNldXA6CisgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihleGVjLCBtb3VzZXVwRXZlbnQpOworICAgY2FzZSBPbldpbmRvd01v
dXNlV2hlZWw6CisgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBtb3VzZXdoZWVsRXZlbnQp
OworICAgY2FzZSBPbnJlc2V0OgorICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgcmVzZXRF
dmVudCk7CisgICBjYXNlIE9ucmVzaXplOgorICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxy
ZXNpemVFdmVudCk7CisgICBjYXNlIE9uc2Nyb2xsOgorICAgICByZXR1cm4gZ2V0TGlzdGVuZXIo
ZXhlYyxzY3JvbGxFdmVudCk7CisgICBjYXNlIE9uc2VhcmNoOgorICAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoZXhlYyxzZWFyY2hFdmVudCk7CisgICBjYXNlIE9uc2VsZWN0OgorICAgICByZXR1cm4g
Z2V0TGlzdGVuZXIoZXhlYyxzZWxlY3RFdmVudCk7CisgICBjYXNlIE9uc3VibWl0OgorICAgICBy
ZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxzdWJtaXRFdmVudCk7CisgICBjYXNlIE9uYmVmb3JldW5s
b2FkOgorICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgYmVmb3JldW5sb2FkRXZlbnQpOwor
ICAgY2FzZSBPbnVubG9hZDoKKyAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIHVubG9hZEV2
ZW50KTsKKyAgIH0KKyAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Cit9CisKK0pTVmFsdWUqIFdpbmRvdzo6Y2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUq
LCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIHJldHVybiByZXRyaWV2ZShzdGF0aWNfY2FzdDxXaW5kb3cq
PihzbG90LnNsb3RCYXNlKCkpLT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+Y2hpbGQoQXRvbWlj
U3RyaW5nKHByb3BlcnR5TmFtZSkpKTsKK30KKworSlNWYWx1ZSogV2luZG93OjppbmRleEdldHRl
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIHJldHJpZXZlKHN0YXRpY19jYXN0PFdpbmRvdyo+
KHNsb3Quc2xvdEJhc2UoKSktPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChzbG90Lmlu
ZGV4KCkpKTsKK30KKworSlNWYWx1ZSAqV2luZG93OjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICBXaW5kb3cgKnRoaXNPYmog
PSBzdGF0aWNfY2FzdDxXaW5kb3cgKj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgRG9jdW1lbnQgKmRv
YyA9IHRoaXNPYmotPmltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgQVNTRVJUKHRoaXNP
YmotPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykgJiYgZG9jICYmIGRvYy0+aXNIVE1MRG9jdW1lbnQo
KSk7CisKKyAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eU5hbWU7CisgIFJlZlB0cjxXZWJDb3JlOjpI
VE1MQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IGRvYy0+d2luZG93TmFtZWRJdGVtcyhuYW1lKTsK
KyAgaWYgKGNvbGxlY3Rpb24tPmxlbmd0aCgpID09IDEpCisgICAgcmV0dXJuIHRvSlMoZXhlYywg
Y29sbGVjdGlvbi0+Zmlyc3RJdGVtKCkpOworICByZXR1cm4gdG9KUyhleGVjLCBjb2xsZWN0aW9u
LmdldCgpKTsKK30KKworYm9vbCBXaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQoreworICAvLyBDaGVjayBmb3IgY2hpbGQgZnJhbWVzIGJ5IG5hbWUgYmVmb3JlIGJ1aWx0LWlu
IHByb3BlcnRpZXMgdG8KKyAgLy8gbWF0Y2ggTW96aWxsYS4gVGhpcyBkb2VzIG5vdCBtYXRjaCBJ
RSwgYnV0IHNvbWUgc2l0ZXMgZW5kIHVwCisgIC8vIG5hbWluZyBmcmFtZXMgdGhpbmdzIHRoYXQg
Y29uZmxpY3Qgd2l0aCB3aW5kb3cgcHJvcGVydGllcyB0aGF0CisgIC8vIGFyZSBpbiBNb3ogYnV0
IG5vdCBJRS4gU2luY2Ugd2UgaGF2ZSBzb21lIG9mIHRoZXNlLCB3ZSBoYXZlIHRvIGRvCisgIC8v
IGl0IHRoZSBNb3ogd2F5LgorICBpZiAoaW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPmNoaWxkKHBy
b3BlcnR5TmFtZSkpIHsKKyAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBjaGlsZEZyYW1lR2V0dGVy
KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBM
b29rdXA6OmZpbmRFbnRyeSgmV2luZG93VGFibGUsIHByb3BlcnR5TmFtZSk7CisgIGlmIChlbnRy
eSkgeworICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKSB7CisgICAgICBpZiAoZW50cnkt
PnZhbHVlLmZ1bmN0aW9uVmFsdWUgPT0gJldpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZzo6
Y3JlYXRlKSB7CisgICAgICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nKGltcGwoKS0+ZnJhbWUo
KSkpCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgaWYgKGFsbG93c0Fj
Y2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnks
IHN0YXRpY0Z1bmN0aW9uR2V0dGVyKTsKKyAgICAgIGVsc2UKKyAgICAgICAgc2xvdC5zZXRVbmRl
ZmluZWQodGhpcyk7CisgICAgfSBlbHNlCisgICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMs
IGVudHJ5LCBzdGF0aWNWYWx1ZUdldHRlcjxXaW5kb3c+KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAg
fQorCisgIC8vIEZJWE1FOiBTZWFyY2ggdGhlIHdob2xlIGZyYW1lIGhpZXJhY2h5IHNvbWV3aGVy
ZSBhcm91bmQgaGVyZS4KKyAgLy8gV2UgbmVlZCB0byB0ZXN0IHRoZSBjb3JyZWN0IHByaW9yaXR5
IG9yZGVyLgorCisgIC8vIGFsbG93IHdpbmRvd1sxXSBvciBwYXJlbnRbMV0gZXRjLiAoIzU2OTgz
KQorICBib29sIG9rOworICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJbmRleCgm
b2spOworICBpZiAob2sgJiYgaSA8IGltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZENvdW50
KCkpIHsKKyAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVyKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIC8vIGFsbG93IHNob3J0Y3V0cyBsaWtlICdJbWFnZTEn
IGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQorICBEb2N1bWVudCogZG9jID0gaW1w
bCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICBpZiAoZG9jICYmIGRvYy0+aXNIVE1MRG9jdW1l
bnQoKSkgeworICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkgeworICAgICAgc2xvdC5z
ZXRVbmRlZmluZWQodGhpcyk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBdG9t
aWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworICAgIGlmIChzdGF0
aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2MpLT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlO
YW1lKSB8fCBkb2MtPmdldEVsZW1lbnRCeUlkKGF0b21pY1Byb3BlcnR5TmFtZSkpIHsKKyAgICAg
IHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVkSXRlbUdldHRlcik7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgIH0KKworICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhlYykpIHsKKyAgICBz
bG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHJldHVy
biBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Cit9CisKK3ZvaWQgV2luZG93OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikKK3sKKyAgY29uc3QgSGFz
aEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZXaW5kb3dUYWJsZSwgcHJvcGVydHlO
YW1lKTsKKyAgaWYgKGVudHJ5KSB7CisgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKSB7
CisgICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgICBKU09iamVjdDo6
cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOworICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGVudHJ5LT5hdHRyICYgUmVhZE9ubHkpCisgICAgICByZXR1cm47CisKKyAg
ICBzd2l0Y2ggKGVudHJ5LT52YWx1ZS5pbnRWYWx1ZSkgeworICAgIGNhc2UgTG9jYXRpb25fOiB7
CisgICAgICBGcmFtZSogcCA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmltcGwoKS0+
ZnJhbWUoKTsKKyAgICAgIGlmIChwKSB7CisgICAgICAgIGlmICghcC0+bG9hZGVyKCktPnNob3Vs
ZEFsbG93TmF2aWdhdGlvbihpbXBsKCktPmZyYW1lKCkpKQorICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgU3RyaW5nIGRzdFVybCA9IHAtPmxvYWRlcigpLT5jb21wbGV0ZVVSTCh2YWx1ZS0+dG9T
dHJpbmcoZXhlYykpLnN0cmluZygpOworICAgICAgICBpZiAoIWRzdFVybC5zdGFydHNXaXRoKCJq
YXZhc2NyaXB0OiIsIGZhbHNlKSB8fCBhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSB7CisgICAgICAg
ICAgYm9vbCB1c2VyR2VzdHVyZSA9IHAtPnNjcmlwdFByb3h5KCktPnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpOworICAgICAgICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoaXMg
SlMgd2FzIGNhbGxlZCB2aWEgYSB1c2VyIGdlc3R1cmUKKyAgICAgICAgICBpbXBsKCktPmZyYW1l
KCktPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGRzdFVybCwgcC0+bG9hZGVyKCkt
Pm91dGdvaW5nUmVmZXJyZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIE9uYWJvcnQ6CisgICAgICBpZiAo
YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYWJvcnRF
dmVudCx2YWx1ZSk7CisgICAgICByZXR1cm47CisgICAgY2FzZSBPbmJsdXI6CisgICAgICBpZiAo
YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYmx1ckV2
ZW50LHZhbHVlKTsKKyAgICAgIHJldHVybjsKKyAgICBjYXNlIE9uY2hhbmdlOgorICAgICAgaWYg
KGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGNoYW5n
ZUV2ZW50LHZhbHVlKTsKKyAgICAgIHJldHVybjsKKyAgICBjYXNlIE9uY2xpY2s6CisgICAgICBp
ZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxjbGlj
a0V2ZW50LHZhbHVlKTsKKyAgICAgIHJldHVybjsKKyAgICBjYXNlIE9uZGJsY2xpY2s6CisgICAg
ICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywg
ZGJsY2xpY2tFdmVudCx2YWx1ZSk7CisgICAgICByZXR1cm47CisgICAgY2FzZSBPbmVycm9yOgor
ICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHNldExpc3RlbmVyKGV4
ZWMsIGVycm9yRXZlbnQsIHZhbHVlKTsKKyAgICAgIHJldHVybjsKKyAgICBjYXNlIE9uZm9jdXM6
CisgICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYyxmb2N1c0V2ZW50LHZhbHVlKTsKKyAgICAgIHJldHVybjsKKyAgICBjYXNlIE9ua2V5ZG93
bjoKKyAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAgICAgICBzZXRMaXN0ZW5l
cihleGVjLGtleWRvd25FdmVudCx2YWx1ZSk7CisgICAgICByZXR1cm47CisgICAgY2FzZSBPbmtl
eXByZXNzOgorICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHNldExp
c3RlbmVyKGV4ZWMsa2V5cHJlc3NFdmVudCx2YWx1ZSk7CisgICAgICByZXR1cm47CisgICAgY2Fz
ZSBPbmtleXVwOgorICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHNl
dExpc3RlbmVyKGV4ZWMsa2V5dXBFdmVudCx2YWx1ZSk7CisgICAgICByZXR1cm47CisgICAgY2Fz
ZSBPbmxvYWQ6CisgICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgc2V0
TGlzdGVuZXIoZXhlYyxsb2FkRXZlbnQsdmFsdWUpOworICAgICAgcmV0dXJuOworICAgIGNhc2Ug
T25tb3VzZWRvd246CisgICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAg
c2V0TGlzdGVuZXIoZXhlYyxtb3VzZWRvd25FdmVudCx2YWx1ZSk7CisgICAgICByZXR1cm47Cisg
ICAgY2FzZSBPbm1vdXNlbW92ZToKKyAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQor
ICAgICAgICBzZXRMaXN0ZW5lcihleGVjLG1vdXNlbW92ZUV2ZW50LHZhbHVlKTsKKyAgICAgIHJl
dHVybjsKKyAgICBjYXNlIE9ubW91c2VvdXQ6CisgICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShl
eGVjKSkKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxtb3VzZW91dEV2ZW50LHZhbHVlKTsKKyAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE9ubW91c2VvdmVyOgorICAgICAgaWYgKGFsbG93c0FjY2Vz
c0Zyb20oZXhlYykpCisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsbW91c2VvdmVyRXZlbnQsdmFs
dWUpOworICAgICAgcmV0dXJuOworICAgIGNhc2UgT25tb3VzZXVwOgorICAgICAgaWYgKGFsbG93
c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsbW91c2V1cEV2ZW50
LHZhbHVlKTsKKyAgICAgIHJldHVybjsKKyAgICBjYXNlIE9uV2luZG93TW91c2VXaGVlbDoKKyAg
ICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAgICAgICBzZXRMaXN0ZW5lcihleGVj
LCBtb3VzZXdoZWVsRXZlbnQsdmFsdWUpOworICAgICAgcmV0dXJuOworICAgIGNhc2UgT25yZXNl
dDoKKyAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAgICAgICBzZXRMaXN0ZW5l
cihleGVjLHJlc2V0RXZlbnQsdmFsdWUpOworICAgICAgcmV0dXJuOworICAgIGNhc2UgT25yZXNp
emU6CisgICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgc2V0TGlzdGVu
ZXIoZXhlYyxyZXNpemVFdmVudCx2YWx1ZSk7CisgICAgICByZXR1cm47CisgICAgY2FzZSBPbnNj
cm9sbDoKKyAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAgICAgICBzZXRMaXN0
ZW5lcihleGVjLHNjcm9sbEV2ZW50LHZhbHVlKTsKKyAgICAgIHJldHVybjsKKyAgICBjYXNlIE9u
c2VhcmNoOgorICAgICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgICAg
IHNldExpc3RlbmVyKGV4ZWMsc2VhcmNoRXZlbnQsdmFsdWUpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBPbnNlbGVjdDoKKyAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAg
ICAgICBzZXRMaXN0ZW5lcihleGVjLHNlbGVjdEV2ZW50LHZhbHVlKTsKKyAgICAgIHJldHVybjsK
KyAgICBjYXNlIE9uc3VibWl0OgorICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisg
ICAgICAgIHNldExpc3RlbmVyKGV4ZWMsc3VibWl0RXZlbnQsdmFsdWUpOworICAgICAgcmV0dXJu
OworICAgIGNhc2UgT25iZWZvcmV1bmxvYWQ6CisgICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShl
eGVjKSkKKyAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYmVmb3JldW5sb2FkRXZlbnQsIHZhbHVl
KTsKKyAgICAgIHJldHVybjsKKyAgICBjYXNlIE9udW5sb2FkOgorICAgICAgaWYgKGFsbG93c0Fj
Y2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIHVubG9hZEV2ZW50LCB2
YWx1ZSk7CisgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0K
KyAgfQorICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICBKU09iamVjdDo6cHV0KGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOworfQorCitib29sIFdpbmRvdzo6YWxsb3dz
QWNjZXNzRnJvbShjb25zdCBKU0dsb2JhbE9iamVjdCogb3RoZXIpIGNvbnN0Cit7CisgICAgY29u
c3QgRnJhbWUqIG9yaWdpbkZyYW1lID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2luZG93Kj4ob3RoZXIp
LT5pbXBsKCktPmZyYW1lKCk7CisgICAgaWYgKCFvcmlnaW5GcmFtZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgY29uc3QgRnJhbWUqIHRhcmdldEZyYW1lID0gaW1wbCgpLT5mcmFtZSgp
OworICAgIGlmICghdGFyZ2V0RnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChvcmlnaW5GcmFtZSA9PSB0YXJnZXRGcmFtZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogdGFyZ2V0RG9jdW1lbnQgPSB0YXJnZXRGcmFtZS0+ZG9jdW1l
bnQoKTsKKworICAgIC8vIEpTIG1heSBiZSBhdHRlbXB0aW5nIHRvIGFjY2VzcyB0aGUgIndpbmRv
dyIgb2JqZWN0LCB3aGljaCBzaG91bGQgYmUgdmFsaWQsCisgICAgLy8gZXZlbiBpZiB0aGUgZG9j
dW1lbnQgaGFzbid0IGJlZW4gY29uc3RydWN0ZWQgeWV0LiAgSWYgdGhlIGRvY3VtZW50IGRvZXNu
J3QKKyAgICAvLyBleGlzdCB5ZXQgYWxsb3cgSlMgdG8gYWNjZXNzIHRoZSB3aW5kb3cgb2JqZWN0
LgorICAgIGlmICghdGFyZ2V0RG9jdW1lbnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
V2ViQ29yZTo6RG9jdW1lbnQqIG9yaWdpbkRvY3VtZW50ID0gb3JpZ2luRnJhbWUtPmRvY3VtZW50
KCk7CisKKyAgICBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3JpZ2luU2VjdXJpdHlPcmlnaW4gPSBv
cmlnaW5Eb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBjb25zdCBTZWN1cml0eU9yaWdp
biYgdGFyZ2V0U2VjdXJpdHlPcmlnaW4gPSB0YXJnZXREb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4o
KTsKKworICAgIGlmIChvcmlnaW5TZWN1cml0eU9yaWdpbi5jYW5BY2Nlc3ModGFyZ2V0U2VjdXJp
dHlPcmlnaW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghdGFyZ2V0RnJhbWUt
PnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgeworICAgICAgICAvLyBGSVhN
RTogdGhpcyBlcnJvciBtZXNzYWdlIHNob3VsZCBjb250YWluIG1vcmUgc3BlY2lmaWNzIG9mIHdo
eSB0aGUgc2FtZSBvcmlnaW4gY2hlY2sgaGFzIGZhaWxlZC4KKyAgICAgICAgU3RyaW5nIG1lc3Nh
Z2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5zYWZlIEphdmFTY3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3Mg
ZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRoIFVSTCAlcy4gRG9tYWlucywgcHJvdG9j
b2xzIGFuZCBwb3J0cyBtdXN0IG1hdGNoLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXREb2N1bWVudC0+dXJsKCkudXRmOCgpLmRhdGEoKSwgb3JpZ2lu
RG9jdW1lbnQtPnVybCgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIGlmIChJbnRlcnByZXRl
cjo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpCisgICAgICAgICAgICBwcmludGYoIiVzIiwgbWVz
c2FnZS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IHRhcmdldEZy
YW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS0+YWRkTWVzc2FnZVRvQ29u
c29sZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlLCAxLCBTdHJp
bmcoKSk7IC8vIEZJWE1FOiBwcm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBhbmQgc291cmNlIFVS
TC4KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0V4ZWNTdGF0ZSogV2luZG93Ojpn
bG9iYWxFeGVjKCkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSBzY3Jp
cHQgZXhlY3V0aW9uIGhhcHBlbmluZyBpbiB0aGlzCisgICAgLy8gZnJhbWUgZG9lcyBub3QgZGVz
dHJveSBpdAorICAgIEFTU0VSVChpbXBsKCktPmZyYW1lKCkpOworICAgIGltcGwoKS0+ZnJhbWUo
KS0+a2VlcEFsaXZlKCk7CisgICAgcmV0dXJuIEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7
Cit9CisKK2Jvb2wgV2luZG93OjpzaG91bGRJbnRlcnJ1cHRTY3JpcHQoKSBjb25zdAoreworICAg
IEFTU0VSVChpbXBsKCktPmZyYW1lKCkpOworICAgIFBhZ2UqIHBhZ2UgPSBpbXBsKCktPmZyYW1l
KCktPnBhZ2UoKTsKKworICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ3OTQ0Mz4uIFdlIGRv
bid0IHRoaW5rIHRoYXQgcGFnZSBjYW4gZXZlciBiZSBOVUxMCisgICAgLy8gaW4gdGhpcyBjYXNl
LCBidXQgaWYgaXQgaXMsIHdlJ3ZlIGdvdHRlbiBpbnRvIGEgc3RhdGUgd2hlcmUgd2UgbWF5IGhh
dmUKKyAgICAvLyBodW5nIHRoZSBVSSwgd2l0aCBubyB3YXkgdG8gYXNrIHRoZSBjbGllbnQgd2hl
dGhlciB0byBjYW5jZWwgZXhlY3V0aW9uLgorICAgIC8vIEZvciBub3csIG91ciBzb2x1dGlvbiBp
cyBqdXN0IHRvIGNhbmNlbCBleGVjdXRpb24gbm8gbWF0dGVyIHdoYXQsCisgICAgLy8gZW5zdXJp
bmcgdGhhdCB3ZSBuZXZlciBoYW5nLiBXZSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIG90aGVyIHNv
bHV0aW9ucworICAgIC8vIGlmIHdlIGRpc2NvdmVyIHByb2JsZW1zIHdpdGggdGhpcyBvbmUuCisg
ICAgQVNTRVJUKHBhZ2UpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCktPnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsK
K30KKwordm9pZCBXaW5kb3c6OnNldExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIEpTVmFsdWUqIGZ1bmMpCit7CisgICAgQVNTRVJUKGltcGwo
KS0+ZnJhbWUoKSk7CisgICAgRG9jdW1lbnQqIGRvYyA9IGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKTsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuOworCisgICAgZG9jLT5zZXRIVE1M
V2luZG93RXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5l
cihmdW5jLCB0cnVlKSk7Cit9CisKK0pTVmFsdWUqIFdpbmRvdzo6Z2V0TGlzdGVuZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKK3sKKyAgICBB
U1NFUlQoaW1wbCgpLT5mcmFtZSgpKTsKKyAgICBEb2N1bWVudCogZG9jID0gaW1wbCgpLT5mcmFt
ZSgpLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKworICAgIFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZG9jLT5nZXRI
VE1MV2luZG93RXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOworICAgIGlmIChsaXN0ZW5lciAmJiBz
dGF0aWNfY2FzdDxKU0V2ZW50TGlzdGVuZXIqPihsaXN0ZW5lciktPmxpc3RlbmVyT2JqKCkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0V2ZW50TGlzdGVuZXIqPihsaXN0ZW5lciktPmxp
c3RlbmVyT2JqKCk7CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCitKU0V2ZW50TGlzdGVuZXIq
IFdpbmRvdzo6ZmluZEpTRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiB2YWwsIGJvb2wgaHRtbCkKK3sK
KyAgICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsKTsKKyAgICBMaXN0ZW5lcnNN
YXAmIGxpc3RlbmVycyA9IGh0bWwgPyBkLT5qc0hUTUxFdmVudExpc3RlbmVycyA6IGQtPmpzRXZl
bnRMaXN0ZW5lcnM7CisgICAgcmV0dXJuIGxpc3RlbmVycy5nZXQob2JqZWN0KTsKK30KKworSlNF
dmVudExpc3RlbmVyKiBXaW5kb3c6OmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU1ZhbHVl
KiB2YWwsIGJvb2wgaHRtbCkKK3sKKyAgICBKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZmlu
ZEpTRXZlbnRMaXN0ZW5lcih2YWwsIGh0bWwpOworICAgIGlmIChsaXN0ZW5lcikKKyAgICAgICAg
cmV0dXJuIGxpc3RlbmVyOworCisgICAgaWYgKCF2YWwtPmlzT2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZh
bCk7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlIEpTRXZlbnRMaXN0ZW5lciBjb25zdHJ1Y3RvciBh
ZGRzIGl0IHRvIG91ciBqc0V2ZW50TGlzdGVuZXJzIGxpc3QKKyAgICByZXR1cm4gbmV3IEpTRXZl
bnRMaXN0ZW5lcihvYmplY3QsIHRoaXMsIGh0bWwpOworfQorCitKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lciogV2luZG93OjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNWYWx1ZSog
dmFsLCBib29sIGh0bWwpCit7CisgICAgaWYgKCF2YWwtPmlzT2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZh
bCk7CisgICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGh0bWwgPyBkLT5q
c1VucHJvdGVjdGVkSFRNTEV2ZW50TGlzdGVuZXJzIDogZC0+anNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXJzOworICAgIHJldHVybiBsaXN0ZW5lcnMuZ2V0KG9iamVjdCk7Cit9CisKK0pTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKiBXaW5kb3c6OmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKEpTVmFsdWUqIHZhbCwgYm9vbCBodG1sKQoreworICAgIEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcih2
YWwsIGh0bWwpOworICAgIGlmIChsaXN0ZW5lcikKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwor
ICAgIGlmICghdmFsLT5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBKU09iamVj
dCogb2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWwpOworCisgICAgLy8gVGhlIEpT
VW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyIGNvbnN0cnVjdG9yIGFkZHMgaXQgdG8gb3VyIGpzVW5w
cm90ZWN0ZWRFdmVudExpc3RlbmVycyBtYXAuCisgICAgcmV0dXJuIG5ldyBKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcihvYmplY3QsIHRoaXMsIGh0bWwpOworfQorCit2b2lkIFdpbmRvdzo6Y2xl
YXJIZWxwZXJPYmplY3RQcm9wZXJ0aWVzKCkKK3sKKyAgICBkLT5sb2MgPSAwOworICAgIGQtPm1f
ZXZ0ID0gMDsKK30KKwordm9pZCBXaW5kb3c6OmNsZWFyKCkKK3sKKyAgSlNMb2NrIGxvY2s7CisK
KyAgaWYgKGQtPm1fcmV0dXJuVmFsdWVTbG90ICYmICEqZC0+bV9yZXR1cm5WYWx1ZVNsb3QpCisg
ICAgKmQtPm1fcmV0dXJuVmFsdWVTbG90ID0gZ2V0RGlyZWN0KCJyZXR1cm5WYWx1ZSIpOworCisg
IGNsZWFyQWxsVGltZW91dHMoKTsKKyAgY2xlYXJQcm9wZXJ0aWVzKCk7CisgIGNsZWFySGVscGVy
T2JqZWN0UHJvcGVydGllcygpOworCisgIC8vIE5vdyByZWNyZWF0ZSBhIHdvcmtpbmcgZ2xvYmFs
IG9iamVjdCBmb3IgdGhlIG5leHQgVVJMIHRoYXQgd2lsbCB1c2UgdXM7IGJ1dCBvbmx5IGlmIHdl
IGhhdmVuJ3QgYmVlbgorICAvLyBkaXNjb25uZWN0ZWQgeWV0CisgIGlmIChGcmFtZSogZnJhbWUg
PSBpbXBsKCktPmZyYW1lKCkpCisgICAgZnJhbWUtPnNjcmlwdFByb3h5KCktPmdsb2JhbE9iamVj
dCgpLT5yZXNldChKU0RPTVdpbmRvd1Byb3RvdHlwZTo6c2VsZigpKTsKKworICAvLyB0aGVyZSdz
IGxpa2VseSB0byBiZSBsb3RzIG9mIGdhcmJhZ2Ugbm93CisgIGdjQ29udHJvbGxlcigpLmdhcmJh
Z2VDb2xsZWN0U29vbigpOworfQorCit2b2lkIFdpbmRvdzo6c2V0Q3VycmVudEV2ZW50KEV2ZW50
KiBldnQpCit7CisgICAgZC0+bV9ldnQgPSBldnQ7Cit9CisKK0V2ZW50KiBXaW5kb3c6OmN1cnJl
bnRFdmVudCgpCit7CisgICAgcmV0dXJuIGQtPm1fZXZ0OworfQorCitKU1ZhbHVlKiBXaW5kb3dQ
cm90b0Z1bmNBVG9COjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMo
JldpbmRvdzo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CisKKyAgICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CisKKyAgICBKU1Zh
bHVlKiB2ID0gYXJnc1swXTsKKyAgICBpZiAodi0+aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBq
c1N0cmluZygpOworCisgICAgVVN0cmluZyBzID0gdi0+dG9TdHJpbmcoZXhlYyk7CisgICAgaWYg
KCFzLmlzOEJpdCgpKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTlZBTElEX0NI
QVJBQ1RFUl9FUlIpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAg
ICBWZWN0b3I8Y2hhcj4gaW4ocy5zaXplKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5z
aXplKCk7ICsraSkKKyAgICAgICAgaW5baV0gPSBzdGF0aWNfY2FzdDxjaGFyPihzLmRhdGEoKVtp
XS51bmljb2RlKCkpOworICAgIFZlY3RvcjxjaGFyPiBvdXQ7CisKKyAgICBpZiAoIWJhc2U2NERl
Y29kZShpbiwgb3V0KSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVy
cm9yLCAiQ2Fubm90IGRlY29kZSBiYXNlNjQiKTsKKworICAgIHJldHVybiBqc1N0cmluZyhTdHJp
bmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSkpOworfQorCitKU1ZhbHVlKiBXaW5kb3dQcm90b0Z1
bmNCVG9BOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJldpbmRv
dzo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisK
KyAgICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CisKKyAgICBKU1ZhbHVlKiB2
ID0gYXJnc1swXTsKKyAgICBpZiAodi0+aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1N0cmlu
ZygpOworCisgICAgVVN0cmluZyBzID0gdi0+dG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKCFzLmlz
OEJpdCgpKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTlZBTElEX0NIQVJBQ1RF
Ul9FUlIpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8Y2hhcj4gaW4ocy5zaXplKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5zaXplKCk7
ICsraSkKKyAgICAgICAgaW5baV0gPSBzdGF0aWNfY2FzdDxjaGFyPihzLmRhdGEoKVtpXS51bmlj
b2RlKCkpOworICAgIFZlY3RvcjxjaGFyPiBvdXQ7CisKKyAgICBiYXNlNjRFbmNvZGUoaW4sIG91
dCk7CisKKyAgICByZXR1cm4ganNTdHJpbmcoU3RyaW5nKG91dC5kYXRhKCksIG91dC5zaXplKCkp
KTsKK30KKworSlNWYWx1ZSogV2luZG93UHJvdG9GdW5jT3Blbjo6Y2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAg
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZXaW5kb3c6OmluZm8pKQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIFdpbmRvdyogd2luZG93ID0gc3RhdGlj
X2Nhc3Q8V2luZG93Kj4odGhpc09iaik7CisgICAgRnJhbWUqIGZyYW1lID0gd2luZG93LT5pbXBs
KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVj
KS0+aW1wbCgpLT5mcmFtZSgpOworICAgIGlmICghYWN0aXZlRnJhbWUpCisgICAgICAgIHJldHVy
biAganNVbmRlZmluZWQoKTsKKworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworCisg
ICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soZXhlYywgYXJnc1swXSk7CisgICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IGFyZ3NbMV0t
PmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAiX2JsYW5rIiA6IEF0b21pY1N0cmluZyhhcmdzWzFdLT50
b1N0cmluZyhleGVjKSk7CisKKyAgICAvLyBCZWNhdXNlIEZyYW1lVHJlZTo6ZmluZCgpIHJldHVy
bnMgdHJ1ZSBmb3IgZW1wdHkgc3RyaW5ncywgd2UgbXVzdCBjaGVjayBmb3IgZW1wdHkgZnJhbWVu
YW1lcy4KKyAgICAvLyBPdGhlcndpc2UsIGlsbGVnaXRpbWF0ZSB3aW5kb3cub3BlbigpIGNhbGxz
IHdpdGggbm8gbmFtZSB3aWxsIHBhc3MgcmlnaHQgdGhyb3VnaCB0aGUgcG9wdXAgYmxvY2tlci4K
KyAgICBpZiAoIWFsbG93UG9wVXAoZnJhbWUpICYmIChmcmFtZU5hbWUuaXNFbXB0eSgpIHx8ICFm
cmFtZS0+dHJlZSgpLT5maW5kKGZyYW1lTmFtZSkpKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKworICAgIC8vIEdldCB0aGUgdGFyZ2V0IGZyYW1lIGZvciB0aGUgc3BlY2lhbCBjYXNl
cyBvZiBfdG9wIGFuZCBfcGFyZW50LiAgSW4gdGhvc2UKKyAgICAvLyBjYXNlcywgd2UgY2FuIHNj
aGVkdWxlIGEgbG9jYXRpb24gY2hhbmdlIHJpZ2h0IG5vdyBhbmQgcmV0dXJuIGVhcmx5LgorICAg
IGJvb2wgdG9wT3JQYXJlbnQgPSBmYWxzZTsKKyAgICBpZiAoZnJhbWVOYW1lID09ICJfdG9wIikg
eworICAgICAgICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRvcCgpOworICAgICAgICB0b3BPclBh
cmVudCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChmcmFtZU5hbWUgPT0gIl9wYXJlbnQiKSB7Cisg
ICAgICAgIGlmIChGcmFtZSogcGFyZW50ID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCisgICAg
ICAgICAgICBmcmFtZSA9IHBhcmVudDsKKyAgICAgICAgaWYgKCFhY3RpdmVGcmFtZS0+bG9hZGVy
KCktPnNob3VsZEFsbG93TmF2aWdhdGlvbihmcmFtZSkpCisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgdG9wT3JQYXJlbnQgPSB0cnVlOworICAgIH0KKyAgICBpZiAo
dG9wT3JQYXJlbnQpIHsKKyAgICAgICAgU3RyaW5nIGNvbXBsZXRlZFVSTDsKKyAgICAgICAgaWYg
KCF1cmxTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29tcGxldGVkVVJMID0gYWN0aXZl
RnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybFN0cmluZyk7CisKKyAgICAgICAgY29u
c3QgV2luZG93KiB0YXJnZXRlZFdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUp
OworICAgICAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc0VtcHR5KCkgJiYgKCFjb21wbGV0ZWRVUkwu
c3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgKHRhcmdldGVkV2luZG93ICYmIHRh
cmdldGVkV2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkpIHsKKyAgICAgICAgICAgIGJv
b2wgdXNlckdlc3R1cmUgPSBhY3RpdmVGcmFtZS0+c2NyaXB0UHJveHkoKS0+cHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCk7CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRp
b25DaGFuZ2UoY29tcGxldGVkVVJMLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVm
ZXJyZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
V2luZG93OjpyZXRyaWV2ZShmcmFtZSk7CisgICAgfQorCisgICAgLy8gSW4gdGhlIGNhc2Ugb2Yg
YSBuYW1lZCBmcmFtZSBvciBhIG5ldyB3aW5kb3csIHdlJ2xsIHVzZSB0aGUgY3JlYXRlV2luZG93
KCkgaGVscGVyCisgICAgV2luZG93RmVhdHVyZXMgd2luZG93RmVhdHVyZXModmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzWzJdKSk7CisgICAgRmxvYXRSZWN0
IHdpbmRvd1JlY3Qod2luZG93RmVhdHVyZXMueCwgd2luZG93RmVhdHVyZXMueSwgd2luZG93RmVh
dHVyZXMud2lkdGgsIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCk7CisgICAgV2ViQ29yZTo6RE9NV2lu
ZG93OjphZGp1c3RXaW5kb3dSZWN0KHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKSksIHdpbmRvd1JlY3QsIHdpbmRvd1JlY3QpOworCisgICAgd2luZG93RmVhdHVy
ZXMueCA9IHdpbmRvd1JlY3QueCgpOworICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSB3aW5kb3dSZWN0
LnkoKTsKKyAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgPSB3aW5kb3dSZWN0LmhlaWdodCgpOwor
ICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoID0gd2luZG93UmVjdC53aWR0aCgpOworCisgICAgZnJh
bWUgPSBjcmVhdGVXaW5kb3coZXhlYywgZnJhbWUsIHVybFN0cmluZywgZnJhbWVOYW1lLCB3aW5k
b3dGZWF0dXJlcywgMCk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKworICAgIHJldHVybiBXaW5kb3c6OnJldHJpZXZlKGZyYW1lKTsgLy8gZ2xvYmFs
IG9iamVjdAorfQorCitKU1ZhbHVlKiBXaW5kb3dQcm90b0Z1bmNTZXRUaW1lb3V0OjpjYWxsQXNG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBh
cmdzKQoreworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJldpbmRvdzo6aW5mbykpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgV2luZG93KiB3aW5k
b3cgPSBzdGF0aWNfY2FzdDxXaW5kb3cqPih0aGlzT2JqKTsKKworICAgIEpTVmFsdWUqIHYgPSBh
cmdzWzBdOworICAgIGlmICh2LT5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4ganNOdW1iZXIo
d2luZG93LT5pbnN0YWxsVGltZW91dCh2LT50b1N0cmluZyhleGVjKSwgYXJnc1sxXS0+dG9JbnQz
MihleGVjKSwgdHJ1ZSAvKnNpbmdsZSBzaG90Ki8pKTsKKyAgICBpZiAodi0+aXNPYmplY3QoKSAm
JiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5pbXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICAg
IExpc3QgYXJnc1RhaWw7CisgICAgICAgIGFyZ3MuZ2V0U2xpY2UoMiwgYXJnc1RhaWwpOworICAg
ICAgICByZXR1cm4ganNOdW1iZXIod2luZG93LT5pbnN0YWxsVGltZW91dCh2LCBhcmdzVGFpbCwg
YXJnc1sxXS0+dG9JbnQzMihleGVjKSwgdHJ1ZSAvKnNpbmdsZSBzaG90Ki8pKTsKKyAgICB9CisK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSogV2luZG93UHJvdG9GdW5j
Q2xlYXJUaW1lb3V0OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIC8vIEFsc28gdGhlIGltcGxlbWVudGF0
aW9uIGZvciB3aW5kb3cuY2xlYXJJbnRlcnZhbCgpCisKKyAgICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKCZXaW5kb3c6OmluZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOworICAgIFdpbmRvdyogd2luZG93ID0gc3RhdGljX2Nhc3Q8V2luZG93Kj4odGhpc09i
aik7CisKKyAgICB3aW5kb3ctPmNsZWFyVGltZW91dChhcmdzWzBdLT50b0ludDMyKGV4ZWMpKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSogV2luZG93UHJvdG9GdW5j
U2V0SW50ZXJ2YWw6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRo
aXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
V2luZG93OjppbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKKyAgICBXaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PFdpbmRvdyo+KHRoaXNPYmopOwor
CisgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDIpIHsKKyAgICAgICAgSlNWYWx1ZSogdiA9IGFyZ3Nb
MF07CisgICAgICAgIGludCBkZWxheSA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CisgICAgICAg
IGlmICh2LT5pc1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHdpbmRvdy0+
aW5zdGFsbFRpbWVvdXQodi0+dG9TdHJpbmcoZXhlYyksIGRlbGF5LCBmYWxzZSkpOworICAgICAg
ICBpZiAodi0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5pbXBsZW1l
bnRzQ2FsbCgpKSB7CisgICAgICAgICAgICBMaXN0IGFyZ3NUYWlsOworICAgICAgICAgICAgYXJn
cy5nZXRTbGljZSgyLCBhcmdzVGFpbCk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIod2lu
ZG93LT5pbnN0YWxsVGltZW91dCh2LCBhcmdzVGFpbCwgZGVsYXksIGZhbHNlKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworfQorCitKU1ZhbHVlKiBX
aW5kb3dQcm90b0Z1bmNBZGRFdmVudExpc3RlbmVyOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIGlmICgh
dGhpc09iai0+aW5oZXJpdHMoJldpbmRvdzo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxX
aW5kb3cqPih0aGlzT2JqKTsKKyAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmltcGwoKS0+ZnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKwor
ICAgIGlmIChKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gd2luZG93LT5maW5kT3JDcmVhdGVK
U0V2ZW50TGlzdGVuZXIoYXJnc1sxXSkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBm
cmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvYy0+YWRkV2luZG93RXZlbnRMaXN0ZW5l
cihBdG9taWNTdHJpbmcoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpLCBsaXN0ZW5lciwgYXJnc1sy
XS0+dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICB9CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
K30KKworSlNWYWx1ZSogV2luZG93UHJvdG9GdW5jUmVtb3ZlRXZlbnRMaXN0ZW5lcjo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYg
YXJncykKK3sKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZXaW5kb3c6OmluZm8pKQorICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIFdpbmRvdyogd2lu
ZG93ID0gc3RhdGljX2Nhc3Q8V2luZG93Kj4odGhpc09iaik7CisgICAgRnJhbWUqIGZyYW1lID0g
d2luZG93LT5pbXBsKCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisKKyAgICBpZiAoSlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHdp
bmRvdy0+ZmluZEpTRXZlbnRMaXN0ZW5lcihhcmdzWzFdKSkgeworICAgICAgICBpZiAoRG9jdW1l
bnQqIGRvYyA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jLT5yZW1vdmVXaW5k
b3dFdmVudExpc3RlbmVyKEF0b21pY1N0cmluZyhhcmdzWzBdLT50b1N0cmluZyhleGVjKSksIGxp
c3RlbmVyLCBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOworICAgIH0KKworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlKiBXaW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFs
b2c6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCit7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmV2luZG93Ojpp
bmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICBX
aW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PFdpbmRvdyo+KHRoaXNPYmopOworICAgIEZyYW1l
KiBmcmFtZSA9IHdpbmRvdy0+aW1wbCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgcmV0dXJuIHNob3dNb2RhbERpYWxvZyhl
eGVjLCBmcmFtZSwgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBh
cmdzWzBdKSwgYXJnc1sxXSwgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhl
eGVjLCBhcmdzWzJdKSk7Cit9CisKK0pTVmFsdWUqIFdpbmRvd1Byb3RvRnVuY05vdEltcGxlbWVu
dGVkOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBMaXN0JiBhcmdzKQoreworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJldpbmRvdzo6
aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwordm9pZCBXaW5kb3c6OnNldFJldHVyblZhbHVl
U2xvdChKU1ZhbHVlKiogc2xvdCkKK3sKKyAgICBkLT5tX3JldHVyblZhbHVlU2xvdCA9IHNsb3Q7
Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gdGltZW91dHMgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK3ZvaWQgV2luZG93OjpjbGVhckFsbFRpbWVvdXRzKCkKK3sKKyAgICBkZWxldGVB
bGxWYWx1ZXMoZC0+bV90aW1lb3V0cyk7CisgICAgZC0+bV90aW1lb3V0cy5jbGVhcigpOworfQor
CitpbnQgV2luZG93OjppbnN0YWxsVGltZW91dChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb24qIGEs
IGludCB0LCBib29sIHNpbmdsZVNob3QpCit7CisgICAgaW50IHRpbWVvdXRJZCA9ICsrbGFzdFVz
ZWRUaW1lb3V0SWQ7CisKKyAgICAvLyBhdm9pZCB3cmFwYXJvdW5kIGdvaW5nIG5lZ2F0aXZlIG9u
IHVzCisgICAgaWYgKHRpbWVvdXRJZCA8PSAwKQorICAgICAgICB0aW1lb3V0SWQgPSAxOworCisg
ICAgaW50IG5lc3RMZXZlbCA9IHRpbWVyTmVzdGluZ0xldmVsICsgMTsKKyAgICBET01XaW5kb3dU
aW1lciogdGltZXIgPSBuZXcgRE9NV2luZG93VGltZXIodGltZW91dElkLCBuZXN0TGV2ZWwsIHRo
aXMsIGEpOworICAgIEFTU0VSVCghZC0+bV90aW1lb3V0cy5nZXQodGltZW91dElkKSk7CisgICAg
ZC0+bV90aW1lb3V0cy5zZXQodGltZW91dElkLCB0aW1lcik7CisgICAgLy8gVXNlIGEgbWluaW11
bSBpbnRlcnZhbCBvZiAxMCBtcyB0byBtYXRjaCBvdGhlciBicm93c2VycywgYnV0IG9ubHkgb25j
ZSB3ZSd2ZQorICAgIC8vIG5lc3RlZCBlbm91Z2ggdG8gbm90aWNlIHRoYXQgd2UncmUgcmVwZWF0
aW5nLgorICAgIC8vIEZhc3RlciB0aW1lcnMgbWlnaHQgYmUgImJldHRlciIsIGJ1dCB0aGV5J3Jl
IGluY29tcGF0aWJsZS4KKyAgICBkb3VibGUgaW50ZXJ2YWwgPSBtYXgoMC4wMDEsIHQgKiAwLjAw
MSk7CisgICAgaWYgKGludGVydmFsIDwgY01pbmltdW1UaW1lckludGVydmFsICYmIG5lc3RMZXZl
bCA+PSBjTWF4VGltZXJOZXN0aW5nTGV2ZWwpCisgICAgICAgIGludGVydmFsID0gY01pbmltdW1U
aW1lckludGVydmFsOworICAgIGlmIChzaW5nbGVTaG90KQorICAgICAgICB0aW1lci0+c3RhcnRP
bmVTaG90KGludGVydmFsKTsKKyAgICBlbHNlCisgICAgICAgIHRpbWVyLT5zdGFydFJlcGVhdGlu
ZyhpbnRlcnZhbCk7CisgICAgcmV0dXJuIHRpbWVvdXRJZDsKK30KKworaW50IFdpbmRvdzo6aW5z
dGFsbFRpbWVvdXQoY29uc3QgVVN0cmluZyYgaGFuZGxlciwgaW50IHQsIGJvb2wgc2luZ2xlU2hv
dCkKK3sKKyAgICByZXR1cm4gaW5zdGFsbFRpbWVvdXQobmV3IFdlYkNvcmU6OlNjaGVkdWxlZEFj
dGlvbihoYW5kbGVyKSwgdCwgc2luZ2xlU2hvdCk7Cit9CisKK2ludCBXaW5kb3c6Omluc3RhbGxU
aW1lb3V0KEpTVmFsdWUqIGZ1bmMsIGNvbnN0IExpc3QmIGFyZ3MsIGludCB0LCBib29sIHNpbmds
ZVNob3QpCit7CisgICAgcmV0dXJuIGluc3RhbGxUaW1lb3V0KG5ldyBXZWJDb3JlOjpTY2hlZHVs
ZWRBY3Rpb24oZnVuYywgYXJncyksIHQsIHNpbmdsZVNob3QpOworfQorCitXZWJDb3JlOjpQYXVz
ZWRUaW1lb3V0cyogV2luZG93OjpwYXVzZVRpbWVvdXRzKCkKK3sKKyAgICBzaXplX3QgY291bnQg
PSBkLT5tX3RpbWVvdXRzLnNpemUoKTsKKyAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBQYXVzZWRUaW1lb3V0KiB0ID0gbmV3IFBhdXNlZFRpbWVvdXQgW2NvdW50
XTsKKyAgICBQYXVzZWRUaW1lb3V0cyogcmVzdWx0ID0gbmV3IFBhdXNlZFRpbWVvdXRzKHQsIGNv
dW50KTsKKworICAgIFdpbmRvd1ByaXZhdGU6OlRpbWVvdXRzTWFwOjppdGVyYXRvciBpdCA9IGQt
Pm1fdGltZW91dHMuYmVnaW4oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBjb3VudDsg
KytpLCArK2l0KSB7CisgICAgICAgIGludCB0aW1lb3V0SWQgPSBpdC0+Zmlyc3Q7CisgICAgICAg
IERPTVdpbmRvd1RpbWVyKiB0aW1lciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHRbaV0udGltZW91
dElkID0gdGltZW91dElkOworICAgICAgICB0W2ldLm5lc3RpbmdMZXZlbCA9IHRpbWVyLT5uZXN0
aW5nTGV2ZWwoKTsKKyAgICAgICAgdFtpXS5uZXh0RmlyZUludGVydmFsID0gdGltZXItPm5leHRG
aXJlSW50ZXJ2YWwoKTsKKyAgICAgICAgdFtpXS5yZXBlYXRJbnRlcnZhbCA9IHRpbWVyLT5yZXBl
YXRJbnRlcnZhbCgpOworICAgICAgICB0W2ldLmFjdGlvbiA9IHRpbWVyLT50YWtlQWN0aW9uKCk7
CisgICAgfQorICAgIEFTU0VSVChpdCA9PSBkLT5tX3RpbWVvdXRzLmVuZCgpKTsKKworICAgIGRl
bGV0ZUFsbFZhbHVlcyhkLT5tX3RpbWVvdXRzKTsKKyAgICBkLT5tX3RpbWVvdXRzLmNsZWFyKCk7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdpbmRvdzo6cmVzdW1lVGltZW91dHMo
UGF1c2VkVGltZW91dHMqIHRpbWVvdXRzKQoreworICAgIGlmICghdGltZW91dHMpCisgICAgICAg
IHJldHVybjsKKyAgICBzaXplX3QgY291bnQgPSB0aW1lb3V0cy0+bnVtVGltZW91dHMoKTsKKyAg
ICBQYXVzZWRUaW1lb3V0KiBhcnJheSA9IHRpbWVvdXRzLT50YWtlVGltZW91dHMoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CisgICAgICAgIGludCB0aW1lb3V0
SWQgPSBhcnJheVtpXS50aW1lb3V0SWQ7CisgICAgICAgIERPTVdpbmRvd1RpbWVyKiB0aW1lciA9
IG5ldyBET01XaW5kb3dUaW1lcih0aW1lb3V0SWQsIGFycmF5W2ldLm5lc3RpbmdMZXZlbCwgdGhp
cywgYXJyYXlbaV0uYWN0aW9uKTsKKyAgICAgICAgZC0+bV90aW1lb3V0cy5zZXQodGltZW91dElk
LCB0aW1lcik7CisgICAgICAgIHRpbWVyLT5zdGFydChhcnJheVtpXS5uZXh0RmlyZUludGVydmFs
LCBhcnJheVtpXS5yZXBlYXRJbnRlcnZhbCk7CisgICAgfQorICAgIGRlbGV0ZSBbXSBhcnJheTsK
K30KKwordm9pZCBXaW5kb3c6OmNsZWFyVGltZW91dChpbnQgdGltZW91dElkLCBib29sIGRlbEFj
dGlvbikKK3sKKyAgICAvLyB0aW1lb3V0IElEcyBoYXZlIHRvIGJlIHBvc2l0aXZlLCBhbmQgMCBh
bmQgLTEgYXJlIHVuc2FmZSB0bworICAgIC8vIGV2ZW4gbG9vayB1cCBzaW5jZSB0aGV5IGFyZSB0
aGUgZW1wdHkgYW5kIGRlbGV0ZWQgdmFsdWUKKyAgICAvLyByZXNwZWN0aXZlbHkKKyAgICBpZiAo
dGltZW91dElkIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZSBkLT5tX3RpbWVv
dXRzLnRha2UodGltZW91dElkKTsKK30KKwordm9pZCBXaW5kb3c6OnRpbWVyRmlyZWQoRE9NV2lu
ZG93VGltZXIqIHRpbWVyKQoreworICAgIC8vIFNpbXBsZSBjYXNlIGZvciBub24tb25lLXNob3Qg
dGltZXJzLgorICAgIGlmICh0aW1lci0+aXNBY3RpdmUoKSkgeworICAgICAgICBpbnQgdGltZW91
dElkID0gdGltZXItPnRpbWVvdXRJZCgpOworCisgICAgICAgIHRpbWVyLT5hY3Rpb24oKS0+ZXhl
Y3V0ZSh0aGlzKTsKKyAgICAgICAgaWYgKGQtPm1fdGltZW91dHMuY29udGFpbnModGltZW91dElk
KSAmJiB0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKSAmJiB0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKSA8
IGNNaW5pbXVtVGltZXJJbnRlcnZhbCkgeworICAgICAgICAgICAgdGltZXItPnNldE5lc3RpbmdM
ZXZlbCh0aW1lci0+bmVzdGluZ0xldmVsKCkgKyAxKTsKKyAgICAgICAgICAgIGlmICh0aW1lci0+
bmVzdGluZ0xldmVsKCkgPj0gY01heFRpbWVyTmVzdGluZ0xldmVsKQorICAgICAgICAgICAgICAg
IHRpbWVyLT5hdWdtZW50UmVwZWF0SW50ZXJ2YWwoY01pbmltdW1UaW1lckludGVydmFsIC0gdGlt
ZXItPnJlcGVhdEludGVydmFsKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBEZWxldGUgdGltZXIgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9uIGZvciBv
bmUtc2hvdCB0aW1lcnMuCisgICAgV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24gPSB0
aW1lci0+dGFrZUFjdGlvbigpOworICAgIGQtPm1fdGltZW91dHMucmVtb3ZlKHRpbWVyLT50aW1l
b3V0SWQoKSk7CisgICAgZGVsZXRlIHRpbWVyOworICAgIGFjdGlvbi0+ZXhlY3V0ZSh0aGlzKTsK
KworICAgIEpTTG9jayBsb2NrOworICAgIGRlbGV0ZSBhY3Rpb247Cit9CisKK3ZvaWQgV2luZG93
OjpkaXNjb25uZWN0RnJhbWUoKQoreworICAgIGNsZWFyQWxsVGltZW91dHMoKTsKKyAgICBpZiAo
ZC0+bG9jKQorICAgICAgICBkLT5sb2MtPm1fZnJhbWUgPSAwOworfQorCitXaW5kb3c6Okxpc3Rl
bmVyc01hcCYgV2luZG93Ojpqc0V2ZW50TGlzdGVuZXJzKCkKK3sKKyAgICByZXR1cm4gZC0+anNF
dmVudExpc3RlbmVyczsKK30KKworV2luZG93OjpMaXN0ZW5lcnNNYXAmIFdpbmRvdzo6anNIVE1M
RXZlbnRMaXN0ZW5lcnMoKQoreworICAgIHJldHVybiBkLT5qc0hUTUxFdmVudExpc3RlbmVyczsK
K30KKworV2luZG93OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgV2luZG93Ojpqc1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcnMoKQoreworICAgIHJldHVybiBkLT5qc1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcnM7Cit9CisKK1dpbmRvdzo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIFdpbmRvdzo6
anNVbnByb3RlY3RlZEhUTUxFdmVudExpc3RlbmVycygpCit7CisgICAgcmV0dXJuIGQtPmpzVW5w
cm90ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5lcnM7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8g
TG9jYXRpb24gT2JqZWN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitjb25zdCBDbGFzc0lu
Zm8gTG9jYXRpb246OmluZm8gPSB7ICJMb2NhdGlvbiIsIDAsICZMb2NhdGlvblRhYmxlIH07Cisv
KgorQGJlZ2luIExvY2F0aW9uVGFibGUgMTIKKyAgYXNzaWduICAgICAgICAmTG9jYXRpb25Qcm90
b0Z1bmNBc3NpZ246OmNyZWF0ZSAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCisgIGhhc2gg
ICAgICAgICAgTG9jYXRpb246Okhhc2ggICAgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxl
dGUKKyAgaG9zdCAgICAgICAgICBMb2NhdGlvbjo6SG9zdCAgICAgICAgICAgICAgICAgICAgICAg
ICAgRG9udERlbGV0ZQorICBob3N0bmFtZSAgICAgIExvY2F0aW9uOjpIb3N0bmFtZSAgICAgICAg
ICAgICAgICAgICAgICBEb250RGVsZXRlCisgIGhyZWYgICAgICAgICAgTG9jYXRpb246OkhyZWYg
ICAgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKKyAgcGF0aG5hbWUgICAgICBMb2Nh
dGlvbjo6UGF0aG5hbWUgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorICBwb3J0ICAg
ICAgICAgIExvY2F0aW9uOjpQb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRl
CisgIHByb3RvY29sICAgICAgTG9jYXRpb246OlByb3RvY29sICAgICAgICAgICAgICAgICAgICAg
IERvbnREZWxldGUKKyAgc2VhcmNoICAgICAgICBMb2NhdGlvbjo6U2VhcmNoICAgICAgICAgICAg
ICAgICAgICAgICAgRG9udERlbGV0ZQorICB0b1N0cmluZyAgICAgICZMb2NhdGlvblByb3RvRnVu
Y1RvU3RyaW5nOjpjcmVhdGUgICAgICBEb250RW51bXxEb250RGVsZXRlfEZ1bmN0aW9uIDAKKyAg
cmVwbGFjZSAgICAgICAmTG9jYXRpb25Qcm90b0Z1bmNSZXBsYWNlOjpjcmVhdGUgICAgICAgRG9u
dERlbGV0ZXxGdW5jdGlvbiAxCisgIHJlbG9hZCAgICAgICAgJkxvY2F0aW9uUHJvdG9GdW5jUmVs
b2FkOjpjcmVhdGUgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAorQGVuZAorKi8KKworTG9j
YXRpb246OkxvY2F0aW9uKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9
CisKK0pTVmFsdWUgKkxvY2F0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICBLVVJMIHVybCA9IG1fZnJhbWUtPmxvYWRlcigpLT51cmwo
KTsKKyAgc3dpdGNoICh0b2tlbikgeworICBjYXNlIEhhc2g6CisgICAgcmV0dXJuIGpzU3RyaW5n
KHVybC5yZWYoKS5pc051bGwoKSA/ICIiIDogIiMiICsgdXJsLnJlZigpKTsKKyAgY2FzZSBIb3N0
OiB7CisgICAgLy8gTm90ZTogdGhpcyBpcyB0aGUgSUUgc3BlYy4gVGhlIE5TIHNwZWMgc3dhcHMg
dGhlIHR3bywgaXQgc2F5cworICAgIC8vICJUaGUgaG9zdG5hbWUgcHJvcGVydHkgaXMgdGhlIGNv
bmNhdGVuYXRpb24gb2YgdGhlIGhvc3QgYW5kIHBvcnQgcHJvcGVydGllcywgc2VwYXJhdGVkIGJ5
IGEgY29sb24uIgorICAgIC8vIEJsZWguCisgICAgVVN0cmluZyBzdHIgPSB1cmwuaG9zdCgpOwor
ICAgIGlmICh1cmwucG9ydCgpKQorICAgICAgICBzdHIgKz0gIjoiICsgU3RyaW5nOjpudW1iZXIo
KGludCl1cmwucG9ydCgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoc3RyKTsKKyAgfQorICBjYXNl
IEhvc3RuYW1lOgorICAgIHJldHVybiBqc1N0cmluZyh1cmwuaG9zdCgpKTsKKyAgY2FzZSBIcmVm
OgorICAgIGlmICghdXJsLmhhc1BhdGgoKSkKKyAgICAgIHJldHVybiBqc1N0cmluZyh1cmwucHJl
dHR5VVJMKCkgKyAiLyIpOworICAgIHJldHVybiBqc1N0cmluZyh1cmwucHJldHR5VVJMKCkpOwor
ICBjYXNlIFBhdGhuYW1lOgorICAgIHJldHVybiBqc1N0cmluZyh1cmwucGF0aCgpLmlzRW1wdHko
KSA/ICIvIiA6IHVybC5wYXRoKCkpOworICBjYXNlIFBvcnQ6CisgICAgcmV0dXJuIGpzU3RyaW5n
KHVybC5wb3J0KCkgPyBTdHJpbmc6Om51bWJlcigoaW50KXVybC5wb3J0KCkpIDogIiIpOworICBj
YXNlIFByb3RvY29sOgorICAgIHJldHVybiBqc1N0cmluZyh1cmwucHJvdG9jb2woKSArICI6Iik7
CisgIGNhc2UgU2VhcmNoOgorICAgIHJldHVybiBqc1N0cmluZyh1cmwucXVlcnkoKSk7CisgIGRl
ZmF1bHQ6CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgIH0KK30KKworYm9vbCBMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgIGlmICghbV9mcmFtZSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgY29uc3QgV2lu
ZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KG1fZnJhbWUpOworCisgIGNvbnN0
IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgmTG9jYXRpb25UYWJsZSwgcHJv
cGVydHlOYW1lKTsKKyAgaWYgKCFlbnRyeSB8fCAhKGVudHJ5LT5hdHRyICYgS0pTOjpGdW5jdGlv
bikgfHwgKGVudHJ5LT52YWx1ZS5mdW5jdGlvblZhbHVlICE9ICZMb2NhdGlvblByb3RvRnVuY1Jl
cGxhY2U6OmNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgZW50cnktPnZhbHVlLmZ1bmN0aW9uVmFsdWUgIT0gJkxvY2F0aW9uUHJvdG9G
dW5jUmVsb2FkOjpjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIGVudHJ5LT52YWx1ZS5mdW5jdGlvblZhbHVlICE9ICZMb2NhdGlvblBy
b3RvRnVuY0Fzc2lnbjo6Y3JlYXRlKSkgIHsKKyAgICBpZiAoIXdpbmRvdyB8fCAhd2luZG93LT5h
bGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSB7CisgICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsK
KyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorCisgIHJldHVybiBnZXRTdGF0aWNQcm9w
ZXJ0eVNsb3Q8TG9jYXRpb24sIEpTT2JqZWN0PihleGVjLCAmTG9jYXRpb25UYWJsZSwgdGhpcywg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordm9pZCBMb2NhdGlvbjo6cHV0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgaW50
IGF0dHIpCit7CisgIGlmICghbV9mcmFtZSkKKyAgICByZXR1cm47CisKKyAgRGVwcmVjYXRlZFN0
cmluZyBzdHIgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CisgIEtVUkwgdXJsID0gbV9mcmFtZS0+
bG9hZGVyKCktPnVybCgpOworICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmll
dmVXaW5kb3cobV9mcmFtZSk7CisgIGJvb2wgc2FtZURvbWFpbkFjY2VzcyA9IHdpbmRvdyAmJiB3
aW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYyk7CisKKyAgY29uc3QgSGFzaEVudHJ5KiBlbnRy
eSA9IExvb2t1cDo6ZmluZEVudHJ5KCZMb2NhdGlvblRhYmxlLCBwcm9wZXJ0eU5hbWUpOworCisg
IGlmIChlbnRyeSkgeworICAgICAgLy8gY3Jvc3MtZG9tYWluIGFjY2VzcyB0byB0aGUgbG9jYXRp
b24gaXMgYWxsb3dlZCB3aGVuIGFzc2lnbmluZyB0aGUgd2hvbGUgbG9jYXRpb24sCisgICAgICAv
LyBidXQgbm90IHdoZW4gYXNzaWduaW5nIHRoZSBpbmRpdmlkdWFsIHBpZWNlcywgc2luY2UgdGhh
dCBtaWdodCBpbmFkdmVydGVudGx5CisgICAgICAvLyBkaXNjbG9zZSBvdGhlciBwYXJ0cyBvZiB0
aGUgb3JpZ2luYWwgbG9jYXRpb24uCisgICAgICBpZiAoZW50cnktPnZhbHVlLmludFZhbHVlICE9
IEhyZWYgJiYgIXNhbWVEb21haW5BY2Nlc3MpCisgICAgICAgICAgcmV0dXJuOworCisgICAgICBz
d2l0Y2ggKGVudHJ5LT52YWx1ZS5pbnRWYWx1ZSkgeworICAgICAgY2FzZSBIcmVmOiB7CisgICAg
ICAgICAgRnJhbWUqIGZyYW1lID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+aW1wbCgp
LT5mcmFtZSgpOworICAgICAgICAgIGlmICghZnJhbWUpCisgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKG1f
ZnJhbWUpKQorICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgdXJsID0gZnJhbWUtPmxv
YWRlcigpLT5jb21wbGV0ZVVSTChzdHIpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAg
ICAgY2FzZSBIYXNoOiB7CisgICAgICAgICAgaWYgKHN0ci5zdGFydHNXaXRoKCIjIikpCisgICAg
ICAgICAgICAgIHN0ciA9IHN0ci5taWQoMSk7CisgICAgICAgICAgaWYgKHVybC5yZWYoKSA9PSBz
dHIpCisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB1cmwuc2V0UmVmKHN0cik7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEhvc3Q6IHsKKyAgICAgICAgICB1
cmwuc2V0SG9zdEFuZFBvcnQoc3RyKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGNhc2UgSG9zdG5hbWU6CisgICAgICAgICAgdXJsLnNldEhvc3Qoc3RyKTsKKyAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgUGF0aG5hbWU6CisgICAgICAgICAgdXJsLnNldFBhdGgoc3RyKTsK
KyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUG9ydDoKKyAgICAgICAgICB1cmwuc2V0UG9y
dChzdHIudG9VSW50KCkpOworICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQcm90b2NvbDoK
KyAgICAgICAgICB1cmwuc2V0UHJvdG9jb2woc3RyKTsKKyAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgU2VhcmNoOgorICAgICAgICAgIHVybC5zZXRRdWVyeShzdHIpOworICAgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAvLyBEaXNhbGxvdyBjaGFuZ2luZyBvdGhl
ciBwcm9wZXJ0aWVzIGluIExvY2F0aW9uVGFibGUuIGUuZy4sICJ3aW5kb3cubG9jYXRpb24udG9T
dHJpbmcgPSAuLi4iLgorICAgICAgICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjcyMD4KKyAgICAgICAgICByZXR1cm47CisgICAgICB9CisgIH0gZWxzZSB7
CisgICAgICBpZiAoc2FtZURvbWFpbkFjY2VzcykKKyAgICAgICAgICBKU09iamVjdDo6cHV0KGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOworICAgICAgcmV0dXJuOworICB9CisKKyAg
RnJhbWUqIGFjdGl2ZUZyYW1lID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+aW1wbCgp
LT5mcmFtZSgpOworICBpZiAoIXVybC5kZXByZWNhdGVkU3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2
YXNjcmlwdDoiLCBmYWxzZSkgfHwgc2FtZURvbWFpbkFjY2VzcykgeworICAgIGJvb2wgdXNlckdl
c3R1cmUgPSBhY3RpdmVGcmFtZS0+c2NyaXB0UHJveHkoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UodXJsLnN0
cmluZygpLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgZmFsc2Us
IHVzZXJHZXN0dXJlKTsKKyAgfQorfQorCitKU1ZhbHVlKiBMb2NhdGlvblByb3RvRnVuY1JlcGxh
Y2U6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCit7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTG9jYXRpb246
OmluZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAg
IExvY2F0aW9uKiBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PExvY2F0aW9uKj4odGhpc09iaik7Cisg
ICAgRnJhbWUqIGZyYW1lID0gbG9jYXRpb24tPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBX
aW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7CisgICAgaWYgKGFj
dGl2ZUZyYW1lKSB7CisgICAgICAgIGlmICghYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5zaG91bGRB
bGxvd05hdmlnYXRpb24oZnJhbWUpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7
CisgICAgICAgIGNvbnN0IFdpbmRvdyogd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhm
cmFtZSk7CisgICAgICAgIGlmICghc3RyLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2Up
IHx8ICh3aW5kb3cgJiYgd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkgeworICAgICAg
ICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHRQcm94eSgpLT5wcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1
bGVMb2NhdGlvbkNoYW5nZShhY3RpdmVGcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKHN0ciku
c3RyaW5nKCksIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCB0cnVl
LCB1c2VyR2VzdHVyZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKK30KKworSlNWYWx1ZSogTG9jYXRpb25Qcm90b0Z1bmNSZWxvYWQ6OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3Mp
Cit7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTG9jYXRpb246OmluZm8pKQorICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIExvY2F0aW9uKiBsb2Nh
dGlvbiA9IHN0YXRpY19jYXN0PExvY2F0aW9uKj4odGhpc09iaik7CisgICAgRnJhbWUqIGZyYW1l
ID0gbG9jYXRpb24tPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisKKyAgICBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5k
b3coZnJhbWUpOworICAgIGlmICghd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT51
cmwoKS5kZXByZWNhdGVkU3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkg
fHwgKHdpbmRvdyAmJiB3aW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpKSB7CisgICAgICAg
IGJvb2wgdXNlckdlc3R1cmUgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCkt
PmZyYW1lKCktPnNjcmlwdFByb3h5KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgICAg
ICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlUmVmcmVzaCh1c2VyR2VzdHVyZSk7CisgICAgfQor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlKiBMb2NhdGlvblByb3RvRnVu
Y0Fzc2lnbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZMb2Nh
dGlvbjo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CisgICAgTG9jYXRpb24qIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8TG9jYXRpb24qPih0aGlzT2Jq
KTsKKyAgICBGcmFtZSogZnJhbWUgPSBsb2NhdGlvbi0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEZyYW1lKiBhY3RpdmVGcmFt
ZSA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmltcGwoKS0+ZnJhbWUoKTsKKyAgICBp
ZiAoYWN0aXZlRnJhbWUpIHsKKyAgICAgICAgaWYgKCFhY3RpdmVGcmFtZS0+bG9hZGVyKCktPnNo
b3VsZEFsbG93TmF2aWdhdGlvbihmcmFtZSkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgY29uc3QgV2luZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2lu
ZG93KGZyYW1lKTsKKyAgICAgICAgU3RyaW5nIGRzdFVybCA9IGFjdGl2ZUZyYW1lLT5sb2FkZXIo
KS0+Y29tcGxldGVVUkwoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpLnN0cmluZygpOworICAgICAg
ICBpZiAoIWRzdFVybC5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCAod2luZG93
ICYmIHdpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkpIHsKKyAgICAgICAgICAgIGJvb2wg
dXNlckdlc3R1cmUgPSBhY3RpdmVGcmFtZS0+c2NyaXB0UHJveHkoKS0+cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCk7CisgICAgICAgICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0
aGlzIEpTIHdhcyBjYWxsZWQgdmlhIGEgdXNlciBnZXN0dXJlCisgICAgICAgICAgICBmcmFtZS0+
bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoZHN0VXJsLCBhY3RpdmVGcmFtZS0+bG9h
ZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlKiBMb2Nh
dGlvblByb3RvRnVuY1RvU3RyaW5nOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIGlmICghdGhpc09iai0+
aW5oZXJpdHMoJkxvY2F0aW9uOjppbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKKyAgICBMb2NhdGlvbiogbG9jYXRpb24gPSBzdGF0aWNfY2FzdDxMb2Nh
dGlvbio+KHRoaXNPYmopOworICAgIEZyYW1lKiBmcmFtZSA9IGxvY2F0aW9uLT5mcmFtZSgpOwor
ICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgY29u
c3QgS1VSTCYgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKKyAgICBpZiAoIXVybC5oYXNQ
YXRoKCkpCisgICAgICAgIHJldHVybiBqc1N0cmluZyh1cmwucHJldHR5VVJMKCkgKyAiLyIpOwor
ICAgIHJldHVybiBqc1N0cmluZyh1cmwucHJldHR5VVJMKCkpOworfQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworCit2b2lkIERPTVdpbmRvd1RpbWVyOjpmaXJlZCgpCit7CisgICAgdGltZXJOZXN0
aW5nTGV2ZWwgPSBtX25lc3RpbmdMZXZlbDsKKyAgICBtX29iamVjdC0+dGltZXJGaXJlZCh0aGlz
KTsKKyAgICB0aW1lck5lc3RpbmdMZXZlbCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEtKUwor
Cit1c2luZyBuYW1lc3BhY2UgS0pTOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFsdWUq
IHRvSlMoRXhlY1N0YXRlKiwgRE9NV2luZG93KiBkb21XaW5kb3cpCit7CisgICAgaWYgKCFkb21X
aW5kb3cpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb21X
aW5kb3ctPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OworICAgIHJldHVybiBXaW5kb3c6OnJldHJpZXZlKGZyYW1lKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwCShyZXZpc2lvbiAy
ODc5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDEzNjMgKzIyLDQ4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgImtqc193aW5kb3cuaCIKKyNpbmNsdWRlICJKU0xvY2F0aW9uLmgiCiAKLSNpbmNsdWRl
ICJCYXNlNjQuaCIKLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0j
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiSFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25Db25zdHJ1Y3Rvci5o
IgotI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiSlNFdmVudC5oIgotI2luY2x1
ZGUgIkpTSFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiSlNIVE1MQ29s
bGVjdGlvbi5oIgotI2luY2x1ZGUgIkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oIgot
I2luY2x1ZGUgIkpTWE1MSHR0cFJlcXVlc3QuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1TY3JlZW4uaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCi0jaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIldpbmRvd0Zl
YXR1cmVzLmgiCi0jaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKLSNpbmNsdWRlICJranNfY3NzLmgi
Ci0jaW5jbHVkZSAia2pzX2V2ZW50cy5oIgotI2luY2x1ZGUgImtqc19uYXZpZ2F0b3IuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLSNpbmNsdWRlICJKU1hT
TFRQcm9jZXNzb3IuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5n
IG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCi1uYW1lc3BhY2UgS0pTIHsKLQotc3RhdGljIGludCBs
YXN0VXNlZFRpbWVvdXRJZDsKLQotc3RhdGljIGludCB0aW1lck5lc3RpbmdMZXZlbCA9IDA7Ci1j
b25zdCBpbnQgY01heFRpbWVyTmVzdGluZ0xldmVsID0gNTsKLWNvbnN0IGRvdWJsZSBjTWluaW11
bVRpbWVySW50ZXJ2YWwgPSAwLjAxMDsKLQotc3RydWN0IFdpbmRvd1ByaXZhdGUgewotICAgIFdp
bmRvd1ByaXZhdGUoKQotICAgICAgICA6IGxvYygwKQotICAgICAgICAsIG1fZXZ0KDApCi0gICAg
ICAgICwgbV9yZXR1cm5WYWx1ZVNsb3QoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgV2luZG93OjpM
aXN0ZW5lcnNNYXAganNFdmVudExpc3RlbmVyczsKLSAgICBXaW5kb3c6Okxpc3RlbmVyc01hcCBq
c0hUTUxFdmVudExpc3RlbmVyczsKLSAgICBXaW5kb3c6OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFw
IGpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyczsKLSAgICBXaW5kb3c6OlVucHJvdGVjdGVkTGlz
dGVuZXJzTWFwIGpzVW5wcm90ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5lcnM7Ci0gICAgbXV0YWJsZSBM
b2NhdGlvbiogbG9jOwotICAgIFdlYkNvcmU6OkV2ZW50KiBtX2V2dDsKLSAgICBKU1ZhbHVlKiog
bV9yZXR1cm5WYWx1ZVNsb3Q7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01XaW5kb3dU
aW1lcio+IFRpbWVvdXRzTWFwOwotICAgIFRpbWVvdXRzTWFwIG1fdGltZW91dHM7Ci19OwotCi1j
bGFzcyBET01XaW5kb3dUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewotcHVibGljOgotICAgIERP
TVdpbmRvd1RpbWVyKGludCB0aW1lb3V0SWQsIGludCBuZXN0aW5nTGV2ZWwsIFdpbmRvdyogb2Jq
ZWN0LCBXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbikKLSAgICAgICAgOiBtX3RpbWVv
dXRJZCh0aW1lb3V0SWQpCi0gICAgICAgICwgbV9uZXN0aW5nTGV2ZWwobmVzdGluZ0xldmVsKQot
ICAgICAgICAsIG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX2FjdGlvbihhY3Rpb24pCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfkRPTVdpbmRvd1RpbWVyKCkKLSAgICB7Ci0gICAg
ICAgIEpTTG9jayBsb2NrOwotICAgICAgICBkZWxldGUgbV9hY3Rpb247Ci0gICAgfQotCi0gICAg
aW50IHRpbWVvdXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZW91dElkOyB9Ci0KLSAgICBpbnQg
bmVzdGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9uZXN0aW5nTGV2ZWw7IH0KLSAgICB2b2lk
IHNldE5lc3RpbmdMZXZlbChpbnQgbikgeyBtX25lc3RpbmdMZXZlbCA9IG47IH0KLQotICAgIFdl
YkNvcmU6OlNjaGVkdWxlZEFjdGlvbiogYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rpb247
IH0KLSAgICBXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb24qIHRha2VBY3Rpb24oKSB7IFdlYkNvcmU6
OlNjaGVkdWxlZEFjdGlvbiogYSA9IG1fYWN0aW9uOyBtX2FjdGlvbiA9IDA7IHJldHVybiBhOyB9
Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7Ci0KLSAgICBpbnQgbV90aW1l
b3V0SWQ7Ci0gICAgaW50IG1fbmVzdGluZ0xldmVsOwotICAgIFdpbmRvdyogbV9vYmplY3Q7Ci0g
ICAgV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uKiBtX2FjdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEtKUwotCi0jaW5jbHVkZSAia2pzX3dpbmRvdy5sdXQuaCIKLQotbmFtZXNwYWNlIEtKUyB7
Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gV2luZG93IE9iamVjdCAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQotY29uc3QgQ2xhc3NJbmZvIFdpbmRvdzo6aW5mbyA9IHsgIldpbmRvdyIsIDAs
ICZXaW5kb3dUYWJsZSB9OwotCi0vKgotQGJlZ2luIFdpbmRvd1RhYmxlIDExOAotIyBXYXJuaW5n
LCB3aGVuIGFkZGluZyBhIGZ1bmN0aW9uIHRvIHRoaXMgb2JqZWN0IHlvdSBuZWVkIHRvIGFkZCBh
IGNhc2UgaW4gV2luZG93OjpnZXQKLSMgLS0gRnVuY3Rpb25zIC0tCi0gIGF0b2IgICAgICAgICAg
ICAgICAgICAmV2luZG93UHJvdG9GdW5jQVRvQjo6Y3JlYXRlICAgICAgICAgICAgICAgIERvbnRE
ZWxldGV8RnVuY3Rpb24gMQotICBidG9hICAgICAgICAgICAgICAgICAgJldpbmRvd1Byb3RvRnVu
Y0JUb0E6OmNyZWF0ZSAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLSAgb3Bl
biAgICAgICAgICAgICAgICAgICZXaW5kb3dQcm90b0Z1bmNPcGVuOjpjcmVhdGUgICAgICAgICAg
ICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAzCi0gIHNldFRpbWVvdXQgICAgICAgICAgICAmV2lu
ZG93UHJvdG9GdW5jU2V0VGltZW91dDo6Y3JlYXRlICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rp
b24gMgotICBjbGVhclRpbWVvdXQgICAgICAgICAgJldpbmRvd1Byb3RvRnVuY0NsZWFyVGltZW91
dDo6Y3JlYXRlICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLSAgc2V0SW50ZXJ2YWwgICAg
ICAgICAgICZXaW5kb3dQcm90b0Z1bmNTZXRJbnRlcnZhbDo6Y3JlYXRlICAgICAgICAgRG9udERl
bGV0ZXxGdW5jdGlvbiAyCi0gIGNsZWFySW50ZXJ2YWwgICAgICAgICAmV2luZG93UHJvdG9GdW5j
Q2xlYXJUaW1lb3V0OjpjcmVhdGUgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBhZGRF
dmVudExpc3RlbmVyICAgICAgJldpbmRvd1Byb3RvRnVuY0FkZEV2ZW50TGlzdGVuZXI6OmNyZWF0
ZSAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDMKLSAgcmVtb3ZlRXZlbnRMaXN0ZW5lciAgICZXaW5k
b3dQcm90b0Z1bmNSZW1vdmVFdmVudExpc3RlbmVyOjpjcmVhdGUgRG9udERlbGV0ZXxGdW5jdGlv
biAzCi0gIHNob3dNb2RhbERpYWxvZyAgICAgICAmV2luZG93UHJvdG9GdW5jU2hvd01vZGFsRGlh
bG9nOjpjcmVhdGUgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotIyBOb3QgaW1wbGVtZW50ZWQK
LSAgY2FwdHVyZUV2ZW50cyAgICAgICAgICZXaW5kb3dQcm90b0Z1bmNOb3RJbXBsZW1lbnRlZDo6
Y3JlYXRlICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi0gIHJlbGVhc2VFdmVudHMgICAgICAg
ICAmV2luZG93UHJvdG9GdW5jTm90SW1wbGVtZW50ZWQ6OmNyZWF0ZSAgICAgIERvbnREZWxldGV8
RnVuY3Rpb24gMAotCi0jIC0tIEF0dHJpYnV0ZXMgLS0KLSAgY3J5cHRvICAgICAgICAgICAgICAg
IFdpbmRvdzo6Q3J5cHRvICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGV2ZW50
ICAgICAgICAgICAgICAgICBXaW5kb3c6OkV2ZW50XyAgICAgICAgICAgICAgRG9udERlbGV0ZQot
ICBsb2NhdGlvbiAgICAgICAgICAgICAgV2luZG93OjpMb2NhdGlvbl8gICAgICAgICAgIERvbnRE
ZWxldGUKLSAgbmF2aWdhdG9yICAgICAgICAgICAgIFdpbmRvdzo6TmF2aWdhdG9yXyAgICAgICAg
ICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGNsaWVudEluZm9ybWF0aW9uICAgICBXaW5kb3c6OkNs
aWVudEluZm9ybWF0aW9uICAgRG9udERlbGV0ZXxSZWFkT25seQotIyAtLSBFdmVudCBMaXN0ZW5l
cnMgLS0KLSAgb25hYm9ydCAgICAgICAgICAgICAgIFdpbmRvdzo6T25hYm9ydCAgICAgICAgICAg
ICBEb250RGVsZXRlCi0gIG9uYmx1ciAgICAgICAgICAgICAgICBXaW5kb3c6Ok9uYmx1ciAgICAg
ICAgICAgICAgRG9udERlbGV0ZQotICBvbmNoYW5nZSAgICAgICAgICAgICAgV2luZG93OjpPbmNo
YW5nZSAgICAgICAgICAgIERvbnREZWxldGUKLSAgb25jbGljayAgICAgICAgICAgICAgIFdpbmRv
dzo6T25jbGljayAgICAgICAgICAgICBEb250RGVsZXRlCi0gIG9uZGJsY2xpY2sgICAgICAgICAg
ICBXaW5kb3c6Ok9uZGJsY2xpY2sgICAgICAgICAgRG9udERlbGV0ZQotICBvbmVycm9yICAgICAg
ICAgICAgICAgV2luZG93OjpPbmVycm9yICAgICAgICAgICAgIERvbnREZWxldGUKLSAgb25mb2N1
cyAgICAgICAgICAgICAgIFdpbmRvdzo6T25mb2N1cyAgICAgICAgICAgICBEb250RGVsZXRlCi0g
IG9ua2V5ZG93biAgICAgICAgICAgICBXaW5kb3c6Ok9ua2V5ZG93biAgICAgICAgICAgRG9udERl
bGV0ZQotICBvbmtleXByZXNzICAgICAgICAgICAgV2luZG93OjpPbmtleXByZXNzICAgICAgICAg
IERvbnREZWxldGUKLSAgb25rZXl1cCAgICAgICAgICAgICAgIFdpbmRvdzo6T25rZXl1cCAgICAg
ICAgICAgICBEb250RGVsZXRlCi0gIG9ubG9hZCAgICAgICAgICAgICAgICBXaW5kb3c6Ok9ubG9h
ZCAgICAgICAgICAgICAgRG9udERlbGV0ZQotICBvbm1vdXNlZG93biAgICAgICAgICAgV2luZG93
OjpPbm1vdXNlZG93biAgICAgICAgIERvbnREZWxldGUKLSAgb25tb3VzZW1vdmUgICAgICAgICAg
IFdpbmRvdzo6T25tb3VzZW1vdmUgICAgICAgICBEb250RGVsZXRlCi0gIG9ubW91c2VvdXQgICAg
ICAgICAgICBXaW5kb3c6Ok9ubW91c2VvdXQgICAgICAgICAgRG9udERlbGV0ZQotICBvbm1vdXNl
b3ZlciAgICAgICAgICAgV2luZG93OjpPbm1vdXNlb3ZlciAgICAgICAgIERvbnREZWxldGUKLSAg
b25tb3VzZXVwICAgICAgICAgICAgIFdpbmRvdzo6T25tb3VzZXVwICAgICAgICAgICBEb250RGVs
ZXRlCi0gIG9ubW91c2V3aGVlbCAgICAgICAgICBXaW5kb3c6Ok9uV2luZG93TW91c2VXaGVlbCAg
RG9udERlbGV0ZQotICBvbnJlc2V0ICAgICAgICAgICAgICAgV2luZG93OjpPbnJlc2V0ICAgICAg
ICAgICAgIERvbnREZWxldGUKLSAgb25yZXNpemUgICAgICAgICAgICAgIFdpbmRvdzo6T25yZXNp
emUgICAgICAgICAgICBEb250RGVsZXRlCi0gIG9uc2Nyb2xsICAgICAgICAgICAgICBXaW5kb3c6
Ok9uc2Nyb2xsICAgICAgICAgICAgRG9udERlbGV0ZQotICBvbnNlYXJjaCAgICAgICAgICAgICAg
V2luZG93OjpPbnNlYXJjaCAgICAgICAgICAgIERvbnREZWxldGUKLSAgb25zZWxlY3QgICAgICAg
ICAgICAgIFdpbmRvdzo6T25zZWxlY3QgICAgICAgICAgICBEb250RGVsZXRlCi0gIG9uc3VibWl0
ICAgICAgICAgICAgICBXaW5kb3c6Ok9uc3VibWl0ICAgICAgICAgICAgRG9udERlbGV0ZQotICBv
bnVubG9hZCAgICAgICAgICAgICAgV2luZG93OjpPbnVubG9hZCAgICAgICAgICAgIERvbnREZWxl
dGUKLSAgb25iZWZvcmV1bmxvYWQgICAgICAgIFdpbmRvdzo6T25iZWZvcmV1bmxvYWQgICAgICBE
b250RGVsZXRlCi0jIC0tIENvbnN0cnVjdG9ycyAtLQotICBBdWRpbyAgICAgICAgICAgICAgICAg
V2luZG93OjpBdWRpbyAgICAgICAgICAgICAgIERvbnREZWxldGUKLSAgRE9NRXhjZXB0aW9uICAg
ICAgICAgIFdpbmRvdzo6RE9NRXhjZXB0aW9uICAgICAgICBEb250RGVsZXRlCi0gIEltYWdlICAg
ICAgICAgICAgICAgICBXaW5kb3c6OkltYWdlICAgICAgICAgICAgICAgRG9udERlbGV0ZQotICBP
cHRpb24gICAgICAgICAgICAgICAgV2luZG93OjpPcHRpb24gICAgICAgICAgICAgIERvbnREZWxl
dGUKLSAgWE1MSHR0cFJlcXVlc3QgICAgICAgIFdpbmRvdzo6WE1MSHR0cFJlcXVlc3QgICAgICBE
b250RGVsZXRlCi0gIFhTTFRQcm9jZXNzb3IgICAgICAgICBXaW5kb3c6OlhTTFRQcm9jZXNzb3Jf
ICAgICAgRG9udERlbGV0ZQotQGVuZAotKi8KLQotV2luZG93OjpXaW5kb3coRE9NV2luZG93KiB3
aW5kb3cpCi0gICAgOiBtX2ltcGwod2luZG93KQotICAgICwgZChuZXcgV2luZG93UHJpdmF0ZSkK
LXsKLSAgICAvLyBXaW5kb3cgZGVzdHJ1Y3Rpb24gaXMgbm90IHRocmVhZC1zYWZlIGJlY2F1c2Ug
b2YKLSAgICAvLyB0aGUgbm9uLXRocmVhZC1zYWZlIFdlYkNvcmUgc3RydWN0dXJlcyBpdCByZWZl
cmVuY2VzLgotICAgIENvbGxlY3Rvcjo6Y29sbGVjdE9uTWFpblRocmVhZE9ubHkodGhpcyk7Ci0K
LSAgICAvLyBUaW1lIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHNjcmlwdCB0aW1lb3V0IGhh
bmRsZXIga2lja3MgaW4uCi0gICAgc2V0VGltZW91dFRpbWUoMTAwMDApOwotfQotCi1XaW5kb3c6
On5XaW5kb3coKQotewotICAgIGNsZWFyQWxsVGltZW91dHMoKTsKLQotICAgIC8vIENsZWFyIGFu
eSBiYWNrcG9pbnRlcnMgdG8gdGhlIHdpbmRvdwotCi0gICAgTGlzdGVuZXJzTWFwOjppdGVyYXRv
ciBpMiA9IGQtPmpzRXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsKLSAgICBMaXN0ZW5lcnNNYXA6Oml0
ZXJhdG9yIGUyID0gZC0+anNFdmVudExpc3RlbmVycy5lbmQoKTsKLSAgICBmb3IgKDsgaTIgIT0g
ZTI7ICsraTIpCi0gICAgICAgIGkyLT5zZWNvbmQtPmNsZWFyV2luZG93T2JqKCk7Ci0gICAgaTIg
PSBkLT5qc0hUTUxFdmVudExpc3RlbmVycy5iZWdpbigpOwotICAgIGUyID0gZC0+anNIVE1MRXZl
bnRMaXN0ZW5lcnMuZW5kKCk7Ci0gICAgZm9yICg7IGkyICE9IGUyOyArK2kyKQotICAgICAgICBp
Mi0+c2Vjb25kLT5jbGVhcldpbmRvd09iaigpOwotCi0gICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNN
YXA6Oml0ZXJhdG9yIGkxID0gZC0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzLmJlZ2luKCk7
Ci0gICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGUxID0gZC0+anNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXJzLmVuZCgpOwotICAgIGZvciAoOyBpMSAhPSBlMTsgKytpMSkKLSAg
ICAgICAgaTEtPnNlY29uZC0+Y2xlYXJXaW5kb3dPYmooKTsKLSAgICBpMSA9IGQtPmpzVW5wcm90
ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsKLSAgICBlMSA9IGQtPmpzVW5wcm90ZWN0
ZWRIVE1MRXZlbnRMaXN0ZW5lcnMuZW5kKCk7Ci0gICAgZm9yICg7IGkxICE9IGUxOyArK2kxKQot
ICAgICAgICBpMS0+c2Vjb25kLT5jbGVhcldpbmRvd09iaigpOwotfQotCi1XaW5kb3cqIFdpbmRv
dzo6cmV0cmlldmVXaW5kb3coRnJhbWUqIGZyYW1lKQotewotICAgIEpTT2JqZWN0KiBvID0gcmV0
cmlldmUoZnJhbWUpLT5nZXRPYmplY3QoKTsKLQotICAgIEFTU0VSVChvIHx8ICFmcmFtZS0+c2V0
dGluZ3MoKSB8fCAhZnJhbWUtPnNldHRpbmdzKCktPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRvdyo+KG8pOwotfQotCi1XaW5kb3cqIFdpbmRvdzo6
cmV0cmlldmVBY3RpdmUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7Ci0gICAgQVNTRVJUKGds
b2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRvdyo+KGdsb2JhbE9iamVj
dCk7Ci19Ci0KLUpTVmFsdWUqIFdpbmRvdzo6cmV0cmlldmUoRnJhbWUqIGZyYW1lKQotewotICAg
IEFTU0VSVChmcmFtZSk7Ci0gICAgaWYgKEtKU1Byb3h5KiBwcm94eSA9IGZyYW1lLT5zY3JpcHRQ
cm94eSgpKQotICAgICAgICByZXR1cm4gcHJveHktPmdsb2JhbE9iamVjdCgpOyAvLyB0aGUgR2xv
YmFsIG9iamVjdCBpcyB0aGUgIndpbmRvdyIKLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAv
LyBUaGlzIGNhbiBoYXBwZW4gd2l0aCBKUyBkaXNhYmxlZCBvbiB0aGUgZG9tYWluIG9mIHRoYXQg
d2luZG93Ci19Ci0KLUxvY2F0aW9uKiBXaW5kb3c6OmxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICBp
ZiAoIWQtPmxvYykKLSAgICAgICAgZC0+bG9jID0gbmV3IExvY2F0aW9uKGltcGwoKS0+ZnJhbWUo
KSk7Ci0gICAgcmV0dXJuIGQtPmxvYzsKLX0KLQotLy8gcmVmZXJlbmNlIG91ciBzcGVjaWFsIG9i
amVjdHMgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbgotdm9pZCBXaW5kb3c6Om1hcmsoKQotewot
ICAgIEpTR2xvYmFsT2JqZWN0OjptYXJrKCk7Ci0gICAgaWYgKGQtPmxvYyAmJiAhZC0+bG9jLT5t
YXJrZWQoKSkKLSAgICAgICAgZC0+bG9jLT5tYXJrKCk7Ci19Ci0KLXN0YXRpYyBib29sIGFsbG93
UG9wVXAoRnJhbWUqIGZyYW1lKQotewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoZnJhbWUtPnNjcmlwdFByb3h5KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFt
ZS0+c2V0dGluZ3MoKTsKLSAgICByZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3MtPkphdmFTY3Jp
cHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoKTsKLX0KLQotc3RhdGljIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIGZlYXR1
cmVzQXJnKQotewotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDsKLQotICAgIFZlY3Rv
cjxTdHJpbmc+IGZlYXR1cmVzID0gZmVhdHVyZXNBcmcuc3BsaXQoJzsnKTsKLSAgICBWZWN0b3I8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZmVhdHVyZXMuZW5kKCk7Ci0gICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU3RyaW5nIHMgPSAqaXQ7Ci0gICAgICAgIGludCBwb3Mg
PSBzLmZpbmQoJz0nKTsKLSAgICAgICAgaW50IGNvbG9uUG9zID0gcy5maW5kKCc6Jyk7Ci0gICAg
ICAgIGlmIChwb3MgPj0gMCAmJiBjb2xvblBvcyA+PSAwKQotICAgICAgICAgICAgY29udGludWU7
IC8vIGlnbm9yZSBhbnkgc3RyaW5ncyB0aGF0IGhhdmUgYm90aCA9IGFuZCA6Ci0gICAgICAgIGlm
IChwb3MgPCAwKQotICAgICAgICAgICAgcG9zID0gY29sb25Qb3M7Ci0gICAgICAgIGlmIChwb3Mg
PCAwKSB7Ci0gICAgICAgICAgICAvLyBudWxsIHN0cmluZyBmb3IgdmFsdWUgbWVhbnMga2V5IHdp
dGhvdXQgdmFsdWUKLSAgICAgICAgICAgIG1hcC5zZXQocy5zdHJpcFdoaXRlU3BhY2UoKS5sb3dl
cigpLCBTdHJpbmcoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5
ID0gcy5sZWZ0KHBvcykuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAgICAgICAgICAgIFN0
cmluZyB2YWwgPSBzLnN1YnN0cmluZyhwb3MgKyAxKS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigp
OwotICAgICAgICAgICAgaW50IHNwYWNlUG9zID0gdmFsLmZpbmQoJyAnKTsKLSAgICAgICAgICAg
IGlmIChzcGFjZVBvcyAhPSAtMSkKLSAgICAgICAgICAgICAgICB2YWwgPSB2YWwubGVmdChzcGFj
ZVBvcyk7Ci0gICAgICAgICAgICBtYXAuc2V0KGtleSwgdmFsKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBGcmFtZSogY3JlYXRlV2luZG93KEV4ZWNT
dGF0ZSogZXhlYywgRnJhbWUqIG9wZW5lckZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwKLSAgICBj
b25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1
cmVzLCBKU1ZhbHVlKiBkaWFsb2dBcmdzKQotewotICAgIEZyYW1lKiBhY3RpdmVGcmFtZSA9IFdp
bmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmltcGwoKS0+ZnJhbWUoKTsKLQotICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0OwotICAgIGlmIChhY3RpdmVGcmFtZSkKLSAgICAgICAgcmVxdWVz
dC5zZXRIVFRQUmVmZXJyZXIoYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVy
KCkpOwotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KHJlcXVlc3QsIGZyYW1lTmFt
ZSk7Ci0KLSAgICAvLyBGSVhNRTogSXQncyBtdWNoIGJldHRlciBmb3IgY2xpZW50IEFQSSBpZiBh
IG5ldyB3aW5kb3cgc3RhcnRzIHdpdGggYSBVUkwsIGhlcmUgd2hlcmUgd2UKLSAgICAvLyBrbm93
IHdoYXQgVVJMIHdlIGFyZSBnb2luZyB0byBvcGVuLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGNvZGUg
cGFzc2VzIHRoZSBlbXB0eSBzdHJpbmcKLSAgICAvLyBmb3IgdGhlIFVSTCwgYnV0IHRoZXJlJ3Mg
YSByZWFzb24gZm9yIHRoYXQuIEJlZm9yZSBsb2FkaW5nIHdlIGhhdmUgdG8gc2V0IHVwIHRoZSBv
cGVuZXIsCi0gICAgLy8gb3BlbmVkQnlET00sIGFuZCBkaWFsb2dBcmd1bWVudHMgdmFsdWVzLiBB
bHNvLCB0byBkZWNpZGUgd2hldGhlciB0byB1c2UgdGhlIFVSTCB3ZSBjdXJyZW50bHkKLSAgICAv
LyBkbyBhbiBhbGxvd3NBY2Nlc3NGcm9tIGNhbGwgdXNpbmcgdGhlIHdpbmRvdyB3ZSBjcmVhdGUs
IHdoaWNoIGNhbid0IGJlIGRvbmUgYmVmb3JlIGNyZWF0aW5nIGl0LgotICAgIC8vIFdlJ2QgaGF2
ZSB0byByZXNvbHZlIGFsbCB0aG9zZSBpc3N1ZXMgdG8gcGFzcyB0aGUgVVJMIGluc3RlYWQgb2Yg
IiIuCi0KLSAgICBib29sIGNyZWF0ZWQ7Ci0gICAgRnJhbWUqIG5ld0ZyYW1lID0gb3BlbmVyRnJh
bWUtPmxvYWRlcigpLT5jcmVhdGVXaW5kb3coZnJhbWVSZXF1ZXN0LCB3aW5kb3dGZWF0dXJlcywg
Y3JlYXRlZCk7Ci0gICAgaWYgKCFuZXdGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBu
ZXdGcmFtZS0+bG9hZGVyKCktPnNldE9wZW5lcihvcGVuZXJGcmFtZSk7Ci0gICAgbmV3RnJhbWUt
PmxvYWRlcigpLT5zZXRPcGVuZWRCeURPTSgpOwotCi0gICAgV2luZG93KiBuZXdXaW5kb3cgPSBX
aW5kb3c6OnJldHJpZXZlV2luZG93KG5ld0ZyYW1lKTsKLQotICAgIGlmIChkaWFsb2dBcmdzKQot
ICAgICAgICBuZXdXaW5kb3ctPnB1dERpcmVjdCgiZGlhbG9nQXJndW1lbnRzIiwgZGlhbG9nQXJn
cyk7Ci0KLSAgICBpZiAoIXVybC5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCBu
ZXdXaW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpIHsKLSAgICAgICAgU3RyaW5nIGNvbXBs
ZXRlZFVSTCA9IHVybC5pc0VtcHR5KCkgPyB1cmwgOiBhY3RpdmVGcmFtZS0+ZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwodXJsKTsKLSAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZyYW1l
LT5zY3JpcHRQcm94eSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLQotICAgICAgICBpZiAo
Y3JlYXRlZCkgewotICAgICAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5jaGFuZ2VMb2NhdGlv
bihLVVJMKGNvbXBsZXRlZFVSTC5kZXByZWNhdGVkU3RyaW5nKCkpLCBhY3RpdmVGcmFtZS0+bG9h
ZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKLSAgICAgICAg
ICAgIGlmIChEb2N1bWVudCogb2xkRG9jID0gb3BlbmVyRnJhbWUtPmRvY3VtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBuZXdGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0RG9tYWluSW50ZXJuYWwob2xk
RG9jLT5kb21haW4oKSk7Ci0gICAgICAgICAgICAgICAgbmV3RnJhbWUtPmRvY3VtZW50KCktPnNl
dEJhc2VVUkwob2xkRG9jLT5iYXNlVVJMKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKCF1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5z
Y2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVSTCwgYWN0aXZlRnJhbWUtPmxvYWRlcigp
LT5vdXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG5ld0ZyYW1lOwotfQotCi1zdGF0aWMgYm9vbCBjYW5TaG93TW9kYWxEaWFsb2coY29u
c3QgRnJhbWUqIGZyYW1lKQotewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNhblJ1bk1vZGFsKCk7Ci19
Ci0KLXN0YXRpYyBib29sIGNhblNob3dNb2RhbERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUp
Ci17Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBm
cmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2FuUnVuTW9kYWxOb3coKTsKLX0KLQotc3RhdGljIEpT
VmFsdWUqIHNob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBmcmFtZSwgY29u
c3QgU3RyaW5nJiB1cmwsIEpTVmFsdWUqIGRpYWxvZ0FyZ3MsIGNvbnN0IFN0cmluZyYgZmVhdHVy
ZUFyZ3MpCi17Ci0gICAgaWYgKCFjYW5TaG93TW9kYWxEaWFsb2dOb3coZnJhbWUpIHx8ICFhbGxv
d1BvcFVwKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBjb25z
dCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBmZWF0dXJlcyA9IHBhcnNlTW9kYWxEaWFsb2dGZWF0
dXJlcyhmZWF0dXJlQXJncyk7Ci0KLSAgICBjb25zdCBib29sIHRydXN0ZWQgPSBmYWxzZTsKLQot
ICAgIC8vIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgZnJvbSBNaWNyb3NvZnQncyBkb2N1bWVudGF0
aW9uIGFyZSBub3QgaW1wbGVtZW50ZWQ6Ci0gICAgLy8gLSBkZWZhdWx0IGZvbnQgc2V0dGluZ3MK
LSAgICAvLyAtIHdpZHRoLCBoZWlnaHQsIGxlZnQsIGFuZCB0b3Agc3BlY2lmaWVkIGluIHVuaXRz
IG90aGVyIHRoYW4gInB4IgotICAgIC8vIC0gZWRnZSAoc3Vua2VuIG9yIHJhaXNlZCwgZGVmYXVs
dCBpcyByYWlzZWQpCi0gICAgLy8gLSBkaWFsb2dIaWRlOiB0cnVzdGVkICYmIGJvb2xGZWF0dXJl
KGZlYXR1cmVzLCAiZGlhbG9naGlkZSIpLCBtYWtlcyBkaWFsb2cgaGlkZSB3aGVuIHlvdSBwcmlu
dAotICAgIC8vIC0gaGVscDogYm9vbEZlYXR1cmUoZmVhdHVyZXMsICJoZWxwIiwgdHJ1ZSksIG1h
a2VzIGhlbHAgaWNvbiBhcHBlYXIgaW4gZGlhbG9nICh3aGF0IGRvZXMgaXQgZG8gb24gV2luZG93
cz8pCi0gICAgLy8gLSB1bmFkb3JuZWQ6IHRydXN0ZWQgJiYgYm9vbEZlYXR1cmUoZmVhdHVyZXMs
ICJ1bmFkb3JuZWQiKTsKLQotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotCi0gICAgRmxvYXRSZWN0IHNjcmVlblJlY3QgPSBzY3JlZW5BdmFpbGFibGVSZWN0
KGZyYW1lLT52aWV3KCkpOwotCi0gICAgV2luZG93RmVhdHVyZXMgd2FyZ3M7Ci0gICAgd2FyZ3Mu
d2lkdGggPSBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9nd2lk
dGgiLCAxMDAsIHNjcmVlblJlY3Qud2lkdGgoKSwgNjIwKTsgLy8gZGVmYXVsdCBoZXJlIGNhbWUg
ZnJvbSBmcmFtZSBzaXplIG9mIGRpYWxvZyBpbiBNYWNJRQotICAgIHdhcmdzLndpZHRoU2V0ID0g
dHJ1ZTsKLSAgICB3YXJncy5oZWlnaHQgPSBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGZl
YXR1cmVzLCAiZGlhbG9naGVpZ2h0IiwgMTAwLCBzY3JlZW5SZWN0LmhlaWdodCgpLCA0NTApOyAv
LyBkZWZhdWx0IGhlcmUgY2FtZSBmcm9tIGZyYW1lIHNpemUgb2YgZGlhbG9nIGluIE1hY0lFCi0g
ICAgd2FyZ3MuaGVpZ2h0U2V0ID0gdHJ1ZTsKLQotICAgIHdhcmdzLnggPSBXaW5kb3dGZWF0dXJl
czo6ZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9nbGVmdCIsIHNjcmVlblJlY3QueCgpLCBz
Y3JlZW5SZWN0LnJpZ2h0KCkgLSB3YXJncy53aWR0aCwgLTEpOwotICAgIHdhcmdzLnhTZXQgPSB3
YXJncy54ID4gMDsKLSAgICB3YXJncy55ID0gV2luZG93RmVhdHVyZXM6OmZsb2F0RmVhdHVyZShm
ZWF0dXJlcywgImRpYWxvZ3RvcCIsIHNjcmVlblJlY3QueSgpLCBzY3JlZW5SZWN0LmJvdHRvbSgp
IC0gd2FyZ3MuaGVpZ2h0LCAtMSk7Ci0gICAgd2FyZ3MueVNldCA9IHdhcmdzLnkgPiAwOwotCi0g
ICAgaWYgKFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVyZShmZWF0dXJlcywgImNlbnRlciIsIHRy
dWUpKSB7Ci0gICAgICAgIGlmICghd2FyZ3MueFNldCkgewotICAgICAgICAgICAgd2FyZ3MueCA9
IHNjcmVlblJlY3QueCgpICsgKHNjcmVlblJlY3Qud2lkdGgoKSAtIHdhcmdzLndpZHRoKSAvIDI7
Ci0gICAgICAgICAgICB3YXJncy54U2V0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
IXdhcmdzLnlTZXQpIHsKLSAgICAgICAgICAgIHdhcmdzLnkgPSBzY3JlZW5SZWN0LnkoKSArIChz
Y3JlZW5SZWN0LmhlaWdodCgpIC0gd2FyZ3MuaGVpZ2h0KSAvIDI7Ci0gICAgICAgICAgICB3YXJn
cy55U2V0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdhcmdzLmRpYWxvZyA9IHRy
dWU7Ci0gICAgd2FyZ3MucmVzaXphYmxlID0gV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKGZl
YXR1cmVzLCAicmVzaXphYmxlIik7Ci0gICAgd2FyZ3Muc2Nyb2xsYmFyc1Zpc2libGUgPSBXaW5k
b3dGZWF0dXJlczo6Ym9vbEZlYXR1cmUoZmVhdHVyZXMsICJzY3JvbGwiLCB0cnVlKTsKLSAgICB3
YXJncy5zdGF0dXNCYXJWaXNpYmxlID0gV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKGZlYXR1
cmVzLCAic3RhdHVzIiwgIXRydXN0ZWQpOwotICAgIHdhcmdzLm1lbnVCYXJWaXNpYmxlID0gZmFs
c2U7Ci0gICAgd2FyZ3MudG9vbEJhclZpc2libGUgPSBmYWxzZTsKLSAgICB3YXJncy5sb2NhdGlv
bkJhclZpc2libGUgPSBmYWxzZTsKLSAgICB3YXJncy5mdWxsc2NyZWVuID0gZmFsc2U7Ci0KLSAg
ICBGcmFtZSogZGlhbG9nRnJhbWUgPSBjcmVhdGVXaW5kb3coZXhlYywgZnJhbWUsIHVybCwgIiIs
IHdhcmdzLCBkaWFsb2dBcmdzKTsKLSAgICBpZiAoIWRpYWxvZ0ZyYW1lKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFdpbmRvdyogZGlhbG9nV2luZG93ID0gV2luZG93Ojpy
ZXRyaWV2ZVdpbmRvdyhkaWFsb2dGcmFtZSk7Ci0KLSAgICAvLyBHZXQgdGhlIHJldHVybiB2YWx1
ZSBlaXRoZXIganVzdCBiZWZvcmUgY2xlYXJpbmcgdGhlIGRpYWxvZyB3aW5kb3cncwotICAgIC8v
IHByb3BlcnRpZXMgKGluIFdpbmRvdzo6Y2xlYXIpLCBvciB3aGVuIG9uIHJldHVybiBmcm9tIHJ1
bk1vZGFsLgotICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gMDsKLSAgICBkaWFsb2dXaW5kb3ct
PnNldFJldHVyblZhbHVlU2xvdCgmcmV0dXJuVmFsdWUpOwotICAgIGRpYWxvZ0ZyYW1lLT5wYWdl
KCktPmNocm9tZSgpLT5ydW5Nb2RhbCgpOwotICAgIGRpYWxvZ1dpbmRvdy0+c2V0UmV0dXJuVmFs
dWVTbG90KDApOwotCi0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybiB2YWx1ZSwgZ2V0
IGl0IG5vdy4KLSAgICAvLyBFaXRoZXIgV2luZG93OjpjbGVhciB3YXMgbm90IGNhbGxlZCB5ZXQs
IG9yIHRoZXJlIHdhcyBubyByZXR1cm4gdmFsdWUsCi0gICAgLy8gYW5kIGluIHRoYXQgY2FzZSwg
dGhlcmUncyBubyBoYXJtIGluIHRyeWluZyBhZ2FpbiAobm8gYmVuZWZpdCBlaXRoZXIpLgotICAg
IGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVyblZhbHVlID0gZGlhbG9nV2luZG93LT5n
ZXREaXJlY3QoInJldHVyblZhbHVlIik7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWUgPyByZXR1
cm5WYWx1ZSA6IGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUgKldpbmRvdzo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgIEFTU0VSVChp
bXBsKCktPmZyYW1lKCkpOwotCi0gICBzd2l0Y2ggKHRva2VuKSB7Ci0gICBjYXNlIENyeXB0bzoK
LSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMKLSAg
IGNhc2UgRE9NRXhjZXB0aW9uOgotICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgIHJldHVybiBnZXRET01FeGNlcHRp
b25Db25zdHJ1Y3RvcihleGVjKTsKLSAgICBjYXNlIEV2ZW50XzoKLSAgICAgIGlmICghYWxsb3dz
QWNjZXNzRnJvbShleGVjKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICBp
ZiAoIWQtPm1fZXZ0KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGQtPm1fZXZ0KTsKLSAgICBjYXNlIExvY2F0aW9uXzoKLSAgICAgIHJldHVy
biBsb2NhdGlvbigpOwotICAgIGNhc2UgTmF2aWdhdG9yXzoKLSAgICBjYXNlIENsaWVudEluZm9y
bWF0aW9uOiB7Ci0gICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgLy8gU3RvcmUgdGhlIG5hdmlnYXRvciBpbiB0aGUg
b2JqZWN0IHNvIHdlIGdldCB0aGUgc2FtZSBvbmUgZWFjaCB0aW1lLgotICAgICAgTmF2aWdhdG9y
ICpuID0gbmV3IE5hdmlnYXRvcihleGVjLCBpbXBsKCktPmZyYW1lKCkpOwotICAgICAgLy8gRklY
TUU6IHRoaXMgd2lsbCBtYWtlIHRoZSAibmF2aWdhdG9yIiBvYmplY3QgYWNjZXNzaWJsZSBmcm9t
IHdpbmRvd3MgdGhhdCBmYWlsCi0gICAgICAvLyB0aGUgc2VjdXJpdHkgY2hlY2sgdGhlIGZpcnN0
IHRpbWUsIGJ1dCBub3Qgc3Vic2VxdWVudCB0aW1lcywgc2VlbXMgd2VpcmQuCi0gICAgICBjb25z
dF9jYXN0PFdpbmRvdyAqPih0aGlzKS0+cHV0RGlyZWN0KCJuYXZpZ2F0b3IiLCBuLCBEb250RGVs
ZXRlfFJlYWRPbmx5KTsKLSAgICAgIGNvbnN0X2Nhc3Q8V2luZG93ICo+KHRoaXMpLT5wdXREaXJl
Y3QoImNsaWVudEluZm9ybWF0aW9uIiwgbiwgRG9udERlbGV0ZXxSZWFkT25seSk7Ci0gICAgICBy
ZXR1cm4gbjsKLSAgICB9Ci0gICAgY2FzZSBJbWFnZToKLSAgICAgIGlmICghYWxsb3dzQWNjZXNz
RnJvbShleGVjKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAvLyBGSVhN
RTogdGhpcyBwcm9wZXJ0eSAoYW5kIHRoZSBmZXcgYmVsb3cpIHByb2JhYmx5IHNob3VsZG4ndCBj
cmVhdGUgYSBuZXcgb2JqZWN0IGV2ZXJ5Ci0gICAgICAvLyB0aW1lCi0gICAgICByZXR1cm4gbmV3
IEltYWdlQ29uc3RydWN0b3JJbXAoZXhlYywgaW1wbCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsK
LSAgICBjYXNlIE9wdGlvbjoKLSAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICByZXR1cm4gbmV3IEpTSFRNTE9wdGlv
bkVsZW1lbnRDb25zdHJ1Y3RvcihleGVjLCBpbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCkpOwot
ICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6Ci0gICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhl
YykpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgcmV0dXJuIG5ldyBKU1hN
TEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoZXhlYywgaW1wbCgpLT5mcmFtZSgpLT5kb2N1bWVu
dCgpKTsKLSAgICBjYXNlIEF1ZGlvOgotI2lmIEVOQUJMRShWSURFTykKLSAgICAgIHJldHVybiBu
ZXcgSlNIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IoZXhlYywgaW1wbCgpLT5mcmFtZSgpLT5k
b2N1bWVudCgpKTsKLSNlbHNlCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShYU0xUKQotICAgIGNhc2UgWFNMVFByb2Nlc3Nvcl86Ci0gICAgICBpZiAoIWFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
ICAgcmV0dXJuIG5ldyBYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3JJbXAoZXhlYyk7Ci0jZWxzZQot
ICAgIGNhc2UgWFNMVFByb2Nlc3Nvcl86Ci0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSNl
bmRpZgotICAgfQotCi0gICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotCi0gICBzd2l0Y2ggKHRva2VuKSB7Ci0gICBjYXNlIE9uYWJvcnQ6
Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBhYm9ydEV2ZW50KTsKLSAgIGNhc2UgT25i
bHVyOgotICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgYmx1ckV2ZW50KTsKLSAgIGNhc2Ug
T25jaGFuZ2U6Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBjaGFuZ2VFdmVudCk7Ci0g
ICBjYXNlIE9uY2xpY2s6Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCBjbGlja0V2ZW50
KTsKLSAgIGNhc2UgT25kYmxjbGljazoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGRi
bGNsaWNrRXZlbnQpOwotICAgY2FzZSBPbmVycm9yOgotICAgICByZXR1cm4gZ2V0TGlzdGVuZXIo
ZXhlYywgZXJyb3JFdmVudCk7Ci0gICBjYXNlIE9uZm9jdXM6Ci0gICAgIHJldHVybiBnZXRMaXN0
ZW5lcihleGVjLCBmb2N1c0V2ZW50KTsKLSAgIGNhc2UgT25rZXlkb3duOgotICAgICByZXR1cm4g
Z2V0TGlzdGVuZXIoZXhlYywga2V5ZG93bkV2ZW50KTsKLSAgIGNhc2UgT25rZXlwcmVzczoKLSAg
ICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGtleXByZXNzRXZlbnQpOwotICAgY2FzZSBPbmtl
eXVwOgotICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywga2V5dXBFdmVudCk7Ci0gICBjYXNl
IE9ubG9hZDoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGxvYWRFdmVudCk7Ci0gICBj
YXNlIE9ubW91c2Vkb3duOgotICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgbW91c2Vkb3du
RXZlbnQpOwotICAgY2FzZSBPbm1vdXNlbW92ZToKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4
ZWMsIG1vdXNlbW92ZUV2ZW50KTsKLSAgIGNhc2UgT25tb3VzZW91dDoKLSAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKGV4ZWMsIG1vdXNlb3V0RXZlbnQpOwotICAgY2FzZSBPbm1vdXNlb3ZlcjoKLSAg
ICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIG1vdXNlb3ZlckV2ZW50KTsKLSAgIGNhc2UgT25t
b3VzZXVwOgotICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgbW91c2V1cEV2ZW50KTsKLSAg
IGNhc2UgT25XaW5kb3dNb3VzZVdoZWVsOgotICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywg
bW91c2V3aGVlbEV2ZW50KTsKLSAgIGNhc2UgT25yZXNldDoKLSAgICAgcmV0dXJuIGdldExpc3Rl
bmVyKGV4ZWMsIHJlc2V0RXZlbnQpOwotICAgY2FzZSBPbnJlc2l6ZToKLSAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKGV4ZWMscmVzaXplRXZlbnQpOwotICAgY2FzZSBPbnNjcm9sbDoKLSAgICAgcmV0
dXJuIGdldExpc3RlbmVyKGV4ZWMsc2Nyb2xsRXZlbnQpOwotICAgY2FzZSBPbnNlYXJjaDoKLSAg
ICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsc2VhcmNoRXZlbnQpOwotICAgY2FzZSBPbnNlbGVj
dDoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsc2VsZWN0RXZlbnQpOwotICAgY2FzZSBP
bnN1Ym1pdDoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsc3VibWl0RXZlbnQpOwotICAg
Y2FzZSBPbmJlZm9yZXVubG9hZDoKLSAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGJlZm9y
ZXVubG9hZEV2ZW50KTsKLSAgIGNhc2UgT251bmxvYWQ6Ci0gICAgIHJldHVybiBnZXRMaXN0ZW5l
cihleGVjLCB1bmxvYWRFdmVudCk7Ci0gICB9Ci0gICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBXaW5kb3c6OmNoaWxkRnJhbWVH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gcmV0cmlldmUoc3Rh
dGljX2Nhc3Q8V2luZG93Kj4oc2xvdC5zbG90QmFzZSgpKS0+aW1wbCgpLT5mcmFtZSgpLT50cmVl
KCktPmNoaWxkKEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKSk7Ci19Ci0KLUpTVmFsdWUqIFdp
bmRvdzo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiByZXRyaWV2ZShzdGF0
aWNfY2FzdDxXaW5kb3cqPihzbG90LnNsb3RCYXNlKCkpLT5pbXBsKCktPmZyYW1lKCktPnRyZWUo
KS0+Y2hpbGQoc2xvdC5pbmRleCgpKSk7Ci19Ci0KLUpTVmFsdWUgKldpbmRvdzo6bmFtZWRJdGVt
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAg
V2luZG93ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8V2luZG93ICo+KHNsb3Quc2xvdEJhc2UoKSk7
Ci0gIERvY3VtZW50ICpkb2MgPSB0aGlzT2JqLT5pbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCk7
Ci0gIEFTU0VSVCh0aGlzT2JqLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpICYmIGRvYyAmJiBkb2Mt
PmlzSFRNTERvY3VtZW50KCkpOwotCi0gIFN0cmluZyBuYW1lID0gcHJvcGVydHlOYW1lOwotICBS
ZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBkb2MtPndpbmRvd05h
bWVkSXRlbXMobmFtZSk7Ci0gIGlmIChjb2xsZWN0aW9uLT5sZW5ndGgoKSA9PSAxKQotICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGNvbGxlY3Rpb24tPmZpcnN0SXRlbSgpKTsKLSAgcmV0dXJuIHRvSlMo
ZXhlYywgY29sbGVjdGlvbi5nZXQoKSk7Ci19Ci0KLWJvb2wgV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgLy8gQ2hlY2sgZm9yIGNoaWxkIGZyYW1lcyBieSBuYW1l
IGJlZm9yZSBidWlsdC1pbiBwcm9wZXJ0aWVzIHRvCi0gIC8vIG1hdGNoIE1vemlsbGEuIFRoaXMg
ZG9lcyBub3QgbWF0Y2ggSUUsIGJ1dCBzb21lIHNpdGVzIGVuZCB1cAotICAvLyBuYW1pbmcgZnJh
bWVzIHRoaW5ncyB0aGF0IGNvbmZsaWN0IHdpdGggd2luZG93IHByb3BlcnRpZXMgdGhhdAotICAv
LyBhcmUgaW4gTW96IGJ1dCBub3QgSUUuIFNpbmNlIHdlIGhhdmUgc29tZSBvZiB0aGVzZSwgd2Ug
aGF2ZSB0byBkbwotICAvLyBpdCB0aGUgTW96IHdheS4KLSAgaWYgKGltcGwoKS0+ZnJhbWUoKS0+
dHJlZSgpLT5jaGlsZChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgc2xvdC5zZXRDdXN0b20odGhpcywg
Y2hpbGRGcmFtZUdldHRlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBjb25zdCBIYXNo
RW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJldpbmRvd1RhYmxlLCBwcm9wZXJ0eU5h
bWUpOwotICBpZiAoZW50cnkpIHsKLSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgewot
ICAgICAgaWYgKGVudHJ5LT52YWx1ZS5mdW5jdGlvblZhbHVlID09ICZXaW5kb3dQcm90b0Z1bmNT
aG93TW9kYWxEaWFsb2c6OmNyZWF0ZSkgewotICAgICAgICBpZiAoIWNhblNob3dNb2RhbERpYWxv
ZyhpbXBsKCktPmZyYW1lKCkpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAg
ICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQotICAgICAgICBzbG90LnNldFN0YXRpY0Vu
dHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7Ci0gICAgICBlbHNlCi0gICAg
ICAgIHNsb3Quc2V0VW5kZWZpbmVkKHRoaXMpOwotICAgIH0gZWxzZQotICAgICAgc2xvdC5zZXRT
dGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwgc3RhdGljVmFsdWVHZXR0ZXI8V2luZG93Pik7Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBGSVhNRTogU2VhcmNoIHRoZSB3aG9sZSBmcmFtZSBo
aWVyYWNoeSBzb21ld2hlcmUgYXJvdW5kIGhlcmUuCi0gIC8vIFdlIG5lZWQgdG8gdGVzdCB0aGUg
Y29ycmVjdCBwcmlvcml0eSBvcmRlci4KLQotICAvLyBhbGxvdyB3aW5kb3dbMV0gb3IgcGFyZW50
WzFdIGV0Yy4gKCM1Njk4MykKLSAgYm9vbCBvazsKLSAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS50b0FycmF5SW5kZXgoJm9rKTsKLSAgaWYgKG9rICYmIGkgPCBpbXBsKCktPmZyYW1lKCktPnRy
ZWUoKS0+Y2hpbGRDb3VudCgpKSB7Ci0gICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBp
bmRleEdldHRlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBhbGxvdyBzaG9ydGN1
dHMgbGlrZSAnSW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEKLSAgRG9j
dW1lbnQqIGRvYyA9IGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgaWYgKGRvYyAmJiBk
b2MtPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhlYykp
IHsKLSAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKHRoaXMpOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFt
ZTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jKS0+aGFzTmFtZWRJdGVt
KGF0b21pY1Byb3BlcnR5TmFtZSkgfHwgZG9jLT5nZXRFbGVtZW50QnlJZChhdG9taWNQcm9wZXJ0
eU5hbWUpKSB7Ci0gICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBuYW1lZEl0ZW1HZXR0ZXIpOwot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9t
KGV4ZWMpKSB7Ci0gICAgc2xvdC5zZXRVbmRlZmluZWQodGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7
Ci0gIH0KLQotICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwotfQotCi12b2lkIFdpbmRvdzo6cHV0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIp
Ci17Ci0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgmV2luZG93
VGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gIGlmIChlbnRyeSkgewotICAgICBpZiAoZW50cnktPmF0
dHIgJiBGdW5jdGlvbikgewotICAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQotICAg
ICAgICAgSlNPYmplY3Q6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKLSAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChlbnRyeS0+YXR0ciAmIFJlYWRPbmx5KQotICAg
ICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChlbnRyeS0+dmFsdWUuaW50VmFsdWUpIHsKLSAgICBj
YXNlIExvY2F0aW9uXzogewotICAgICAgRnJhbWUqIHAgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZl
KGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7Ci0gICAgICBpZiAocCkgewotICAgICAgICBpZiAoIXAt
PmxvYWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24oaW1wbCgpLT5mcmFtZSgpKSkKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIFN0cmluZyBkc3RVcmwgPSBwLT5sb2FkZXIoKS0+Y29tcGxl
dGVVUkwodmFsdWUtPnRvU3RyaW5nKGV4ZWMpKS5zdHJpbmcoKTsKLSAgICAgICAgaWYgKCFkc3RV
cmwuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgYWxsb3dzQWNjZXNzRnJvbShl
eGVjKSkgewotICAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBwLT5zY3JpcHRQcm94eSgpLT5w
cm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLSAgICAgICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3Rv
cnkgaXRlbSBpZiB0aGlzIEpTIHdhcyBjYWxsZWQgdmlhIGEgdXNlciBnZXN0dXJlCi0gICAgICAg
ICAgaW1wbCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShkc3RV
cmwsIHAtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBPbmFi
b3J0OgotICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgICAgIHNldExpc3Rl
bmVyKGV4ZWMsIGFib3J0RXZlbnQsdmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIGNhc2UgT25i
bHVyOgotICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgICAgIHNldExpc3Rl
bmVyKGV4ZWMsIGJsdXJFdmVudCx2YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBPbmNo
YW5nZToKLSAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQotICAgICAgICBzZXRMaXN0
ZW5lcihleGVjLCBjaGFuZ2VFdmVudCx2YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBP
bmNsaWNrOgotICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgICAgIHNldExp
c3RlbmVyKGV4ZWMsY2xpY2tFdmVudCx2YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBP
bmRibGNsaWNrOgotICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgICAgIHNl
dExpc3RlbmVyKGV4ZWMsIGRibGNsaWNrRXZlbnQsdmFsdWUpOwotICAgICAgcmV0dXJuOwotICAg
IGNhc2UgT25lcnJvcjoKLSAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQotICAgICAg
ICBzZXRMaXN0ZW5lcihleGVjLCBlcnJvckV2ZW50LCB2YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0g
ICAgY2FzZSBPbmZvY3VzOgotICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAg
ICAgIHNldExpc3RlbmVyKGV4ZWMsZm9jdXNFdmVudCx2YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0g
ICAgY2FzZSBPbmtleWRvd246Ci0gICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKLSAg
ICAgICAgc2V0TGlzdGVuZXIoZXhlYyxrZXlkb3duRXZlbnQsdmFsdWUpOwotICAgICAgcmV0dXJu
OwotICAgIGNhc2UgT25rZXlwcmVzczoKLSAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMp
KQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLGtleXByZXNzRXZlbnQsdmFsdWUpOwotICAgICAg
cmV0dXJuOwotICAgIGNhc2UgT25rZXl1cDoKLSAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4
ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLGtleXVwRXZlbnQsdmFsdWUpOwotICAgICAg
cmV0dXJuOwotICAgIGNhc2UgT25sb2FkOgotICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhl
YykpCi0gICAgICAgIHNldExpc3RlbmVyKGV4ZWMsbG9hZEV2ZW50LHZhbHVlKTsKLSAgICAgIHJl
dHVybjsKLSAgICBjYXNlIE9ubW91c2Vkb3duOgotICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20o
ZXhlYykpCi0gICAgICAgIHNldExpc3RlbmVyKGV4ZWMsbW91c2Vkb3duRXZlbnQsdmFsdWUpOwot
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgT25tb3VzZW1vdmU6Ci0gICAgICBpZiAoYWxsb3dzQWNj
ZXNzRnJvbShleGVjKSkKLSAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxtb3VzZW1vdmVFdmVudCx2
YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBPbm1vdXNlb3V0OgotICAgICAgaWYgKGFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgICAgIHNldExpc3RlbmVyKGV4ZWMsbW91c2VvdXRF
dmVudCx2YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBPbm1vdXNlb3ZlcjoKLSAgICAg
IGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLG1v
dXNlb3ZlckV2ZW50LHZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICBjYXNlIE9ubW91c2V1cDoK
LSAgICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihl
eGVjLG1vdXNldXBFdmVudCx2YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBPbldpbmRv
d01vdXNlV2hlZWw6Ci0gICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKLSAgICAgICAg
c2V0TGlzdGVuZXIoZXhlYywgbW91c2V3aGVlbEV2ZW50LHZhbHVlKTsKLSAgICAgIHJldHVybjsK
LSAgICBjYXNlIE9ucmVzZXQ6Ci0gICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKLSAg
ICAgICAgc2V0TGlzdGVuZXIoZXhlYyxyZXNldEV2ZW50LHZhbHVlKTsKLSAgICAgIHJldHVybjsK
LSAgICBjYXNlIE9ucmVzaXplOgotICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0g
ICAgICAgIHNldExpc3RlbmVyKGV4ZWMscmVzaXplRXZlbnQsdmFsdWUpOwotICAgICAgcmV0dXJu
OwotICAgIGNhc2UgT25zY3JvbGw6Ci0gICAgICBpZiAoYWxsb3dzQWNjZXNzRnJvbShleGVjKSkK
LSAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxzY3JvbGxFdmVudCx2YWx1ZSk7Ci0gICAgICByZXR1
cm47Ci0gICAgY2FzZSBPbnNlYXJjaDoKLSAgICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhl
YykpCi0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLHNlYXJjaEV2ZW50LHZhbHVlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgT25zZWxlY3Q6Ci0gICAgICBpZiAoYWxsb3dzQWNjZXNz
RnJvbShleGVjKSkKLSAgICAgICAgc2V0TGlzdGVuZXIoZXhlYyxzZWxlY3RFdmVudCx2YWx1ZSk7
Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBPbnN1Ym1pdDoKLSAgICAgIGlmIChhbGxvd3NBY2Nl
c3NGcm9tKGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVjLHN1Ym1pdEV2ZW50LHZhbHVl
KTsKLSAgICAgIHJldHVybjsKLSAgICBjYXNlIE9uYmVmb3JldW5sb2FkOgotICAgICAgaWYgKGFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGJlZm9yZXVu
bG9hZEV2ZW50LCB2YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgY2FzZSBPbnVubG9hZDoKLSAg
ICAgIGlmIChhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQotICAgICAgICBzZXRMaXN0ZW5lcihleGVj
LCB1bmxvYWRFdmVudCwgdmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAg
SlNPYmplY3Q6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKLX0KLQotYm9v
bCBXaW5kb3c6OmFsbG93c0FjY2Vzc0Zyb20oY29uc3QgSlNHbG9iYWxPYmplY3QqIG90aGVyKSBj
b25zdAotewotICAgIGNvbnN0IEZyYW1lKiBvcmlnaW5GcmFtZSA9IHN0YXRpY19jYXN0PGNvbnN0
IFdpbmRvdyo+KG90aGVyKS0+aW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghb3JpZ2luRnJhbWUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEZyYW1lKiB0YXJnZXRGcmFtZSA9
IGltcGwoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIXRhcmdldEZyYW1lKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAob3JpZ2luRnJhbWUgPT0gdGFyZ2V0RnJhbWUpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgV2ViQ29yZTo6RG9jdW1lbnQqIHRhcmdldERvY3VtZW50ID0gdGFy
Z2V0RnJhbWUtPmRvY3VtZW50KCk7Ci0KLSAgICAvLyBKUyBtYXkgYmUgYXR0ZW1wdGluZyB0byBh
Y2Nlc3MgdGhlICJ3aW5kb3ciIG9iamVjdCwgd2hpY2ggc2hvdWxkIGJlIHZhbGlkLAotICAgIC8v
IGV2ZW4gaWYgdGhlIGRvY3VtZW50IGhhc24ndCBiZWVuIGNvbnN0cnVjdGVkIHlldC4gIElmIHRo
ZSBkb2N1bWVudCBkb2Vzbid0Ci0gICAgLy8gZXhpc3QgeWV0IGFsbG93IEpTIHRvIGFjY2VzcyB0
aGUgd2luZG93IG9iamVjdC4KLSAgICBpZiAoIXRhcmdldERvY3VtZW50KQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIFdlYkNvcmU6OkRvY3VtZW50KiBvcmlnaW5Eb2N1bWVudCA9IG9yaWdp
bkZyYW1lLT5kb2N1bWVudCgpOwotCi0gICAgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWdpblNl
Y3VyaXR5T3JpZ2luID0gb3JpZ2luRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCk7Ci0gICAgY29u
c3QgU2VjdXJpdHlPcmlnaW4mIHRhcmdldFNlY3VyaXR5T3JpZ2luID0gdGFyZ2V0RG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCk7Ci0KLSAgICBpZiAob3JpZ2luU2VjdXJpdHlPcmlnaW4uY2FuQWNj
ZXNzKHRhcmdldFNlY3VyaXR5T3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoIXRhcmdldEZyYW1lLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgY29udGFpbiBtb3Jl
IHNwZWNpZmljcyBvZiB3aHkgdGhlIHNhbWUgb3JpZ2luIGNoZWNrIGhhcyBmYWlsZWQuCi0gICAg
ICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlVuc2FmZSBKYXZhU2NyaXB0IGF0
dGVtcHQgdG8gYWNjZXNzIGZyYW1lIHdpdGggVVJMICVzIGZyb20gZnJhbWUgd2l0aCBVUkwgJXMu
IERvbWFpbnMsIHByb3RvY29scyBhbmQgcG9ydHMgbXVzdCBtYXRjaC5cbiIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RG9jdW1lbnQtPnVybCgpLnV0Zjgo
KS5kYXRhKCksIG9yaWdpbkRvY3VtZW50LT51cmwoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAg
ICBpZiAoSW50ZXJwcmV0ZXI6OnNob3VsZFByaW50RXhjZXB0aW9ucygpKQotICAgICAgICAgICAg
cHJpbnRmKCIlcyIsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSB0YXJnZXRGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkt
PmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
bWVzc2FnZSwgMSwgU3RyaW5nKCkpOyAvLyBGSVhNRTogcHJvdmlkZSBhIHJlYWwgbGluZSBudW1i
ZXIgYW5kIHNvdXJjZSBVUkwuCi0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1FeGVj
U3RhdGUqIFdpbmRvdzo6Z2xvYmFsRXhlYygpCi17Ci0gICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCBhbnkgc2NyaXB0IGV4ZWN1dGlvbiBoYXBwZW5pbmcgaW4gdGhpcwotICAgIC8vIGZy
YW1lIGRvZXMgbm90IGRlc3Ryb3kgaXQKLSAgICBBU1NFUlQoaW1wbCgpLT5mcmFtZSgpKTsKLSAg
ICBpbXBsKCktPmZyYW1lKCktPmtlZXBBbGl2ZSgpOwotICAgIHJldHVybiBKU0dsb2JhbE9iamVj
dDo6Z2xvYmFsRXhlYygpOwotfQotCi1ib29sIFdpbmRvdzo6c2hvdWxkSW50ZXJydXB0U2NyaXB0
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaW1wbCgpLT5mcmFtZSgpKTsKLSAgICBQYWdlKiBwYWdl
ID0gaW1wbCgpLT5mcmFtZSgpLT5wYWdlKCk7Ci0KLSAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVt
LzU0Nzk0NDM+LiBXZSBkb24ndCB0aGluayB0aGF0IHBhZ2UgY2FuIGV2ZXIgYmUgTlVMTAotICAg
IC8vIGluIHRoaXMgY2FzZSwgYnV0IGlmIGl0IGlzLCB3ZSd2ZSBnb3R0ZW4gaW50byBhIHN0YXRl
IHdoZXJlIHdlIG1heSBoYXZlCi0gICAgLy8gaHVuZyB0aGUgVUksIHdpdGggbm8gd2F5IHRvIGFz
ayB0aGUgY2xpZW50IHdoZXRoZXIgdG8gY2FuY2VsIGV4ZWN1dGlvbi4KLSAgICAvLyBGb3Igbm93
LCBvdXIgc29sdXRpb24gaXMganVzdCB0byBjYW5jZWwgZXhlY3V0aW9uIG5vIG1hdHRlciB3aGF0
LAotICAgIC8vIGVuc3VyaW5nIHRoYXQgd2UgbmV2ZXIgaGFuZy4gV2UgbWlnaHQgd2FudCB0byBj
b25zaWRlciBvdGhlciBzb2x1dGlvbnMKLSAgICAvLyBpZiB3ZSBkaXNjb3ZlciBwcm9ibGVtcyB3
aXRoIHRoaXMgb25lLgotICAgIEFTU0VSVChwYWdlKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIHBhZ2UtPmNocm9tZSgpLT5zaG91bGRJbnRlcnJ1
cHRKYXZhU2NyaXB0KCk7Ci19Ci0KLXZvaWQgV2luZG93OjpzZXRMaXN0ZW5lcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBKU1ZhbHVlKiBmdW5jKQotewot
ICAgIEFTU0VSVChpbXBsKCktPmZyYW1lKCkpOwotICAgIERvY3VtZW50KiBkb2MgPSBpbXBsKCkt
PmZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGRvYy0+c2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBmaW5kT3JDcmVh
dGVKU0V2ZW50TGlzdGVuZXIoZnVuYywgdHJ1ZSkpOwotfQotCi1KU1ZhbHVlKiBXaW5kb3c6Omdl
dExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGltcGwoKS0+ZnJhbWUoKSk7Ci0gICAgRG9jdW1lbnQqIGRv
YyA9IGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBXZWJDb3JlOjpFdmVudExpc3RlbmVyKiBsaXN0
ZW5lciA9IGRvYy0+Z2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKLSAgICBp
ZiAobGlzdGVuZXIgJiYgc3RhdGljX2Nhc3Q8SlNFdmVudExpc3RlbmVyKj4obGlzdGVuZXIpLT5s
aXN0ZW5lck9iaigpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNFdmVudExpc3RlbmVy
Kj4obGlzdGVuZXIpLT5saXN0ZW5lck9iaigpOwotICAgIHJldHVybiBqc051bGwoKTsKLX0KLQot
SlNFdmVudExpc3RlbmVyKiBXaW5kb3c6OmZpbmRKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSogdmFs
LCBib29sIGh0bWwpCi17Ci0gICAgaWYgKCF2YWwtPmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZhbCk7
Ci0gICAgTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBodG1sID8gZC0+anNIVE1MRXZlbnRMaXN0
ZW5lcnMgOiBkLT5qc0V2ZW50TGlzdGVuZXJzOwotICAgIHJldHVybiBsaXN0ZW5lcnMuZ2V0KG9i
amVjdCk7Ci19Ci0KLUpTRXZlbnRMaXN0ZW5lciogV2luZG93OjpmaW5kT3JDcmVhdGVKU0V2ZW50
TGlzdGVuZXIoSlNWYWx1ZSogdmFsLCBib29sIGh0bWwpCi17Ci0gICAgSlNFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IGZpbmRKU0V2ZW50TGlzdGVuZXIodmFsLCBodG1sKTsKLSAgICBpZiAobGlz
dGVuZXIpCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLQotICAgIGlmICghdmFsLT5pc09iamVj
dCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPih2YWwpOwotCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBKU0V2ZW50TGlzdGVu
ZXIgY29uc3RydWN0b3IgYWRkcyBpdCB0byBvdXIganNFdmVudExpc3RlbmVycyBsaXN0Ci0gICAg
cmV0dXJuIG5ldyBKU0V2ZW50TGlzdGVuZXIob2JqZWN0LCB0aGlzLCBodG1sKTsKLX0KLQotSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIFdpbmRvdzo6ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExp
c3RlbmVyKEpTVmFsdWUqIHZhbCwgYm9vbCBodG1sKQotewotICAgIGlmICghdmFsLT5pc09iamVj
dCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPih2YWwpOwotICAgIFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBsaXN0ZW5l
cnMgPSBodG1sID8gZC0+anNVbnByb3RlY3RlZEhUTUxFdmVudExpc3RlbmVycyA6IGQtPmpzVW5w
cm90ZWN0ZWRFdmVudExpc3RlbmVyczsKLSAgICByZXR1cm4gbGlzdGVuZXJzLmdldChvYmplY3Qp
OwotfQotCi1KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogV2luZG93OjpmaW5kT3JDcmVhdGVK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiB2YWwsIGJvb2wgaHRtbCkKLXsKLSAg
ICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIodmFsLCBodG1sKTsKLSAgICBpZiAobGlzdGVuZXIpCi0gICAgICAgIHJl
dHVybiBsaXN0ZW5lcjsKLSAgICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsKTsK
LQotICAgIC8vIFRoZSBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciBjb25zdHJ1Y3RvciBhZGRz
IGl0IHRvIG91ciBqc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMgbWFwLgotICAgIHJldHVybiBu
ZXcgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIob2JqZWN0LCB0aGlzLCBodG1sKTsKLX0KLQot
dm9pZCBXaW5kb3c6OmNsZWFySGVscGVyT2JqZWN0UHJvcGVydGllcygpCi17Ci0gICAgZC0+bG9j
ID0gMDsKLSAgICBkLT5tX2V2dCA9IDA7Ci19Ci0KLXZvaWQgV2luZG93OjpjbGVhcigpCi17Ci0g
IEpTTG9jayBsb2NrOwotCi0gIGlmIChkLT5tX3JldHVyblZhbHVlU2xvdCAmJiAhKmQtPm1fcmV0
dXJuVmFsdWVTbG90KQotICAgICpkLT5tX3JldHVyblZhbHVlU2xvdCA9IGdldERpcmVjdCgicmV0
dXJuVmFsdWUiKTsKLQotICBjbGVhckFsbFRpbWVvdXRzKCk7Ci0gIGNsZWFyUHJvcGVydGllcygp
OwotICBjbGVhckhlbHBlck9iamVjdFByb3BlcnRpZXMoKTsKLQotICAvLyBOb3cgcmVjcmVhdGUg
YSB3b3JraW5nIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBuZXh0IFVSTCB0aGF0IHdpbGwgdXNlIHVz
OyBidXQgb25seSBpZiB3ZSBoYXZlbid0IGJlZW4KLSAgLy8gZGlzY29ubmVjdGVkIHlldAotICBp
ZiAoRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpKQotICAgIGZyYW1lLT5zY3JpcHRQcm94
eSgpLT5nbG9iYWxPYmplY3QoKS0+cmVzZXQoSlNET01XaW5kb3dQcm90b3R5cGU6OnNlbGYoKSk7
Ci0KLSAgLy8gdGhlcmUncyBsaWtlbHkgdG8gYmUgbG90cyBvZiBnYXJiYWdlIG5vdwotICBnY0Nv
bnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKLX0KLQotdm9pZCBXaW5kb3c6OnNldEN1
cnJlbnRFdmVudChFdmVudCogZXZ0KQotewotICAgIGQtPm1fZXZ0ID0gZXZ0OwotfQotCi1FdmVu
dCogV2luZG93OjpjdXJyZW50RXZlbnQoKQotewotICAgIHJldHVybiBkLT5tX2V2dDsKLX0KLQot
SlNWYWx1ZSogV2luZG93UHJvdG9GdW5jQVRvQjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBpZiAoIXRo
aXNPYmotPmluaGVyaXRzKCZXaW5kb3c6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwotCi0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpOwotCi0gICAgSlNWYWx1ZSogdiA9IGFyZ3NbMF07Ci0gICAgaWYgKHYtPmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4ganNTdHJpbmcoKTsKLQotICAgIFVTdHJpbmcgcyA9IHYtPnRvU3RyaW5n
KGV4ZWMpOwotICAgIGlmICghcy5pczhCaXQoKSkgewotICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgSU5WQUxJRF9DSEFSQUNURVJfRVJSKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgfQotCi0gICAgVmVjdG9yPGNoYXI+IGluKHMuc2l6ZSgpKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGluW2ldID0gc3RhdGljX2Nhc3Q8
Y2hhcj4ocy5kYXRhKClbaV0udW5pY29kZSgpKTsKLSAgICBWZWN0b3I8Y2hhcj4gb3V0OwotCi0g
ICAgaWYgKCFiYXNlNjREZWNvZGUoaW4sIG91dCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIEdlbmVyYWxFcnJvciwgIkNhbm5vdCBkZWNvZGUgYmFzZTY0Iik7Ci0KLSAgICByZXR1
cm4ganNTdHJpbmcoU3RyaW5nKG91dC5kYXRhKCksIG91dC5zaXplKCkpKTsKLX0KLQotSlNWYWx1
ZSogV2luZG93UHJvdG9GdW5jQlRvQTo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmot
PmluaGVyaXRzKCZXaW5kb3c6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwotCi0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwot
Ci0gICAgSlNWYWx1ZSogdiA9IGFyZ3NbMF07Ci0gICAgaWYgKHYtPmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4ganNTdHJpbmcoKTsKLQotICAgIFVTdHJpbmcgcyA9IHYtPnRvU3RyaW5nKGV4ZWMp
OwotICAgIGlmICghcy5pczhCaXQoKSkgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
SU5WQUxJRF9DSEFSQUNURVJfRVJSKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQotCi0gICAgVmVjdG9yPGNoYXI+IGluKHMuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGluW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4o
cy5kYXRhKClbaV0udW5pY29kZSgpKTsKLSAgICBWZWN0b3I8Y2hhcj4gb3V0OwotCi0gICAgYmFz
ZTY0RW5jb2RlKGluLCBvdXQpOwotCi0gICAgcmV0dXJuIGpzU3RyaW5nKFN0cmluZyhvdXQuZGF0
YSgpLCBvdXQuc2l6ZSgpKSk7Ci19Ci0KLUpTVmFsdWUqIFdpbmRvd1Byb3RvRnVuY09wZW46OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExp
c3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmV2luZG93OjppbmZvKSkK
LSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICBXaW5kb3cq
IHdpbmRvdyA9IHN0YXRpY19jYXN0PFdpbmRvdyo+KHRoaXNPYmopOwotICAgIEZyYW1lKiBmcmFt
ZSA9IHdpbmRvdy0+aW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEZyYW1lKiBhY3RpdmVGcmFtZSA9IFdpbmRvdzo6cmV0
cmlldmVBY3RpdmUoZXhlYyktPmltcGwoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWFjdGl2ZUZyYW1l
KQotICAgICAgICByZXR1cm4gIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKTsKLQotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVu
ZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGFyZ3NbMF0pOwotICAgIEF0b21pY1N0cmluZyBmcmFt
ZU5hbWUgPSBhcmdzWzFdLT5pc1VuZGVmaW5lZE9yTnVsbCgpID8gIl9ibGFuayIgOiBBdG9taWNT
dHJpbmcoYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykpOwotCi0gICAgLy8gQmVjYXVzZSBGcmFtZVRy
ZWU6OmZpbmQoKSByZXR1cm5zIHRydWUgZm9yIGVtcHR5IHN0cmluZ3MsIHdlIG11c3QgY2hlY2sg
Zm9yIGVtcHR5IGZyYW1lbmFtZXMuCi0gICAgLy8gT3RoZXJ3aXNlLCBpbGxlZ2l0aW1hdGUgd2lu
ZG93Lm9wZW4oKSBjYWxscyB3aXRoIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRocm91Z2ggdGhl
IHBvcHVwIGJsb2NrZXIuCi0gICAgaWYgKCFhbGxvd1BvcFVwKGZyYW1lKSAmJiAoZnJhbWVOYW1l
LmlzRW1wdHkoKSB8fCAhZnJhbWUtPnRyZWUoKS0+ZmluZChmcmFtZU5hbWUpKSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBHZXQgdGhlIHRhcmdldCBmcmFtZSBmb3Ig
dGhlIHNwZWNpYWwgY2FzZXMgb2YgX3RvcCBhbmQgX3BhcmVudC4gIEluIHRob3NlCi0gICAgLy8g
Y2FzZXMsIHdlIGNhbiBzY2hlZHVsZSBhIGxvY2F0aW9uIGNoYW5nZSByaWdodCBub3cgYW5kIHJl
dHVybiBlYXJseS4KLSAgICBib29sIHRvcE9yUGFyZW50ID0gZmFsc2U7Ci0gICAgaWYgKGZyYW1l
TmFtZSA9PSAiX3RvcCIpIHsKLSAgICAgICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50b3AoKTsK
LSAgICAgICAgdG9wT3JQYXJlbnQgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoZnJhbWVOYW1lID09
ICJfcGFyZW50IikgewotICAgICAgICBpZiAoRnJhbWUqIHBhcmVudCA9IGZyYW1lLT50cmVlKCkt
PnBhcmVudCgpKQotICAgICAgICAgICAgZnJhbWUgPSBwYXJlbnQ7Ci0gICAgICAgIGlmICghYWN0
aXZlRnJhbWUtPmxvYWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24oZnJhbWUpKQotICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsK
LSAgICB9Ci0gICAgaWYgKHRvcE9yUGFyZW50KSB7Ci0gICAgICAgIFN0cmluZyBjb21wbGV0ZWRV
Ukw7Ci0gICAgICAgIGlmICghdXJsU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbXBs
ZXRlZFVSTCA9IGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcp
OwotCi0gICAgICAgIGNvbnN0IFdpbmRvdyogdGFyZ2V0ZWRXaW5kb3cgPSBXaW5kb3c6OnJldHJp
ZXZlV2luZG93KGZyYW1lKTsKLSAgICAgICAgaWYgKCFjb21wbGV0ZWRVUkwuaXNFbXB0eSgpICYm
ICghY29tcGxldGVkVVJMLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh0YXJn
ZXRlZFdpbmRvdyAmJiB0YXJnZXRlZFdpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkpKSB7
Ci0gICAgICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdFByb3h5
KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigp
LT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVSTCwgYWN0aXZlRnJhbWUtPmxvYWRl
cigpLT5vdXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIFdpbmRvdzo6cmV0cmlldmUoZnJhbWUpOwotICAgIH0KLQotICAgIC8v
IEluIHRoZSBjYXNlIG9mIGEgbmFtZWQgZnJhbWUgb3IgYSBuZXcgd2luZG93LCB3ZSdsbCB1c2Ug
dGhlIGNyZWF0ZVdpbmRvdygpIGhlbHBlcgotICAgIFdpbmRvd0ZlYXR1cmVzIHdpbmRvd0ZlYXR1
cmVzKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJnc1syXSkp
OwotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KHdpbmRvd0ZlYXR1cmVzLngsIHdpbmRvd0ZlYXR1
cmVzLnksIHdpbmRvd0ZlYXR1cmVzLndpZHRoLCB3aW5kb3dGZWF0dXJlcy5oZWlnaHQpOwotICAg
IFdlYkNvcmU6OkRPTVdpbmRvdzo6YWRqdXN0V2luZG93UmVjdChzY3JlZW5BdmFpbGFibGVSZWN0
KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpLCB3aW5kb3dSZWN0LCB3aW5kb3dSZWN0KTsKLQot
ICAgIHdpbmRvd0ZlYXR1cmVzLnggPSB3aW5kb3dSZWN0LngoKTsKLSAgICB3aW5kb3dGZWF0dXJl
cy55ID0gd2luZG93UmVjdC55KCk7Ci0gICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0ID0gd2luZG93
UmVjdC5oZWlnaHQoKTsKLSAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IHdpbmRvd1JlY3Qud2lk
dGgoKTsKLQotICAgIGZyYW1lID0gY3JlYXRlV2luZG93KGV4ZWMsIGZyYW1lLCB1cmxTdHJpbmcs
IGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXMsIDApOwotCi0gICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4gV2luZG93OjpyZXRyaWV2ZShm
cmFtZSk7IC8vIGdsb2JhbCBvYmplY3QKLX0KLQotSlNWYWx1ZSogV2luZG93UHJvdG9GdW5jU2V0
VGltZW91dDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZXaW5k
b3c6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwot
ICAgIFdpbmRvdyogd2luZG93ID0gc3RhdGljX2Nhc3Q8V2luZG93Kj4odGhpc09iaik7Ci0KLSAg
ICBKU1ZhbHVlKiB2ID0gYXJnc1swXTsKLSAgICBpZiAodi0+aXNTdHJpbmcoKSkKLSAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKHdpbmRvdy0+aW5zdGFsbFRpbWVvdXQodi0+dG9TdHJpbmcoZXhlYyks
IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyksIHRydWUgLypzaW5nbGUgc2hvdCovKSk7Ci0gICAgaWYg
KHYtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+aW1wbGVtZW50c0Nh
bGwoKSkgewotICAgICAgICBMaXN0IGFyZ3NUYWlsOwotICAgICAgICBhcmdzLmdldFNsaWNlKDIs
IGFyZ3NUYWlsKTsKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHdpbmRvdy0+aW5zdGFsbFRpbWVv
dXQodiwgYXJnc1RhaWwsIGFyZ3NbMV0tPnRvSW50MzIoZXhlYyksIHRydWUgLypzaW5nbGUgc2hv
dCovKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUq
IFdpbmRvd1Byb3RvRnVuY0NsZWFyVGltZW91dDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICAvLyBBbHNv
IHRoZSBpbXBsZW1lbnRhdGlvbiBmb3Igd2luZG93LmNsZWFySW50ZXJ2YWwoKQotCi0gICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmV2luZG93OjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICBXaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0
PFdpbmRvdyo+KHRoaXNPYmopOwotCi0gICAgd2luZG93LT5jbGVhclRpbWVvdXQoYXJnc1swXS0+
dG9JbnQzMihleGVjKSk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUq
IFdpbmRvd1Byb3RvRnVuY1NldEludGVydmFsOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQotewotICAgIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJldpbmRvdzo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxXaW5k
b3cqPih0aGlzT2JqKTsKLQotICAgIGlmIChhcmdzLnNpemUoKSA+PSAyKSB7Ci0gICAgICAgIEpT
VmFsdWUqIHYgPSBhcmdzWzBdOwotICAgICAgICBpbnQgZGVsYXkgPSBhcmdzWzFdLT50b0ludDMy
KGV4ZWMpOwotICAgICAgICBpZiAodi0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBq
c051bWJlcih3aW5kb3ctPmluc3RhbGxUaW1lb3V0KHYtPnRvU3RyaW5nKGV4ZWMpLCBkZWxheSwg
ZmFsc2UpKTsKLSAgICAgICAgaWYgKHYtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPih2KS0+aW1wbGVtZW50c0NhbGwoKSkgewotICAgICAgICAgICAgTGlzdCBhcmdzVGFpbDsK
LSAgICAgICAgICAgIGFyZ3MuZ2V0U2xpY2UoMiwgYXJnc1RhaWwpOwotICAgICAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKHdpbmRvdy0+aW5zdGFsbFRpbWVvdXQodiwgYXJnc1RhaWwsIGRlbGF5LCBm
YWxzZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0K
LX0KLQotSlNWYWx1ZSogV2luZG93UHJvdG9GdW5jQWRkRXZlbnRMaXN0ZW5lcjo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJn
cykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZXaW5kb3c6OmluZm8pKQotICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIFdpbmRvdyogd2luZG93
ID0gc3RhdGljX2Nhc3Q8V2luZG93Kj4odGhpc09iaik7Ci0gICAgRnJhbWUqIGZyYW1lID0gd2lu
ZG93LT5pbXBsKCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0KLSAgICBpZiAoSlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHdpbmRv
dy0+ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGFyZ3NbMV0pKSB7Ci0gICAgICAgIGlmIChE
b2N1bWVudCogZG9jID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBkb2MtPmFkZFdp
bmRvd0V2ZW50TGlzdGVuZXIoQXRvbWljU3RyaW5nKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSwg
bGlzdGVuZXIsIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIFdpbmRvd1Byb3RvRnVuY1JlbW92ZUV2ZW50
TGlzdGVuZXI6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIGNvbnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmV2lu
ZG93OjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
LSAgICBXaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PFdpbmRvdyo+KHRoaXNPYmopOwotICAg
IEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+aW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgaWYgKEpTRXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIgPSB3aW5kb3ctPmZpbmRKU0V2ZW50TGlzdGVuZXIoYXJnc1sxXSkpIHsKLSAg
ICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
IGRvYy0+cmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcihBdG9taWNTdHJpbmcoYXJnc1swXS0+dG9T
dHJpbmcoZXhlYykpLCBsaXN0ZW5lciwgYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogV2luZG93UHJvdG9G
dW5jU2hvd01vZGFsRGlhbG9nOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQotewotICAgIGlmICghdGhpc09iai0+aW5o
ZXJpdHMoJldpbmRvdzo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7Ci0gICAgV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxXaW5kb3cqPih0aGlz
T2JqKTsKLSAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmltcGwoKS0+ZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIHJldHVybiBz
aG93TW9kYWxEaWFsb2coZXhlYywgZnJhbWUsIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soZXhlYywgYXJnc1swXSksIGFyZ3NbMV0sIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soZXhlYywgYXJnc1syXSkpOwotfQotCi1KU1ZhbHVlKiBXaW5kb3dQcm90
b0Z1bmNOb3RJbXBsZW1lbnRlZDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmlu
aGVyaXRzKCZXaW5kb3c6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwotCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXZvaWQgV2luZG93
OjpzZXRSZXR1cm5WYWx1ZVNsb3QoSlNWYWx1ZSoqIHNsb3QpCi17Ci0gICAgZC0+bV9yZXR1cm5W
YWx1ZVNsb3QgPSBzbG90OwotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIHRpbWVvdXRzIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi12b2lkIFdpbmRvdzo6Y2xlYXJBbGxUaW1lb3V0cygp
Ci17Ci0gICAgZGVsZXRlQWxsVmFsdWVzKGQtPm1fdGltZW91dHMpOwotICAgIGQtPm1fdGltZW91
dHMuY2xlYXIoKTsKLX0KLQotaW50IFdpbmRvdzo6aW5zdGFsbFRpbWVvdXQoV2ViQ29yZTo6U2No
ZWR1bGVkQWN0aW9uKiBhLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQotewotICAgIGludCB0aW1l
b3V0SWQgPSArK2xhc3RVc2VkVGltZW91dElkOwotCi0gICAgLy8gYXZvaWQgd3JhcGFyb3VuZCBn
b2luZyBuZWdhdGl2ZSBvbiB1cwotICAgIGlmICh0aW1lb3V0SWQgPD0gMCkKLSAgICAgICAgdGlt
ZW91dElkID0gMTsKLQotICAgIGludCBuZXN0TGV2ZWwgPSB0aW1lck5lc3RpbmdMZXZlbCArIDE7
Ci0gICAgRE9NV2luZG93VGltZXIqIHRpbWVyID0gbmV3IERPTVdpbmRvd1RpbWVyKHRpbWVvdXRJ
ZCwgbmVzdExldmVsLCB0aGlzLCBhKTsKLSAgICBBU1NFUlQoIWQtPm1fdGltZW91dHMuZ2V0KHRp
bWVvdXRJZCkpOwotICAgIGQtPm1fdGltZW91dHMuc2V0KHRpbWVvdXRJZCwgdGltZXIpOwotICAg
IC8vIFVzZSBhIG1pbmltdW0gaW50ZXJ2YWwgb2YgMTAgbXMgdG8gbWF0Y2ggb3RoZXIgYnJvd3Nl
cnMsIGJ1dCBvbmx5IG9uY2Ugd2UndmUKLSAgICAvLyBuZXN0ZWQgZW5vdWdoIHRvIG5vdGljZSB0
aGF0IHdlJ3JlIHJlcGVhdGluZy4KLSAgICAvLyBGYXN0ZXIgdGltZXJzIG1pZ2h0IGJlICJiZXR0
ZXIiLCBidXQgdGhleSdyZSBpbmNvbXBhdGlibGUuCi0gICAgZG91YmxlIGludGVydmFsID0gbWF4
KDAuMDAxLCB0ICogMC4wMDEpOwotICAgIGlmIChpbnRlcnZhbCA8IGNNaW5pbXVtVGltZXJJbnRl
cnZhbCAmJiBuZXN0TGV2ZWwgPj0gY01heFRpbWVyTmVzdGluZ0xldmVsKQotICAgICAgICBpbnRl
cnZhbCA9IGNNaW5pbXVtVGltZXJJbnRlcnZhbDsKLSAgICBpZiAoc2luZ2xlU2hvdCkKLSAgICAg
ICAgdGltZXItPnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7Ci0gICAgZWxzZQotICAgICAgICB0aW1l
ci0+c3RhcnRSZXBlYXRpbmcoaW50ZXJ2YWwpOwotICAgIHJldHVybiB0aW1lb3V0SWQ7Ci19Ci0K
LWludCBXaW5kb3c6Omluc3RhbGxUaW1lb3V0KGNvbnN0IFVTdHJpbmcmIGhhbmRsZXIsIGludCB0
LCBib29sIHNpbmdsZVNob3QpCi17Ci0gICAgcmV0dXJuIGluc3RhbGxUaW1lb3V0KG5ldyBXZWJD
b3JlOjpTY2hlZHVsZWRBY3Rpb24oaGFuZGxlciksIHQsIHNpbmdsZVNob3QpOwotfQotCi1pbnQg
V2luZG93OjppbnN0YWxsVGltZW91dChKU1ZhbHVlKiBmdW5jLCBjb25zdCBMaXN0JiBhcmdzLCBp
bnQgdCwgYm9vbCBzaW5nbGVTaG90KQotewotICAgIHJldHVybiBpbnN0YWxsVGltZW91dChuZXcg
V2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uKGZ1bmMsIGFyZ3MpLCB0LCBzaW5nbGVTaG90KTsKLX0K
LQotV2ViQ29yZTo6UGF1c2VkVGltZW91dHMqIFdpbmRvdzo6cGF1c2VUaW1lb3V0cygpCi17Ci0g
ICAgc2l6ZV90IGNvdW50ID0gZC0+bV90aW1lb3V0cy5zaXplKCk7Ci0gICAgaWYgKGNvdW50ID09
IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUGF1c2VkVGltZW91dCogdCA9IG5ldyBQYXVz
ZWRUaW1lb3V0IFtjb3VudF07Ci0gICAgUGF1c2VkVGltZW91dHMqIHJlc3VsdCA9IG5ldyBQYXVz
ZWRUaW1lb3V0cyh0LCBjb3VudCk7Ci0KLSAgICBXaW5kb3dQcml2YXRlOjpUaW1lb3V0c01hcDo6
aXRlcmF0b3IgaXQgPSBkLT5tX3RpbWVvdXRzLmJlZ2luKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgIT0gY291bnQ7ICsraSwgKytpdCkgewotICAgICAgICBpbnQgdGltZW91dElkID0gaXQt
PmZpcnN0OwotICAgICAgICBET01XaW5kb3dUaW1lciogdGltZXIgPSBpdC0+c2Vjb25kOwotICAg
ICAgICB0W2ldLnRpbWVvdXRJZCA9IHRpbWVvdXRJZDsKLSAgICAgICAgdFtpXS5uZXN0aW5nTGV2
ZWwgPSB0aW1lci0+bmVzdGluZ0xldmVsKCk7Ci0gICAgICAgIHRbaV0ubmV4dEZpcmVJbnRlcnZh
bCA9IHRpbWVyLT5uZXh0RmlyZUludGVydmFsKCk7Ci0gICAgICAgIHRbaV0ucmVwZWF0SW50ZXJ2
YWwgPSB0aW1lci0+cmVwZWF0SW50ZXJ2YWwoKTsKLSAgICAgICAgdFtpXS5hY3Rpb24gPSB0aW1l
ci0+dGFrZUFjdGlvbigpOwotICAgIH0KLSAgICBBU1NFUlQoaXQgPT0gZC0+bV90aW1lb3V0cy5l
bmQoKSk7Ci0KLSAgICBkZWxldGVBbGxWYWx1ZXMoZC0+bV90aW1lb3V0cyk7Ci0gICAgZC0+bV90
aW1lb3V0cy5jbGVhcigpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXaW5kb3c6
OnJlc3VtZVRpbWVvdXRzKFBhdXNlZFRpbWVvdXRzKiB0aW1lb3V0cykKLXsKLSAgICBpZiAoIXRp
bWVvdXRzKQotICAgICAgICByZXR1cm47Ci0gICAgc2l6ZV90IGNvdW50ID0gdGltZW91dHMtPm51
bVRpbWVvdXRzKCk7Ci0gICAgUGF1c2VkVGltZW91dCogYXJyYXkgPSB0aW1lb3V0cy0+dGFrZVRp
bWVvdXRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkgewotICAg
ICAgICBpbnQgdGltZW91dElkID0gYXJyYXlbaV0udGltZW91dElkOwotICAgICAgICBET01XaW5k
b3dUaW1lciogdGltZXIgPSBuZXcgRE9NV2luZG93VGltZXIodGltZW91dElkLCBhcnJheVtpXS5u
ZXN0aW5nTGV2ZWwsIHRoaXMsIGFycmF5W2ldLmFjdGlvbik7Ci0gICAgICAgIGQtPm1fdGltZW91
dHMuc2V0KHRpbWVvdXRJZCwgdGltZXIpOwotICAgICAgICB0aW1lci0+c3RhcnQoYXJyYXlbaV0u
bmV4dEZpcmVJbnRlcnZhbCwgYXJyYXlbaV0ucmVwZWF0SW50ZXJ2YWwpOwotICAgIH0KLSAgICBk
ZWxldGUgW10gYXJyYXk7Ci19Ci0KLXZvaWQgV2luZG93OjpjbGVhclRpbWVvdXQoaW50IHRpbWVv
dXRJZCwgYm9vbCBkZWxBY3Rpb24pCi17Ci0gICAgLy8gdGltZW91dCBJRHMgaGF2ZSB0byBiZSBw
b3NpdGl2ZSwgYW5kIDAgYW5kIC0xIGFyZSB1bnNhZmUgdG8KLSAgICAvLyBldmVuIGxvb2sgdXAg
c2luY2UgdGhleSBhcmUgdGhlIGVtcHR5IGFuZCBkZWxldGVkIHZhbHVlCi0gICAgLy8gcmVzcGVj
dGl2ZWx5Ci0gICAgaWYgKHRpbWVvdXRJZCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBk
ZWxldGUgZC0+bV90aW1lb3V0cy50YWtlKHRpbWVvdXRJZCk7Ci19Ci0KLXZvaWQgV2luZG93Ojp0
aW1lckZpcmVkKERPTVdpbmRvd1RpbWVyKiB0aW1lcikKLXsKLSAgICAvLyBTaW1wbGUgY2FzZSBm
b3Igbm9uLW9uZS1zaG90IHRpbWVycy4KLSAgICBpZiAodGltZXItPmlzQWN0aXZlKCkpIHsKLSAg
ICAgICAgaW50IHRpbWVvdXRJZCA9IHRpbWVyLT50aW1lb3V0SWQoKTsKLQotICAgICAgICB0aW1l
ci0+YWN0aW9uKCktPmV4ZWN1dGUodGhpcyk7Ci0gICAgICAgIGlmIChkLT5tX3RpbWVvdXRzLmNv
bnRhaW5zKHRpbWVvdXRJZCkgJiYgdGltZXItPnJlcGVhdEludGVydmFsKCkgJiYgdGltZXItPnJl
cGVhdEludGVydmFsKCkgPCBjTWluaW11bVRpbWVySW50ZXJ2YWwpIHsKLSAgICAgICAgICAgIHRp
bWVyLT5zZXROZXN0aW5nTGV2ZWwodGltZXItPm5lc3RpbmdMZXZlbCgpICsgMSk7Ci0gICAgICAg
ICAgICBpZiAodGltZXItPm5lc3RpbmdMZXZlbCgpID49IGNNYXhUaW1lck5lc3RpbmdMZXZlbCkK
LSAgICAgICAgICAgICAgICB0aW1lci0+YXVnbWVudFJlcGVhdEludGVydmFsKGNNaW5pbXVtVGlt
ZXJJbnRlcnZhbCAtIHRpbWVyLT5yZXBlYXRJbnRlcnZhbCgpKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRGVsZXRlIHRpbWVyIGJlZm9yZSBleGVjdXRpbmcg
dGhlIGFjdGlvbiBmb3Igb25lLXNob3QgdGltZXJzLgotICAgIFdlYkNvcmU6OlNjaGVkdWxlZEFj
dGlvbiogYWN0aW9uID0gdGltZXItPnRha2VBY3Rpb24oKTsKLSAgICBkLT5tX3RpbWVvdXRzLnJl
bW92ZSh0aW1lci0+dGltZW91dElkKCkpOwotICAgIGRlbGV0ZSB0aW1lcjsKLSAgICBhY3Rpb24t
PmV4ZWN1dGUodGhpcyk7Ci0KLSAgICBKU0xvY2sgbG9jazsKLSAgICBkZWxldGUgYWN0aW9uOwot
fQotCi12b2lkIFdpbmRvdzo6ZGlzY29ubmVjdEZyYW1lKCkKLXsKLSAgICBjbGVhckFsbFRpbWVv
dXRzKCk7Ci0gICAgaWYgKGQtPmxvYykKLSAgICAgICAgZC0+bG9jLT5tX2ZyYW1lID0gMDsKLX0K
LQotV2luZG93OjpMaXN0ZW5lcnNNYXAmIFdpbmRvdzo6anNFdmVudExpc3RlbmVycygpCi17Ci0g
ICAgcmV0dXJuIGQtPmpzRXZlbnRMaXN0ZW5lcnM7Ci19CisjaW5jbHVkZSAia2pzX3dpbmRvdy5o
IgogCi1XaW5kb3c6Okxpc3RlbmVyc01hcCYgV2luZG93Ojpqc0hUTUxFdmVudExpc3RlbmVycygp
Ci17Ci0gICAgcmV0dXJuIGQtPmpzSFRNTEV2ZW50TGlzdGVuZXJzOwotfQorI2luY2x1ZGUgIkpT
TG9jYXRpb24ubHV0LmgiCiAKLVdpbmRvdzo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIFdpbmRv
dzo6anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzKCkKLXsKLSAgICByZXR1cm4gZC0+anNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXJzOwotfQordXNpbmcgbmFtZXNwYWNlIEtKUzsKIAotV2luZG93
OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgV2luZG93Ojpqc1VucHJvdGVjdGVkSFRNTEV2ZW50
TGlzdGVuZXJzKCkKLXsKLSAgICByZXR1cm4gZC0+anNVbnByb3RlY3RlZEhUTUxFdmVudExpc3Rl
bmVyczsKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBM
b2NhdGlvbiBPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitjb25zdCBDbGFzc0luZm8g
SlNMb2NhdGlvbjo6aW5mbyA9IHsgIkxvY2F0aW9uIiwgMCwgJkpTTG9jYXRpb25UYWJsZSB9Owog
Ci1jb25zdCBDbGFzc0luZm8gTG9jYXRpb246OmluZm8gPSB7ICJMb2NhdGlvbiIsIDAsICZMb2Nh
dGlvblRhYmxlIH07CiAvKgotQGJlZ2luIExvY2F0aW9uVGFibGUgMTIKLSAgYXNzaWduICAgICAg
ICAmTG9jYXRpb25Qcm90b0Z1bmNBc3NpZ246OmNyZWF0ZSAgICAgICAgRG9udERlbGV0ZXxGdW5j
dGlvbiAxCi0gIGhhc2ggICAgICAgICAgTG9jYXRpb246Okhhc2ggICAgICAgICAgICAgICAgICAg
ICAgICAgIERvbnREZWxldGUKLSAgaG9zdCAgICAgICAgICBMb2NhdGlvbjo6SG9zdCAgICAgICAg
ICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotICBob3N0bmFtZSAgICAgIExvY2F0aW9uOjpI
b3N0bmFtZSAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCi0gIGhyZWYgICAgICAgICAg
TG9jYXRpb246OkhyZWYgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLSAgcGF0
aG5hbWUgICAgICBMb2NhdGlvbjo6UGF0aG5hbWUgICAgICAgICAgICAgICAgICAgICAgRG9udERl
bGV0ZQotICBwb3J0ICAgICAgICAgIExvY2F0aW9uOjpQb3J0ICAgICAgICAgICAgICAgICAgICAg
ICAgICBEb250RGVsZXRlCi0gIHByb3RvY29sICAgICAgTG9jYXRpb246OlByb3RvY29sICAgICAg
ICAgICAgICAgICAgICAgIERvbnREZWxldGUKLSAgc2VhcmNoICAgICAgICBMb2NhdGlvbjo6U2Vh
cmNoICAgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotICB0b1N0cmluZyAgICAgICZM
b2NhdGlvblByb3RvRnVuY1RvU3RyaW5nOjpjcmVhdGUgICAgICBEb250RW51bXxEb250RGVsZXRl
fEZ1bmN0aW9uIDAKLSAgcmVwbGFjZSAgICAgICAmTG9jYXRpb25Qcm90b0Z1bmNSZXBsYWNlOjpj
cmVhdGUgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCi0gIHJlbG9hZCAgICAgICAgJkxvY2F0
aW9uUHJvdG9GdW5jUmVsb2FkOjpjcmVhdGUgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAor
QGJlZ2luIEpTTG9jYXRpb25UYWJsZSAxMgorICBhc3NpZ24gICAgICAgICZXZWJDb3JlOjpKU0xv
Y2F0aW9uUHJvdG9GdW5jQXNzaWduOjpjcmVhdGUgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24g
MQorICBoYXNoICAgICAgICAgIFdlYkNvcmU6OkpTTG9jYXRpb246Okhhc2ggICAgICAgICAgICAg
ICAgICAgICAgICAgIERvbnREZWxldGUKKyAgaG9zdCAgICAgICAgICBXZWJDb3JlOjpKU0xvY2F0
aW9uOjpIb3N0ICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCisgIGhvc3RuYW1l
ICAgICAgV2ViQ29yZTo6SlNMb2NhdGlvbjo6SG9zdG5hbWUgICAgICAgICAgICAgICAgICAgICAg
RG9udERlbGV0ZQorICBocmVmICAgICAgICAgIFdlYkNvcmU6OkpTTG9jYXRpb246OkhyZWYgICAg
ICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKKyAgcGF0aG5hbWUgICAgICBXZWJDb3Jl
OjpKU0xvY2F0aW9uOjpQYXRobmFtZSAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCisg
IHBvcnQgICAgICAgICAgV2ViQ29yZTo6SlNMb2NhdGlvbjo6UG9ydCAgICAgICAgICAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZQorICBwcm90b2NvbCAgICAgIFdlYkNvcmU6OkpTTG9jYXRpb246
OlByb3RvY29sICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKKyAgc2VhcmNoICAgICAg
ICBXZWJDb3JlOjpKU0xvY2F0aW9uOjpTZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICBEb250
RGVsZXRlCisgIHRvU3RyaW5nICAgICAgJldlYkNvcmU6OkpTTG9jYXRpb25Qcm90b0Z1bmNUb1N0
cmluZzo6Y3JlYXRlICAgICAgRG9udEVudW18RG9udERlbGV0ZXxGdW5jdGlvbiAwCisgIHJlcGxh
Y2UgICAgICAgJldlYkNvcmU6OkpTTG9jYXRpb25Qcm90b0Z1bmNSZXBsYWNlOjpjcmVhdGUgICAg
ICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCisgIHJlbG9hZCAgICAgICAgJldlYkNvcmU6OkpTTG9j
YXRpb25Qcm90b0Z1bmNSZWxvYWQ6OmNyZWF0ZSAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAw
CiBAZW5kCiAqLwogCi1Mb2NhdGlvbjo6TG9jYXRpb24oRnJhbWUqIGZyYW1lKQorSlNMb2NhdGlv
bjo6SlNMb2NhdGlvbihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogewogfQog
Ci1KU1ZhbHVlICpMb2NhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK0pTVmFsdWUqIEpTTG9jYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0gIEtVUkwgdXJsID0gbV9mcmFtZS0+
bG9hZGVyKCktPnVybCgpOworICBjb25zdCBLVVJMJiB1cmwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+
dXJsKCk7CiAgIHN3aXRjaCAodG9rZW4pIHsKICAgY2FzZSBIYXNoOgogICAgIHJldHVybiBqc1N0
cmluZyh1cmwucmVmKCkuaXNOdWxsKCkgPyAiIiA6ICIjIiArIHVybC5yZWYoKSk7CkBAIC0xNDEx
LDI3ICs5NiwyNyBAQCBKU1ZhbHVlICpMb2NhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAg
IH0KIH0KIAotYm9vbCBMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiti
b29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICBpZiAo
IW1fZnJhbWUpCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIGNvbnN0IFdpbmRvdyogd2luZG93ID0g
V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhtX2ZyYW1lKTsKIAotICBjb25zdCBIYXNoRW50cnkqIGVu
dHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJkxvY2F0aW9uVGFibGUsIHByb3BlcnR5TmFtZSk7Ci0g
IGlmICghZW50cnkgfHwgIShlbnRyeS0+YXR0ciAmIEtKUzo6RnVuY3Rpb24pIHx8IChlbnRyeS0+
dmFsdWUuZnVuY3Rpb25WYWx1ZSAhPSAmTG9jYXRpb25Qcm90b0Z1bmNSZXBsYWNlOjpjcmVhdGUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVu
dHJ5LT52YWx1ZS5mdW5jdGlvblZhbHVlICE9ICZMb2NhdGlvblByb3RvRnVuY1JlbG9hZDo6Y3Jl
YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiBlbnRyeS0+dmFsdWUuZnVuY3Rpb25WYWx1ZSAhPSAmTG9jYXRpb25Qcm90b0Z1bmNBc3NpZ246
OmNyZWF0ZSkpICB7CisgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRy
eSgmSlNMb2NhdGlvblRhYmxlLCBwcm9wZXJ0eU5hbWUpOworICBpZiAoIWVudHJ5IHx8ICEoZW50
cnktPmF0dHIgJiBLSlM6OkZ1bmN0aW9uKSB8fCAoZW50cnktPnZhbHVlLmZ1bmN0aW9uVmFsdWUg
IT0gJkpTTG9jYXRpb25Qcm90b0Z1bmNSZXBsYWNlOjpjcmVhdGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVudHJ5LT52YWx1ZS5mdW5jdGlv
blZhbHVlICE9ICZKU0xvY2F0aW9uUHJvdG9GdW5jUmVsb2FkOjpjcmVhdGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVudHJ5LT52YWx1ZS5m
dW5jdGlvblZhbHVlICE9ICZKU0xvY2F0aW9uUHJvdG9GdW5jQXNzaWduOjpjcmVhdGUpKSAgewog
ICAgIGlmICghd2luZG93IHx8ICF3aW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpIHsKICAg
ICAgIHNsb3Quc2V0VW5kZWZpbmVkKHRoaXMpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICB9CiAKLSAgcmV0dXJuIGdldFN0YXRpY1Byb3BlcnR5U2xvdDxMb2NhdGlvbiwgSlNPYmplY3Q+
KGV4ZWMsICZMb2NhdGlvblRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICByZXR1
cm4gZ2V0U3RhdGljUHJvcGVydHlTbG90PEpTTG9jYXRpb24sIEpTT2JqZWN0PihleGVjLCAmSlNM
b2NhdGlvblRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIExvY2F0
aW9uOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgSlNMb2NhdGlvbjo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwg
aW50IGF0dHIpCiB7CiAgIGlmICghbV9mcmFtZSkKICAgICByZXR1cm47CkBAIC0xNDQxLDcgKzEy
Niw3IEBAIHZvaWQgTG9jYXRpb246OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnMKICAgY29uc3Qg
V2luZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KG1fZnJhbWUpOwogICBib29s
IHNhbWVEb21haW5BY2Nlc3MgPSB3aW5kb3cgJiYgd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4
ZWMpOwogCi0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgmTG9j
YXRpb25UYWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExv
b2t1cDo6ZmluZEVudHJ5KCZKU0xvY2F0aW9uVGFibGUsIHByb3BlcnR5TmFtZSk7CiAKICAgaWYg
KGVudHJ5KSB7CiAgICAgICAvLyBjcm9zcy1kb21haW4gYWNjZXNzIHRvIHRoZSBsb2NhdGlvbiBp
cyBhbGxvd2VkIHdoZW4gYXNzaWduaW5nIHRoZSB3aG9sZSBsb2NhdGlvbiwKQEAgLTE0ODgsNyAr
MTczLDcgQEAgdm9pZCBMb2NhdGlvbjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29ucwogICAgICAg
ICAgIHVybC5zZXRRdWVyeShzdHIpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAvLyBEaXNhbGxvdyBjaGFuZ2luZyBvdGhlciBwcm9wZXJ0aWVzIGluIExvY2F0
aW9uVGFibGUuIGUuZy4sICJ3aW5kb3cubG9jYXRpb24udG9TdHJpbmcgPSAuLi4iLgorICAgICAg
ICAgIC8vIERpc2FsbG93IGNoYW5naW5nIG90aGVyIHByb3BlcnRpZXMgaW4gSlNMb2NhdGlvblRh
YmxlLiBlLmcuLCAid2luZG93LmxvY2F0aW9uLnRvU3RyaW5nID0gLi4uIi4KICAgICAgICAgICAv
LyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MjA+CiAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgfQpAQCAtMTUwNSwxMSArMTkwLDExIEBAIHZvaWQgTG9jYXRpb246
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnMKICAgfQogfQogCi1KU1ZhbHVlKiBMb2NhdGlvblBy
b3RvRnVuY1JlcGxhY2U6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCitKU1ZhbHVlKiBKU0xvY2F0aW9uUHJvdG9GdW5j
UmVwbGFjZTo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZMb2Nh
dGlvbjo6aW5mbykpCisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNMb2NhdGlvbjo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgTG9j
YXRpb24qIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8TG9jYXRpb24qPih0aGlzT2JqKTsKKyAgICBK
U0xvY2F0aW9uKiBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PEpTTG9jYXRpb24qPih0aGlzT2JqKTsK
ICAgICBGcmFtZSogZnJhbWUgPSBsb2NhdGlvbi0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTE1MjksMTEgKzIxNCwxMSBAQCBKU1Zh
bHVlKiBMb2NhdGlvblByb3RvRnVuY1JlcGxhY2U6OmNhbGxBCiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUqIExvY2F0aW9uUHJvdG9GdW5jUmVsb2FkOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdz
KQorSlNWYWx1ZSogSlNMb2NhdGlvblByb3RvRnVuY1JlbG9hZDo6Y2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAg
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZMb2NhdGlvbjo6aW5mbykpCisgICAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmSlNMb2NhdGlvbjo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgTG9jYXRpb24qIGxvY2F0aW9uID0gc3RhdGljX2Nh
c3Q8TG9jYXRpb24qPih0aGlzT2JqKTsKKyAgICBKU0xvY2F0aW9uKiBsb2NhdGlvbiA9IHN0YXRp
Y19jYXN0PEpTTG9jYXRpb24qPih0aGlzT2JqKTsKICAgICBGcmFtZSogZnJhbWUgPSBsb2NhdGlv
bi0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKQEAgLTE1NDksMTEgKzIzNCwxMSBAQCBKU1ZhbHVlKiBMb2NhdGlvblByb3RvRnVuY1JlbG9h
ZDo6Y2FsbEFzCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIExvY2F0
aW9uUHJvdG9GdW5jQXNzaWduOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQorSlNWYWx1ZSogSlNMb2NhdGlvblByb3Rv
RnVuY0Fzc2lnbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZM
b2NhdGlvbjo6aW5mbykpCisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNMb2NhdGlvbjo6
aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAg
TG9jYXRpb24qIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8TG9jYXRpb24qPih0aGlzT2JqKTsKKyAg
ICBKU0xvY2F0aW9uKiBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PEpTTG9jYXRpb24qPih0aGlzT2Jq
KTsKICAgICBGcmFtZSogZnJhbWUgPSBsb2NhdGlvbi0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTE1NzQsMTEgKzI1OSwxMSBAQCBK
U1ZhbHVlKiBMb2NhdGlvblByb3RvRnVuY0Fzc2lnbjo6Y2FsbEFzCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIExvY2F0aW9uUHJvdG9GdW5jVG9TdHJpbmc6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3Qm
IGFyZ3MpCitKU1ZhbHVlKiBKU0xvY2F0aW9uUHJvdG9GdW5jVG9TdHJpbmc6OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3Mp
CiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTG9jYXRpb246OmluZm8pKQorICAgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJkpTTG9jYXRpb246OmluZm8pKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIExvY2F0aW9uKiBsb2NhdGlvbiA9IHN0
YXRpY19jYXN0PExvY2F0aW9uKj4odGhpc09iaik7CisgICAgSlNMb2NhdGlvbiogbG9jYXRpb24g
PSBzdGF0aWNfY2FzdDxKU0xvY2F0aW9uKj4odGhpc09iaik7CiAgICAgRnJhbWUqIGZyYW1lID0g
bG9jYXRpb24tPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CkBAIC0xNTg5LDI5ICsyNzQsNCBAQCBKU1ZhbHVlKiBMb2NhdGlvblByb3RvRnVu
Y1RvU3RyaW5nOjpjYWxsCiAgICAgcmV0dXJuIGpzU3RyaW5nKHVybC5wcmV0dHlVUkwoKSk7CiB9
CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLXZvaWQgRE9NV2luZG93VGltZXI6OmZpcmVkKCkK
LXsKLSAgICB0aW1lck5lc3RpbmdMZXZlbCA9IG1fbmVzdGluZ0xldmVsOwotICAgIG1fb2JqZWN0
LT50aW1lckZpcmVkKHRoaXMpOwotICAgIHRpbWVyTmVzdGluZ0xldmVsID0gMDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgS0pTCi0KLXVzaW5nIG5hbWVzcGFjZSBLSlM7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBET01XaW5kb3cqIGRvbVdpbmRvdykK
LXsKLSAgICBpZiAoIWRvbVdpbmRvdykKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIEZy
YW1lKiBmcmFtZSA9IGRvbVdpbmRvdy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAg
ICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIFdpbmRvdzo6cmV0cmlldmUoZnJhbWUpOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb24u
aAkocmV2aXNpb24gMjg3OTQpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5o
OjI4Nzk0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNldmVkLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBranNfd2luZG93X2gKKyNkZWZpbmUga2pzX3dp
bmRvd19oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgImtqc19iaW5k
aW5nLmgiCisjaW5jbHVkZSA8a2pzL3Byb3RlY3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFz
cyBET01XaW5kb3c7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgSlNFdmVudExpc3RlbmVy
OworICAgIGNsYXNzIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOworICAgIGNsYXNzIFBhdXNl
ZFRpbWVvdXRzOworICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKK30KKworbmFtZXNwYWNlIEtK
UyB7CisKKyAgICBjbGFzcyBET01XaW5kb3dUaW1lcjsKKyAgICBjbGFzcyBMb2NhdGlvbjsKKyAg
ICBjbGFzcyBXaW5kb3c7CisgICAgY2xhc3MgV2luZG93RnVuYzsKKyAgICBjbGFzcyBXaW5kb3dQ
cml2YXRlOworCisgIC8vIFRoaXMgaXMgdGhlIG9ubHkgV2ViQ29yZSBKUyBiaW5kaW5nIHdoaWNo
IGRvZXMgbm90IGluaGVyaXQgZnJvbSBET01PYmplY3QKKyAgY2xhc3MgV2luZG93IDogcHVibGlj
IEpTR2xvYmFsT2JqZWN0IHsKKyAgICBmcmllbmQgY2xhc3MgTG9jYXRpb247CisgICAgZnJpZW5k
IGNsYXNzIFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjsKKyAgcHJvdGVjdGVkOgorICAgIFdpbmRv
dyhXZWJDb3JlOjpET01XaW5kb3cqKTsKKworICBwdWJsaWM6CisgICAgdmlydHVhbCB+V2luZG93
KCk7CisKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwuZ2V0KCk7IH0KKworICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CisKKyAgICAvLyBSZXR1
cm5zIGFuZCByZWdpc3RlcnMgYSB3aW5kb3cgb2JqZWN0LiBJbiBjYXNlIHRoZXJlJ3MgYWxyZWFk
eSBhIFdpbmRvdworICAgIC8vIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1lIHAgdGhpcyB3aWxsIGJl
IHJldHVybmVkIGluIG9yZGVyIHRvIGhhdmUgdW5pcXVlCisgICAgLy8gYmluZGluZ3MuCisgICAg
c3RhdGljIEpTVmFsdWUqIHJldHJpZXZlKFdlYkNvcmU6OkZyYW1lKik7CisKKyAgICAvLyBSZXR1
cm5zIHRoZSBXaW5kb3cgb2JqZWN0IGZvciBhIGdpdmVuIEhUTUwgZnJhbWUKKyAgICBzdGF0aWMg
V2luZG93KiByZXRyaWV2ZVdpbmRvdyhXZWJDb3JlOjpGcmFtZSopOworCisgICAgLy8gUmV0dXJu
cyBhIHBvaW50ZXIgdG8gdGhlIFdpbmRvdyBvYmplY3QgdGhpcyBqYXZhc2NyaXB0IGludGVycHJl
dGluZyBpbnN0YW5jZSAKKyAgICAvLyB3YXMgY2FsbGVkIGZyb20uCisgICAgc3RhdGljIFdpbmRv
dyogcmV0cmlldmVBY3RpdmUoRXhlY1N0YXRlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFyaygp
OworCisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CisgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgaW50
IGF0dHIgPSBOb25lKTsKKworICAgIGludCBpbnN0YWxsVGltZW91dChjb25zdCBVU3RyaW5nJiBo
YW5kbGVyLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKKyAgICBpbnQgaW5zdGFsbFRpbWVvdXQo
SlNWYWx1ZSogZnVuY3Rpb24sIGNvbnN0IExpc3QmIGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNo
b3QpOworICAgIHZvaWQgY2xlYXJUaW1lb3V0KGludCB0aW1lcklkLCBib29sIGRlbEFjdGlvbiA9
IHRydWUpOworICAgIFdlYkNvcmU6OlBhdXNlZFRpbWVvdXRzKiBwYXVzZVRpbWVvdXRzKCk7Cisg
ICAgdm9pZCByZXN1bWVUaW1lb3V0cyhXZWJDb3JlOjpQYXVzZWRUaW1lb3V0cyopOworCisgICAg
dm9pZCB0aW1lckZpcmVkKERPTVdpbmRvd1RpbWVyKik7CisKKyAgICBMb2NhdGlvbiogbG9jYXRp
b24oKSBjb25zdDsKKworICAgIC8vIEZpbmRzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVu
ZXIsIHJldHVybnMgMCBpZiBubyBleGlzdGluZyBvbmUuCisgICAgV2ViQ29yZTo6SlNFdmVudExp
c3RlbmVyKiBmaW5kSlNFdmVudExpc3RlbmVyKEpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7
CisKKyAgICAvLyBGaW5kcyBvciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVu
ZXIuIEpTIEV2ZW50TGlzdGVuZXIgb2JqZWN0IGlzIEdDLXByb3RlY3RlZC4KKyAgICBXZWJDb3Jl
OjpKU0V2ZW50TGlzdGVuZXIgKmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiwg
Ym9vbCBodG1sID0gZmFsc2UpOworCisgICAgLy8gRmluZHMgYSB3cmFwcGVyIG9mIGEgR0MtdW5w
cm90ZWN0ZWQgSlMgRXZlbnRMaXN0ZW5lciwgcmV0dXJucyAwIGlmIG5vIGV4aXN0aW5nIG9uZS4K
KyAgICBXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogZmluZEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyKEpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CisKKyAgICAvLyBG
aW5kcyBvciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpTIEV2ZW50
TGlzdGVuZXIgb2JqZWN0IGlzICpOT1QqIEdDLXByb3RlY3RlZC4KKyAgICBXZWJDb3JlOjpKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lciAqZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIoSlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKKworICAgIHZvaWQgY2xlYXIoKTsK
KworICAgIHZvaWQgc2V0Q3VycmVudEV2ZW50KFdlYkNvcmU6OkV2ZW50Kik7CisgICAgV2ViQ29y
ZTo6RXZlbnQqIGN1cnJlbnRFdmVudCgpOworCisgICAgLy8gU2V0IGEgcGxhY2UgdG8gcHV0IGEg
ZGlhbG9nIHJldHVybiB2YWx1ZSB3aGVuIHRoZSB3aW5kb3cgaXMgY2xlYXJlZC4KKyAgICB2b2lk
IHNldFJldHVyblZhbHVlU2xvdChKU1ZhbHVlKiogc2xvdCk7CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8SlNPYmplY3QqLCBXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXIqPiBMaXN0ZW5lcnNNYXA7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgV2ViQ29yZTo6SlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXIqPiBVbnByb3RlY3RlZExpc3RlbmVyc01hcDsKKyAgICAKKyAgICBMaXN0ZW5lcnNN
YXAmIGpzRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICBMaXN0ZW5lcnNNYXAmIGpzSFRNTEV2ZW50TGlz
dGVuZXJzKCk7CisgICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGpzVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVycygpOworICAgIFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBqc1VucHJvdGVjdGVk
SFRNTEV2ZW50TGlzdGVuZXJzKCk7CisgICAgCisgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOworCisgICAgdmlydHVhbCBFeGVjU3RhdGUqIGdsb2JhbEV4ZWMoKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHQoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBhbGxvd3NBY2Nlc3NGcm9tKGNvbnN0IEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7
CisgICAgYm9vbCBhbGxvd3NBY2Nlc3NGcm9tKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QgeyByZXR1
cm4gYWxsb3dzQWNjZXNzRnJvbShleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOyB9CisKKyAg
ICBlbnVtIHsKKyAgICAgICAgLy8gQXR0cmlidXRlcworICAgICAgICBDcnlwdG8sIEV2ZW50Xywg
TG9jYXRpb25fLCBOYXZpZ2F0b3JfLAorICAgICAgICBDbGllbnRJbmZvcm1hdGlvbiwKKworICAg
ICAgICAvLyBFdmVudCBMaXN0ZW5lcnMKKyAgICAgICAgT25hYm9ydCwgT25ibHVyLCBPbmNoYW5n
ZSwgT25jbGljaywKKyAgICAgICAgT25kYmxjbGljaywgT25lcnJvciwgT25mb2N1cywgT25rZXlk
b3duLAorICAgICAgICBPbmtleXByZXNzLCBPbmtleXVwLCBPbmxvYWQsIE9ubW91c2Vkb3duLAor
ICAgICAgICBPbm1vdXNlbW92ZSwgT25tb3VzZW91dCwgT25tb3VzZW92ZXIsIE9ubW91c2V1cCwK
KyAgICAgICAgT25XaW5kb3dNb3VzZVdoZWVsLCBPbnJlc2V0LCBPbnJlc2l6ZSwgT25zY3JvbGws
CisgICAgICAgIE9uc2VhcmNoLCBPbnNlbGVjdCwgT25zdWJtaXQsIE9udW5sb2FkLAorICAgICAg
ICBPbmJlZm9yZXVubG9hZCwKKworICAgICAgICAvLyBDb25zdHJ1Y3RvcnMKKyAgICAgICAgRE9N
RXhjZXB0aW9uLCBBdWRpbywgSW1hZ2UsIE9wdGlvbiwgWE1MSHR0cFJlcXVlc3QsCisgICAgICAg
IFhTTFRQcm9jZXNzb3JfCisgICAgfTsKKworICBwcml2YXRlOgorICAgIEpTVmFsdWUqIGdldExp
c3RlbmVyKEV4ZWNTdGF0ZSosIGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0cmluZyYgZXZlbnRUeXBl
KSBjb25zdDsKKyAgICB2b2lkIHNldExpc3RlbmVyKEV4ZWNTdGF0ZSosIGNvbnN0IFdlYkNvcmU6
OkF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBKU1ZhbHVlKiBmdW5jKTsKKworICAgIHN0YXRpYyBK
U1ZhbHVlKiBjaGlsZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBuYW1l
ZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogbmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworCisgICAgdm9p
ZCBjbGVhckhlbHBlck9iamVjdFByb3BlcnRpZXMoKTsKKyAgICB2b2lkIGNsZWFyQWxsVGltZW91
dHMoKTsKKyAgICBpbnQgaW5zdGFsbFRpbWVvdXQoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uKiwg
aW50IGludGVydmFsLCBib29sIHNpbmdsZVNob3QpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OkRP
TVdpbmRvdz4gbV9pbXBsOworICAgIE93blB0cjxXaW5kb3dQcml2YXRlPiBkOworICB9OworCisj
ZGVmaW5lIEZPUl9FQUNIX0NMQVNTKG1hY3JvKSBcCisgICAgbWFjcm8oV2luZG93UHJvdG9GdW5j
QVRvQikgXAorICAgIG1hY3JvKFdpbmRvd1Byb3RvRnVuY0JUb0EpIFwKKyAgICBtYWNybyhXaW5k
b3dQcm90b0Z1bmNPcGVuKSBcCisgICAgbWFjcm8oV2luZG93UHJvdG9GdW5jU2V0VGltZW91dCkg
XAorICAgIG1hY3JvKFdpbmRvd1Byb3RvRnVuY0NsZWFyVGltZW91dCkgXAorICAgIG1hY3JvKFdp
bmRvd1Byb3RvRnVuY1NldEludGVydmFsKSBcCisgICAgbWFjcm8oV2luZG93UHJvdG9GdW5jQWRk
RXZlbnRMaXN0ZW5lcikgXAorICAgIG1hY3JvKFdpbmRvd1Byb3RvRnVuY1JlbW92ZUV2ZW50TGlz
dGVuZXIpIFwKKyAgICBtYWNybyhXaW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2cpIFwKKyAg
ICBtYWNybyhXaW5kb3dQcm90b0Z1bmNOb3RJbXBsZW1lbnRlZCkgXAorCitGT1JfRUFDSF9DTEFT
UyhLSlNfSU1QTEVNRU5UX1BST1RPVFlQRV9GVU5DVElPTl9XSVRIX0NSRUFURSkKKyN1bmRlZiBG
T1JfRUFDSF9DTEFTUworCisKKyAgY2xhc3MgTG9jYXRpb24gOiBwdWJsaWMgRE9NT2JqZWN0IHsK
KyAgICBmcmllbmQgY2xhc3MgV2luZG93OworICBwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7CisgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgaW50IGF0dHIgPSBOb25lKTsKKworICAgIGVu
dW0geyBIYXNoLCBIcmVmLCBIb3N0bmFtZSwgSG9zdCwgUGF0aG5hbWUsIFBvcnQsIFByb3RvY29s
LCBTZWFyY2gsIAorICAgICAgICAgICBSZXBsYWNlLCBSZWxvYWQsIFRvU3RyaW5nLCBBc3NpZ24g
fTsKKworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7
IH0KKworICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKworICBwcml2
YXRlOgorICAgIExvY2F0aW9uKFdlYkNvcmU6OkZyYW1lKik7CisKKyAgICBXZWJDb3JlOjpGcmFt
ZSogbV9mcmFtZTsKKyAgfTsKKworI2RlZmluZSBGT1JfRUFDSF9DTEFTUyhtYWNybykgXAorICAg
IG1hY3JvKExvY2F0aW9uUHJvdG9GdW5jQXNzaWduKSBcCisgICAgbWFjcm8oTG9jYXRpb25Qcm90
b0Z1bmNUb1N0cmluZykgXAorICAgIG1hY3JvKExvY2F0aW9uUHJvdG9GdW5jUmVwbGFjZSkgXAor
ICAgIG1hY3JvKExvY2F0aW9uUHJvdG9GdW5jUmVsb2FkKSBcCisKK0ZPUl9FQUNIX0NMQVNTKEtK
U19JTVBMRU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9OX1dJVEhfQ1JFQVRFKQorI3VuZGVmIEZPUl9F
QUNIX0NMQVNTCisKK30gLy8gbmFtZXNwYWNlIEtKUworCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiwgRE9NV2luZG93Kik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBranNfd2luZG93X2gKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNMb2NhdGlvbi5oCShyZXZpc2lvbiAyODc5MykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNywyMDAgKzE3LDUyIEBACiAgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAotI2lmbmRlZiBranNfd2luZG93X2gKLSNkZWZp
bmUga2pzX3dpbmRvd19oCisjaWZuZGVmIEpTTG9jYXRpb25faAorI2RlZmluZSBKU0xvY2F0aW9u
X2gKIAotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAia2pzX2JpbmRpbmcu
aCIKLSNpbmNsdWRlIDxranMvcHJvdGVjdC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgQXRvbWljU3RyaW5nOwotICAgIGNsYXNzIERP
TVdpbmRvdzsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBKU0V2ZW50TGlzdGVuZXI7Ci0g
ICAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI7Ci0gICAgY2xhc3MgUGF1c2VkVGlt
ZW91dHM7Ci0gICAgY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwotfQogCiBuYW1lc3BhY2UgS0pTIHsK
LQotICAgIGNsYXNzIERPTVdpbmRvd1RpbWVyOwotICAgIGNsYXNzIExvY2F0aW9uOwogICAgIGNs
YXNzIFdpbmRvdzsKLSAgICBjbGFzcyBXaW5kb3dGdW5jOwotICAgIGNsYXNzIFdpbmRvd1ByaXZh
dGU7Ci0KLSAgLy8gVGhpcyBpcyB0aGUgb25seSBXZWJDb3JlIEpTIGJpbmRpbmcgd2hpY2ggZG9l
cyBub3QgaW5oZXJpdCBmcm9tIERPTU9iamVjdAotICBjbGFzcyBXaW5kb3cgOiBwdWJsaWMgSlNH
bG9iYWxPYmplY3QgewotICAgIGZyaWVuZCBjbGFzcyBMb2NhdGlvbjsKLSAgICBmcmllbmQgY2xh
c3MgV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOwotICBwcm90ZWN0ZWQ6Ci0gICAgV2luZG93KFdl
YkNvcmU6OkRPTVdpbmRvdyopOwotCi0gIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XaW5kb3coKTsK
LQotICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5n
ZXQoKTsgfQotCi0gICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKLQotICAgIC8vIFJldHVybnMg
YW5kIHJlZ2lzdGVycyBhIHdpbmRvdyBvYmplY3QuIEluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGEg
V2luZG93Ci0gICAgLy8gZm9yIHRoZSBzcGVjaWZpZWQgZnJhbWUgcCB0aGlzIHdpbGwgYmUgcmV0
dXJuZWQgaW4gb3JkZXIgdG8gaGF2ZSB1bmlxdWUKLSAgICAvLyBiaW5kaW5ncy4KLSAgICBzdGF0
aWMgSlNWYWx1ZSogcmV0cmlldmUoV2ViQ29yZTo6RnJhbWUqKTsKLQotICAgIC8vIFJldHVybnMg
dGhlIFdpbmRvdyBvYmplY3QgZm9yIGEgZ2l2ZW4gSFRNTCBmcmFtZQotICAgIHN0YXRpYyBXaW5k
b3cqIHJldHJpZXZlV2luZG93KFdlYkNvcmU6OkZyYW1lKik7Ci0KLSAgICAvLyBSZXR1cm5zIGEg
cG9pbnRlciB0byB0aGUgV2luZG93IG9iamVjdCB0aGlzIGphdmFzY3JpcHQgaW50ZXJwcmV0aW5n
IGluc3RhbmNlIAotICAgIC8vIHdhcyBjYWxsZWQgZnJvbS4KLSAgICBzdGF0aWMgV2luZG93KiBy
ZXRyaWV2ZUFjdGl2ZShFeGVjU3RhdGUqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBpbnQgYXR0
ciA9IE5vbmUpOwotCi0gICAgaW50IGluc3RhbGxUaW1lb3V0KGNvbnN0IFVTdHJpbmcmIGhhbmRs
ZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpOwotICAgIGludCBpbnN0YWxsVGltZW91dChKU1Zh
bHVlKiBmdW5jdGlvbiwgY29uc3QgTGlzdCYgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7
Ci0gICAgdm9pZCBjbGVhclRpbWVvdXQoaW50IHRpbWVySWQsIGJvb2wgZGVsQWN0aW9uID0gdHJ1
ZSk7Ci0gICAgV2ViQ29yZTo6UGF1c2VkVGltZW91dHMqIHBhdXNlVGltZW91dHMoKTsKLSAgICB2
b2lkIHJlc3VtZVRpbWVvdXRzKFdlYkNvcmU6OlBhdXNlZFRpbWVvdXRzKik7Ci0KLSAgICB2b2lk
IHRpbWVyRmlyZWQoRE9NV2luZG93VGltZXIqKTsKLQotICAgIExvY2F0aW9uKiBsb2NhdGlvbigp
IGNvbnN0OwotCi0gICAgLy8gRmluZHMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lciwg
cmV0dXJucyAwIGlmIG5vIGV4aXN0aW5nIG9uZS4KLSAgICBXZWJDb3JlOjpKU0V2ZW50TGlzdGVu
ZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKLQot
ICAgIC8vIEZpbmRzIG9yIGNyZWF0ZXMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lci4g
SlMgRXZlbnRMaXN0ZW5lciBvYmplY3QgaXMgR0MtcHJvdGVjdGVkLgotICAgIFdlYkNvcmU6OkpT
RXZlbnRMaXN0ZW5lciAqZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKEpTVmFsdWUqLCBib29s
IGh0bWwgPSBmYWxzZSk7Ci0KLSAgICAvLyBGaW5kcyBhIHdyYXBwZXIgb2YgYSBHQy11bnByb3Rl
Y3RlZCBKUyBFdmVudExpc3RlbmVyLCByZXR1cm5zIDAgaWYgbm8gZXhpc3Rpbmcgb25lLgotICAg
IFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBmaW5kSlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXIoSlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKLQotICAgIC8vIEZpbmRz
IG9yIGNyZWF0ZXMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lci4gSlMgRXZlbnRMaXN0
ZW5lciBvYmplY3QgaXMgKk5PVCogR0MtcHJvdGVjdGVkLgotICAgIFdlYkNvcmU6OkpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyICpmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cihKU1ZhbHVlKiwgYm9vbCBodG1sID0gZmFsc2UpOwotCi0gICAgdm9pZCBjbGVhcigpOwotCi0g
ICAgdm9pZCBzZXRDdXJyZW50RXZlbnQoV2ViQ29yZTo6RXZlbnQqKTsKLSAgICBXZWJDb3JlOjpF
dmVudCogY3VycmVudEV2ZW50KCk7Ci0KLSAgICAvLyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFs
b2cgcmV0dXJuIHZhbHVlIHdoZW4gdGhlIHdpbmRvdyBpcyBjbGVhcmVkLgotICAgIHZvaWQgc2V0
UmV0dXJuVmFsdWVTbG90KEpTVmFsdWUqKiBzbG90KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxK
U09iamVjdCosIFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcio+IExpc3RlbmVyc01hcDsKLSAgICB0
eXBlZGVmIEhhc2hNYXA8SlNPYmplY3QqLCBXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcio+IFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwOwotICAgIAotICAgIExpc3RlbmVyc01hcCYg
anNFdmVudExpc3RlbmVycygpOwotICAgIExpc3RlbmVyc01hcCYganNIVE1MRXZlbnRMaXN0ZW5l
cnMoKTsKLSAgICBVbnByb3RlY3RlZExpc3RlbmVyc01hcCYganNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXJzKCk7Ci0gICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGpzVW5wcm90ZWN0ZWRIVE1M
RXZlbnRMaXN0ZW5lcnMoKTsKLSAgICAKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87Cit9CiAKLSAgICB2aXJ0dWFsIEV4ZWNTdGF0ZSogZ2xvYmFsRXhlYygpOworbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0gICAgdmlydHVhbCBib29sIHNob3VsZEludGVycnVwdFNjcmlw
dCgpIGNvbnN0OworICAgIGNsYXNzIEZyYW1lOwogCi0gICAgdmlydHVhbCBib29sIGFsbG93c0Fj
Y2Vzc0Zyb20oY29uc3QgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKLSAgICBib29sIGFsbG93c0Fj
Y2Vzc0Zyb20oRXhlY1N0YXRlKiBleGVjKSBjb25zdCB7IHJldHVybiBhbGxvd3NBY2Nlc3NGcm9t
KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7IH0KKyAgICBjbGFzcyBKU0xvY2F0aW9uIDog
cHVibGljIEtKUzo6RE9NT2JqZWN0IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEtKUzo6V2luZG93
OworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChL
SlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90
Jik7CisgICAgICAgIEtKUzo6SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSosIGludCB0b2tlbikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVj
U3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OkpTVmFsdWUqLCBpbnQgYXR0ciA9
IEtKUzo6Tm9uZSk7CisKKyAgICAgICAgZW51bSB7CisgICAgICAgICAgICBIYXNoLCBIcmVmLCBI
b3N0bmFtZSwgSG9zdCwKKyAgICAgICAgICAgIFBhdGhuYW1lLCBQb3J0LCBQcm90b2NvbCwgU2Vh
cmNoLAorICAgICAgICAgICAgUmVwbGFjZSwgUmVsb2FkLCBUb1N0cmluZywgQXNzaWduCisgICAg
ICAgIH07CisKKyAgICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsg
fQogCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZXMKLSAgICAgICAgQ3J5cHRvLCBF
dmVudF8sIExvY2F0aW9uXywgTmF2aWdhdG9yXywKLSAgICAgICAgQ2xpZW50SW5mb3JtYXRpb24s
CisgICAgICAgIHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBp
bmZvOwogCi0gICAgICAgIC8vIEV2ZW50IExpc3RlbmVycwotICAgICAgICBPbmFib3J0LCBPbmJs
dXIsIE9uY2hhbmdlLCBPbmNsaWNrLAotICAgICAgICBPbmRibGNsaWNrLCBPbmVycm9yLCBPbmZv
Y3VzLCBPbmtleWRvd24sCi0gICAgICAgIE9ua2V5cHJlc3MsIE9ua2V5dXAsIE9ubG9hZCwgT25t
b3VzZWRvd24sCi0gICAgICAgIE9ubW91c2Vtb3ZlLCBPbm1vdXNlb3V0LCBPbm1vdXNlb3Zlciwg
T25tb3VzZXVwLAotICAgICAgICBPbldpbmRvd01vdXNlV2hlZWwsIE9ucmVzZXQsIE9ucmVzaXpl
LCBPbnNjcm9sbCwKLSAgICAgICAgT25zZWFyY2gsIE9uc2VsZWN0LCBPbnN1Ym1pdCwgT251bmxv
YWQsCi0gICAgICAgIE9uYmVmb3JldW5sb2FkLAorICAgIHByaXZhdGU6CisgICAgICAgIEpTTG9j
YXRpb24oRnJhbWUqKTsKIAotICAgICAgICAvLyBDb25zdHJ1Y3RvcnMKLSAgICAgICAgRE9NRXhj
ZXB0aW9uLCBBdWRpbywgSW1hZ2UsIE9wdGlvbiwgWE1MSHR0cFJlcXVlc3QsCi0gICAgICAgIFhT
TFRQcm9jZXNzb3JfCisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIH07CiAKLSAgcHJpdmF0
ZToKLSAgICBKU1ZhbHVlKiBnZXRMaXN0ZW5lcihFeGVjU3RhdGUqLCBjb25zdCBXZWJDb3JlOjpB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaXN0ZW5lcihFeGVj
U3RhdGUqLCBjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgSlNWYWx1ZSog
ZnVuYyk7Ci0KLSAgICBzdGF0aWMgSlNWYWx1ZSogY2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUq
LCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgSlNWYWx1ZSogbmFtZWRGcmFtZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUqIG5hbWVkSXRlbUdl
dHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKLQotICAgIHZvaWQgY2xlYXJIZWxwZXJPYmplY3RQcm9wZXJ0aWVzKCk7Ci0g
ICAgdm9pZCBjbGVhckFsbFRpbWVvdXRzKCk7Ci0gICAgaW50IGluc3RhbGxUaW1lb3V0KFdlYkNv
cmU6OlNjaGVkdWxlZEFjdGlvbiosIGludCBpbnRlcnZhbCwgYm9vbCBzaW5nbGVTaG90KTsKLQot
ICAgIFJlZlB0cjxXZWJDb3JlOjpET01XaW5kb3c+IG1faW1wbDsKLSAgICBPd25QdHI8V2luZG93
UHJpdmF0ZT4gZDsKLSAgfTsKLQotI2RlZmluZSBGT1JfRUFDSF9DTEFTUyhtYWNybykgXAotICAg
IG1hY3JvKFdpbmRvd1Byb3RvRnVuY0FUb0IpIFwKLSAgICBtYWNybyhXaW5kb3dQcm90b0Z1bmNC
VG9BKSBcCi0gICAgbWFjcm8oV2luZG93UHJvdG9GdW5jT3BlbikgXAotICAgIG1hY3JvKFdpbmRv
d1Byb3RvRnVuY1NldFRpbWVvdXQpIFwKLSAgICBtYWNybyhXaW5kb3dQcm90b0Z1bmNDbGVhclRp
bWVvdXQpIFwKLSAgICBtYWNybyhXaW5kb3dQcm90b0Z1bmNTZXRJbnRlcnZhbCkgXAotICAgIG1h
Y3JvKFdpbmRvd1Byb3RvRnVuY0FkZEV2ZW50TGlzdGVuZXIpIFwKLSAgICBtYWNybyhXaW5kb3dQ
cm90b0Z1bmNSZW1vdmVFdmVudExpc3RlbmVyKSBcCi0gICAgbWFjcm8oV2luZG93UHJvdG9GdW5j
U2hvd01vZGFsRGlhbG9nKSBcCi0gICAgbWFjcm8oV2luZG93UHJvdG9GdW5jTm90SW1wbGVtZW50
ZWQpIFwKLQotRk9SX0VBQ0hfQ0xBU1MoS0pTX0lNUExFTUVOVF9QUk9UT1RZUEVfRlVOQ1RJT05f
V0lUSF9DUkVBVEUpCi0jdW5kZWYgRk9SX0VBQ0hfQ0xBU1MKLQotCi0gIGNsYXNzIExvY2F0aW9u
IDogcHVibGljIERPTU9iamVjdCB7Ci0gICAgZnJpZW5kIGNsYXNzIFdpbmRvdzsKLSAgcHVibGlj
OgotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIGludCBh
dHRyID0gTm9uZSk7Ci0KLSAgICBlbnVtIHsgSGFzaCwgSHJlZiwgSG9zdG5hbWUsIEhvc3QsIFBh
dGhuYW1lLCBQb3J0LCBQcm90b2NvbCwgU2VhcmNoLCAKLSAgICAgICAgICAgUmVwbGFjZSwgUmVs
b2FkLCBUb1N0cmluZywgQXNzaWduIH07Ci0KLSAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lOyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIGluZm87Ci0KLSAgcHJpdmF0ZToKLSAgICBMb2NhdGlvbihXZWJDb3JlOjpGcmFtZSop
OwotCi0gICAgV2ViQ29yZTo6RnJhbWUqIG1fZnJhbWU7Ci0gIH07Ci0KICNkZWZpbmUgRk9SX0VB
Q0hfQ0xBU1MobWFjcm8pIFwKLSAgICBtYWNybyhMb2NhdGlvblByb3RvRnVuY0Fzc2lnbikgXAot
ICAgIG1hY3JvKExvY2F0aW9uUHJvdG9GdW5jVG9TdHJpbmcpIFwKLSAgICBtYWNybyhMb2NhdGlv
blByb3RvRnVuY1JlcGxhY2UpIFwKLSAgICBtYWNybyhMb2NhdGlvblByb3RvRnVuY1JlbG9hZCkg
XAorICAgIG1hY3JvKEpTTG9jYXRpb25Qcm90b0Z1bmNBc3NpZ24pIFwKKyAgICBtYWNybyhKU0xv
Y2F0aW9uUHJvdG9GdW5jVG9TdHJpbmcpIFwKKyAgICBtYWNybyhKU0xvY2F0aW9uUHJvdG9GdW5j
UmVwbGFjZSkgXAorICAgIG1hY3JvKEpTTG9jYXRpb25Qcm90b0Z1bmNSZWxvYWQpIFwKIAogRk9S
X0VBQ0hfQ0xBU1MoS0pTX0lNUExFTUVOVF9QUk9UT1RZUEVfRlVOQ1RJT05fV0lUSF9DUkVBVEUp
CiAjdW5kZWYgRk9SX0VBQ0hfQ0xBU1MKIAotfSAvLyBuYW1lc3BhY2UgS0pTCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqLCBET01X
aW5kb3cqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIGtqc193aW5kb3df
aAorI2VuZGlmIC8vIEpTTG9jYXRpb25faApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
d2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cu
Y3BwCShyZXZpc2lvbiAyODc5NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJKU0hUTUxDb2xs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgIkpTTG9jYXRpb24uaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhdXNlZFRp
bWVvdXRzLmgiCkBAIC05MCw3ICs5MSw3IEBAIHN0cnVjdCBXaW5kb3dQcml2YXRlIHsKICAgICBX
aW5kb3c6Okxpc3RlbmVyc01hcCBqc0hUTUxFdmVudExpc3RlbmVyczsKICAgICBXaW5kb3c6OlVu
cHJvdGVjdGVkTGlzdGVuZXJzTWFwIGpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyczsKICAgICBX
aW5kb3c6OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwIGpzVW5wcm90ZWN0ZWRIVE1MRXZlbnRMaXN0
ZW5lcnM7Ci0gICAgbXV0YWJsZSBMb2NhdGlvbiogbG9jOworICAgIG11dGFibGUgV2ViQ29yZTo6
SlNMb2NhdGlvbiogbG9jOwogICAgIFdlYkNvcmU6OkV2ZW50KiBtX2V2dDsKICAgICBKU1ZhbHVl
KiogbV9yZXR1cm5WYWx1ZVNsb3Q7CiAKQEAgLTI2MiwxMCArMjYzLDEwIEBAIEpTVmFsdWUqIFdp
bmRvdzo6cmV0cmlldmUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAv
LyBUaGlzIGNhbiBoYXBwZW4gd2l0aCBKUyBkaXNhYmxlZCBvbiB0aGUgZG9tYWluIG9mIHRoYXQg
d2luZG93CiB9CiAKLUxvY2F0aW9uKiBXaW5kb3c6OmxvY2F0aW9uKCkgY29uc3QKK1dlYkNvcmU6
OkpTTG9jYXRpb24qIFdpbmRvdzo6bG9jYXRpb24oKSBjb25zdAogewogICAgIGlmICghZC0+bG9j
KQotICAgICAgICBkLT5sb2MgPSBuZXcgTG9jYXRpb24oaW1wbCgpLT5mcmFtZSgpKTsKKyAgICAg
ICAgZC0+bG9jID0gbmV3IEpTTG9jYXRpb24oaW1wbCgpLT5mcmFtZSgpKTsKICAgICByZXR1cm4g
ZC0+bG9jOwogfQogCkBAIC0xMzUxLDI0NCArMTM1Miw2IEBAIFdpbmRvdzo6VW5wcm90ZWN0ZWRM
aXN0ZW5lcnNNYXAmIFdpbmRvdzoKICAgICByZXR1cm4gZC0+anNVbnByb3RlY3RlZEhUTUxFdmVu
dExpc3RlbmVyczsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBMb2NhdGlvbiBPYmplY3Qg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLWNvbnN0IENsYXNzSW5mbyBMb2NhdGlvbjo6aW5m
byA9IHsgIkxvY2F0aW9uIiwgMCwgJkxvY2F0aW9uVGFibGUgfTsKLS8qCi1AYmVnaW4gTG9jYXRp
b25UYWJsZSAxMgotICBhc3NpZ24gICAgICAgICZMb2NhdGlvblByb3RvRnVuY0Fzc2lnbjo6Y3Jl
YXRlICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLSAgaGFzaCAgICAgICAgICBMb2NhdGlv
bjo6SGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotICBob3N0ICAgICAg
ICAgIExvY2F0aW9uOjpIb3N0ICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCi0g
IGhvc3RuYW1lICAgICAgTG9jYXRpb246Okhvc3RuYW1lICAgICAgICAgICAgICAgICAgICAgIERv
bnREZWxldGUKLSAgaHJlZiAgICAgICAgICBMb2NhdGlvbjo6SHJlZiAgICAgICAgICAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZQotICBwYXRobmFtZSAgICAgIExvY2F0aW9uOjpQYXRobmFtZSAg
ICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCi0gIHBvcnQgICAgICAgICAgTG9jYXRpb246
OlBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLSAgcHJvdG9jb2wgICAg
ICBMb2NhdGlvbjo6UHJvdG9jb2wgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotICBz
ZWFyY2ggICAgICAgIExvY2F0aW9uOjpTZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICBEb250
RGVsZXRlCi0gIHRvU3RyaW5nICAgICAgJkxvY2F0aW9uUHJvdG9GdW5jVG9TdHJpbmc6OmNyZWF0
ZSAgICAgIERvbnRFbnVtfERvbnREZWxldGV8RnVuY3Rpb24gMAotICByZXBsYWNlICAgICAgICZM
b2NhdGlvblByb3RvRnVuY1JlcGxhY2U6OmNyZWF0ZSAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9u
IDEKLSAgcmVsb2FkICAgICAgICAmTG9jYXRpb25Qcm90b0Z1bmNSZWxvYWQ6OmNyZWF0ZSAgICAg
ICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi1AZW5kCi0qLwotCi1Mb2NhdGlvbjo6TG9jYXRpb24o
RnJhbWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKLXsKLX0KLQotSlNWYWx1ZSAqTG9j
YXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Ci17Ci0gIEtVUkwgdXJsID0gbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpOwotICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gIGNhc2UgSGFzaDoKLSAgICByZXR1cm4ganNTdHJpbmcodXJsLnJlZigpLmlzTnVs
bCgpID8gIiIgOiAiIyIgKyB1cmwucmVmKCkpOwotICBjYXNlIEhvc3Q6IHsKLSAgICAvLyBOb3Rl
OiB0aGlzIGlzIHRoZSBJRSBzcGVjLiBUaGUgTlMgc3BlYyBzd2FwcyB0aGUgdHdvLCBpdCBzYXlz
Ci0gICAgLy8gIlRoZSBob3N0bmFtZSBwcm9wZXJ0eSBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0
aGUgaG9zdCBhbmQgcG9ydCBwcm9wZXJ0aWVzLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi4iCi0gICAg
Ly8gQmxlaC4KLSAgICBVU3RyaW5nIHN0ciA9IHVybC5ob3N0KCk7Ci0gICAgaWYgKHVybC5wb3J0
KCkpCi0gICAgICAgIHN0ciArPSAiOiIgKyBTdHJpbmc6Om51bWJlcigoaW50KXVybC5wb3J0KCkp
OwotICAgIHJldHVybiBqc1N0cmluZyhzdHIpOwotICB9Ci0gIGNhc2UgSG9zdG5hbWU6Ci0gICAg
cmV0dXJuIGpzU3RyaW5nKHVybC5ob3N0KCkpOwotICBjYXNlIEhyZWY6Ci0gICAgaWYgKCF1cmwu
aGFzUGF0aCgpKQotICAgICAgcmV0dXJuIGpzU3RyaW5nKHVybC5wcmV0dHlVUkwoKSArICIvIik7
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHVybC5wcmV0dHlVUkwoKSk7Ci0gIGNhc2UgUGF0aG5hbWU6
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHVybC5wYXRoKCkuaXNFbXB0eSgpID8gIi8iIDogdXJsLnBh
dGgoKSk7Ci0gIGNhc2UgUG9ydDoKLSAgICByZXR1cm4ganNTdHJpbmcodXJsLnBvcnQoKSA/IFN0
cmluZzo6bnVtYmVyKChpbnQpdXJsLnBvcnQoKSkgOiAiIik7Ci0gIGNhc2UgUHJvdG9jb2w6Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nKHVybC5wcm90b2NvbCgpICsgIjoiKTsKLSAgY2FzZSBTZWFyY2g6
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHVybC5xdWVyeSgpKTsKLSAgZGVmYXVsdDoKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQotfQotCi1i
b29sIExvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgaWYgKCFt
X2ZyYW1lKQotICAgIHJldHVybiBmYWxzZTsKLQotICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9IFdp
bmRvdzo6cmV0cmlldmVXaW5kb3cobV9mcmFtZSk7Ci0KLSAgY29uc3QgSGFzaEVudHJ5KiBlbnRy
eSA9IExvb2t1cDo6ZmluZEVudHJ5KCZMb2NhdGlvblRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBp
ZiAoIWVudHJ5IHx8ICEoZW50cnktPmF0dHIgJiBLSlM6OkZ1bmN0aW9uKSB8fCAoZW50cnktPnZh
bHVlLmZ1bmN0aW9uVmFsdWUgIT0gJkxvY2F0aW9uUHJvdG9GdW5jUmVwbGFjZTo6Y3JlYXRlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlbnRy
eS0+dmFsdWUuZnVuY3Rpb25WYWx1ZSAhPSAmTG9jYXRpb25Qcm90b0Z1bmNSZWxvYWQ6OmNyZWF0
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
ZW50cnktPnZhbHVlLmZ1bmN0aW9uVmFsdWUgIT0gJkxvY2F0aW9uUHJvdG9GdW5jQXNzaWduOjpj
cmVhdGUpKSAgewotICAgIGlmICghd2luZG93IHx8ICF3aW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20o
ZXhlYykpIHsKLSAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKHRoaXMpOwotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGdldFN0YXRpY1Byb3BlcnR5U2xvdDxMb2NhdGlv
biwgSlNPYmplY3Q+KGV4ZWMsICZMb2NhdGlvblRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwotfQotCi12b2lkIExvY2F0aW9uOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikKLXsKLSAgaWYg
KCFtX2ZyYW1lKQotICAgIHJldHVybjsKLQotICBEZXByZWNhdGVkU3RyaW5nIHN0ciA9IHZhbHVl
LT50b1N0cmluZyhleGVjKTsKLSAgS1VSTCB1cmwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7
Ci0gIGNvbnN0IFdpbmRvdyogd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhtX2ZyYW1l
KTsKLSAgYm9vbCBzYW1lRG9tYWluQWNjZXNzID0gd2luZG93ICYmIHdpbmRvdy0+YWxsb3dzQWNj
ZXNzRnJvbShleGVjKTsKLQotICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5k
RW50cnkoJkxvY2F0aW9uVGFibGUsIHByb3BlcnR5TmFtZSk7Ci0KLSAgaWYgKGVudHJ5KSB7Ci0g
ICAgICAvLyBjcm9zcy1kb21haW4gYWNjZXNzIHRvIHRoZSBsb2NhdGlvbiBpcyBhbGxvd2VkIHdo
ZW4gYXNzaWduaW5nIHRoZSB3aG9sZSBsb2NhdGlvbiwKLSAgICAgIC8vIGJ1dCBub3Qgd2hlbiBh
c3NpZ25pbmcgdGhlIGluZGl2aWR1YWwgcGllY2VzLCBzaW5jZSB0aGF0IG1pZ2h0IGluYWR2ZXJ0
ZW50bHkKLSAgICAgIC8vIGRpc2Nsb3NlIG90aGVyIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCBsb2Nh
dGlvbi4KLSAgICAgIGlmIChlbnRyeS0+dmFsdWUuaW50VmFsdWUgIT0gSHJlZiAmJiAhc2FtZURv
bWFpbkFjY2VzcykKLSAgICAgICAgICByZXR1cm47Ci0KLSAgICAgIHN3aXRjaCAoZW50cnktPnZh
bHVlLmludFZhbHVlKSB7Ci0gICAgICBjYXNlIEhyZWY6IHsKLSAgICAgICAgICBGcmFtZSogZnJh
bWUgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7Ci0gICAg
ICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIGlmICgh
ZnJhbWUtPmxvYWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24obV9mcmFtZSkpCi0gICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRl
VVJMKHN0cik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEhhc2g6IHsK
LSAgICAgICAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoIiMiKSkKLSAgICAgICAgICAgICAgc3RyID0g
c3RyLm1pZCgxKTsKLSAgICAgICAgICBpZiAodXJsLnJlZigpID09IHN0cikKLSAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgIHVybC5zZXRSZWYoc3RyKTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgIH0KLSAgICAgIGNhc2UgSG9zdDogewotICAgICAgICAgIHVybC5zZXRIb3N0QW5kUG9y
dChzdHIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBIb3N0bmFtZToK
LSAgICAgICAgICB1cmwuc2V0SG9zdChzdHIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBQYXRobmFtZToKLSAgICAgICAgICB1cmwuc2V0UGF0aChzdHIpOwotICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBQb3J0OgotICAgICAgICAgIHVybC5zZXRQb3J0KHN0ci50b1VJbnQoKSk7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFByb3RvY29sOgotICAgICAgICAgIHVybC5z
ZXRQcm90b2NvbChzdHIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTZWFyY2g6Ci0g
ICAgICAgICAgdXJsLnNldFF1ZXJ5KHN0cik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICAgIC8vIERpc2FsbG93IGNoYW5naW5nIG90aGVyIHByb3BlcnRpZXMgaW4g
TG9jYXRpb25UYWJsZS4gZS5nLiwgIndpbmRvdy5sb2NhdGlvbi50b1N0cmluZyA9IC4uLiIuCi0g
ICAgICAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzIw
PgotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgfSBlbHNlIHsKLSAgICAgIGlmIChzYW1l
RG9tYWluQWNjZXNzKQotICAgICAgICAgIEpTT2JqZWN0OjpwdXQoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0cik7Ci0gICAgICByZXR1cm47Ci0gIH0KLQotICBGcmFtZSogYWN0aXZlRnJh
bWUgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7Ci0gIGlm
ICghdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNl
KSB8fCBzYW1lRG9tYWluQWNjZXNzKSB7Ci0gICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZy
YW1lLT5zY3JpcHRQcm94eSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLSAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwuc3RyaW5nKCksIGFjdGl2ZUZy
YW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCBmYWxzZSwgdXNlckdlc3R1cmUpOwot
ICB9Ci19Ci0KLUpTVmFsdWUqIExvY2F0aW9uUHJvdG9GdW5jUmVwbGFjZTo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykK
LXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZMb2NhdGlvbjo6aW5mbykpCi0gICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgTG9jYXRpb24qIGxvY2F0
aW9uID0gc3RhdGljX2Nhc3Q8TG9jYXRpb24qPih0aGlzT2JqKTsKLSAgICBGcmFtZSogZnJhbWUg
PSBsb2NhdGlvbi0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLQotICAgIEZyYW1lKiBhY3RpdmVGcmFtZSA9IFdpbmRvdzo6cmV0cmlldmVB
Y3RpdmUoZXhlYyktPmltcGwoKS0+ZnJhbWUoKTsKLSAgICBpZiAoYWN0aXZlRnJhbWUpIHsKLSAg
ICAgICAgaWYgKCFhY3RpdmVGcmFtZS0+bG9hZGVyKCktPnNob3VsZEFsbG93TmF2aWdhdGlvbihm
cmFtZSkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgRGVwcmVj
YXRlZFN0cmluZyBzdHIgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKTsKLSAgICAgICAgY29uc3Qg
V2luZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKTsKLSAgICAgICAg
aWYgKCFzdHIuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgKHdpbmRvdyAmJiB3
aW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpKSB7Ci0gICAgICAgICAgICBib29sIHVzZXJH
ZXN0dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdFByb3h5KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpOwotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdl
KGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwoc3RyKS5zdHJpbmcoKSwgYWN0aXZl
RnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksIHRydWUsIHVzZXJHZXN0dXJlKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1Zh
bHVlKiBMb2NhdGlvblByb3RvRnVuY1JlbG9hZDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBpZiAoIXRo
aXNPYmotPmluaGVyaXRzKCZMb2NhdGlvbjo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgTG9jYXRpb24qIGxvY2F0aW9uID0gc3RhdGljX2Nh
c3Q8TG9jYXRpb24qPih0aGlzT2JqKTsKLSAgICBGcmFtZSogZnJhbWUgPSBsb2NhdGlvbi0+ZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQot
ICAgIFdpbmRvdyogd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSk7Ci0gICAg
aWYgKCF3aW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPnVybCgpLmRlcHJlY2F0ZWRT
dHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSB8fCAod2luZG93ICYmIHdp
bmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkpIHsKLSAgICAgICAgYm9vbCB1c2VyR2VzdHVy
ZSA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmltcGwoKS0+ZnJhbWUoKS0+c2NyaXB0
UHJveHkoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIo
KS0+c2NoZWR1bGVSZWZyZXNoKHVzZXJHZXN0dXJlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIExvY2F0aW9uUHJvdG9GdW5jQXNzaWduOjpjYWxsQXNG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBh
cmdzKQotewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkxvY2F0aW9uOjppbmZvKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICBMb2NhdGlvbiog
bG9jYXRpb24gPSBzdGF0aWNfY2FzdDxMb2NhdGlvbio+KHRoaXNPYmopOwotICAgIEZyYW1lKiBm
cmFtZSA9IGxvY2F0aW9uLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotCi0gICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gV2luZG93OjpyZXRy
aWV2ZUFjdGl2ZShleGVjKS0+aW1wbCgpLT5mcmFtZSgpOwotICAgIGlmIChhY3RpdmVGcmFtZSkg
ewotICAgICAgICBpZiAoIWFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0
aW9uKGZyYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICBj
b25zdCBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpOwotICAg
ICAgICBTdHJpbmcgZHN0VXJsID0gYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChh
cmdzWzBdLT50b1N0cmluZyhleGVjKSkuc3RyaW5nKCk7Ci0gICAgICAgIGlmICghZHN0VXJsLnN0
YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh3aW5kb3cgJiYgd2luZG93LT5hbGxv
d3NBY2Nlc3NGcm9tKGV4ZWMpKSkgewotICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFj
dGl2ZUZyYW1lLT5zY3JpcHRQcm94eSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKLSAgICAg
ICAgICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoaXMgSlMgd2FzIGNhbGxl
ZCB2aWEgYSB1c2VyIGdlc3R1cmUKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1
bGVMb2NhdGlvbkNoYW5nZShkc3RVcmwsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdS
ZWZlcnJlcigpLCBmYWxzZSwgdXNlckdlc3R1cmUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIExvY2F0aW9uUHJvdG9GdW5jVG9T
dHJpbmc6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTG9jYXRp
b246OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwot
ICAgIExvY2F0aW9uKiBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PExvY2F0aW9uKj4odGhpc09iaik7
Ci0gICAgRnJhbWUqIGZyYW1lID0gbG9jYXRpb24tPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBjb25zdCBLVVJMJiB1cmwgPSBm
cmFtZS0+bG9hZGVyKCktPnVybCgpOwotICAgIGlmICghdXJsLmhhc1BhdGgoKSkKLSAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKHVybC5wcmV0dHlVUkwoKSArICIvIik7Ci0gICAgcmV0dXJuIGpzU3Ry
aW5nKHVybC5wcmV0dHlVUkwoKSk7Ci19Ci0KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIHZvaWQg
RE9NV2luZG93VGltZXI6OmZpcmVkKCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dp
bmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCShy
ZXZpc2lvbiAyODc5NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBET01XaW5kb3c7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSlNFdmVudExpc3RlbmVy
OworICAgIGNsYXNzIEpTTG9jYXRpb247CiAgICAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXI7CisgICAgY2xhc3MgTG9jYXRpb247CiAgICAgY2xhc3MgUGF1c2VkVGltZW91dHM7CiAg
ICAgY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwogfQpAQCAtNDAsMTQgKzQyLDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBLSlMgewogCiAgICAgY2xhc3MgRE9NV2luZG93VGltZXI7
Ci0gICAgY2xhc3MgTG9jYXRpb247CiAgICAgY2xhc3MgV2luZG93OwogICAgIGNsYXNzIFdpbmRv
d0Z1bmM7CiAgICAgY2xhc3MgV2luZG93UHJpdmF0ZTsKIAogICAvLyBUaGlzIGlzIHRoZSBvbmx5
IFdlYkNvcmUgSlMgYmluZGluZyB3aGljaCBkb2VzIG5vdCBpbmhlcml0IGZyb20gRE9NT2JqZWN0
CiAgIGNsYXNzIFdpbmRvdyA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7Ci0gICAgZnJpZW5kIGNs
YXNzIExvY2F0aW9uOworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpKU0xvY2F0aW9uOwogICAg
IGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb247CiAgIHByb3RlY3RlZDoKICAg
ICBXaW5kb3coV2ViQ29yZTo6RE9NV2luZG93Kik7CkBAIC04NSw3ICs4Niw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogCiAgICAgdm9pZCB0aW1lckZpcmVkKERPTVdpbmRvd1RpbWVyKik7CiAKLSAgICBM
b2NhdGlvbiogbG9jYXRpb24oKSBjb25zdDsKKyAgICBXZWJDb3JlOjpKU0xvY2F0aW9uKiBsb2Nh
dGlvbigpIGNvbnN0OwogCiAgICAgLy8gRmluZHMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0
ZW5lciwgcmV0dXJucyAwIGlmIG5vIGV4aXN0aW5nIG9uZS4KICAgICBXZWJDb3JlOjpKU0V2ZW50
TGlzdGVuZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNl
KTsKQEAgLTE3NiwzNyArMTc3LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiBGT1JfRUFDSF9DTEFTUyhL
SlNfSU1QTEVNRU5UX1BST1RPVFlQRV9GVU5DVElPTl9XSVRIX0NSRUFURSkKICN1bmRlZiBGT1Jf
RUFDSF9DTEFTUwogCi0KLSAgY2xhc3MgTG9jYXRpb24gOiBwdWJsaWMgRE9NT2JqZWN0IHsKLSAg
ICBmcmllbmQgY2xhc3MgV2luZG93OwotICBwdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90
Jik7Ci0gICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4p
IGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgaW50IGF0dHIgPSBOb25lKTsKLQotICAgIGVudW0g
eyBIYXNoLCBIcmVmLCBIb3N0bmFtZSwgSG9zdCwgUGF0aG5hbWUsIFBvcnQsIFByb3RvY29sLCBT
ZWFyY2gsIAotICAgICAgICAgICBSZXBsYWNlLCBSZWxvYWQsIFRvU3RyaW5nLCBBc3NpZ24gfTsK
LQotICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0K
LQotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLQotICBwcml2YXRl
OgotICAgIExvY2F0aW9uKFdlYkNvcmU6OkZyYW1lKik7Ci0KLSAgICBXZWJDb3JlOjpGcmFtZSog
bV9mcmFtZTsKLSAgfTsKLQotI2RlZmluZSBGT1JfRUFDSF9DTEFTUyhtYWNybykgXAotICAgIG1h
Y3JvKExvY2F0aW9uUHJvdG9GdW5jQXNzaWduKSBcCi0gICAgbWFjcm8oTG9jYXRpb25Qcm90b0Z1
bmNUb1N0cmluZykgXAotICAgIG1hY3JvKExvY2F0aW9uUHJvdG9GdW5jUmVwbGFjZSkgXAotICAg
IG1hY3JvKExvY2F0aW9uUHJvdG9GdW5jUmVsb2FkKSBcCi0KLUZPUl9FQUNIX0NMQVNTKEtKU19J
TVBMRU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9OX1dJVEhfQ1JFQVRFKQotI3VuZGVmIEZPUl9FQUNI
X0NMQVNTCi0KIH0gLy8gbmFtZXNwYWNlIEtKUwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4
OiBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZFBhZ2UuY3BwCShyZXZpc2lvbiAyODc5NikKKysrIFdlYkNvcmUvaGlzdG9y
eS9DYWNoZWRQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR0ND
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiSlNMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGF1c2VkVGltZW91dHMuaCIK
</data>
<flag name="review"
          id="7784"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>