<?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>193644</bug_id>
          
          <creation_ts>2019-01-20 20:12:51 -0800</creation_ts>
          <short_desc>DFG: When inlining DataView set* intrinsics we need to set undefined as our result</short_desc>
          <delta_ts>2019-01-20 22:13:15 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1496498</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-20 20:12:51 -0800</bug_when>
    <thetext>....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496500</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-20 20:14:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/46209745&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496506</commentid>
    <comment_count>2</comment_count>
      <attachid>359668</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-20 20:39:47 -0800</bug_when>
    <thetext>Created attachment 359668
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496507</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-20 20:41:13 -0800</bug_when>
    <thetext>Attachment 359668 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2144:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2185:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496513</commentid>
    <comment_count>4</comment_count>
      <attachid>359668</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-01-20 21:19:42 -0800</bug_when>
    <thetext>Comment on attachment 359668
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496521</commentid>
    <comment_count>5</comment_count>
      <attachid>359668</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-20 22:13:14 -0800</bug_when>
    <thetext>Comment on attachment 359668
patch

Clearing flags on attachment: 359668

Committed r240229: &lt;https://trac.webkit.org/changeset/240229&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496522</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-20 22:13:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359668</attachid>
            <date>2019-01-20 20:39:47 -0800</date>
            <delta_ts>2019-01-20 22:13:14 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>104675</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDAyMjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDE5LTAxLTIwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIERGRzogV2hlbiBpbmxpbmluZyBEYXRhVmlldyBzZXQqIGludHJpbnNp
Y3Mgd2UgbmVlZCB0byBzZXQgdW5kZWZpbmVkIGFzIG91ciByZXN1bHQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzY0NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNDYyMDk3NDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBzdHJlc3MvZGF0YS12aWV3LXNldC1pbnRyaW5zaWMtdW5kZWZpbmVkLXJl
c3VsdC0yLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICogc3RyZXNzL2RhdGEt
dmlldy1zZXQtaW50cmluc2ljLXVuZGVmaW5lZC1yZXN1bHQuanM6IEFkZGVkLgorICAgICAgICAo
Zm9vKToKKyAgICAgICAgKGJhcik6CisKIDIwMTktMDEtMjAgIFNhYW0gQmFyYXRpICA8c2JhcmF0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92SGludCBtdXN0IG1lcmdlIE5vZGVCeXRlY29kZVVz
ZXNBc1ZhbHVlIGZvciBpdHMgY2hpbGQKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RhdGEtdmlldy1z
ZXQtaW50cmluc2ljLXVuZGVmaW5lZC1yZXN1bHQtMi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3N0cmVzcy9kYXRhLXZpZXctc2V0LWludHJpbnNpYy11bmRlZmluZWQtcmVzdWx0LTIuanMJKG5v
bmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZGF0YS12aWV3LXNldC1pbnRyaW5zaWMtdW5k
ZWZpbmVkLXJlc3VsdC0yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKK2Z1bmN0
aW9uIGZvbyh2aWV3KSB7CisgICAgcmV0dXJuIHZpZXcuc2V0SW50OCgwLCAwKTsKK30KK25vSW5s
aW5lKGZvbyk7CisKK2xldCBhID0gbmV3IEludDhBcnJheSgxMCk7CitsZXQgZGF0YVZpZXcgPSBu
ZXcgRGF0YVZpZXcoYS5idWZmZXIpOworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7
CisgICAgaWYgKGZvbyhkYXRhVmlldykgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJCYWQhIikKK30KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RhdGEtdmlldy1zZXQtaW50
cmluc2ljLXVuZGVmaW5lZC1yZXN1bHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
ZGF0YS12aWV3LXNldC1pbnRyaW5zaWMtdW5kZWZpbmVkLXJlc3VsdC5qcwkobm9uZXhpc3RlbnQp
CisrKyBKU1Rlc3RzL3N0cmVzcy9kYXRhLXZpZXctc2V0LWludHJpbnNpYy11bmRlZmluZWQtcmVz
dWx0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKK2xldCBzZXRJbnQ4ID0gRGF0
YVZpZXcucHJvdG90eXBlLnNldEludDg7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgbmV3IGJhcigp
OworICB4eXooc2V0SW50OCgwLCAwKSk7Cit9CisKK2Z1bmN0aW9uIGJhcihhKSB7CisgIGlmIChh
KSB7CisgICAgcmV0dXJuOworICB9CisgIGlmICgwID09PSB1bmRlZmluZWQpIHsKKyAgfQorICBh
ID0gKyBTdHJpbmcoMCk7CisgIGZvbygwKTsKK30KKwordHJ5IHsKKyAgICBmb28oKTsKK30gY2F0
Y2ggeyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MDIyMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNyBAQAorMjAxOS0wMS0yMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBERkc6IFdoZW4gaW5saW5pbmcgRGF0YVZpZXcgc2V0KiBpbnRyaW5zaWNzIHdlIG5l
ZWQgdG8gc2V0IHVuZGVmaW5lZCBhcyBvdXIgcmVzdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM2NDQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzQ2MjA5NzQ1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWxzbyBtYWtlcyBpdCBzbyB3ZSBmYWlsIGZhc3Qgd2hlbiB3ZSBtYWtl
IHRoaXMgbWlzdGFrZS4KKyAgICAgICAgSSd2ZSBtYWRlIHRoaXMgbWlzdGFrZSBtb3JlIHRoYW4g
b25jZS4KKworICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwpOgorCiAyMDE5LTAx
LTIwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdkhpbnQg
bXVzdCBtZXJnZSBOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSBmb3IgaXRzIGNoaWxkIGluIGJhY2t3
YXJkcyBwcm9wYWdhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI0MDIyMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTI3
LDEyNzYgKzIxMjcsMTI5MSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWND
YWxsCiAgICAgLy8gV2hpY2ggaXMgZXh0cmVtZWx5IGFtdXNpbmcsIGJ1dCBwcm9iYWJseSBub3Qg
d29ydGggb3B0aW1pemluZy4KICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2ggKGludHJpbnNpYykgewogCi0gICAgLy8gSW50
cmluc2ljIEZ1bmN0aW9uczoKKyAgICBib29sIGRpZFNldFJlc3VsdCA9IGZhbHNlOworICAgIGF1
dG8gc2V0UmVzdWx0ID0gWyZdIChOb2RlKiBub2RlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFkaWRTZXRSZXN1bHQpOworICAgICAgICBzZXQocmVzdWx0LCBub2RlKTsKKyAgICAgICAgZGlk
U2V0UmVzdWx0ID0gdHJ1ZTsKKyAgICB9OworCisgICAgYXV0byBpbmxpbmVJbnRyaW5zaWMgPSBb
Jl0geworICAgICAgICBzd2l0Y2ggKGludHJpbnNpYykgeworCisgICAgICAgIC8vIEludHJpbnNp
YyBGdW5jdGlvbnM6CisKKyAgICAgICAgY2FzZSBBYnNJbnRyaW5zaWM6IHsKKyAgICAgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGguYWJzKCkKKyAg
ICAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgICAgICBzZXRSZXN1bHQo
YWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFN
YWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2FzZSBBYnNJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYg
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5hYnMoKQogICAgICAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBzZXQocmVzdWx0LCBhZGRUb0dyYXBo
KEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOworICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGFkZFRvR3JhcGgoQXJpdGhBYnMsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgxLCByZWdpc3Rlck9mZnNldCkpKTsKKyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykpCisg
ICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3dJbnQzMkluREZH
KTsKKyAgICAgICAgICAgIHNldFJlc3VsdChub2RlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9h
dGluZ1BvaW50QWJzKCkpCisgICAgICAgIGNhc2UgTWluSW50cmluc2ljOgorICAgICAgICBjYXNl
IE1heEludHJpbnNpYzoKKyAgICAgICAgICAgIGlmIChoYW5kbGVNaW5NYXgocmVzdWx0LCBpbnRy
aW5zaWMgPT0gTWluSW50cmluc2ljID8gQXJpdGhNaW4gOiBBcml0aE1heCwgcmVnaXN0ZXJPZmZz
ZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnNlcnRDaGVja3MpKSB7CisgICAgICAg
ICAgICAgICAgZGlkU2V0UmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBp
bnNlcnRDaGVja3MoKTsKLSAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoQXJpdGhBYnMs
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKLSAg
ICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIE92ZXJmbG93KSkKLSAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9k
ZU1heU92ZXJmbG93SW50MzJJbkRGRyk7Ci0gICAgICAgIHNldChyZXN1bHQsIG5vZGUpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjYXNlIE1pbkludHJpbnNpYzoKLSAgICAg
ICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHQsIEFyaXRoTWluLCByZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGluc2VydENoZWNrcyk7Ci0gICAgICAgIAotICAg
IGNhc2UgTWF4SW50cmluc2ljOgotICAgICAgICByZXR1cm4gaGFuZGxlTWluTWF4KHJlc3VsdCwg
QXJpdGhNYXgsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW5z
ZXJ0Q2hlY2tzKTsKLQogI2RlZmluZSBERkdfQVJJVEhfVU5BUlkoY2FwaXRhbGl6ZWROYW1lLCBs
b3dlck5hbWUpIFwKLSAgICBjYXNlIGNhcGl0YWxpemVkTmFtZSMjSW50cmluc2ljOgotICAgIEZP
Ul9FQUNIX0RGR19BUklUSF9VTkFSWV9PUChERkdfQVJJVEhfVU5BUlkpCisgICAgICAgIGNhc2Ug
Y2FwaXRhbGl6ZWROYW1lIyNJbnRyaW5zaWM6CisgICAgICAgIEZPUl9FQUNIX0RGR19BUklUSF9V
TkFSWV9PUChERkdfQVJJVEhfVU5BUlkpCiAjdW5kZWYgREZHX0FSSVRIX1VOQVJZCi0gICAgewot
ICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgewotICAgICAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBzZXQocmVzdWx0LCBhZGRUb0dyYXBoKEpT
Q29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgQXJpdGg6OlVuYXJ5VHlwZSB0eXBlID0gQXJpdGg6OlVu
YXJ5VHlwZTo6U2luOwotICAgICAgICBzd2l0Y2ggKGludHJpbnNpYykgeworICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeworICAgICAg
ICAgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAgICAgICAgIHNldFJlc3VsdChhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQXJpdGg6OlVuYXJ5
VHlwZSB0eXBlID0gQXJpdGg6OlVuYXJ5VHlwZTo6U2luOworICAgICAgICAgICAgc3dpdGNoIChp
bnRyaW5zaWMpIHsKICNkZWZpbmUgREZHX0FSSVRIX1VOQVJZKGNhcGl0YWxpemVkTmFtZSwgbG93
ZXJOYW1lKSBcCi0gICAgICAgIGNhc2UgY2FwaXRhbGl6ZWROYW1lIyNJbnRyaW5zaWM6IFwKLSAg
ICAgICAgICAgIHR5cGUgPSBBcml0aDo6VW5hcnlUeXBlOjpjYXBpdGFsaXplZE5hbWU7IFwKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIEZPUl9FQUNIX0RGR19BUklUSF9VTkFSWV9PUChERkdfQVJJ
VEhfVU5BUlkpCisgICAgICAgICAgICBjYXNlIGNhcGl0YWxpemVkTmFtZSMjSW50cmluc2ljOiBc
CisgICAgICAgICAgICAgICAgdHlwZSA9IEFyaXRoOjpVbmFyeVR5cGU6OmNhcGl0YWxpemVkTmFt
ZTsgXAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBGT1JfRUFDSF9ERkdfQVJJVEhf
VU5BUllfT1AoREZHX0FSSVRIX1VOQVJZKQogI3VuZGVmIERGR19BUklUSF9VTkFSWQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgfQotICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgc2V0KHJlc3VsdCwgYWRk
VG9HcmFwaChBcml0aFVuYXJ5LCBPcEluZm8oc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5
cGU8QXJpdGg6OlVuYXJ5VHlwZT46OnR5cGU+KHR5cGUpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgY2FzZSBGUm91bmRJbnRyaW5zaWM6Ci0gICAgY2FzZSBTcXJ0SW50cmluc2lj
OiB7Ci0gICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAg
ICAgICAgIHNldChyZXN1bHQsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3Rh
bnROYU4pKSk7CisgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChBcml0aFVuYXJ5LCBP
cEluZm8oc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8QXJpdGg6OlVuYXJ5VHlwZT46
OnR5cGU+KHR5cGUpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVy
T2Zmc2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAg
ICAgTm9kZVR5cGUgbm9kZVR5cGUgPSBVbnJlYWNoYWJsZTsKLSAgICAgICAgc3dpdGNoIChpbnRy
aW5zaWMpIHsKICAgICAgICAgY2FzZSBGUm91bmRJbnRyaW5zaWM6Ci0gICAgICAgICAgICBub2Rl
VHlwZSA9IEFyaXRoRlJvdW5kOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3Fy
dEludHJpbnNpYzoKLSAgICAgICAgICAgIG5vZGVUeXBlID0gQXJpdGhTcXJ0OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAg
ICBzZXQocmVzdWx0LCBhZGRUb0dyYXBoKG5vZGVUeXBlLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9CisgICAgICAgIGNhc2UgU3FydEludHJpbnNpYzogeworICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsKKyAgICAgICAgICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKKyAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9jb25zdGFudE5hTikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KIAotICAgIGNhc2UgUG93SW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA8IDMpIHsKLSAgICAgICAgICAgIC8vIE1hdGgucG93KCkg
YW5kIE1hdGgucG93KHgpIHJldHVybiBOYU4uCisgICAgICAgICAgICBOb2RlVHlwZSBub2RlVHlw
ZSA9IFVucmVhY2hhYmxlOworICAgICAgICAgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKKyAgICAg
ICAgICAgIGNhc2UgRlJvdW5kSW50cmluc2ljOgorICAgICAgICAgICAgICAgIG5vZGVUeXBlID0g
QXJpdGhGUm91bmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNx
cnRJbnRyaW5zaWM6CisgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBBcml0aFNxcnQ7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgICAgIHNldChyZXN1bHQsIGFkZFRvR3JhcGgoSlND
b25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CisgICAgICAgICAgICBzZXRSZXN1bHQo
YWRkVG9HcmFwaChub2RlVHlwZSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJl
Z2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0g
ICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgeE9wZXJhbmQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7Ci0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciB5T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIs
IHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgc2V0KHJlc3VsdCwgYWRkVG9HcmFwaChBcml0aFBv
dywgZ2V0KHhPcGVyYW5kKSwgZ2V0KHlPcGVyYW5kKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQXJyYXlQdXNoSW50cmluc2ljOiB7Ci0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgaWYgKGlzWDg2KCkpIHsKLSAgICAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0jZW5kaWYKIAotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgQXJyYXlNb2Rl
IGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShBcnJheTo6V3JpdGUpOwotICAgICAgICBpZiAoIWFy
cmF5TW9kZS5pc0pTQXJyYXkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgot
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICBjYXNlIFBv
d0ludHJpbnNpYzogeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IDwgMykgeworICAgICAgICAgICAgICAgIC8vIE1hdGgucG93KCkgYW5kIE1hdGgucG93KHgpIHJl
dHVybiBOYU4uCisgICAgICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICAg
ICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4p
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKLQotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0
cik7IC8vIEZvciBzdG9yYWdlLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKQotICAgICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpKTsK
LSAgICAgICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBB
cnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbikp
OwotICAgICAgICAgICAgc2V0KHJlc3VsdCwgYXJyYXlQdXNoKTsKLSAgICAgICAgICAgIAorICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHlP
cGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpOwor
ICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoQXJpdGhQb3csIGdldCh4T3BlcmFuZCks
IGdldCh5T3BlcmFuZCkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGNhc2UgQXJyYXlTbGljZUludHJpbnNpYzogeworICAg
ICAgICBjYXNlIEFycmF5UHVzaEludHJpbnNpYzogewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgIGlmIChpc1g4NigpKSB7Ci0gICAgICAgICAgICAvLyBUaGVyZSBhcmVuJ3QgZW5vdWdo
IHJlZ2lzdGVycyBmb3IgdGhpcyB0byBiZSBkb25lIGVhc2lseS4KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiAyKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgaWYg
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRDYWNoZSkKLSAgICAgICAgICAgIHx8IG1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZENhY2hlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpID49IE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKEFy
cmF5OjpXcml0ZSk7CisgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5pc0pTQXJyYXkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9k
ZS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAg
IGluc2VydENoZWNrcygpOwogCi0gICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJh
eU1vZGUoQXJyYXk6OlJlYWQpOwotICAgICAgICBpZiAoIWFycmF5TW9kZS5pc0pTQXJyYXkoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChudWxscHRyKTsgLy8gRm9yIHN0b3JhZ2UuCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKQorICAgICAgICAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVn
aXN0ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgTm9kZSogYXJyYXlQdXNoID0gYWRkVG9H
cmFwaChOb2RlOjpWYXJBcmcsIEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGFycmF5UHVz
aCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgIGlmICghYXJyYXlNb2Rl
LmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBjYXNlIEFycmF5U2xpY2VJbnRyaW5zaWM6IHsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBU
aGVyZSBhcmVuJ3QgZW5vdWdoIHJlZ2lzdGVycyBmb3IgdGhpcyB0byBiZSBkb25lIGVhc2lseS4K
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAg
ICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8IDEpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkg
ewotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY3VycmVudE5v
ZGVPcmlnaW4oKS5zZW1hbnRpYyk7Ci0KLSAgICAgICAgICAgIFN0cnVjdHVyZSogYXJyYXlQcm90
b3R5cGVTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlKCktPnN0cnVjdHVy
ZSgqbV92bSk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG9iamVjdFByb3RvdHlwZVN0cnVjdHVy
ZSA9IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgqbV92bSk7Ci0K
LSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlYXNpbHkgcmVsYXggdGhlIEFycmF5L09i
amVjdC5wcm90b3R5cGUgdHJhbnNpdGlvbiBhcyBsb25nIGFzIHdlIE9TUiBleGl0dGVkIGlmIHdl
IHNhdyBhIGhvbGUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTczMTcxCi0gICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5hcnJheVNw
ZWNpZXNXYXRjaHBvaW50KCkuc3RhdGUoKSA9PSBJc1dhdGNoZWQKLSAgICAgICAgICAgICAgICAm
JiBnbG9iYWxPYmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQo
KQotICAgICAgICAgICAgICAgICYmIGFycmF5UHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpCi0gICAgICAgICAgICAgICAgJiYgb2JqZWN0UHJv
dG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpCi0g
ICAgICAgICAgICAgICAgJiYgZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5l
KCkpIHsKLQotICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHko
Z2xvYmFsT2JqZWN0LT5hcnJheVNwZWNpZXNXYXRjaHBvaW50KCkpOwotICAgICAgICAgICAgICAg
IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoZ2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFk
VGltZVdhdGNocG9pbnQoKSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlckFuZFdh
dGNoU3RydWN0dXJlVHJhbnNpdGlvbihhcnJheVByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgbV9ncmFwaC5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihvYmpl
Y3RQcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50Q2Fj
aGUpCisgICAgICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5o
YXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAg
ICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShBcnJheTo6UmVhZCk7CisgICAg
ICAgICAgICBpZiAoIWFycmF5TW9kZS5pc0pTQXJyYXkoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBOb2RlKiBhcnJheSA9IGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIC8v
IFdlIGRvIGEgZmV3IHRoaW5ncyBoZXJlIHRvIHByb3ZlIHRoYXQgd2UgYXJlbid0IHNraXBwaW5n
IGRvaW5nIHNpZGUtZWZmZWN0cyBpbiBhbiBvYnNlcnZhYmxlIHdheToKLSAgICAgICAgICAgICAg
ICAvLyAxLiBXZSBlbnN1cmUgdGhhdCB0aGUgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBoYXNuJ3Qg
YmVlbiBjaGFuZ2VkIChiZWNhdXNlIHRoZSBvYnNlcnZhYmxlCi0gICAgICAgICAgICAgICAgLy8g
ZWZmZWN0cyBvZiBzbGljZSByZXF1aXJlIHRoYXQgd2UgcGVyZm9ybSBhIEdldChhcnJheSwgImNv
bnN0cnVjdG9yIikgYW5kIHdlIGNhbiBza2lwCi0gICAgICAgICAgICAgICAgLy8gdGhhdCBpZiB3
ZSdyZSBhbiBvcmlnaW5hbCBhcnJheSBzdHJ1Y3R1cmUuIChXZSBjYW4gcmVsYXggdGhpcyBpbiB0
aGUgZnV0dXJlIGJ5IHVzaW5nCi0gICAgICAgICAgICAgICAgLy8gVHJ5R2V0QnlJZCBhbmQgQ2hl
Y2tDZWxsKS4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIDIuIFdlIGNo
ZWNrIHRoYXQgdGhlIGFycmF5IHdlJ3JlIGNhbGxpbmcgc2xpY2Ugb24gaGFzIHRoZSBzYW1lIGds
b2JhbCBvYmplY3QgYXMgdGhlIGxleGljYWwKLSAgICAgICAgICAgICAgICAvLyBnbG9iYWwgb2Jq
ZWN0IHRoYXQgdGhpcyBjb2RlIGlzIHJ1bm5pbmcgaW4uIFRoaXMgcmVxdWlyZW1lbnQgaXMgbmVj
ZXNzYXJ5IGJlY2F1c2Ugd2Ugc2V0dXAgdGhlCi0gICAgICAgICAgICAgICAgLy8gd2F0Y2hwb2lu
dHMgYWJvdmUgb24gdGhlIGxleGljYWwgZ2xvYmFsIG9iamVjdC4gVGhpcyBtZWFucyB0aGF0IGNv
ZGUgdGhhdCBjYWxscyBzbGljZSBvbgotICAgICAgICAgICAgICAgIC8vIGFycmF5cyBwcm9kdWNl
ZCBieSBvdGhlciBnbG9iYWwgb2JqZWN0cyB3b24ndCBnZXQgdGhpcyBvcHRpbWl6YXRpb24uIFdl
IGNvdWxkIHJlbGF4IHRoaXMKLSAgICAgICAgICAgICAgICAvLyByZXF1aXJlbWVudCBpbiB0aGUg
ZnV0dXJlIGJ5IGNoZWNraW5nIHRoYXQgdGhlIHdhdGNocG9pbnQgaGFzbid0IGZpcmVkIGF0IHJ1
bnRpbWUgaW4gdGhlIGNvZGUKLSAgICAgICAgICAgICAgICAvLyB3ZSBnZW5lcmF0ZSBpbnN0ZWFk
IG9mIHJlZ2lzdGVyaW5nIGl0IGFzIGEgd2F0Y2hwb2ludCB0aGF0IHdvdWxkIGludmFsaWRhdGUg
dGhlIGNvbXBpbGF0aW9uLgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8g
My4gQnkgcHJvdmluZyB3ZSdyZSBhbiBvcmlnaW5hbCBhcnJheSBzdHJ1Y3R1cmUsIHdlIGd1YXJh
bnRlZSB0aGF0IHRoZSBpbmNvbWluZyBhcnJheQotICAgICAgICAgICAgICAgIC8vIGlzbid0IGEg
c3ViY2xhc3Mgb2YgQXJyYXkuCisgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5pc0pTQXJyYXlX
aXRoT3JpZ2luYWxTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc3RydWN0dXJlU2V0OwotICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZVNldC5hZGQoZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0aEludDMyKSk7Ci0gICAgICAgICAgICAgICAgc3RydWN0
dXJlU2V0LmFkZChnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGUoQXJyYXlXaXRoQ29udGlndW91cykpOwotICAgICAgICAgICAgICAgIHN0cnVjdHVyZVNl
dC5hZGQoZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
KEFycmF5V2l0aERvdWJsZSkpOwotICAgICAgICAgICAgICAgIHN0cnVjdHVyZVNldC5hZGQoZ2xv
YmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKENvcHlPbldy
aXRlQXJyYXlXaXRoSW50MzIpKTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKGds
b2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShDb3B5T25X
cml0ZUFycmF5V2l0aENvbnRpZ3VvdXMpKTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQu
YWRkKGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShD
b3B5T25Xcml0ZUFycmF5V2l0aERvdWJsZSkpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmVT
ZXQpKSwgYXJyYXkpOwotCi0gICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYXJyYXkpOwot
ICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAyKQotICAg
ICAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7IC8vIFN0YXJ0IGluZGV4LgotICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAzKQotICAgICAgICAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVn
aXN0ZXJPZmZzZXQpKSk7IC8vIEVuZCBpbmRleC4KLSAgICAgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYXJyYXkpKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoYXJyYXlNb2RlLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOiB7CisgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGN1cnJlbnROb2RlT3JpZ2luKCkuc2VtYW50aWMp
OworCisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBhcnJheVByb3RvdHlwZVN0cnVjdHVyZSA9
IGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5cGUoKS0+c3RydWN0dXJlKCptX3ZtKTsKKyAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZSA9IGdsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgqbV92bSk7CisKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2UgY291bGQgZWFzaWx5IHJlbGF4IHRoZSBBcnJheS9PYmplY3QucHJv
dG90eXBlIHRyYW5zaXRpb24gYXMgbG9uZyBhcyB3ZSBPU1IgZXhpdHRlZCBpZiB3ZSBzYXcgYSBo
b2xlLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzMxNzEKKyAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5hcnJheVNw
ZWNpZXNXYXRjaHBvaW50KCkuc3RhdGUoKSA9PSBJc1dhdGNoZWQKKyAgICAgICAgICAgICAgICAg
ICAgJiYgZ2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgYXJyYXlQcm90b3R5cGVTdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkKKyAgICAgICAgICAgICAgICAgICAg
JiYgb2JqZWN0UHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3Rp
bGxWYWxpZCgpCisgICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbE9iamVjdC0+YXJyYXlQcm90
b3R5cGVDaGFpbklzU2FuZSgpKSB7CisKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRj
aHBvaW50cygpLmFkZExhemlseShnbG9iYWxPYmplY3QtPmFycmF5U3BlY2llc1dhdGNocG9pbnQo
KSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHko
Z2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRpb24oYXJyYXlQ
cm90b3R5cGVTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVy
QW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZSk7CisK
KyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogYXJyYXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0
ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gYSBmZXcgdGhpbmdzIGhl
cmUgdG8gcHJvdmUgdGhhdCB3ZSBhcmVuJ3Qgc2tpcHBpbmcgZG9pbmcgc2lkZS1lZmZlY3RzIGlu
IGFuIG9ic2VydmFibGUgd2F5OgorICAgICAgICAgICAgICAgICAgICAvLyAxLiBXZSBlbnN1cmUg
dGhhdCB0aGUgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBoYXNuJ3QgYmVlbiBjaGFuZ2VkIChiZWNh
dXNlIHRoZSBvYnNlcnZhYmxlCisgICAgICAgICAgICAgICAgICAgIC8vIGVmZmVjdHMgb2Ygc2xp
Y2UgcmVxdWlyZSB0aGF0IHdlIHBlcmZvcm0gYSBHZXQoYXJyYXksICJjb25zdHJ1Y3RvciIpIGFu
ZCB3ZSBjYW4gc2tpcAorICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGlmIHdlJ3JlIGFuIG9y
aWdpbmFsIGFycmF5IHN0cnVjdHVyZS4gKFdlIGNhbiByZWxheCB0aGlzIGluIHRoZSBmdXR1cmUg
YnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gVHJ5R2V0QnlJZCBhbmQgQ2hlY2tDZWxs
KS4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gMi4gV2Ug
Y2hlY2sgdGhhdCB0aGUgYXJyYXkgd2UncmUgY2FsbGluZyBzbGljZSBvbiBoYXMgdGhlIHNhbWUg
Z2xvYmFsIG9iamVjdCBhcyB0aGUgbGV4aWNhbAorICAgICAgICAgICAgICAgICAgICAvLyBnbG9i
YWwgb2JqZWN0IHRoYXQgdGhpcyBjb2RlIGlzIHJ1bm5pbmcgaW4uIFRoaXMgcmVxdWlyZW1lbnQg
aXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2Ugc2V0dXAgdGhlCisgICAgICAgICAgICAgICAgICAgIC8v
IHdhdGNocG9pbnRzIGFib3ZlIG9uIHRoZSBsZXhpY2FsIGdsb2JhbCBvYmplY3QuIFRoaXMgbWVh
bnMgdGhhdCBjb2RlIHRoYXQgY2FsbHMgc2xpY2Ugb24KKyAgICAgICAgICAgICAgICAgICAgLy8g
YXJyYXlzIHByb2R1Y2VkIGJ5IG90aGVyIGdsb2JhbCBvYmplY3RzIHdvbid0IGdldCB0aGlzIG9w
dGltaXphdGlvbi4gV2UgY291bGQgcmVsYXggdGhpcworICAgICAgICAgICAgICAgICAgICAvLyBy
ZXF1aXJlbWVudCBpbiB0aGUgZnV0dXJlIGJ5IGNoZWNraW5nIHRoYXQgdGhlIHdhdGNocG9pbnQg
aGFzbid0IGZpcmVkIGF0IHJ1bnRpbWUgaW4gdGhlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gd2UgZ2VuZXJhdGUgaW5zdGVhZCBvZiByZWdpc3RlcmluZyBpdCBhcyBhIHdhdGNocG9pbnQg
dGhhdCB3b3VsZCBpbnZhbGlkYXRlIHRoZSBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gMy4gQnkgcHJvdmluZyB3ZSdyZSBhbiBvcmln
aW5hbCBhcnJheSBzdHJ1Y3R1cmUsIHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmNvbWluZyBhcnJh
eQorICAgICAgICAgICAgICAgICAgICAvLyBpc24ndCBhIHN1YmNsYXNzIG9mIEFycmF5LgogCi0g
ICAgICAgICAgICAgICAgTm9kZSogYXJyYXlTbGljZSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBBcnJheVNsaWNlLCBPcEluZm8oKSwgT3BJbmZvKCkpOwotICAgICAgICAgICAgICAgIHNldChy
ZXN1bHQsIGFycmF5U2xpY2UpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc3RydWN0dXJlU2V0OworICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVTZXQuYWRkKGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhJbnQzMikpOworICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmVTZXQuYWRkKGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZShBcnJheVdpdGhDb250aWd1b3VzKSk7CisgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZVNldC5hZGQoZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlKEFycmF5V2l0aERvdWJsZSkpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVTZXQuYWRkKGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZShDb3B5T25Xcml0ZUFycmF5V2l0aEludDMyKSk7CisgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZVNldC5hZGQoZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlKENvcHlPbldyaXRlQXJyYXlXaXRoQ29udGlndW91cykpOworICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZShDb3B5T25Xcml0ZUFycmF5V2l0aERvdWJsZSkpOworICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlU2V0KSksIGFycmF5KTsKKworICAgICAgICAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChhcnJheSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KSkpOyAvLyBTdGFydCBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID49IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRWYXJB
cmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQp
KSk7IC8vIEVuZCBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYWRk
VG9HcmFwaChHZXRCdXR0ZXJmbHksIGFycmF5KSk7CisKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogYXJyYXlTbGljZSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBBcnJheVNsaWNlLCBPcElu
Zm8oKSwgT3BJbmZvKCkpOworICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYXJyYXlTbGlj
ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQogCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2FzZSBBcnJh
eUluZGV4T2ZJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIDwgMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAobV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFk
SW5kZXhpbmdUeXBlKQotICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRDYWNoZSkKLSAgICAg
ICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIEJhZENhY2hlKQotICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdl
dEFycmF5TW9kZShBcnJheTo6UmVhZCk7Ci0gICAgICAgIGlmICghYXJyYXlNb2RlLmlzSlNBcnJh
eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghYXJyYXlNb2Rl
LmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBjYXNlIEFycmF5SW5kZXhPZkludHJpbnNpYzogeworICAgICAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgMikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gY29udmVydCBhcnJheXMg
aW50byBvbmUgdHlwZSBqdXN0IHRvIHBlcmZvcm0gaW5kZXhPZi4KLSAgICAgICAgaWYgKGFycmF5
TW9kZS5kb2VzQ29udmVyc2lvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIEJhZEluZGV4aW5nVHlwZSkKKyAgICAgICAgICAgICAgICB8fCBtX2lubGlu
ZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRD
b25zdGFudENhY2hlKQorICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKQorICAgICAgICAg
ICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIEJhZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6
RG91YmxlOgotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czogewotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGN1cnJlbnROb2RlT3JpZ2luKCkuc2VtYW50aWMpOwot
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5UHJvdG90eXBlU3RydWN0dXJlID0gZ2xvYmFs
T2JqZWN0LT5hcnJheVByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKm1fdm0pOwotICAgICAgICAgICAg
U3RydWN0dXJlKiBvYmplY3RQcm90b3R5cGVTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKm1fdm0pOwotCi0gICAgICAgICAgICAvLyBGSVhNRTog
V2UgY291bGQgZWFzaWx5IHJlbGF4IHRoZSBBcnJheS9PYmplY3QucHJvdG90eXBlIHRyYW5zaXRp
b24gYXMgbG9uZyBhcyB3ZSBPU1IgZXhpdHRlZCBpZiB3ZSBzYXcgYSBob2xlLgotICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzE3MQotICAg
ICAgICAgICAgaWYgKGFycmF5UHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpCi0gICAgICAgICAgICAgICAgJiYgb2JqZWN0UHJvdG90eXBlU3Ry
dWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpCi0gICAgICAgICAg
ICAgICAgJiYgZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkpIHsKKyAg
ICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoQXJyYXk6OlJlYWQp
OworICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuaXNKU0FycmF5KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlckFuZFdh
dGNoU3RydWN0dXJlVHJhbnNpdGlvbihhcnJheVByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgbV9ncmFwaC5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihvYmpl
Y3RQcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuaXNKU0Fy
cmF5V2l0aE9yaWdpbmFsU3RydWN0dXJlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICAvLyBXZSBk
byBub3Qgd2FudCB0byBjb252ZXJ0IGFycmF5cyBpbnRvIG9uZSB0eXBlIGp1c3QgdG8gcGVyZm9y
bSBpbmRleE9mLgorICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5kb2VzQ29udmVyc2lvbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIE5vZGUqIGFy
cmF5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYXJyYXkpOwotICAgICAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rl
ck9mZnNldCkpKTsgLy8gU2VhcmNoIGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID49IDMpCi0gICAgICAgICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkp
KTsgLy8gU3RhcnQgaW5kZXguCi0gICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0
cik7CisgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAg
ICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjdXJyZW50
Tm9kZU9yaWdpbigpLnNlbWFudGljKTsKKworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYXJy
YXlQcm90b3R5cGVTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlKCktPnN0
cnVjdHVyZSgqbV92bSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvYmplY3RQcm90b3R5
cGVTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUo
Km1fdm0pOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGVhc2lseSByZWxh
eCB0aGUgQXJyYXkvT2JqZWN0LnByb3RvdHlwZSB0cmFuc2l0aW9uIGFzIGxvbmcgYXMgd2UgT1NS
IGV4aXR0ZWQgaWYgd2Ugc2F3IGEgaG9sZS4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMTcxCisgICAgICAgICAgICAgICAgaWYg
KGFycmF5UHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxW
YWxpZCgpCisgICAgICAgICAgICAgICAgICAgICYmIG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKQorICAgICAgICAgICAgICAgICAg
ICAmJiBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKSkgeworCisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRp
b24oYXJyYXlQcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVj
dHVyZSk7CisKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogYXJyYXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
YXJyYXkpOworICAgICAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7IC8vIFNlYXJjaCBlbGVtZW50
LgorICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0g
MykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpKTsgLy8gU3RhcnQgaW5kZXguCisg
ICAgICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOworCisgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgQXJyYXlJbmRl
eE9mLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKCkpOworICAgICAgICAgICAg
ICAgICAgICBzZXRSZXN1bHQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgQXJyYXlJbmRleE9mLCBPcEluZm8oYXJyYXlNb2RlLmFzV29y
ZCgpKSwgT3BJbmZvKCkpOwotICAgICAgICAgICAgICAgIHNldChyZXN1bHQsIG5vZGUpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQXJyYXlQb3BJbnRyaW5zaWM6IHsKLSAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJy
YXlNb2RlKEFycmF5OjpXcml0ZSk7Ci0gICAgICAgIGlmICghYXJyYXlNb2RlLmlzSlNBcnJheSgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkRvdWJsZToKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKLSAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAg
ICAgICAgIE5vZGUqIGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwotICAgICAgICAgICAgc2V0KHJlc3VsdCwg
YXJyYXlQb3ApOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBjYXNlIEFycmF5UG9wSW50cmluc2ljOiB7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUo
QXJyYXk6OldyaXRlKTsKKyAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzSlNBcnJheSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlN
b2RlLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICAgICAgTm9kZSogYXJyYXlQb3AgPSBhZGRU
b0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQp
KSk7CisgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGFycmF5UG9wKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEF0b21pY3NBZGRJbnRyaW5z
aWM6Ci0gICAgY2FzZSBBdG9taWNzQW5kSW50cmluc2ljOgotICAgIGNhc2UgQXRvbWljc0NvbXBh
cmVFeGNoYW5nZUludHJpbnNpYzoKLSAgICBjYXNlIEF0b21pY3NFeGNoYW5nZUludHJpbnNpYzoK
LSAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlSW50cmluc2ljOgotICAgIGNhc2UgQXRvbWljc0xv
YWRJbnRyaW5zaWM6Ci0gICAgY2FzZSBBdG9taWNzT3JJbnRyaW5zaWM6Ci0gICAgY2FzZSBBdG9t
aWNzU3RvcmVJbnRyaW5zaWM6Ci0gICAgY2FzZSBBdG9taWNzU3ViSW50cmluc2ljOgotICAgIGNh
c2UgQXRvbWljc1hvckludHJpbnNpYzogewotICAgICAgICBpZiAoIWlzNjRCaXQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0gTGFz
dE5vZGVUeXBlOwotICAgICAgICBBcnJheTo6QWN0aW9uIGFjdGlvbiA9IEFycmF5OjpXcml0ZTsK
LSAgICAgICAgdW5zaWduZWQgbnVtQXJncyA9IDA7IC8vIE51bWJlciBvZiBhY3R1YWwgYXJnczsg
d2UgYWRkIG9uZSBmb3IgdGhlIGJhY2tpbmcgc3RvcmUgcG9pbnRlci4KLSAgICAgICAgc3dpdGNo
IChpbnRyaW5zaWMpIHsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEF0b21pY3NBZGRJbnRy
aW5zaWM6Ci0gICAgICAgICAgICBvcCA9IEF0b21pY3NBZGQ7Ci0gICAgICAgICAgICBudW1Bcmdz
ID0gMzsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEF0b21pY3NBbmRJbnRyaW5z
aWM6Ci0gICAgICAgICAgICBvcCA9IEF0b21pY3NBbmQ7Ci0gICAgICAgICAgICBudW1BcmdzID0g
MzsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEF0b21pY3NDb21wYXJlRXhjaGFu
Z2VJbnRyaW5zaWM6Ci0gICAgICAgICAgICBvcCA9IEF0b21pY3NDb21wYXJlRXhjaGFuZ2U7Ci0g
ICAgICAgICAgICBudW1BcmdzID0gNDsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEF0b21pY3NFeGNoYW5nZUludHJpbnNpYzoKLSAgICAgICAgICAgIG9wID0gQXRvbWljc0V4Y2hh
bmdlOwotICAgICAgICAgICAgbnVtQXJncyA9IDM7Ci0gICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBdG9taWNzSXNMb2NrRnJlZUludHJpbnNpYzoKLSAgICAgICAgICAgIC8vIFRoaXMg
Z2V0cyBubyBiYWNraW5nIHN0b3JlLCBidXQgd2UgbmVlZCBubyBzcGVjaWFsIGxvZ2ljIGZvciB0
aGlzIHNpbmNlIHRoaXMgYWxzbyBkb2VzCi0gICAgICAgICAgICAvLyBub3QgbmVlZCB2YXJhcmdz
LgotICAgICAgICAgICAgb3AgPSBBdG9taWNzSXNMb2NrRnJlZTsKLSAgICAgICAgICAgIG51bUFy
Z3MgPSAxOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXRvbWljc0xvYWRJbnRy
aW5zaWM6Ci0gICAgICAgICAgICBvcCA9IEF0b21pY3NMb2FkOwotICAgICAgICAgICAgbnVtQXJn
cyA9IDI7Ci0gICAgICAgICAgICBhY3Rpb24gPSBBcnJheTo6UmVhZDsKLSAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEF0b21pY3NPckludHJpbnNpYzoKLSAgICAgICAgICAgIG9wID0g
QXRvbWljc09yOwotICAgICAgICAgICAgbnVtQXJncyA9IDM7Ci0gICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBdG9taWNzU3RvcmVJbnRyaW5zaWM6Ci0gICAgICAgICAgICBvcCA9IEF0
b21pY3NTdG9yZTsKLSAgICAgICAgICAgIG51bUFyZ3MgPSAzOwotICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXRvbWljc1N1YkludHJpbnNpYzoKLSAgICAgICAgICAgIG9wID0gQXRv
bWljc1N1YjsKLSAgICAgICAgICAgIG51bUFyZ3MgPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXRvbWljc1hvckludHJpbnNpYzoKLSAgICAgICAgICAgIG9wID0gQXRvbWlj
c1hvcjsKLSAgICAgICAgICAgIG51bUFyZ3MgPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIDwgMSArIG51bUFy
Z3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpbnNlcnRD
aGVja3MoKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxOb2RlKiwgMz4gYXJnczsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkKLSAgICAgICAgICAgIGFy
Z3MuYXBwZW5kKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxICsgaSwgcmVnaXN0ZXJP
ZmZzZXQpKSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlKiByZXN1bHROb2RlOwotICAgICAgICBp
ZiAobnVtQXJncyArIDEgPD0gMykgewotICAgICAgICAgICAgd2hpbGUgKGFyZ3Muc2l6ZSgpIDwg
MykKLSAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChudWxscHRyKTsKLSAgICAgICAgICAgIHJl
c3VsdE5vZGUgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RV
c2luZ1ByZWRpY3Rpb25zLCBhY3Rpb24pLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBh
cmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGZvciAoTm9kZSogbm9kZSA6IGFyZ3MpCi0gICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
bm9kZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsKLSAgICAgICAgICAg
IHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbyhBcnJheU1v
ZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMsIGFjdGlvbikuYXNXb3JkKCkpLCBPcElu
Zm8ocHJlZGljdGlvbikpOworICAgICAgICBjYXNlIEF0b21pY3NYb3JJbnRyaW5zaWM6IHsKKyAg
ICAgICAgICAgIGlmICghaXM2NEJpdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZVR5cGUgb3AgPSBMYXN0Tm9kZVR5cGU7Cisg
ICAgICAgICAgICBBcnJheTo6QWN0aW9uIGFjdGlvbiA9IEFycmF5OjpXcml0ZTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG51bUFyZ3MgPSAwOyAvLyBOdW1iZXIgb2YgYWN0dWFsIGFyZ3M7IHdlIGFk
ZCBvbmUgZm9yIHRoZSBiYWNraW5nIHN0b3JlIHBvaW50ZXIuCisgICAgICAgICAgICBzd2l0Y2gg
KGludHJpbnNpYykgeworICAgICAgICAgICAgY2FzZSBBdG9taWNzQWRkSW50cmluc2ljOgorICAg
ICAgICAgICAgICAgIG9wID0gQXRvbWljc0FkZDsKKyAgICAgICAgICAgICAgICBudW1BcmdzID0g
MzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRvbWljc0FuZElu
dHJpbnNpYzoKKyAgICAgICAgICAgICAgICBvcCA9IEF0b21pY3NBbmQ7CisgICAgICAgICAgICAg
ICAgbnVtQXJncyA9IDM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEF0b21pY3NDb21wYXJlRXhjaGFuZ2VJbnRyaW5zaWM6CisgICAgICAgICAgICAgICAgb3AgPSBB
dG9taWNzQ29tcGFyZUV4Y2hhbmdlOworICAgICAgICAgICAgICAgIG51bUFyZ3MgPSA0OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2VJbnRy
aW5zaWM6CisgICAgICAgICAgICAgICAgb3AgPSBBdG9taWNzRXhjaGFuZ2U7CisgICAgICAgICAg
ICAgICAgbnVtQXJncyA9IDM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEF0b21pY3NJc0xvY2tGcmVlSW50cmluc2ljOgorICAgICAgICAgICAgICAgIC8vIFRoaXMg
Z2V0cyBubyBiYWNraW5nIHN0b3JlLCBidXQgd2UgbmVlZCBubyBzcGVjaWFsIGxvZ2ljIGZvciB0
aGlzIHNpbmNlIHRoaXMgYWxzbyBkb2VzCisgICAgICAgICAgICAgICAgLy8gbm90IG5lZWQgdmFy
YXJncy4KKyAgICAgICAgICAgICAgICBvcCA9IEF0b21pY3NJc0xvY2tGcmVlOworICAgICAgICAg
ICAgICAgIG51bUFyZ3MgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBBdG9taWNzTG9hZEludHJpbnNpYzoKKyAgICAgICAgICAgICAgICBvcCA9IEF0b21pY3NM
b2FkOworICAgICAgICAgICAgICAgIG51bUFyZ3MgPSAyOworICAgICAgICAgICAgICAgIGFjdGlv
biA9IEFycmF5OjpSZWFkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBdG9taWNzT3JJbnRyaW5zaWM6CisgICAgICAgICAgICAgICAgb3AgPSBBdG9taWNzT3I7Cisg
ICAgICAgICAgICAgICAgbnVtQXJncyA9IDM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEF0b21pY3NTdG9yZUludHJpbnNpYzoKKyAgICAgICAgICAgICAgICBvcCA9
IEF0b21pY3NTdG9yZTsKKyAgICAgICAgICAgICAgICBudW1BcmdzID0gMzsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXRvbWljc1N1YkludHJpbnNpYzoKKyAgICAg
ICAgICAgICAgICBvcCA9IEF0b21pY3NTdWI7CisgICAgICAgICAgICAgICAgbnVtQXJncyA9IDM7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEF0b21pY3NYb3JJbnRy
aW5zaWM6CisgICAgICAgICAgICAgICAgb3AgPSBBdG9taWNzWG9yOworICAgICAgICAgICAgICAg
IG51bUFyZ3MgPSAzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSA8
IDEgKyBudW1BcmdzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFZlY3RvcjxOb2RlKiwgMz4gYXJnczsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1BcmdzOyArK2kpCisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpLCByZWdpc3Rlck9mZnNldCkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTm9kZSogcmVzdWx0Tm9kZTsKKyAgICAgICAgICAgIGlmIChudW1B
cmdzICsgMSA8PSAzKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ3Muc2l6ZSgpIDwgMykK
KyAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQobnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhBcnJheU1vZGUoQXJyYXk6OlNl
bGVjdFVzaW5nUHJlZGljdGlvbnMsIGFjdGlvbikuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlv
biksIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBhcmdzKQorICAgICAgICAgICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChub2RlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChu
dWxscHRyKTsKKyAgICAgICAgICAgICAgICByZXN1bHROb2RlID0gYWRkVG9HcmFwaChOb2RlOjpW
YXJBcmcsIG9wLCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25z
LCBhY3Rpb24pLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldChyZXN1
bHQsIHJlc3VsdE5vZGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKLSAgICBjYXNl
IFBhcnNlSW50SW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA8IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgUGFyc2VJ
bnRJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA8IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRDZWxsKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRDZWxsKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZU9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdp
c3Rlck9mZnNldCk7Ci0gICAgICAgIE5vZGUqIHBhcnNlSW50OwotICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikKLSAgICAgICAgICAgIHBhcnNlSW50ID0gYWRkVG9H
cmFwaChQYXJzZUludCwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZhbHVlT3Bl
cmFuZCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA+IDIpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJhZGl4T3Bl
cmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAg
ICAgICAgICAgIHBhcnNlSW50ID0gYWRkVG9HcmFwaChQYXJzZUludCwgT3BJbmZvKCksIE9wSW5m
byhwcmVkaWN0aW9uKSwgZ2V0KHZhbHVlT3BlcmFuZCksIGdldChyYWRpeE9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlT3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0
KTsKKyAgICAgICAgICAgIE5vZGUqIHBhcnNlSW50OworICAgICAgICAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID09IDIpCisgICAgICAgICAgICAgICAgcGFyc2VJbnQgPSBhZGRU
b0dyYXBoKFBhcnNlSW50LCBPcEluZm8oKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmFsdWVP
cGVyYW5kKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiAyKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmFkaXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0
ZXJPZmZzZXQpOworICAgICAgICAgICAgICAgIHBhcnNlSW50ID0gYWRkVG9HcmFwaChQYXJzZUlu
dCwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZhbHVlT3BlcmFuZCksIGdldChy
YWRpeE9wZXJhbmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldFJlc3VsdChwYXJz
ZUludCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBzZXQo
cmVzdWx0LCBwYXJzZUludCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KIAotICAgIGNh
c2UgQ2hhckNvZGVBdEludHJpbnNpYzogewotICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBD
aGFyQ29kZUF0SW50cmluc2ljOiB7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
aW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzT3BlcmFuZCA9IHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0
cmluZ0NoYXJDb2RlQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJyYXk6OlN0cmluZywgQXJyYXk6OlJl
YWQpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0KGluZGV4T3BlcmFuZCkpOworICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCk7
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgTm9kZSogY2hh
ckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJy
YXk6OlN0cmluZywgQXJyYXk6OlJlYWQpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0
KGluZGV4T3BlcmFuZCkpOwogCi0gICAgICAgIHNldChyZXN1bHQsIGNoYXJDb2RlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgICAgICAgICAgc2V0UmVzdWx0KGNoYXJDb2RlKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICBjYXNlIENoYXJBdElu
dHJpbnNpYzogewotICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBDaGFyQXRJbnRyaW5zaWM6
IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXhP
cGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwot
ICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcEluZm8o
QXJyYXlNb2RlKEFycmF5OjpTdHJpbmcsIEFycmF5OjpSZWFkKS5hc1dvcmQoKSksIGdldCh0aGlz
T3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQpKTsKKyAgICAgICAgICAgIGluc2VydENoZWNrcygp
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lz
dGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJp
bmdDaGFyQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJyYXk6OlN0cmluZywgQXJyYXk6OlJlYWQpLmFz
V29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0KGluZGV4T3BlcmFuZCkpOwogCi0gICAgICAg
IHNldChyZXN1bHQsIGNoYXJDb2RlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IGNhc2UgQ2x6MzJJbnRyaW5zaWM6IHsKLSAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKQotICAgICAgICAgICAgc2V0KHJl
c3VsdCwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUoanNOdW1i
ZXIoMzIpKSkpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBOb2RlKiBvcGVyYW5kID0g
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICBzZXQocmVzdWx0LCBhZGRUb0dyYXBoKEFyaXRoQ2x6MzIsIG9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIHNldFJlc3VsdChjaGFyQ29kZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBGcm9tQ2hh
ckNvZGVJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICE9IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7Ci0gICAgICAgIE5vZGUqIGNoYXJDb2Rl
ID0gYWRkVG9HcmFwaChTdHJpbmdGcm9tQ2hhckNvZGUsIGdldChpbmRleE9wZXJhbmQpKTsKKyAg
ICAgICAgY2FzZSBDbHozMkludHJpbnNpYzogeworICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
CisgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkKKyAgICAg
ICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFw
aC5mcmVlemUoanNOdW1iZXIoMzIpKSkpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIE5vZGUqIG9wZXJhbmQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwg
cmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChB
cml0aENsejMyLCBvcGVyYW5kKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZyb21DaGFyQ29kZUludHJpbnNpYzogewor
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHNldChyZXN1bHQsIGNoYXJDb2RlKTsK
KyAgICAgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KTsKKyAgICAgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdGcm9t
Q2hhckNvZGUsIGdldChpbmRleE9wZXJhbmQpKTsKIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9CisgICAgICAgICAgICBzZXRSZXN1bHQoY2hhckNvZGUpOwogCi0gICAgY2FzZSBSZWdFeHBF
eGVjSW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAh
PSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaW5zZXJ0
Q2hlY2tzKCk7Ci0gICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cEV4
ZWMsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBhZGRUb0dyYXBoKEdldEdsb2JhbE9i
amVjdCwgY2FsbGVlKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVy
T2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpKTsKLSAgICAgICAgc2V0KHJlc3VsdCwgcmVnRXhwRXhlYyk7Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgUmVnRXhwVGVzdEludHJp
bnNpYzoKLSAgICBjYXNlIFJlZ0V4cFRlc3RGYXN0SW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBpZiAoaW50
cmluc2ljID09IFJlZ0V4cFRlc3RJbnRyaW5zaWMpIHsKLSAgICAgICAgICAgIC8vIERvbid0IGlu
bGluZSBpbnRyaW5zaWMgaWYgd2UgZXhpdGVkIGR1ZSB0byBvbmUgb2YgdGhlIHByaW1vcmRpYWwg
UmVnRXhwIGNoZWNrcyBmYWlsaW5nLgotICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENlbGwpKQorICAg
ICAgICBjYXNlIFJlZ0V4cEV4ZWNJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICBO
b2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5m
byhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRHbG9iYWxPYmplY3QsIGNhbGxlZSksIGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICBz
ZXRSZXN1bHQocmVnRXhwRXhlYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0SW50
cmluc2ljOgorICAgICAgICBjYXNlIFJlZ0V4cFRlc3RGYXN0SW50cmluc2ljOiB7CisgICAgICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cFN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVnRXhw
U3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHJlZ0V4
cFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBBU1NFUlQocmVnRXhwU3RydWN0dXJlLT5zdG9yZWRQ
cm90b3R5cGUoKS5pc09iamVjdCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChyZWdFeHBTdHJ1Y3R1
cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpLT5jbGFzc0luZm8oKm1fdm0pID09IFJlZ0V4
cFByb3RvdHlwZTo6aW5mbygpKTsKKyAgICAgICAgICAgIGlmIChpbnRyaW5zaWMgPT0gUmVnRXhw
VGVzdEludHJpbnNpYykgeworICAgICAgICAgICAgICAgIC8vIERvbid0IGlubGluZSBpbnRyaW5z
aWMgaWYgd2UgZXhpdGVkIGR1ZSB0byBvbmUgb2YgdGhlIHByaW1vcmRpYWwgUmVnRXhwIGNoZWNr
cyBmYWlsaW5nLgorICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDZWxsKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogcmVnRXhw
UHJvdG90eXBlT2JqZWN0VmFsdWUgPSBtX2dyYXBoLmZyZWV6ZShyZWdFeHBTdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZSgpKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogcmVnRXhwUHJvdG90eXBl
U3RydWN0dXJlID0gcmVnRXhwUHJvdG90eXBlT2JqZWN0VmFsdWUtPnN0cnVjdHVyZSgpOworICAg
ICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiByZWdFeHBTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUocmVnRXhwU3RydWN0dXJl
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnRXhwU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5
cGUoKS5pc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnRXhwU3RydWN0dXJl
LT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+Y2xhc3NJbmZvKCptX3ZtKSA9PSBSZWdFeHBQ
cm90b3R5cGU6OmluZm8oKSk7CisKKyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogcmVnRXhw
UHJvdG90eXBlT2JqZWN0VmFsdWUgPSBtX2dyYXBoLmZyZWV6ZShyZWdFeHBTdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cFByb3Rv
dHlwZVN0cnVjdHVyZSA9IHJlZ0V4cFByb3RvdHlwZU9iamVjdFZhbHVlLT5zdHJ1Y3R1cmUoKTsK
KworICAgICAgICAgICAgICAgIGF1dG8gaXNSZWdFeHBQcm9wZXJ0eVNhbWUgPSBbJl0gKEpTVmFs
dWUgcHJpbW9yZGlhbFByb3BlcnR5LCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlVSUQpIHsK
KyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBjdXJyZW50UHJvcGVydHk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaC5nZXRSZWdFeHBQcm90b3R5cGVQcm9wZXJ0eShyZWdFeHBT
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpLCByZWdFeHBQcm90b3R5cGVTdHJ1Y3R1
cmUsIHByb3BlcnR5VUlELCBjdXJyZW50UHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnRQcm9wZXJ0eSA9PSBwcmltb3JkaWFsUHJvcGVydHk7CisgICAgICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgYXV0byBpc1JlZ0V4cFByb3BlcnR5U2FtZSA9IFsm
XSAoSlNWYWx1ZSBwcmltb3JkaWFsUHJvcGVydHksIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0
eVVJRCkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgY3VycmVudFByb3BlcnR5OwotICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaC5nZXRSZWdFeHBQcm90b3R5cGVQcm9wZXJ0eShyZWdFeHBT
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZU9iamVjdCgpLCByZWdFeHBQcm90b3R5cGVTdHJ1Y3R1
cmUsIHByb3BlcnR5VUlELCBjdXJyZW50UHJvcGVydHkpKQorICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgUmVnRXhwLmV4ZWMgaXMgc3RpbGwgdGhlIHByaW1vcmRpYWwgUmVnRXhwLnByb3Rv
dHlwZS5leGVjCisgICAgICAgICAgICAgICAgaWYgKCFpc1JlZ0V4cFByb3BlcnR5U2FtZShnbG9i
YWxPYmplY3QtPnJlZ0V4cFByb3RvRXhlY0Z1bmN0aW9uKCksIG1fdm0tPnByb3BlcnR5TmFtZXMt
PmV4ZWMuaW1wbCgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UHJvcGVydHkgPT0gcHJp
bW9yZGlhbFByb3BlcnR5OwotICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgLy8gQ2hlY2sg
dGhhdCBSZWdFeHAuZXhlYyBpcyBzdGlsbCB0aGUgcHJpbW9yZGlhbCBSZWdFeHAucHJvdG90eXBl
LmV4ZWMKLSAgICAgICAgICAgIGlmICghaXNSZWdFeHBQcm9wZXJ0eVNhbWUoZ2xvYmFsT2JqZWN0
LT5yZWdFeHBQcm90b0V4ZWNGdW5jdGlvbigpLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5leGVjLmlt
cGwoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIC8v
IENoZWNrIHRoYXQgcmVnRXhwT2JqZWN0IGlzIGFjdHVhbGx5IGEgUmVnRXhwIG9iamVjdC4KKyAg
ICAgICAgICAgICAgICBOb2RlKiByZWdFeHBPYmplY3QgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KENoZWNrLCBFZGdlKHJlZ0V4cE9iamVjdCwgUmVnRXhwT2JqZWN0VXNlKSk7CisKKyAgICAgICAg
ICAgICAgICAvLyBDaGVjayB0aGF0IHJlZ0V4cE9iamVjdCdzIGV4ZWMgaXMgYWN0dWFsbHkgdGhl
IHByaW1vZGlhbCBSZWdFeHAucHJvdG90eXBlLmV4ZWMuCisgICAgICAgICAgICAgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIGV4ZWNQcm9wZXJ0eUlEID0gbV92bS0+cHJvcGVydHlOYW1lcy0+ZXhlYy5p
bXBsKCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZXhlY0luZGV4ID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpLmVuc3VyZShleGVjUHJvcGVydHlJRCk7CisgICAgICAgICAgICAgICAgTm9kZSog
YWN0dWFsUHJvcGVydHkgPSBhZGRUb0dyYXBoKFRyeUdldEJ5SWQsIE9wSW5mbyhleGVjSW5kZXgp
LCBPcEluZm8oU3BlY0Z1bmN0aW9uKSwgRWRnZShyZWdFeHBPYmplY3QsIENlbGxVc2UpKTsKKyAg
ICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogcmVnRXhwUHJvdG90eXBlRXhlYyA9IG1fZ3JhcGgu
ZnJlZXplKGdsb2JhbE9iamVjdC0+cmVnRXhwUHJvdG9FeGVjRnVuY3Rpb24oKSk7CisgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhyZWdFeHBQcm90b3R5cGVFeGVj
KSwgRWRnZShhY3R1YWxQcm9wZXJ0eSwgQ2VsbFVzZSkpOworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAvLyBDaGVjayB0aGF0IHJlZ0V4cE9iamVjdCBpcyBhY3R1YWxseSBhIFJlZ0V4cCBv
YmplY3QuCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIE5vZGUqIHJl
Z0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9m
ZnNldCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVjaywgRWRnZShyZWdFeHBPYmplY3Qs
IFJlZ0V4cE9iamVjdFVzZSkpOwotCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHJlZ0V4cE9i
amVjdCdzIGV4ZWMgaXMgYWN0dWFsbHkgdGhlIHByaW1vZGlhbCBSZWdFeHAucHJvdG90eXBlLmV4
ZWMuCi0gICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogZXhlY1Byb3BlcnR5SUQgPSBtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5leGVjLmltcGwoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGV4ZWNJ
bmRleCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoZXhlY1Byb3BlcnR5SUQpOwotICAg
ICAgICAgICAgTm9kZSogYWN0dWFsUHJvcGVydHkgPSBhZGRUb0dyYXBoKFRyeUdldEJ5SWQsIE9w
SW5mbyhleGVjSW5kZXgpLCBPcEluZm8oU3BlY0Z1bmN0aW9uKSwgRWRnZShyZWdFeHBPYmplY3Qs
IENlbGxVc2UpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiByZWdFeHBQcm90b3R5cGVFeGVj
ID0gbV9ncmFwaC5mcmVlemUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBQcm90b0V4ZWNGdW5jdGlvbigp
KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tDZWxsLCBPcEluZm8ocmVnRXhwUHJvdG90
eXBlRXhlYyksIEVkZ2UoYWN0dWFsUHJvcGVydHksIENlbGxVc2UpKTsKKyAgICAgICAgICAgIE5v
ZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBhZGRUb0dyYXBoKEdldEdsb2JhbE9iamVjdCwgY2FsbGVlKSwgcmVnRXhw
T2JqZWN0LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
KSk7CisgICAgICAgICAgICBzZXRSZXN1bHQocmVnRXhwRXhlYyk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7Ci0gICAgICAgIE5vZGUqIHJlZ0V4cE9iamVjdCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0g
YWRkVG9HcmFwaChSZWdFeHBUZXN0LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRk
VG9HcmFwaChHZXRHbG9iYWxPYmplY3QsIGNhbGxlZSksIHJlZ0V4cE9iamVjdCwgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwotICAgICAgICBzZXQo
cmVzdWx0LCByZWdFeHBFeGVjKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KKyAgICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RJbnRyaW5zaWM6IHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpOwogCi0gICAg
Y2FzZSBSZWdFeHBNYXRjaEZhc3RJbnRyaW5zaWM6IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMik7Ci0KLSAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7Ci0gICAgICAgIE5vZGUqIHJlZ0V4cE1hdGNoID0gYWRkVG9HcmFwaChSZWdFeHBNYXRjaEZh
c3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBhZGRUb0dyYXBoKEdldEdsb2JhbE9i
amVjdCwgY2FsbGVlKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVy
T2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpKTsKLSAgICAgICAgc2V0KHJlc3VsdCwgcmVnRXhwTWF0Y2gpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIE5v
ZGUqIHJlZ0V4cE1hdGNoID0gYWRkVG9HcmFwaChSZWdFeHBNYXRjaEZhc3QsIE9wSW5mbygwKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBhZGRUb0dyYXBoKEdldEdsb2JhbE9iamVjdCwgY2FsbGVlKSwg
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKKyAgICAgICAg
ICAgIHNldFJlc3VsdChyZWdFeHBNYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQogCi0gICAgY2FzZSBPYmplY3RDcmVhdGVJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYg
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgT2JqZWN0Q3JlYXRlSW50cmluc2ljOiB7CisgICAgICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIHNldChyZXN1bHQs
IGFkZFRvR3JhcGgoT2JqZWN0Q3JlYXRlLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAg
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIHNldFJlc3VsdChhZGRUb0dyYXBo
KE9iamVjdENyZWF0ZSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVy
T2Zmc2V0KSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICBj
YXNlIE9iamVjdEdldFByb3RvdHlwZU9mSW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBjYXNlIE9iamVjdEdldFByb3RvdHlwZU9mSW50cmluc2ljOiB7CisgICAgICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIHNldChyZXN1bHQs
IGFkZFRvR3JhcGgoR2V0UHJvdG90eXBlT2YsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsK
KyAgICAgICAgICAgIHNldFJlc3VsdChhZGRUb0dyYXBoKEdldFByb3RvdHlwZU9mLCBPcEluZm8o
MCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CiAKLSAgICBjYXNlIE9iamVjdElzSW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA8IDMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNhc2UgT2JqZWN0SXNJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA8IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIGluc2VydENoZWNrcygpOwotICAgICAgICBzZXQocmVzdWx0LCBhZGRUb0dyYXBoKFNhbWVW
YWx1ZSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSks
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwor
ICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoU2FtZVZhbHVlLCBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAKLSAgICBjYXNlIE9iamVjdEtleXNJbnRyaW5zaWM6IHsKLSAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgMikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2FzZSBPYmplY3RLZXlzSW50cmluc2ljOiB7CisgICAgICAgICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgc2V0KHJlc3Vs
dCwgYWRkVG9HcmFwaChPYmplY3RLZXlzLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAg
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIHNldFJlc3VsdChhZGRUb0dyYXBo
KE9iamVjdEtleXMsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAgY2Fz
ZSBPYmplY3RQcm90b3R5cGVUb1N0cmluZ0ludHJpbnNpYzogewotICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKLSAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgc2V0KHJlc3VsdCwgYWRkVG9HcmFwaChP
YmplY3RUb1N0cmluZywgdmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAg
ICAgICBjYXNlIE9iamVjdFByb3RvdHlwZVRvU3RyaW5nSW50cmluc2ljOiB7CisgICAgICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBzZXRS
ZXN1bHQoYWRkVG9HcmFwaChPYmplY3RUb1N0cmluZywgdmFsdWUpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICBjYXNlIFJlZmxlY3RHZXRQcm90b3R5cGVPZklu
dHJpbnNpYzogewotICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBSZWZsZWN0R2V0UHJvdG90
eXBlT2ZJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpbnNl
cnRDaGVja3MoKTsKLSAgICAgICAgc2V0KHJlc3VsdCwgYWRkVG9HcmFwaChHZXRQcm90b3R5cGVP
ZiwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIEVkZ2UoZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSksIE9iamVjdFVzZSkpKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAg
ICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChHZXRQcm90b3R5cGVPZiwgT3BJbmZvKDApLCBPcElu
Zm8ocHJlZGljdGlvbiksIEVkZ2UoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJl
Z2lzdGVyT2Zmc2V0KSksIE9iamVjdFVzZSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CiAKLSAgICBjYXNlIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWM6IHsKLSAgICAg
ICAgQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpOworICAgICAgICBjYXNl
IElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIEFTU0VSVChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKTsKIAotICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAg
ICAgICAgc2V0KHJlc3VsdCwgYWRkVG9HcmFwaChJc1R5cGVkQXJyYXlWaWV3LCBPcEluZm8ocHJl
ZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgICAgIGluc2VydENo
ZWNrcygpOworICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoSXNUeXBlZEFycmF5Vmll
dywgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwg
cmVnaXN0ZXJPZmZzZXQpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
IAotICAgIGNhc2UgU3RyaW5nUHJvdG90eXBlVmFsdWVPZkludHJpbnNpYzogewotICAgICAgICBp
bnNlcnRDaGVja3MoKTsKLSAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgc2V0KHJlc3VsdCwgYWRk
VG9HcmFwaChTdHJpbmdWYWx1ZU9mLCB2YWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9CisgICAgICAgIGNhc2UgU3RyaW5nUHJvdG90eXBlVmFsdWVPZkludHJpbnNpYzogeworICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAg
ICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoU3RyaW5nVmFsdWVPZiwgdmFsdWUpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICBjYXNlIFN0cmluZ1Byb3RvdHlwZVJl
cGxhY2VJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICE9IDMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgU3RyaW5nUHJv
dG90eXBlUmVwbGFjZUludHJpbnNpYzogeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICE9IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIC8vIERvbid0IGlubGluZSBpbnRyaW5zaWMgaWYgd2UgZXhpdGVkIGR1ZSB0byAic2VhcmNo
IiBub3QgYmVpbmcgYSBSZWdFeHAgb3IgU3RyaW5nIG9iamVjdC4KLSAgICAgICAgaWYgKG1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gRG9uJ3Qg
aW5saW5lIGludHJpbnNpYyBpZiB3ZSBleGl0ZWQgZHVlIHRvICJzZWFyY2giIG5vdCBiZWluZyBh
IFJlZ0V4cCBvciBTdHJpbmcgb2JqZWN0LgorICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAvLyBEb24ndCBpbmxpbmUg
aW50cmluc2ljIGlmIHdlIGV4aXRlZCBkdWUgdG8gb25lIG9mIHRoZSBwcmltb3JkaWFsIFJlZ0V4
cCBjaGVja3MgZmFpbGluZy4KLSAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFBy
b2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENlbGwpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gRG9uJ3QgaW5saW5lIGludHJpbnNpYyBpZiB3
ZSBleGl0ZWQgZHVlIHRvIG9uZSBvZiB0aGUgcHJpbW9yZGlhbCBSZWdFeHAgY2hlY2tzIGZhaWxp
bmcuCisgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2VsbCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIFN0cnVjdHVy
ZSogcmVnRXhwU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKTsKLSAg
ICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShyZWdFeHBTdHJ1Y3R1cmUpOwotICAgICAg
ICBBU1NFUlQocmVnRXhwU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc09iamVjdCgpKTsK
LSAgICAgICAgQVNTRVJUKHJlZ0V4cFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxs
KCktPmNsYXNzSW5mbygqbV92bSkgPT0gUmVnRXhwUHJvdG90eXBlOjppbmZvKCkpOworICAgICAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogcmVnRXhw
U3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAg
IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUocmVnRXhwU3RydWN0dXJlKTsKKyAgICAgICAgICAg
IEFTU0VSVChyZWdFeHBTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmlzT2JqZWN0KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKHJlZ0V4cFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXND
ZWxsKCktPmNsYXNzSW5mbygqbV92bSkgPT0gUmVnRXhwUHJvdG90eXBlOjppbmZvKCkpOwogCi0g
ICAgICAgIEZyb3plblZhbHVlKiByZWdFeHBQcm90b3R5cGVPYmplY3RWYWx1ZSA9IG1fZ3JhcGgu
ZnJlZXplKHJlZ0V4cFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkpOwotICAgICAgICBTdHJ1
Y3R1cmUqIHJlZ0V4cFByb3RvdHlwZVN0cnVjdHVyZSA9IHJlZ0V4cFByb3RvdHlwZU9iamVjdFZh
bHVlLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiByZWdFeHBQcm90b3R5
cGVPYmplY3RWYWx1ZSA9IG1fZ3JhcGguZnJlZXplKHJlZ0V4cFN0cnVjdHVyZS0+c3RvcmVkUHJv
dG90eXBlKCkpOworICAgICAgICAgICAgU3RydWN0dXJlKiByZWdFeHBQcm90b3R5cGVTdHJ1Y3R1
cmUgPSByZWdFeHBQcm90b3R5cGVPYmplY3RWYWx1ZS0+c3RydWN0dXJlKCk7CiAKLSAgICAgICAg
YXV0byBpc1JlZ0V4cFByb3BlcnR5U2FtZSA9IFsmXSAoSlNWYWx1ZSBwcmltb3JkaWFsUHJvcGVy
dHksIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eVVJRCkgewotICAgICAgICAgICAgSlNWYWx1
ZSBjdXJyZW50UHJvcGVydHk7Ci0gICAgICAgICAgICBpZiAoIW1fZ3JhcGguZ2V0UmVnRXhwUHJv
dG90eXBlUHJvcGVydHkocmVnRXhwU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSwg
cmVnRXhwUHJvdG90eXBlU3RydWN0dXJlLCBwcm9wZXJ0eVVJRCwgY3VycmVudFByb3BlcnR5KSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRvIGlzUmVnRXhw
UHJvcGVydHlTYW1lID0gWyZdIChKU1ZhbHVlIHByaW1vcmRpYWxQcm9wZXJ0eSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHByb3BlcnR5VUlEKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBjdXJyZW50
UHJvcGVydHk7CisgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmdldFJlZ0V4cFByb3RvdHlw
ZVByb3BlcnR5KHJlZ0V4cFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlT2JqZWN0KCksIHJlZ0V4
cFByb3RvdHlwZVN0cnVjdHVyZSwgcHJvcGVydHlVSUQsIGN1cnJlbnRQcm9wZXJ0eSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRQcm9wZXJ0eSA9PSBwcmltb3JkaWFsUHJvcGVydHk7Ci0gICAgICAgIH07CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGN1cnJlbnRQcm9wZXJ0eSA9PSBwcmltb3JkaWFsUHJvcGVydHk7CisgICAg
ICAgICAgICB9OwogCi0gICAgICAgIC8vIENoZWNrIHRoYXQgc2VhcmNoUmVnRXhwLmV4ZWMgaXMg
c3RpbGwgdGhlIHByaW1vcmRpYWwgUmVnRXhwLnByb3RvdHlwZS5leGVjCi0gICAgICAgIGlmICgh
aXNSZWdFeHBQcm9wZXJ0eVNhbWUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBQcm90b0V4ZWNGdW5jdGlv
bigpLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5leGVjLmltcGwoKSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHNlYXJjaFJlZ0V4cC5leGVjIGlz
IHN0aWxsIHRoZSBwcmltb3JkaWFsIFJlZ0V4cC5wcm90b3R5cGUuZXhlYworICAgICAgICAgICAg
aWYgKCFpc1JlZ0V4cFByb3BlcnR5U2FtZShnbG9iYWxPYmplY3QtPnJlZ0V4cFByb3RvRXhlY0Z1
bmN0aW9uKCksIG1fdm0tPnByb3BlcnR5TmFtZXMtPmV4ZWMuaW1wbCgpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBzZWFyY2hSZWdFeHAu
Z2xvYmFsIGlzIHN0aWxsIHRoZSBwcmltb3JkaWFsIFJlZ0V4cC5wcm90b3R5cGUuZ2xvYmFsCi0g
ICAgICAgIGlmICghaXNSZWdFeHBQcm9wZXJ0eVNhbWUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBQcm90
b0dsb2JhbEdldHRlcigpLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nbG9iYWwuaW1wbCgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgc2VhcmNo
UmVnRXhwLmdsb2JhbCBpcyBzdGlsbCB0aGUgcHJpbW9yZGlhbCBSZWdFeHAucHJvdG90eXBlLmds
b2JhbAorICAgICAgICAgICAgaWYgKCFpc1JlZ0V4cFByb3BlcnR5U2FtZShnbG9iYWxPYmplY3Qt
PnJlZ0V4cFByb3RvR2xvYmFsR2V0dGVyKCksIG1fdm0tPnByb3BlcnR5TmFtZXMtPmdsb2JhbC5p
bXBsKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAvLyBDaGVj
ayB0aGF0IHNlYXJjaFJlZ0V4cC51bmljb2RlIGlzIHN0aWxsIHRoZSBwcmltb3JkaWFsIFJlZ0V4
cC5wcm90b3R5cGUudW5pY29kZQotICAgICAgICBpZiAoIWlzUmVnRXhwUHJvcGVydHlTYW1lKGds
b2JhbE9iamVjdC0+cmVnRXhwUHJvdG9Vbmljb2RlR2V0dGVyKCksIG1fdm0tPnByb3BlcnR5TmFt
ZXMtPnVuaWNvZGUuaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgc2VhcmNoUmVnRXhwLnVuaWNvZGUgaXMgc3RpbGwgdGhlIHByaW1v
cmRpYWwgUmVnRXhwLnByb3RvdHlwZS51bmljb2RlCisgICAgICAgICAgICBpZiAoIWlzUmVnRXhw
UHJvcGVydHlTYW1lKGdsb2JhbE9iamVjdC0+cmVnRXhwUHJvdG9Vbmljb2RlR2V0dGVyKCksIG1f
dm0tPnByb3BlcnR5TmFtZXMtPnVuaWNvZGUuaW1wbCgpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBzZWFyY2hSZWdFeHBbU3ltYm9sLm1h
dGNoXSBpcyBzdGlsbCB0aGUgcHJpbW9yZGlhbCBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5yZXBs
YWNlXQotICAgICAgICBpZiAoIWlzUmVnRXhwUHJvcGVydHlTYW1lKGdsb2JhbE9iamVjdC0+cmVn
RXhwUHJvdG9TeW1ib2xSZXBsYWNlRnVuY3Rpb24oKSwgbV92bS0+cHJvcGVydHlOYW1lcy0+cmVw
bGFjZVN5bWJvbC5pbXBsKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBzZWFyY2hSZWdFeHBbU3ltYm9sLm1hdGNoXSBpcyBzdGlsbCB0aGUg
cHJpbW9yZGlhbCBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5yZXBsYWNlXQorICAgICAgICAgICAg
aWYgKCFpc1JlZ0V4cFByb3BlcnR5U2FtZShnbG9iYWxPYmplY3QtPnJlZ0V4cFByb3RvU3ltYm9s
UmVwbGFjZUZ1bmN0aW9uKCksIG1fdm0tPnByb3BlcnR5TmFtZXMtPnJlcGxhY2VTeW1ib2wuaW1w
bCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaW5zZXJ0Q2hl
Y2tzKCk7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKIAotICAgICAgICBOb2RlKiByZXN1
bHROb2RlID0gYWRkVG9HcmFwaChTdHJpbmdSZXBsYWNlLCBPcEluZm8oMCksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0
KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpLCBn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpKSk7Ci0gICAg
ICAgIHNldChyZXN1bHQsIHJlc3VsdE5vZGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgICAgIAotICAgIGNhc2UgU3RyaW5nUHJvdG90eXBlUmVwbGFjZVJlZ0V4cEludHJpbnNp
YzogewotICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGluc2VydENoZWNrcygpOwot
ICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChTdHJpbmdSZXBsYWNlUmVnRXhw
LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgxLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwg
cmVnaXN0ZXJPZmZzZXQpKSk7Ci0gICAgICAgIHNldChyZXN1bHQsIHJlc3VsdE5vZGUpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgUm91bmRJbnRyaW5z
aWM6Ci0gICAgY2FzZSBGbG9vckludHJpbnNpYzoKLSAgICBjYXNlIENlaWxJbnRyaW5zaWM6Ci0g
ICAgY2FzZSBUcnVuY0ludHJpbnNpYzogewotICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPT0gMSkgeworICAgICAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3Jh
cGgoU3RyaW5nUmVwbGFjZSwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgc2V0UmVzdWx0
KHJlc3VsdE5vZGUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIFN0cmluZ1Byb3RvdHlwZVJlcGxhY2VSZWdFeHBJbnRyaW5z
aWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAzKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAg
aW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgICAgICBzZXQocmVzdWx0LCBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOworICAgICAgICAgICAgTm9kZSogcmVzdWx0
Tm9kZSA9IGFkZFRvR3JhcGgoU3RyaW5nUmVwbGFjZVJlZ0V4cCwgT3BJbmZvKDApLCBPcEluZm8o
cHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9m
ZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
KSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpOwor
ICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KLSAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIE5vZGUqIG9w
ZXJhbmQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
KTsKLSAgICAgICAgTm9kZVR5cGUgb3A7Ci0gICAgICAgIGlmIChpbnRyaW5zaWMgPT0gUm91bmRJ
bnRyaW5zaWMpCi0gICAgICAgICAgICBvcCA9IEFyaXRoUm91bmQ7Ci0gICAgICAgIGVsc2UgaWYg
KGludHJpbnNpYyA9PSBGbG9vckludHJpbnNpYykKLSAgICAgICAgICAgIG9wID0gQXJpdGhGbG9v
cjsKLSAgICAgICAgZWxzZSBpZiAoaW50cmluc2ljID09IENlaWxJbnRyaW5zaWMpCi0gICAgICAg
ICAgICBvcCA9IEFyaXRoQ2VpbDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQo
aW50cmluc2ljID09IFRydW5jSW50cmluc2ljKTsKLSAgICAgICAgICAgIG9wID0gQXJpdGhUcnVu
YzsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFJvdW5kSW50cmluc2ljOgorICAgICAgICBj
YXNlIEZsb29ySW50cmluc2ljOgorICAgICAgICBjYXNlIENlaWxJbnRyaW5zaWM6CisgICAgICAg
IGNhc2UgVHJ1bmNJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9PSAxKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAg
ICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29u
c3RhbnROYU4pKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIE5vZGUqIG9wZXJhbmQg
PSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgICAgIE5vZGVUeXBlIG9wOworICAgICAgICAgICAgaWYgKGludHJpbnNpYyA9PSBSb3Vu
ZEludHJpbnNpYykKKyAgICAgICAgICAgICAgICBvcCA9IEFyaXRoUm91bmQ7CisgICAgICAgICAg
ICBlbHNlIGlmIChpbnRyaW5zaWMgPT0gRmxvb3JJbnRyaW5zaWMpCisgICAgICAgICAgICAgICAg
b3AgPSBBcml0aEZsb29yOworICAgICAgICAgICAgZWxzZSBpZiAoaW50cmluc2ljID09IENlaWxJ
bnRyaW5zaWMpCisgICAgICAgICAgICAgICAgb3AgPSBBcml0aENlaWw7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW50cmluc2ljID09IFRydW5jSW50cmluc2lj
KTsKKyAgICAgICAgICAgICAgICBvcCA9IEFyaXRoVHJ1bmM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBOb2RlKiByb3VuZE5vZGUgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oMCksIE9wSW5m
byhwcmVkaWN0aW9uKSwgb3BlcmFuZCk7CisgICAgICAgICAgICBzZXRSZXN1bHQocm91bmROb2Rl
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNhc2UgSU11
bEludHJpbnNpYzogeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICE9IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaW5zZXJ0
Q2hlY2tzKCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbGVmdE9wZXJhbmQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmlnaHRPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MiwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgTm9kZSogbGVmdCA9IGdldChsZWZ0T3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiByaWdodCA9IGdldChyaWdodE9wZXJhbmQpOworICAg
ICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoQXJpdGhJTXVsLCBsZWZ0LCByaWdodCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSogcm91bmRO
b2RlID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIG9wZXJh
bmQpOwotICAgICAgICBzZXQocmVzdWx0LCByb3VuZE5vZGUpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgY2FzZSBJTXVsSW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAhPSAzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxlZnRPcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmlnaHRPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMiwgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICBOb2RlKiBsZWZ0ID0gZ2V0KGxlZnRPcGVy
YW5kKTsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBnZXQocmlnaHRPcGVyYW5kKTsKLSAgICAgICAg
c2V0KHJlc3VsdCwgYWRkVG9HcmFwaChBcml0aElNdWwsIGxlZnQsIHJpZ2h0KSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNhc2UgUmFuZG9tSW50cmluc2ljOiB7Ci0gICAg
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgc2V0KHJlc3VsdCwg
YWRkVG9HcmFwaChBcml0aFJhbmRvbSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgICAgIAotICAgIGNhc2UgREZHVHJ1ZUludHJpbnNpYzogewotICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKLSAgICAgICAgc2V0KHJlc3VsdCwganNDb25zdGFudChqc0Jvb2xlYW4odHJ1ZSkpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCi0gICAgY2FzZSBGVExUcnVlSW50cmluc2lj
OiB7Ci0gICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICBzZXQocmVzdWx0LCBqc0NvbnN0
YW50KGpzQm9vbGVhbihtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpKSkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgT1NSRXhpdEludHJpbnNpYzogewotICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwot
ICAgICAgICBzZXQocmVzdWx0LCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0
YW50VW5kZWZpbmVkKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGNhc2UgSXNGaW5hbFRpZXJJbnRyaW5zaWM6IHsKLSAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
Ci0gICAgICAgIHNldChyZXN1bHQsCi0gICAgICAgICAgICBqc0NvbnN0YW50KGpzQm9vbGVhbihP
cHRpb25zOjp1c2VGVExKSVQoKSA/IG1fZ3JhcGgubV9wbGFuLmlzRlRMKCkgOiB0cnVlKSkpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU2V0SW50MzJI
ZWFwUHJlZGljdGlvbkludHJpbnNpYzogewotICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGksIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+aGFzSGVhcFByZWRp
Y3Rpb24oKSkKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRIZWFwUHJlZGljdGlvbihTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgY2FzZSBSYW5kb21JbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlm
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAgICAgc2V0UmVz
dWx0KGFkZFRvR3JhcGgoQXJpdGhSYW5kb20pKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9Ci0gICAgICAgIHNldChyZXN1bHQsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJ
bmZvKG1fY29uc3RhbnRVbmRlZmluZWQpKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAgICAgCi0gICAgY2FzZSBDaGVja0ludDMySW50cmluc2ljOiB7Ci0gICAgICAgIGluc2Vy
dENoZWNrcygpOwotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSwgRWRnZShub2RlLCBJbnQzMlVzZSkpOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgREZHVHJ1ZUludHJpbnNpYzogeworICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
CisgICAgICAgICAgICBzZXRSZXN1bHQoanNDb25zdGFudChqc0Jvb2xlYW4odHJ1ZSkpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHNldChyZXN1bHQsIGpz
Q29uc3RhbnQoanNCb29sZWFuKHRydWUpKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAgICAgCi0gICAgY2FzZSBGaWF0SW50NTJJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICAg
ICAgaWYgKGVuYWJsZUludDUyKCkpCi0gICAgICAgICAgICBzZXQocmVzdWx0LCBhZGRUb0dyYXBo
KEZpYXRJbnQ1MiwgZ2V0KG9wZXJhbmQpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNl
dChyZXN1bHQsIGdldChvcGVyYW5kKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGNhc2UgSlNNYXBHZXRJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICE9IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIE5vZGUqIG1hcCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBOb2RlKiBrZXkgPSBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAg
Tm9kZSogbm9ybWFsaXplZEtleSA9IGFkZFRvR3JhcGgoTm9ybWFsaXplTWFwS2V5LCBrZXkpOwot
ICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChNYXBIYXNoLCBub3JtYWxpemVkS2V5KTsK
LSAgICAgICAgTm9kZSogYnVja2V0ID0gYWRkVG9HcmFwaChHZXRNYXBCdWNrZXQsIEVkZ2UobWFw
LCBNYXBPYmplY3RVc2UpLCBFZGdlKG5vcm1hbGl6ZWRLZXkpLCBFZGdlKGhhc2gpKTsKLSAgICAg
ICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoTG9hZFZhbHVlRnJvbU1hcEJ1Y2tldCwg
T3BJbmZvKEJ1Y2tldE93bmVyVHlwZTo6TWFwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBidWNrZXQp
OwotICAgICAgICBzZXQocmVzdWx0LCByZXN1bHROb2RlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgY2FzZSBKU1NldEhhc0ludHJpbnNpYzoKLSAgICBjYXNlIEpTTWFwSGFz
SW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAy
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGluc2VydENoZWNrcygpOwot
ICAgICAgICBOb2RlKiBtYXBPclNldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgw
LCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgTm9kZSogbm9ybWFs
aXplZEtleSA9IGFkZFRvR3JhcGgoTm9ybWFsaXplTWFwS2V5LCBrZXkpOwotICAgICAgICBOb2Rl
KiBoYXNoID0gYWRkVG9HcmFwaChNYXBIYXNoLCBub3JtYWxpemVkS2V5KTsKLSAgICAgICAgVXNl
S2luZCB1c2VLaW5kID0gaW50cmluc2ljID09IEpTU2V0SGFzSW50cmluc2ljID8gU2V0T2JqZWN0
VXNlIDogTWFwT2JqZWN0VXNlOwotICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdl
dE1hcEJ1Y2tldCwgT3BJbmZvKDApLCBFZGdlKG1hcE9yU2V0LCB1c2VLaW5kKSwgRWRnZShub3Jt
YWxpemVkS2V5KSwgRWRnZShoYXNoKSk7Ci0gICAgICAgIEpTQ2VsbCogc2VudGluZWwgPSBudWxs
cHRyOwotICAgICAgICBpZiAoaW50cmluc2ljID09IEpTTWFwSGFzSW50cmluc2ljKQotICAgICAg
ICAgICAgc2VudGluZWwgPSBtX3ZtLT5zZW50aW5lbE1hcEJ1Y2tldC5nZXQoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc2VudGluZWwgPSBtX3ZtLT5zZW50aW5lbFNldEJ1Y2tldC5nZXQo
KTsKKyAgICAgICAgY2FzZSBGVExUcnVlSW50cmluc2ljOiB7CisgICAgICAgICAgICBpbnNlcnRD
aGVja3MoKTsKKyAgICAgICAgICAgIHNldFJlc3VsdChqc0NvbnN0YW50KGpzQm9vbGVhbihtX2dy
YXBoLm1fcGxhbi5pc0ZUTCgpKSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE9TUkV4aXRJbnRyaW5zaWM6IHsKKyAgICAg
ICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4
aXQpOworICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fY29uc3RhbnRVbmRlZmluZWQpKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSXNGaW5hbFRpZXJJbnRyaW5zaWM6IHsK
KyAgICAgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAgICAgc2V0UmVzdWx0KGpzQ29u
c3RhbnQoanNCb29sZWFuKE9wdGlvbnM6OnVzZUZUTEpJVCgpID8gbV9ncmFwaC5tX3BsYW4uaXNG
VEwoKSA6IHRydWUpKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgU2V0SW50MzJIZWFwUHJlZGljdGlvbkludHJpbnNpYzog
eworICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0g
MTsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVy
T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkp
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEhlYXBQcmVkaWN0aW9uKFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0UmVzdWx0KGFkZFRvR3JhcGgoSlND
b25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnRVbmRlZmluZWQpKSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2hlY2tJbnQz
MkludHJpbnNpYzogeworICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMTsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGksIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9t
LCBFZGdlKG5vZGUsIEludDMyVXNlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRS
ZXN1bHQoanNDb25zdGFudChqc0Jvb2xlYW4odHJ1ZSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWF0SW50NTJJbnRy
aW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAy
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGluc2VydENoZWNr
cygpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICBpZiAoZW5hYmxl
SW50NTIoKSkKKyAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9HcmFwaChGaWF0SW50NTIs
IGdldChvcGVyYW5kKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldFJl
c3VsdChnZXQob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
IAotICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplKHNl
bnRpbmVsKTsKLSAgICAgICAgTm9kZSogaW52ZXJ0ZWRSZXN1bHQgPSBhZGRUb0dyYXBoKENvbXBh
cmVFcVB0ciwgT3BJbmZvKGZyb3plblBvaW50ZXIpLCBidWNrZXQpOwotICAgICAgICBOb2RlKiBy
ZXN1bHROb2RlID0gYWRkVG9HcmFwaChMb2dpY2FsTm90LCBpbnZlcnRlZFJlc3VsdCk7Ci0gICAg
ICAgIHNldChyZXN1bHQsIHJlc3VsdE5vZGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
CisgICAgICAgIGNhc2UgSlNNYXBHZXRJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGNhc2UgSlNTZXRBZGRJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIE5vZGUqIG1hcCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
Tm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KSk7CisgICAgICAgICAgICBOb2RlKiBub3JtYWxpemVkS2V5ID0gYWRkVG9HcmFwaChOb3Jt
YWxpemVNYXBLZXksIGtleSk7CisgICAgICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChN
YXBIYXNoLCBub3JtYWxpemVkS2V5KTsKKyAgICAgICAgICAgIE5vZGUqIGJ1Y2tldCA9IGFkZFRv
R3JhcGgoR2V0TWFwQnVja2V0LCBFZGdlKG1hcCwgTWFwT2JqZWN0VXNlKSwgRWRnZShub3JtYWxp
emVkS2V5KSwgRWRnZShoYXNoKSk7CisgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRk
VG9HcmFwaChMb2FkVmFsdWVGcm9tTWFwQnVja2V0LCBPcEluZm8oQnVja2V0T3duZXJUeXBlOjpN
YXApLCBPcEluZm8ocHJlZGljdGlvbiksIGJ1Y2tldCk7CisgICAgICAgICAgICBzZXRSZXN1bHQo
cmVzdWx0Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAg
ICAgIGluc2VydENoZWNrcygpOwotICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgIE5vZGUqIGtleSA9
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwotICAg
ICAgICBOb2RlKiBub3JtYWxpemVkS2V5ID0gYWRkVG9HcmFwaChOb3JtYWxpemVNYXBLZXksIGtl
eSk7Ci0gICAgICAgIE5vZGUqIGhhc2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIG5vcm1hbGl6ZWRL
ZXkpOwotICAgICAgICBhZGRUb0dyYXBoKFNldEFkZCwgYmFzZSwgbm9ybWFsaXplZEtleSwgaGFz
aCk7Ci0gICAgICAgIHNldChyZXN1bHQsIGJhc2UpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9CisgICAgICAgIGNhc2UgSlNTZXRIYXNJbnRyaW5zaWM6CisgICAgICAgIGNhc2UgSlNNYXBI
YXNJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNhc2UgSlNNYXBT
ZXRJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9
IDMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKKyAgICAgICAgICAgIE5vZGUqIG1hcE9yU2V0ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBrZXkgPSBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAg
ICAgIE5vZGUqIG5vcm1hbGl6ZWRLZXkgPSBhZGRUb0dyYXBoKE5vcm1hbGl6ZU1hcEtleSwga2V5
KTsKKyAgICAgICAgICAgIE5vZGUqIGhhc2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIG5vcm1hbGl6
ZWRLZXkpOworICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmluc2ljID09IEpTU2V0
SGFzSW50cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOworICAgICAgICAgICAg
Tm9kZSogYnVja2V0ID0gYWRkVG9HcmFwaChHZXRNYXBCdWNrZXQsIE9wSW5mbygwKSwgRWRnZSht
YXBPclNldCwgdXNlS2luZCksIEVkZ2Uobm9ybWFsaXplZEtleSksIEVkZ2UoaGFzaCkpOworICAg
ICAgICAgICAgSlNDZWxsKiBzZW50aW5lbCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoaW50
cmluc2ljID09IEpTTWFwSGFzSW50cmluc2ljKQorICAgICAgICAgICAgICAgIHNlbnRpbmVsID0g
bV92bS0+c2VudGluZWxNYXBCdWNrZXQuZ2V0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2VudGluZWwgPSBtX3ZtLT5zZW50aW5lbFNldEJ1Y2tldC5nZXQoKTsKIAotICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgTm9kZSogYmFzZSA9IGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBOb2RlKiBrZXkg
PSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVn
aXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5Qb2ludGVyID0g
bV9ncmFwaC5mcmVlemUoc2VudGluZWwpOworICAgICAgICAgICAgTm9kZSogaW52ZXJ0ZWRSZXN1
bHQgPSBhZGRUb0dyYXBoKENvbXBhcmVFcVB0ciwgT3BJbmZvKGZyb3plblBvaW50ZXIpLCBidWNr
ZXQpOworICAgICAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoTG9naWNhbE5v
dCwgaW52ZXJ0ZWRSZXN1bHQpOworICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBOb2RlKiBub3Jt
YWxpemVkS2V5ID0gYWRkVG9HcmFwaChOb3JtYWxpemVNYXBLZXksIGtleSk7Ci0gICAgICAgIE5v
ZGUqIGhhc2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIG5vcm1hbGl6ZWRLZXkpOworICAgICAgICBj
YXNlIEpTU2V0QWRkSW50cmluc2ljOiB7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7Ci0gICAgICAgIGFkZFZhckFyZ0NoaWxkKG5vcm1hbGl6
ZWRLZXkpOwotICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7Ci0gICAgICAgIGFkZFZhckFy
Z0NoaWxkKGhhc2gpOwotICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgTWFwU2V0LCBP
cEluZm8oMCksIE9wSW5mbygwKSk7Ci0gICAgICAgIHNldChyZXN1bHQsIGJhc2UpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAg
ICAgICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVn
aXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSogbm9y
bWFsaXplZEtleSA9IGFkZFRvR3JhcGgoTm9ybWFsaXplTWFwS2V5LCBrZXkpOworICAgICAgICAg
ICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwgbm9ybWFsaXplZEtleSk7CisgICAg
ICAgICAgICBhZGRUb0dyYXBoKFNldEFkZCwgYmFzZSwgbm9ybWFsaXplZEtleSwgaGFzaCk7Cisg
ICAgICAgICAgICBzZXRSZXN1bHQoYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQogCi0gICAgY2FzZSBKU1NldEJ1Y2tldEhlYWRJbnRyaW5zaWM6Ci0gICAgY2FzZSBK
U01hcEJ1Y2tldEhlYWRJbnRyaW5zaWM6IHsKLSAgICAgICAgQVNTRVJUKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID09IDIpOworICAgICAgICBjYXNlIEpTTWFwU2V0SW50cmluc2ljOiB7Cisg
ICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAg
IE5vZGUqIG1hcCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpOwotICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSBpbnRyaW5zaWMgPT0gSlNTZXRCdWNr
ZXRIZWFkSW50cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOwotICAgICAgICBO
b2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChHZXRNYXBCdWNrZXRIZWFkLCBFZGdlKG1hcCwg
dXNlS2luZCkpOwotICAgICAgICBzZXQocmVzdWx0LCByZXN1bHROb2RlKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVy
T2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAKLSAg
ICBjYXNlIEpTU2V0QnVja2V0TmV4dEludHJpbnNpYzoKLSAgICBjYXNlIEpTTWFwQnVja2V0TmV4
dEludHJpbnNpYzogewotICAgICAgICBBU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PT0gMik7CisgICAgICAgICAgICBOb2RlKiBub3JtYWxpemVkS2V5ID0gYWRkVG9HcmFwaChOb3Jt
YWxpemVNYXBLZXksIGtleSk7CisgICAgICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChN
YXBIYXNoLCBub3JtYWxpemVkS2V5KTsKIAotICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAg
ICAgTm9kZSogYnVja2V0ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lz
dGVyT2Zmc2V0KSk7Ci0gICAgICAgIEJ1Y2tldE93bmVyVHlwZSB0eXBlID0gaW50cmluc2ljID09
IEpTU2V0QnVja2V0TmV4dEludHJpbnNpYyA/IEJ1Y2tldE93bmVyVHlwZTo6U2V0IDogQnVja2V0
T3duZXJUeXBlOjpNYXA7Ci0gICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKEdl
dE1hcEJ1Y2tldE5leHQsIE9wSW5mbyh0eXBlKSwgYnVja2V0KTsKLSAgICAgICAgc2V0KHJlc3Vs
dCwgcmVzdWx0Tm9kZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobm9ybWFs
aXplZEtleSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CisgICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChoYXNoKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBNYXBTZXQsIE9wSW5mbygwKSwgT3BJbmZvKDApKTsKKyAgICAgICAgICAgIHNldFJlc3Vs
dChiYXNlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICBjYXNl
IEpTU2V0QnVja2V0S2V5SW50cmluc2ljOgotICAgIGNhc2UgSlNNYXBCdWNrZXRLZXlJbnRyaW5z
aWM6IHsKLSAgICAgICAgQVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpOwor
ICAgICAgICBjYXNlIEpTU2V0QnVja2V0SGVhZEludHJpbnNpYzoKKyAgICAgICAgY2FzZSBKU01h
cEJ1Y2tldEhlYWRJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIEFTU0VSVChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9PSAyKTsKIAotICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAg
Tm9kZSogYnVja2V0ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgIEJ1Y2tldE93bmVyVHlwZSB0eXBlID0gaW50cmluc2ljID09IEpT
U2V0QnVja2V0S2V5SW50cmluc2ljID8gQnVja2V0T3duZXJUeXBlOjpTZXQgOiBCdWNrZXRPd25l
clR5cGU6Ok1hcDsKLSAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoTG9hZEtl
eUZyb21NYXBCdWNrZXQsIE9wSW5mbyh0eXBlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBidWNrZXQp
OwotICAgICAgICBzZXQocmVzdWx0LCByZXN1bHROb2RlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICBOb2RlKiBt
YXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsK
KyAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IGludHJpbnNpYyA9PSBKU1NldEJ1Y2tldEhl
YWRJbnRyaW5zaWMgPyBTZXRPYmplY3RVc2UgOiBNYXBPYmplY3RVc2U7CisgICAgICAgICAgICBO
b2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChHZXRNYXBCdWNrZXRIZWFkLCBFZGdlKG1hcCwg
dXNlS2luZCkpOworICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIGNhc2UgSlNNYXBCdWNrZXRWYWx1ZUlu
dHJpbnNpYzogewotICAgICAgICBBU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0g
Mik7CisgICAgICAgIGNhc2UgSlNTZXRCdWNrZXROZXh0SW50cmluc2ljOgorICAgICAgICBjYXNl
IEpTTWFwQnVja2V0TmV4dEludHJpbnNpYzogeworICAgICAgICAgICAgQVNTRVJUKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID09IDIpOwogCi0gICAgICAgIGluc2VydENoZWNrcygpOwotICAg
ICAgICBOb2RlKiBidWNrZXQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoTG9h
ZFZhbHVlRnJvbU1hcEJ1Y2tldCwgT3BJbmZvKEJ1Y2tldE93bmVyVHlwZTo6TWFwKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBidWNrZXQpOwotICAgICAgICBzZXQocmVzdWx0LCByZXN1bHROb2RlKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
CisgICAgICAgICAgICBOb2RlKiBidWNrZXQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIEJ1Y2tldE93bmVyVHlwZSB0eXBl
ID0gaW50cmluc2ljID09IEpTU2V0QnVja2V0TmV4dEludHJpbnNpYyA/IEJ1Y2tldE93bmVyVHlw
ZTo6U2V0IDogQnVja2V0T3duZXJUeXBlOjpNYXA7CisgICAgICAgICAgICBOb2RlKiByZXN1bHRO
b2RlID0gYWRkVG9HcmFwaChHZXRNYXBCdWNrZXROZXh0LCBPcEluZm8odHlwZSksIGJ1Y2tldCk7
CisgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQogCi0gICAgY2FzZSBKU1dlYWtNYXBHZXRJbnRyaW5zaWM6IHsKLSAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgSlNTZXRCdWNrZXRLZXlJbnRyaW5zaWM6CisgICAg
ICAgIGNhc2UgSlNNYXBCdWNrZXRLZXlJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIEFTU0VSVChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKTsKIAotICAgICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlw
ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKKyAgICAgICAgICAgIE5vZGUqIGJ1Y2tldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgQnVja2V0T3duZXJUeXBlIHR5
cGUgPSBpbnRyaW5zaWMgPT0gSlNTZXRCdWNrZXRLZXlJbnRyaW5zaWMgPyBCdWNrZXRPd25lclR5
cGU6OlNldCA6IEJ1Y2tldE93bmVyVHlwZTo6TWFwOworICAgICAgICAgICAgTm9kZSogcmVzdWx0
Tm9kZSA9IGFkZFRvR3JhcGgoTG9hZEtleUZyb21NYXBCdWNrZXQsIE9wSW5mbyh0eXBlKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBidWNrZXQpOworICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5v
ZGUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBpbnNl
cnRDaGVja3MoKTsKLSAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBhZGRU
b0dyYXBoKENoZWNrLCBFZGdlKGtleSwgT2JqZWN0VXNlKSk7Ci0gICAgICAgIE5vZGUqIGhhc2gg
PSBhZGRUb0dyYXBoKE1hcEhhc2gsIGtleSk7Ci0gICAgICAgIE5vZGUqIGhvbGRlciA9IGFkZFRv
R3JhcGgoV2Vha01hcEdldCwgRWRnZShtYXAsIFdlYWtNYXBPYmplY3RVc2UpLCBFZGdlKGtleSwg
T2JqZWN0VXNlKSwgRWRnZShoYXNoLCBJbnQzMlVzZSkpOwotICAgICAgICBOb2RlKiByZXN1bHRO
b2RlID0gYWRkVG9HcmFwaChFeHRyYWN0VmFsdWVGcm9tV2Vha01hcEdldCwgT3BJbmZvKCksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgaG9sZGVyKTsKKyAgICAgICAgY2FzZSBKU01hcEJ1Y2tldFZhbHVl
SW50cmluc2ljOiB7CisgICAgICAgICAgICBBU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPT0gMik7CiAKLSAgICAgICAgc2V0KHJlc3VsdCwgcmVzdWx0Tm9kZSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAg
ICAgTm9kZSogYnVja2V0ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lz
dGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChM
b2FkVmFsdWVGcm9tTWFwQnVja2V0LCBPcEluZm8oQnVja2V0T3duZXJUeXBlOjpNYXApLCBPcElu
Zm8ocHJlZGljdGlvbiksIGJ1Y2tldCk7CisgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0Tm9k
ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAgY2FzZSBKU1dl
YWtNYXBIYXNJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICE9IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgSlNXZWFr
TWFwR2V0SW50cmluc2ljOiB7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIEJhZFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIEJhZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBp
bnNlcnRDaGVja3MoKTsKLSAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgIE5vZGUqIGtleSA9IGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrLCBFZGdlKGtleSwgT2JqZWN0VXNlKSk7Ci0gICAgICAgIE5vZGUqIGhh
c2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIGtleSk7Ci0gICAgICAgIE5vZGUqIGhvbGRlciA9IGFk
ZFRvR3JhcGgoV2Vha01hcEdldCwgRWRnZShtYXAsIFdlYWtNYXBPYmplY3RVc2UpLCBFZGdlKGtl
eSwgT2JqZWN0VXNlKSwgRWRnZShoYXNoLCBJbnQzMlVzZSkpOwotICAgICAgICBOb2RlKiBpbnZl
cnRlZFJlc3VsdCA9IGFkZFRvR3JhcGgoSXNFbXB0eSwgaG9sZGVyKTsKLSAgICAgICAgTm9kZSog
cmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgaW52ZXJ0ZWRSZXN1bHQpOworICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAg
IE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVjaywgRWRnZShrZXksIE9iamVjdFVz
ZSkpOworICAgICAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsK
KyAgICAgICAgICAgIE5vZGUqIGhvbGRlciA9IGFkZFRvR3JhcGgoV2Vha01hcEdldCwgRWRnZSht
YXAsIFdlYWtNYXBPYmplY3RVc2UpLCBFZGdlKGtleSwgT2JqZWN0VXNlKSwgRWRnZShoYXNoLCBJ
bnQzMlVzZSkpOworICAgICAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoRXh0
cmFjdFZhbHVlRnJvbVdlYWtNYXBHZXQsIE9wSW5mbygpLCBPcEluZm8ocHJlZGljdGlvbiksIGhv
bGRlcik7CiAKLSAgICAgICAgc2V0KHJlc3VsdCwgcmVzdWx0Tm9kZSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KKyAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHROb2RlKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICBjYXNlIEpTV2Vha1NldEhhc0lu
dHJpbnNpYzogewotICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBKU1dlYWtNYXBIYXNJbnRy
aW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAy
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlw
ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlw
ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGluc2VydENoZWNr
cygpOwotICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2ssIEVkZ2Uoa2V5LCBPYmplY3RVc2UpKTsKLSAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRv
R3JhcGgoTWFwSGFzaCwga2V5KTsKLSAgICAgICAgTm9kZSogaG9sZGVyID0gYWRkVG9HcmFwaChX
ZWFrTWFwR2V0LCBFZGdlKG1hcCwgV2Vha1NldE9iamVjdFVzZSksIEVkZ2Uoa2V5LCBPYmplY3RV
c2UpLCBFZGdlKGhhc2gsIEludDMyVXNlKSk7Ci0gICAgICAgIE5vZGUqIGludmVydGVkUmVzdWx0
ID0gYWRkVG9HcmFwaChJc0VtcHR5LCBob2xkZXIpOwotICAgICAgICBOb2RlKiByZXN1bHROb2Rl
ID0gYWRkVG9HcmFwaChMb2dpY2FsTm90LCBpbnZlcnRlZFJlc3VsdCk7CisgICAgICAgICAgICBp
bnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIE5vZGUqIG1hcCA9IGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSoga2V5
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7Cisg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrLCBFZGdlKGtleSwgT2JqZWN0VXNlKSk7CisgICAg
ICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChNYXBIYXNoLCBrZXkpOworICAgICAgICAg
ICAgTm9kZSogaG9sZGVyID0gYWRkVG9HcmFwaChXZWFrTWFwR2V0LCBFZGdlKG1hcCwgV2Vha01h
cE9iamVjdFVzZSksIEVkZ2Uoa2V5LCBPYmplY3RVc2UpLCBFZGdlKGhhc2gsIEludDMyVXNlKSk7
CisgICAgICAgICAgICBOb2RlKiBpbnZlcnRlZFJlc3VsdCA9IGFkZFRvR3JhcGgoSXNFbXB0eSwg
aG9sZGVyKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKExvZ2lj
YWxOb3QsIGludmVydGVkUmVzdWx0KTsKIAotICAgICAgICBzZXQocmVzdWx0LCByZXN1bHROb2Rl
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgICAgICAgICAgc2V0UmVzdWx0KHJl
c3VsdE5vZGUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIGNh
c2UgSlNXZWFrU2V0QWRkSW50cmluc2ljOiB7Ci0gICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAhPSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNl
IEpTV2Vha1NldEhhc0ludHJpbnNpYzogeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBCYWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBCYWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgTm9kZSoga2V5
ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0g
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2ssIEVkZ2Uoa2V5LCBPYmplY3RVc2UpKTsKLSAgICAgICAg
Tm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKLSAgICAgICAgYWRkVG9HcmFw
aChXZWFrU2V0QWRkLCBFZGdlKGJhc2UsIFdlYWtTZXRPYmplY3RVc2UpLCBFZGdlKGtleSwgT2Jq
ZWN0VXNlKSwgRWRnZShoYXNoLCBJbnQzMlVzZSkpOwotICAgICAgICBzZXQocmVzdWx0LCBiYXNl
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7CisgICAgICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
YWRkVG9HcmFwaChDaGVjaywgRWRnZShrZXksIE9iamVjdFVzZSkpOworICAgICAgICAgICAgTm9k
ZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKKyAgICAgICAgICAgIE5vZGUqIGhv
bGRlciA9IGFkZFRvR3JhcGgoV2Vha01hcEdldCwgRWRnZShtYXAsIFdlYWtTZXRPYmplY3RVc2Up
LCBFZGdlKGtleSwgT2JqZWN0VXNlKSwgRWRnZShoYXNoLCBJbnQzMlVzZSkpOworICAgICAgICAg
ICAgTm9kZSogaW52ZXJ0ZWRSZXN1bHQgPSBhZGRUb0dyYXBoKElzRW1wdHksIGhvbGRlcik7Cisg
ICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChMb2dpY2FsTm90LCBpbnZl
cnRlZFJlc3VsdCk7CiAKLSAgICBjYXNlIEpTV2Vha01hcFNldEludHJpbnNpYzogewotICAgICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMykKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHROb2RlKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEpTV2Vha1NldEFkZEludHJpbnNp
YzogeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGluc2VydENoZWNrcygpOwot
ICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpOwotCi0gICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2ssIEVkZ2Uoa2V5LCBPYmplY3RVc2UpKTsKLSAgICAgICAgTm9k
ZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKLQotICAgICAgICBhZGRWYXJBcmdD
aGlsZChFZGdlKGJhc2UsIFdlYWtNYXBPYmplY3RVc2UpKTsKLSAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoRWRnZShrZXksIE9iamVjdFVzZSkpOwotICAgICAgICBhZGRWYXJBcmdDaGlsZChFZGdlKHZh
bHVlKSk7Ci0gICAgICAgIGFkZFZhckFyZ0NoaWxkKEVkZ2UoaGFzaCwgSW50MzJVc2UpKTsKLSAg
ICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIFdlYWtNYXBTZXQsIE9wSW5mbygwKSwgT3BJ
bmZvKDApKTsKLSAgICAgICAgc2V0KHJlc3VsdCwgYmFzZSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KKyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBjYXNlIERhdGFWaWV3R2V0SW50ODoKLSAgICBjYXNlIERhdGFW
aWV3R2V0VWludDg6Ci0gICAgY2FzZSBEYXRhVmlld0dldEludDE2OgotICAgIGNhc2UgRGF0YVZp
ZXdHZXRVaW50MTY6Ci0gICAgY2FzZSBEYXRhVmlld0dldEludDMyOgotICAgIGNhc2UgRGF0YVZp
ZXdHZXRVaW50MzI6Ci0gICAgY2FzZSBEYXRhVmlld0dldEZsb2F0MzI6Ci0gICAgY2FzZSBEYXRh
Vmlld0dldEZsb2F0NjQ6IHsKLSAgICAgICAgaWYgKCFpczY0Qml0KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIE5v
ZGUqIGJhc2UgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZz
ZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVjaywg
RWRnZShrZXksIE9iamVjdFVzZSkpOworICAgICAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3Jh
cGgoTWFwSGFzaCwga2V5KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoV2Vha1NldEFkZCwgRWRn
ZShiYXNlLCBXZWFrU2V0T2JqZWN0VXNlKSwgRWRnZShrZXksIE9iamVjdFVzZSksIEVkZ2UoaGFz
aCwgSW50MzJVc2UpKTsKKyAgICAgICAgICAgIHNldFJlc3VsdChiYXNlKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgLy8gVG8gaW5saW5lIGRhdGEgdmll
dyBhY2Nlc3Nlcywgd2UgYXNzdW1lIHRoZSBhcmNoaXRlY3R1cmUgd2UncmUgcnVubmluZyBvbjoK
LSAgICAgICAgLy8gLSBJcyBsaXR0bGUgZW5kaWFuLgotICAgICAgICAvLyAtIEFsbG93cyB1bmFs
aWduZWQgbG9hZHMvc3RvcmVzIHdpdGhvdXQgY3Jhc2hpbmcuIAorICAgICAgICBjYXNlIEpTV2Vh
a01hcFNldEludHJpbnNpYzogeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICE9IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlm
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8IDIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJP
ZmZzZXQpKTsKKworICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVjaywgRWRnZShrZXksIE9iamVj
dFVzZSkpOworICAgICAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5
KTsKKworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoRWRnZShiYXNlLCBXZWFrTWFwT2JqZWN0
VXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChFZGdlKGtleSwgT2JqZWN0VXNlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChFZGdlKGhhc2gsIEludDMyVXNlKSk7CisgICAgICAgICAgICBhZGRUb0dy
YXBoKE5vZGU6OlZhckFyZywgV2Vha01hcFNldCwgT3BJbmZvKDApLCBPcEluZm8oMCkpOworICAg
ICAgICAgICAgc2V0UmVzdWx0KGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KIAotICAgICAgICB1aW50OF90IGJ5dGVTaXplOwotICAgICAgICBOb2RlVHlwZSBvcCA9
IERhdGFWaWV3R2V0SW50OwotICAgICAgICBib29sIGlzU2lnbmVkID0gZmFsc2U7Ci0gICAgICAg
IHN3aXRjaCAoaW50cmluc2ljKSB7CiAgICAgICAgIGNhc2UgRGF0YVZpZXdHZXRJbnQ4OgotICAg
ICAgICAgICAgaXNTaWduZWQgPSB0cnVlOwotICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAg
ICAgIGNhc2UgRGF0YVZpZXdHZXRVaW50ODoKLSAgICAgICAgICAgIGJ5dGVTaXplID0gMTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGNhc2UgRGF0YVZpZXdHZXRJbnQxNjoKLSAgICAg
ICAgICAgIGlzU2lnbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAg
ICBjYXNlIERhdGFWaWV3R2V0VWludDE2OgotICAgICAgICAgICAgYnl0ZVNpemUgPSAyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgY2FzZSBEYXRhVmlld0dldEludDMyOgotICAgICAg
ICAgICAgaXNTaWduZWQgPSB0cnVlOwotICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAg
IGNhc2UgRGF0YVZpZXdHZXRVaW50MzI6Ci0gICAgICAgICAgICBieXRlU2l6ZSA9IDQ7Ci0gICAg
ICAgICAgICBicmVhazsKLQogICAgICAgICBjYXNlIERhdGFWaWV3R2V0RmxvYXQzMjoKLSAgICAg
ICAgICAgIGJ5dGVTaXplID0gNDsKLSAgICAgICAgICAgIG9wID0gRGF0YVZpZXdHZXRGbG9hdDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERhdGFWaWV3R2V0RmxvYXQ2NDoKLSAg
ICAgICAgICAgIGJ5dGVTaXplID0gODsKLSAgICAgICAgICAgIG9wID0gRGF0YVZpZXdHZXRGbG9h
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgICAgICBjYXNlIERhdGFW
aWV3R2V0RmxvYXQ2NDogeworICAgICAgICAgICAgaWYgKCFpczY0Qml0KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFRyaVN0YXRlIGlzTGl0dGxlRW5kaWFuID0g
TWl4ZWRUcmlTdGF0ZTsKLSAgICAgICAgTm9kZSogbGl0dGxlRW5kaWFuQ2hpbGQgPSBudWxscHRy
OwotICAgICAgICBpZiAoYnl0ZVNpemUgPiAxKSB7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPCAzKQotICAgICAgICAgICAgICAgIGlzTGl0dGxlRW5kaWFuID0g
RmFsc2VUcmlTdGF0ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxpdHRs
ZUVuZGlhbkNoaWxkID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxpdHRsZUVuZGlhbkNoaWxkLT5oYXNDb25z
dGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBsaXR0bGVF
bmRpYW5DaGlsZC0+Y29uc3RhbnQoKS0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaXNM
aXR0bGVFbmRpYW4gPSBjb25zdGFudC5wdXJlVG9Cb29sZWFuKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpc0xpdHRsZUVuZGlhbiAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbGl0dGxlRW5kaWFuQ2hpbGQgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBpc0xpdHRsZUVuZGlhbiA9IE1peGVkVHJpU3RhdGU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRvIGlubGluZSBkYXRh
IHZpZXcgYWNjZXNzZXMsIHdlIGFzc3VtZSB0aGUgYXJjaGl0ZWN0dXJlIHdlJ3JlIHJ1bm5pbmcg
b246CisgICAgICAgICAgICAvLyAtIElzIGxpdHRsZSBlbmRpYW4uCisgICAgICAgICAgICAvLyAt
IEFsbG93cyB1bmFsaWduZWQgbG9hZHMvc3RvcmVzIHdpdGhvdXQgY3Jhc2hpbmcuIAogCi0gICAg
ICAgIERhdGFWaWV3RGF0YSBkYXRhIHsgfTsKLSAgICAgICAgZGF0YS5pc0xpdHRsZUVuZGlhbiA9
IGlzTGl0dGxlRW5kaWFuOwotICAgICAgICBkYXRhLmlzU2lnbmVkID0gaXNTaWduZWQ7Ci0gICAg
ICAgIGRhdGEuYnl0ZVNpemUgPSBieXRlU2l6ZTsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA8IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIEJhZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksCi0gICAgICAgICAgICBhZGRU
b0dyYXBoKG9wLCBPcEluZm8oZGF0YS5hc1F1YWRXb3JkKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSksIGxpdHRsZUVuZGlh
bkNoaWxkKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgICAgIGluc2Vy
dENoZWNrcygpOwogCi0gICAgY2FzZSBEYXRhVmlld1NldEludDg6Ci0gICAgY2FzZSBEYXRhVmll
d1NldFVpbnQ4OgotICAgIGNhc2UgRGF0YVZpZXdTZXRJbnQxNjoKLSAgICBjYXNlIERhdGFWaWV3
U2V0VWludDE2OgotICAgIGNhc2UgRGF0YVZpZXdTZXRJbnQzMjoKLSAgICBjYXNlIERhdGFWaWV3
U2V0VWludDMyOgotICAgIGNhc2UgRGF0YVZpZXdTZXRGbG9hdDMyOgotICAgIGNhc2UgRGF0YVZp
ZXdTZXRGbG9hdDY0OiB7Ci0gICAgICAgIGlmICghaXM2NEJpdCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgdWludDhfdCBieXRlU2l6ZTsKKyAgICAgICAgICAgIE5v
ZGVUeXBlIG9wID0gRGF0YVZpZXdHZXRJbnQ7CisgICAgICAgICAgICBib29sIGlzU2lnbmVkID0g
ZmFsc2U7CisgICAgICAgICAgICBzd2l0Y2ggKGludHJpbnNpYykgeworICAgICAgICAgICAgY2Fz
ZSBEYXRhVmlld0dldEludDg6CisgICAgICAgICAgICAgICAgaXNTaWduZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICAgICAgY2FzZSBEYXRhVmlld0dldFVp
bnQ4OgorICAgICAgICAgICAgICAgIGJ5dGVTaXplID0gMTsKKyAgICAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAzKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBEYXRhVmlld0dldEludDE2Ogor
ICAgICAgICAgICAgICAgIGlzU2lnbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICAgICAgICAgIGNhc2UgRGF0YVZpZXdHZXRVaW50MTY6CisgICAgICAgICAgICAg
ICAgYnl0ZVNpemUgPSAyOworICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2Ug
RGF0YVZpZXdHZXRJbnQzMjoKKyAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgICAgICBjYXNlIERhdGFWaWV3R2V0VWlu
dDMyOgorICAgICAgICAgICAgICAgIGJ5dGVTaXplID0gNDsKKyAgICAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIGNhc2UgRGF0YVZpZXdH
ZXRGbG9hdDMyOgorICAgICAgICAgICAgICAgIGJ5dGVTaXplID0gNDsKKyAgICAgICAgICAgICAg
ICBvcCA9IERhdGFWaWV3R2V0RmxvYXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIERhdGFWaWV3R2V0RmxvYXQ2NDoKKyAgICAgICAgICAgICAgICBieXRlU2l6ZSA9
IDg7CisgICAgICAgICAgICAgICAgb3AgPSBEYXRhVmlld0dldEZsb2F0OworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUcmlT
dGF0ZSBpc0xpdHRsZUVuZGlhbiA9IE1peGVkVHJpU3RhdGU7CisgICAgICAgICAgICBOb2RlKiBs
aXR0bGVFbmRpYW5DaGlsZCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYnl0ZVNpemUgPiAx
KSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgMykK
KyAgICAgICAgICAgICAgICAgICAgaXNMaXR0bGVFbmRpYW4gPSBGYWxzZVRyaVN0YXRlOworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaXR0bGVFbmRpYW5DaGls
ZCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAobGl0dGxlRW5kaWFuQ2hpbGQtPmhhc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBsaXR0bGVFbmRp
YW5DaGlsZC0+Y29uc3RhbnQoKS0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlz
TGl0dGxlRW5kaWFuID0gY29uc3RhbnQucHVyZVRvQm9vbGVhbigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzTGl0dGxlRW5kaWFuICE9IE1peGVkVHJpU3RhdGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGl0dGxlRW5kaWFuQ2hpbGQgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzTGl0dGxlRW5kaWFu
ID0gTWl4ZWRUcmlTdGF0ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIERhdGFWaWV3RGF0YSBkYXRhIHsgfTsKKyAgICAgICAgICAgIGRhdGEuaXNMaXR0
bGVFbmRpYW4gPSBpc0xpdHRsZUVuZGlhbjsKKyAgICAgICAgICAgIGRhdGEuaXNTaWduZWQgPSBp
c1NpZ25lZDsKKyAgICAgICAgICAgIGRhdGEuYnl0ZVNpemUgPSBieXRlU2l6ZTsKKworICAgICAg
ICAgICAgc2V0UmVzdWx0KAorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhk
YXRhLmFzUXVhZFdvcmQpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgbGl0dGxlRW5kaWFuQ2hpbGQpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgdWludDhfdCBieXRlU2l6ZTsK
LSAgICAgICAgYm9vbCBpc0Zsb2F0aW5nUG9pbnQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc1Np
Z25lZCA9IGZhbHNlOwotICAgICAgICBzd2l0Y2ggKGludHJpbnNpYykgewogICAgICAgICBjYXNl
IERhdGFWaWV3U2V0SW50ODoKLSAgICAgICAgICAgIGlzU2lnbmVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIEZBTExUSFJPVUdIOwogICAgICAgICBjYXNlIERhdGFWaWV3U2V0VWludDg6Ci0gICAgICAg
ICAgICBieXRlU2l6ZSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQogICAgICAgICBjYXNlIERh
dGFWaWV3U2V0SW50MTY6Ci0gICAgICAgICAgICBpc1NpZ25lZCA9IHRydWU7Ci0gICAgICAgICAg
ICBGQUxMVEhST1VHSDsKICAgICAgICAgY2FzZSBEYXRhVmlld1NldFVpbnQxNjoKLSAgICAgICAg
ICAgIGJ5dGVTaXplID0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGNhc2UgRGF0
YVZpZXdTZXRJbnQzMjoKLSAgICAgICAgICAgIGlzU2lnbmVkID0gdHJ1ZTsKLSAgICAgICAgICAg
IEZBTExUSFJPVUdIOwogICAgICAgICBjYXNlIERhdGFWaWV3U2V0VWludDMyOgotICAgICAgICAg
ICAgYnl0ZVNpemUgPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgY2FzZSBEYXRh
Vmlld1NldEZsb2F0MzI6Ci0gICAgICAgICAgICBpc0Zsb2F0aW5nUG9pbnQgPSB0cnVlOwotICAg
ICAgICAgICAgYnl0ZVNpemUgPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RGF0YVZpZXdTZXRGbG9hdDY0OgotICAgICAgICAgICAgaXNGbG9hdGluZ1BvaW50ID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJ5dGVTaXplID0gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgfQorICAgICAgICBjYXNlIERhdGFWaWV3U2V0RmxvYXQ2NDogeworICAgICAgICAgICAgaWYg
KCFpczY0Qml0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFRy
aVN0YXRlIGlzTGl0dGxlRW5kaWFuID0gTWl4ZWRUcmlTdGF0ZTsKLSAgICAgICAgTm9kZSogbGl0
dGxlRW5kaWFuQ2hpbGQgPSBudWxscHRyOwotICAgICAgICBpZiAoYnl0ZVNpemUgPiAxKSB7Ci0g
ICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCA0KQotICAgICAgICAg
ICAgICAgIGlzTGl0dGxlRW5kaWFuID0gRmFsc2VUcmlTdGF0ZTsKLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIGxpdHRsZUVuZGlhbkNoaWxkID0gZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDMsIHJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxp
dHRsZUVuZGlhbkNoaWxkLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpT
VmFsdWUgY29uc3RhbnQgPSBsaXR0bGVFbmRpYW5DaGlsZC0+Y29uc3RhbnQoKS0+dmFsdWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgaXNMaXR0bGVFbmRpYW4gPSBjb25zdGFudC5wdXJlVG9Cb29s
ZWFuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0xpdHRsZUVuZGlhbiAhPSBNaXhlZFRy
aVN0YXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlRW5kaWFuQ2hpbGQgPSBudWxs
cHRyOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBpc0xpdHRs
ZUVuZGlhbiA9IE1peGVkVHJpU3RhdGU7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPCAzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIEJhZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZVNp
emU7CisgICAgICAgICAgICBib29sIGlzRmxvYXRpbmdQb2ludCA9IGZhbHNlOworICAgICAgICAg
ICAgYm9vbCBpc1NpZ25lZCA9IGZhbHNlOworICAgICAgICAgICAgc3dpdGNoIChpbnRyaW5zaWMp
IHsKKyAgICAgICAgICAgIGNhc2UgRGF0YVZpZXdTZXRJbnQ4OgorICAgICAgICAgICAgICAgIGlz
U2lnbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgICAg
IGNhc2UgRGF0YVZpZXdTZXRVaW50ODoKKyAgICAgICAgICAgICAgICBieXRlU2l6ZSA9IDE7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRGF0YVZpZXdTZXRJbnQx
NjoKKyAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgICAgICAgICBjYXNlIERhdGFWaWV3U2V0VWludDE2OgorICAgICAgICAg
ICAgICAgIGJ5dGVTaXplID0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgY2FzZSBEYXRhVmlld1NldEludDMyOgorICAgICAgICAgICAgICAgIGlzU2lnbmVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgICAgIGNhc2UgRGF0YVZp
ZXdTZXRVaW50MzI6CisgICAgICAgICAgICAgICAgYnl0ZVNpemUgPSA0OworICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIERhdGFWaWV3U2V0RmxvYXQzMjoKKyAgICAg
ICAgICAgICAgICBpc0Zsb2F0aW5nUG9pbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJ5dGVT
aXplID0gNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRGF0YVZp
ZXdTZXRGbG9hdDY0OgorICAgICAgICAgICAgICAgIGlzRmxvYXRpbmdQb2ludCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnl0ZVNpemUgPSA4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgRGF0YVZpZXdEYXRh
IGRhdGEgeyB9OwotICAgICAgICBkYXRhLmlzTGl0dGxlRW5kaWFuID0gaXNMaXR0bGVFbmRpYW47
Ci0gICAgICAgIGRhdGEuaXNTaWduZWQgPSBpc1NpZ25lZDsKLSAgICAgICAgZGF0YS5ieXRlU2l6
ZSA9IGJ5dGVTaXplOwotICAgICAgICBkYXRhLmlzRmxvYXRpbmdQb2ludCA9IGlzRmxvYXRpbmdQ
b2ludDsKLQotICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSk7Ci0gICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKLSAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVy
T2Zmc2V0KSkpOwotICAgICAgICBhZGRWYXJBcmdDaGlsZChsaXR0bGVFbmRpYW5DaGlsZCk7Cisg
ICAgICAgICAgICBUcmlTdGF0ZSBpc0xpdHRsZUVuZGlhbiA9IE1peGVkVHJpU3RhdGU7CisgICAg
ICAgICAgICBOb2RlKiBsaXR0bGVFbmRpYW5DaGlsZCA9IG51bGxwdHI7CisgICAgICAgICAgICBp
ZiAoYnl0ZVNpemUgPiAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzIDwgNCkKKyAgICAgICAgICAgICAgICAgICAgaXNMaXR0bGVFbmRpYW4gPSBGYWxz
ZVRyaVN0YXRlOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBs
aXR0bGVFbmRpYW5DaGlsZCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgzLCByZWdp
c3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobGl0dGxlRW5kaWFuQ2hpbGQt
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3Rh
bnQgPSBsaXR0bGVFbmRpYW5DaGlsZC0+Y29uc3RhbnQoKS0+dmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlzTGl0dGxlRW5kaWFuID0gY29uc3RhbnQucHVyZVRvQm9vbGVhbigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGl0dGxlRW5kaWFuICE9IE1peGVkVHJpU3Rh
dGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlRW5kaWFuQ2hpbGQgPSBudWxs
cHRyOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlzTGl0dGxlRW5kaWFuID0gTWl4ZWRUcmlTdGF0ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIERhdGFWaWV3U2V0
LCBPcEluZm8oZGF0YS5hc1F1YWRXb3JkKSwgT3BJbmZvKCkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9CisgICAgICAgICAgICBEYXRhVmlld0RhdGEgZGF0YSB7IH07CisgICAgICAgICAg
ICBkYXRhLmlzTGl0dGxlRW5kaWFuID0gaXNMaXR0bGVFbmRpYW47CisgICAgICAgICAgICBkYXRh
LmlzU2lnbmVkID0gaXNTaWduZWQ7CisgICAgICAgICAgICBkYXRhLmJ5dGVTaXplID0gYnl0ZVNp
emU7CisgICAgICAgICAgICBkYXRhLmlzRmxvYXRpbmdQb2ludCA9IGlzRmxvYXRpbmdQb2ludDsK
KworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJl
Z2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobGl0dGxlRW5kaWFu
Q2hpbGQpOwogCi0gICAgY2FzZSBIYXNPd25Qcm9wZXJ0eUludHJpbnNpYzogewotICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBEYXRhVmlld1NldCwg
T3BJbmZvKGRhdGEuYXNRdWFkV29yZCksIE9wSW5mbygpKTsKKyAgICAgICAgICAgIHNldFJlc3Vs
dChhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50VW5kZWZpbmVkKSkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgICAgICAvLyBUaGlzIGNh
biBiZSByYWN5LCB0aGF0J3MgZmluZS4gV2Uga25vdyB0aGF0IG9uY2Ugd2Ugb2JzZXJ2ZSB0aGF0
IHRoaXMgaXMgY3JlYXRlZCwKLSAgICAgICAgLy8gdGhhdCBpdCB3aWxsIG5ldmVyIGJlIGRlc3Ry
b3llZCB1bnRpbCB0aGUgVk0gaXMgZGVzdHJveWVkLiBJdCdzIHVubGlrZWx5IHRoYXQKLSAgICAg
ICAgLy8gd2UnZCBldmVyIGdldCB0byB0aGUgcG9pbnQgd2hlcmUgd2UgaW5saW5lIHRoaXMgYXMg
YW4gaW50cmluc2ljIHdpdGhvdXQgdGhlCi0gICAgICAgIC8vIGNhY2hlIGJlaW5nIGNyZWF0ZWQs
IGhvd2V2ZXIsIGl0J3MgcG9zc2libGUgaWYgd2UgYWx3YXlzIHRocm93IGV4Y2VwdGlvbnMgaW5z
aWRlCi0gICAgICAgIC8vIGhhc093blByb3BlcnR5LgotICAgICAgICBpZiAoIW1fdm0tPmhhc093
blByb3BlcnR5Q2FjaGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2Fz
ZSBIYXNPd25Qcm9wZXJ0eUludHJpbnNpYzogeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICBOb2RlKiBvYmplY3QgPSBnZXQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgTm9kZSog
a2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7
Ci0gICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKEhhc093blByb3BlcnR5LCBv
YmplY3QsIGtleSk7Ci0gICAgICAgIHNldChyZXN1bHQsIHJlc3VsdE5vZGUpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBiZSByYWN5LCB0aGF0
J3MgZmluZS4gV2Uga25vdyB0aGF0IG9uY2Ugd2Ugb2JzZXJ2ZSB0aGF0IHRoaXMgaXMgY3JlYXRl
ZCwKKyAgICAgICAgICAgIC8vIHRoYXQgaXQgd2lsbCBuZXZlciBiZSBkZXN0cm95ZWQgdW50aWwg
dGhlIFZNIGlzIGRlc3Ryb3llZC4gSXQncyB1bmxpa2VseSB0aGF0CisgICAgICAgICAgICAvLyB3
ZSdkIGV2ZXIgZ2V0IHRvIHRoZSBwb2ludCB3aGVyZSB3ZSBpbmxpbmUgdGhpcyBhcyBhbiBpbnRy
aW5zaWMgd2l0aG91dCB0aGUKKyAgICAgICAgICAgIC8vIGNhY2hlIGJlaW5nIGNyZWF0ZWQsIGhv
d2V2ZXIsIGl0J3MgcG9zc2libGUgaWYgd2UgYWx3YXlzIHRocm93IGV4Y2VwdGlvbnMgaW5zaWRl
CisgICAgICAgICAgICAvLyBoYXNPd25Qcm9wZXJ0eS4KKyAgICAgICAgICAgIGlmICghbV92bS0+
aGFzT3duUHJvcGVydHlDYWNoZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGNhc2UgU3RyaW5nUHJvdG90eXBlU2xpY2VJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAgICAgTm9kZSogb2JqZWN0ID0g
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAg
ICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBo
KEhhc093blByb3BlcnR5LCBvYmplY3QsIGtleSk7CisgICAgICAgICAgICBzZXRSZXN1bHQocmVz
dWx0Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAgICAg
IGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBCYWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2Fz
ZSBTdHJpbmdQcm90b3R5cGVTbGljZUludHJpbnNpYzogeworICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgMikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIE5vZGUqIHRoaXNTdHJpbmcgPSBn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAg
ICAgTm9kZSogc3RhcnQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0
ZXJPZmZzZXQpKTsKLSAgICAgICAgTm9kZSogZW5kID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4gMikKLSAgICAgICAgICAgIGVuZCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBOb2Rl
KiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChTdHJpbmdTbGljZSwgdGhpc1N0cmluZywgc3RhcnQs
IGVuZCk7Ci0gICAgICAgIHNldChyZXN1bHQsIHJlc3VsdE5vZGUpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2FzZSBTdHJpbmdQcm90b3R5cGVUb0xvd2VyQ2FzZUlu
dHJpbnNpYzogewotICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwor
ICAgICAgICAgICAgTm9kZSogdGhpc1N0cmluZyA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSogc3RhcnQgPSBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAg
ICAgIE5vZGUqIGVuZCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPiAyKQorICAgICAgICAgICAgICAgIGVuZCA9IGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgTm9kZSogcmVz
dWx0Tm9kZSA9IGFkZFRvR3JhcGgoU3RyaW5nU2xpY2UsIHRoaXNTdHJpbmcsIHN0YXJ0LCBlbmQp
OworICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgU3RyaW5nUHJvdG90eXBlVG9Mb3dlckNhc2VJ
bnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAh
PSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKLSAgICAgICAgTm9kZSogdGhpc1N0cmluZyA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBOb2RlKiByZXN1bHROb2RlID0g
YWRkVG9HcmFwaChUb0xvd2VyQ2FzZSwgdGhpc1N0cmluZyk7Ci0gICAgICAgIHNldChyZXN1bHQs
IHJlc3VsdE5vZGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgICAgICBp
ZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2Fz
ZSBOdW1iZXJQcm90b3R5cGVUb1N0cmluZ0ludHJpbnNpYzogewotICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMSAmJiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAh
PSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7CisgICAgICAgICAgICBOb2RlKiB0aGlzU3RyaW5nID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiByZXN1bHRO
b2RlID0gYWRkVG9HcmFwaChUb0xvd2VyQ2FzZSwgdGhpc1N0cmluZyk7CisgICAgICAgICAgICBz
ZXRSZXN1bHQocmVzdWx0Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQogCi0gICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgY2FzZSBOdW1iZXJQcm90b3R5cGVUb1N0cmluZ0ludHJpbnNpYzogeworICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDEgJiYgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7Ci0gICAgICAgIE5vZGUqIHRoaXNOdW1iZXIgPSBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgaWYg
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsKLSAgICAgICAgICAgIE5vZGUqIHJl
c3VsdE5vZGUgPSBhZGRUb0dyYXBoKFRvU3RyaW5nLCB0aGlzTnVtYmVyKTsKLSAgICAgICAgICAg
IHNldChyZXN1bHQsIHJlc3VsdE5vZGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Tm9kZSogcmFkaXggPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJP
ZmZzZXQpKTsKLSAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKE51bWJl
clRvU3RyaW5nV2l0aFJhZGl4LCB0aGlzTnVtYmVyLCByYWRpeCk7Ci0gICAgICAgICAgICBzZXQo
cmVzdWx0LCByZXN1bHROb2RlKTsKKyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwor
ICAgICAgICAgICAgTm9kZSogdGhpc051bWJlciA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID09IDEpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0g
YWRkVG9HcmFwaChUb1N0cmluZywgdGhpc051bWJlcik7CisgICAgICAgICAgICAgICAgc2V0UmVz
dWx0KHJlc3VsdE5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBO
b2RlKiByYWRpeCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpOworICAgICAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKE51
bWJlclRvU3RyaW5nV2l0aFJhZGl4LCB0aGlzTnVtYmVyLCByYWRpeCk7CisgICAgICAgICAgICAg
ICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCi0gICAg
Y2FzZSBOdW1iZXJJc0ludGVnZXJJbnRyaW5zaWM6IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIDwgMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
Y2FzZSBOdW1iZXJJc0ludGVnZXJJbnRyaW5zaWM6IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA8IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGluc2VydENoZWNrcygpOwotICAgICAgICBOb2RlKiBpbnB1dCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICBOb2Rl
KiByZXN1bHROb2RlID0gYWRkVG9HcmFwaChOdW1iZXJJc0ludGVnZXIsIGlucHV0KTsKLSAgICAg
ICAgc2V0KHJlc3VsdCwgcmVzdWx0Tm9kZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
KyAgICAgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAgICAgTm9kZSogaW5wdXQgPSBn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAg
ICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBhZGRUb0dyYXBoKE51bWJlcklzSW50ZWdlciwgaW5w
dXQpOworICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdE5vZGUpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIGNhc2UgQ1BVTWZlbmNlSW50cmluc2ljOgotICAg
IGNhc2UgQ1BVUmR0c2NJbnRyaW5zaWM6Ci0gICAgY2FzZSBDUFVDcHVpZEludHJpbnNpYzoKLSAg
ICBjYXNlIENQVVBhdXNlSW50cmluc2ljOiB7CisgICAgICAgIGNhc2UgQ1BVTWZlbmNlSW50cmlu
c2ljOgorICAgICAgICBjYXNlIENQVVJkdHNjSW50cmluc2ljOgorICAgICAgICBjYXNlIENQVUNw
dWlkSW50cmluc2ljOgorICAgICAgICBjYXNlIENQVVBhdXNlSW50cmluc2ljOiB7CiAjaWYgQ1BV
KFg4Nl82NCkKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgc2V0KHJl
c3VsdCwKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQ1BVSW50cmluc2ljLCBPcEluZm8oaW50cmlu
c2ljKSwgT3BJbmZvKCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAo
IW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgICAgICBzZXRSZXN1bHQoYWRkVG9H
cmFwaChDUFVJbnRyaW5zaWMsIE9wSW5mbyhpbnRyaW5zaWMpLCBPcEluZm8oKSkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICB9CisgICAgICAgIH0KIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfTsKIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaW5saW5lSW50cmlu
c2ljKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGlkU2V0UmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGVja3NGdW5jdG9yPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>