<?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>92696</bug_id>
          
          <creation_ts>2012-07-30 17:34:17 -0700</creation_ts>
          <short_desc>DFG should hoist structure checks</short_desc>
          <delta_ts>2012-08-01 21:33:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>92728</dependson>
          <blocked>91933</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>oliver</cc>
    
    <cc>philn</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>682567</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-30 17:34:17 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682569</commentid>
    <comment_count>1</comment_count>
      <attachid>155408</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-30 17:43:15 -0700</bug_when>
    <thetext>Created attachment 155408
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682739</commentid>
    <comment_count>2</comment_count>
      <attachid>155443</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-30 22:58:56 -0700</bug_when>
    <thetext>Created attachment 155443
almost works

It turns out that to do this right you need the CFA to track the last CheckStructure performed on a variable even if it was subsequently clobbered, so that OSR entry can validate whether the variable still has that structure. Otherwise the subsequent transition watchpoints would not work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682758</commentid>
    <comment_count>3</comment_count>
      <attachid>155447</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-30 23:31:44 -0700</bug_when>
    <thetext>Created attachment 155447
runs benchmarks (on 64-bit)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684620</commentid>
    <comment_count>4</comment_count>
      <attachid>155893</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-01 15:03:37 -0700</bug_when>
    <thetext>Created attachment 155893
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684641</commentid>
    <comment_count>5</comment_count>
      <attachid>155893</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-01 15:16:36 -0700</bug_when>
    <thetext>Comment on attachment 155893
the patch

Attachment 155893 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13419235</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684646</commentid>
    <comment_count>6</comment_count>
      <attachid>155893</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-01 15:21:29 -0700</bug_when>
    <thetext>Comment on attachment 155893
the patch

Attachment 155893 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13411585</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684793</commentid>
    <comment_count>7</comment_count>
      <attachid>155893</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-08-01 17:18:01 -0700</bug_when>
    <thetext>Comment on attachment 155893
the patch

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

r+, unsure about the lack of any kind of enum / name for the ballot constants.

&gt; Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp:412
&gt; +        noticeStructureCheck(variable, set.singletonStructure());

I feel like I&apos;ve seen this idiom before - I could be wrong?
- maybe we want a singletonStructureOrNull, or just make singletonStructure() provide this behavior by default?

&gt; Source/JavaScriptCore/dfg/DFGVariableAccessData.h:156
&gt; +        m_votes[1] = 0;

o_O

0 &amp; 1 - are you sure?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684798</commentid>
    <comment_count>8</comment_count>
      <attachid>155893</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-01 17:21:34 -0700</bug_when>
    <thetext>Comment on attachment 155893
the patch

Attachment 155893 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13421225</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684955</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-01 21:33:41 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/124404</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155408</attachid>
            <date>2012-07-30 17:43:15 -0700</date>
            <delta_ts>2012-07-30 22:58:56 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>hoiststruct_patch_1.diff</filename>
            <type>text/plain</type>
            <size>26221</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI0MTIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDEyLTA3LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBob2lzdCBzdHJ1Y3R1cmUgY2hlY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjY5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9E
RkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogZGZnL0RG
R1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToK
KyAgICAgICAgKFN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhh
c2UpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6Om5vdGlj
ZVN0cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2U6Om5vdGljZUNsb2JiZXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdQaGFzZTo6Y2xvYmJlcik6CisgICAgICAgIChDaGVja0RhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6Q2hlY2tEYXRhOjpDaGVj
a0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
KToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKwogMjAxMi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5OjptX3Nob3VsZENhY2hlIGlzIG9u
bHkgYXNzaWduZWQgYW5kIG5ldmVyIHVzZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxMjM5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYg
KzEzOCw4IEBACiAJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2
RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3
QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYyMDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjIwMTc5MTQzRkNENDgwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZEMTQzRkNEMkYwMDY4
Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLzsgfTsKKwkJMEY2Mzk0M0YxNUM3NUYxOTAw
NkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0M0QxNUM3NUYxNDAwNkE1OTdD
IC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAv
KiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERG
R1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGNjZFMTZCMTRERjNG
MTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0Iy
RTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1
QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwpAQCAtODg1LDYgKzg4
Nyw4IEBACiAJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0VmFsdWUuaDsgcGF0
aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2suaDsgcGF0aCA9IGRmZy9ERkdCYXNp
Y0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjIwMTcyMTQzRkNEMkYw
MDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBhdGggPSBkZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjM5NDNDMTVD
NzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0Mg
LyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7IHBhdGgg
PSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMjEsNiArMjMyNSw4IEBACiAJCQkJ
ODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi8sCiAJCQkJ
ODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICov
LAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cCAqLywKKwkJCQkwRjYzOTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8sCiAJCQkJMEZDMDk3OUYxNDZCMjhDNzAw
Q0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8sCiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQy
IC8qIERGR1RodW5rcy5oICovLAogCQkJCTBGMkJEQzNGMTUyMjgwMTcwMENEODkxMCAvKiBERkdW
YWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLywKQEAgLTI4NjAsNiArMjg2Niw3IEBACiAJCQkJMEY3
NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDQ0MTVCMkEzQzAwMDhGMzYzRSAvKiBERkdSZWdp
c3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8q
IERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2Mzk0
M0YxNUM3NUYxOTAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0zNDU3LDYgKzM0NjQsNyBAQAogCQkJCTBGNzY2RDJGMTVBOERDRTAw
MDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY3NjZEMzQxNUFFMjUzODAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2Mzk0NDAx
NUM3NUYxRDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJ
KHJldmlzaW9uIDEyMzk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR0pJVENv
bXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKICNp
bmNsdWRlICJERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIK
ICNpbmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRl
ICJPcHRpb25zLmgiCkBAIC0xMDIsNiArMTAzLDggQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICB9CiAgICAg
cGVyZm9ybUNTRShkZmcsIEZpeHBvaW50Q29udmVyZ2VkKTsKKyAgICBpZiAocGVyZm9ybVN0cnVj
dHVyZUNoZWNrSG9pc3RpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybUNGQShkZmcpOyAvLyBOZWVk
IHRvIHJlY29tcHV0ZSBDRkEgc2luY2Ugbm9kZXMgd2VyZSBhZGRlZCBvciBjaGFuZ2VkLgogI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJERkcgb3B0aW1pemF0aW9u
IGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVyYXRpb25zLlxuIiwgY250KTsKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEyMzk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDUsNiArMjQ1LDEyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBDaGVja1N0cnVjdHVyZSk7Cisg
ICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlU2V0KCku
c2luZ2xldG9uU3RydWN0dXJlKCkpOworICAgIH0KKyAgICAKICAgICBKU0NlbGwqIHdlYWtDb25z
dGFudCgpCiAgICAgewogICAgICAgICBBU1NFUlQob3AoKSA9PSBXZWFrSlNDb25zdGFudCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0Fic3RyYWN0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJE
RkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIFN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CitwdWJsaWM6CisgICAgU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlKEdyYXBoJiBn
cmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInN0cnVjdHVyZSBjaGVjayBob2lzdGluZyIp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICAvLyBJ
ZGVudGlmeSB0aGUgc2V0IG9mIHZhcmlhYmxlcyB0aGF0IGFyZSBhbHdheXMgc3ViamVjdCB0byB0
aGUgc2FtZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gY2hlY2tzLiBGb3Igbm93LCBvbmx5IGNvbnNp
ZGVyIG1vbm9tb3JwaGljIHN0cnVjdHVyZSBjaGVja3MgKG9uZSBzdHJ1Y3R1cmUpLgorICAgICAg
ICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2st
PnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9j
YWwpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUuaXNDYXB0dXJlZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVj
dHVyZUNoZWNrKHZhcmlhYmxlLCBub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIElkZW50aWZ5IHRoZSBzZXQgb2YgdmFyaWFibGVzIHRoYXQgYXJlIGxpdmUgYWNyb3NzIGEg
c3RydWN0dXJlIGNsb2JiZXIuCisgICAgICAgIAorICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFj
Y2Vzc0RhdGEqPiBsaXZlKAorICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFi
bGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICBtX2dyYXBoLm1fYmxv
Y2tzWzBdLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQobGl2ZS5u
dW1iZXJPZkFyZ3VtZW50cygpID09IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1
bWVudHMoKSk7CisgICAgICAgICAgICBBU1NFUlQobGl2ZS5udW1iZXJPZkxvY2FscygpID09IGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsaXZlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBpbmRleEF0VGFpbCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWxbaV07CisgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKKyAgICAgICAgICAgICAgICBpZiAo
aW5kZXhBdFRhaWwgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IDA7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IG1f
Z3JhcGhbaW5kZXhBdFRhaWxdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAg
IGxpdmVbaV0gPSB2YXJpYWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KSB7Cisg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOworICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Cisg
ICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNo
OgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYmlydGguCisgICAgICAgICAgICAg
ICAgICAgIGxpdmUub3BlcmFuZChub2RlLmxvY2FsKCkpID0gbm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBTZXRB
cmd1bWVudDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxpdmUub2VwcmFuZChub2RlLmxv
Y2FsKCkpKTsgLy8gTXVzdCBiZSBsaXZlLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobGl2
ZS5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPT0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7IC8v
IE11c3QgaGF2ZSB0aGUgdmFyaWFibGUgd2UgZXhwZWN0ZWQuCisgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgYSBkZWF0aC4KKyAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG5v
ZGUubG9jYWwoKSkgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBDRkEncyBub3Rpb24gb2Ygd2hh
dCBjbG9iYmVycyB0aGUgd29ybGQuCisgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIobGl2ZSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBh
cmVMZXNzOgorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgICAg
ICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXJFcToKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVFcTogeworICAgICAgICAgICAg
ICAgICAgICBOb2RlJiBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSYgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldOworICAgICAgICAg
ICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdodCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBD
b21wYXJlRXEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobV9ncmFwaC5pc0NvbnN0
YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpLmlzTnVs
bCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtX2dyYXBoLmlzQ29uc3RhbnQo
bm9kZS5jaGlsZDIoKS5pbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkuaXNOdWxs
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3QobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUFycmF5KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KCkgJiYgcmlnaHQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmlnaHQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSAmJiBsZWZ0LnNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlQXJy
YXkoKSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdo
dC5zaG91bGRTcGVjdWFsdGVBcnJheSgpICYmIGxlZnQuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90
aGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihsaXZlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KSB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVB
cnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSB8fCAh
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjbG9iYmVyKGxpdmUpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoK
KyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAg
ICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbY2hp
bGQxXS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dy
YXBoW2NoaWxkMl0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpIHx8ICFpc0FjdGlvbmFibGVNdXRh
YmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihsaXZlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1
bGF0ZUFyZ3VtZW50cygpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
Y2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91
bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVV
aW50OENsYW1wZWRBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDE2
QXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGls
ZDFdLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNsb2JlcihsaXZlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKKyAgICAgICAg
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhdmU6CisgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRCeUlkOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgorICAgICAgICAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbVB1
dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAg
ICAgICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIFJlc29sdmU6
CisgICAgICAgICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICAgICAgICAgICAgICBjYXNl
IFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgICAgICAgICAgICAgIGNhc2UgUmVzb2x2ZUdsb2Jh
bDoKKyAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihsaXZlKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgIT0gUGhpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAg
ICAvLyBNYWtlIGNoYW5nZXM6CisgICAgICAgIC8vIDEpIElmIGEgdmFyaWFibGUncyBsaXZlIHJh
bmdlIGRvZXMgbm90IHNwYW4gYSBjbG9iYmVyLCB0aGVuIGluamVjdCBzdHJ1Y3R1cmUKKyAgICAg
ICAgLy8gICAgY2hlY2tzIGFmdGVyIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgLy8gMikgSWYgYSB2
YXJpYWJsZSdzIGxpdmUgcmFuZ2Ugc3BhbnMgYSBjbG9iYmVyIGJ1dCBpcyB3YXRjaHBvaW50YWJs
ZSwgdGhlbgorICAgICAgICAvLyAgICBpbmplY3Qgc3RydWN0dXJlIGNoZWNrcyBhZnRlciB0aGUg
U2V0TG9jYWwgYW5kIHJlcGxhY2UgYWxsIG90aGVyIHN0cnVjdHVyZQorICAgICAgICAvLyAgICBj
aGVja3Mgb24gdGhhdCB2YXJpYWJsZSB3aXRoIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9p
bnRzLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGluamVjdCBzdHJ1Y3R1
cmUgY2hlY2tzIGFmdGVyIHRoZSBTZXRMb2NhbCB0byBoZWxwIE9TUjogd2Ugd2FudAorICAgICAg
ICAvLyB0byBlbnN1cmUgdGhhdCBpZiB3ZSBleGl0IGR1ZSB0byBzdHJ1Y3R1cmUgY2hlY2sgZmFp
bHVyZSwgT1NSIGtub3dzIHRoYXQgdGhlCisgICAgICAgIC8vIHZhcmlhYmxlIHdhcyBhbHJlYWR5
IGFzc2lnbmVkLgorICAgICAgICAKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldDsK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlh
YmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9
PSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+c2Vjb25kLm1f
aXNDbG9iYmVyZWQgJiYgIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNrU3RydWN0dXJlLCBu
b2RlLmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT5zZWNv
bmQubV9zdHJ1Y3R1cmUpKSwgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIGNo
ZWNrU3RydWN0dXJlLnJlZigpOworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hlY2tT
dHJ1Y3R1cmVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmFwcGVuZChjaGVja1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5hcHBlbmQoaW5kZXhJbkJsb2NrICsgMSwgY2hlY2tTdHJ1Y3R1cmVJbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgY2hp
bGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hp
bGQub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNv
bmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlID09IG5v
ZGUuc3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAg
ICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCk7CisgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNo
YW5nZWQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgbm90aWNlU3RydWN0dXJlQ2hlY2so
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46OkFkZFJl
c3VsdCByZXN1bHQgPQorICAgICAgICAgICAgbV9tYXAuYWRkKHZhcmlhYmxlLCBDaGVja0RhdGEo
c3RydWN0dXJlLCBmYWxzZSkpOworICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChyZXN1bHQtPml0ZXJhdG9yLT5zZWNvbmQubV9z
dHJ1Y3R1cmUgPT0gc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXN1
bHQtPml0ZXJhdG9yLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgIH0KKyAgICAKKyAgICB2
b2lkIG5vdGljZVN0cnVjdHVyZUNoZWNrKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAgICAgICAgaWYgKHNldC5zaXplKCkgPT0g
MSkgeworICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIDApOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNr
KHZhcmlhYmxlLCBzZXQuc2luZ2xldG9uU3RydWN0dXJlKCkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIG5vdGljZUNsb2JiZXIoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICB7Cisg
ICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3Ig
aXRlciA9CisgICAgICAgICAgICBtX21hcC5maW5kKHZhcmlhYmxlKTsKKyAgICAgICAgaWYgKGl0
ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGl0ZXItPnNl
Y29uZC5tX2lzQ2xvYmJlcmVkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVy
KGNvbnN0IE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+JiBsaXZlKQorICAgIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IGxpdmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbGl2ZVtpXTsKKyAgICAgICAgICAgIGlmICghdmFy
aWFibGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBub3RpY2VDbG9i
YmVyKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgQ2hlY2tE
YXRhIHsKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgYm9vbCBtX2lz
Q2xvYmJlcmVkOworICAgICAgICAKKyAgICAgICAgQ2hlY2tEYXRhKFN0cnVjdHVyZSogc3RydWN0
dXJlLCBib29sIGlzQ2xvYmJlcmVkKQorICAgICAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1
cmUpCisgICAgICAgICAgICAsIG1faXNDbG9iYmVyZWQoaXNDbG9iYmVyZWQpCisgICAgICAgIHsK
KyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEq
LCBDaGVja0RhdGE+IG1fbWFwOworfTsKKworYm9vbCBwZXJmb3JtU3RydWN0dXJlQ2hlY2tIb2lz
dGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBTdHJ1Y3R1cmUgQ2hlY2sgSG9pc3RpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhh
c2U8U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2VfaAorI2RlZmluZSBERkdTdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitjbGFzcyBHcmFwaDsKKworLy8gSG9pc3RzIENoZWNrU3RydWN0dXJlIG9uIHZhcmlhYmxlcyB0
byBhc3NpZ25tZW50cyB0byB0aG9zZSB2YXJpYWJsZXMsIGlmIGVpdGhlciBvZgorLy8gdGhlIGZv
bGxvd2luZyBpcyB0cnVlOgorLy8gQSkgVGhlIHN0cnVjdHVyZSdzIHRyYW5zaXRpb24gd2F0Y2hw
b2ludCBzZXQgaXMgdmFsaWQuCisvLyBCKSBUaGUgc3BhbiBvZiBjb2RlIHdpdGhpbiB3aGljaCB0
aGUgdmFyaWFibGUgaXMgbGl2ZSBoYXMgbm8gZWZmZWN0cyB0aGF0IG1pZ2h0CisvLyAgICBjbG9i
YmVyIHRoZSBzdHJ1Y3R1cmUuCisKK2Jvb2wgcGVyZm9ybVN0cnVjdHVyZUNoZWNrSG9pc3Rpbmco
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2VfaAor
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155443</attachid>
            <date>2012-07-30 22:58:56 -0700</date>
            <delta_ts>2012-07-30 23:31:44 -0700</delta_ts>
            <desc>almost works</desc>
            <filename>hoiststruct_patch_2.diff</filename>
            <type>text/plain</type>
            <size>58411</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI0MTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA3LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBob2lzdCBzdHJ1Y3R1cmUgY2hlY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjY5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhbHVlUmVjb3ZlcnkuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6aXNTZXQp
OgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpvcGVyYXRvciEpOgorICAgICAgICAoVmFs
dWVSZWNvdmVyeSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmNsb2JiZXJXb3JsZCk6CisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmNsb2JiZXJDYXB0dXJlZFZhcnMpOgorICAgICAgICAq
IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChBYnN0cmFjdFN0YXRlKToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc0NsZWFy
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1RvcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RWYWx1ZTo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjptZXJnZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6dmFsaWRhdGVGb3JFbnRyeSk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRMb2Nh
bCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NTcGVjdWxhdGlvbnMpOgorICAgICAg
ICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNo
ZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6c3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6Q1NFUGhhc2U6OnB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRMb2NhbExvYWRFbGltaW5hdGlvbik6CisgICAgICAg
IChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZH
RHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1N0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50KToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc1N0cnVjdHVyZVNldCk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
OgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24pOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFN0
cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6Om5vdGljZVN0cnVjdHVyZUNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6Om5v
dGljZUNsb2JiZXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZTo6Y2xvYmJlcik6CisgICAgICAgIChDaGVja0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6Q2hlY2tEYXRhOjpDaGVja0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6OnBlcmZvcm1TdHJ1Y3R1cmVDaGVja0hvaXN0aW5nKToKKyAgICAgICAg
KiBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAo
REZHKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nRmFpbGVkKToKKyAgICAgICAgKFZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpzdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKToK
KwogMjAxMi0wNy0zMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyNDEyMy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjM5OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw4IEBACiAJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAv
KiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIw
MTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RTE0M0ZDRDJGMDA2OEI3N0Mg
LyogREZHQWJzdHJhY3RTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNjIwMTc5MTQzRkNENDgwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLzsgfTsKKwkJ
MEY2Mzk0M0YxNUM3NUYxOTAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0
M0QxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjM5NDQw
MTVDNzVGMUQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0M0MxNUM3
NUYxNDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi87IH07
CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdF
ZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBK
SVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICov
OyB9OwpAQCAtODg1LDYgKzg4Nyw4IEBACiAJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBE
RkdBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fi
c3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Js
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2suaDsg
cGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBh
dGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNjM5NDNDMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzOTQz
RDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZH
QWRqYWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGph
Y2VuY3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZH
RWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4
RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMjEs
NiArMjMyNSw4IEBACiAJCQkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKKwkJCQkwRjYzOTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjYzOTQzRDE1Qzc1
RjE0MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8sCiAJCQkJ
MEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8sCiAJCQkJMEZDMDk3
QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovLAogCQkJCTBGMkJEQzNGMTUyMjgw
MTcwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLywKQEAgLTI4NjAsNiAr
Mjg2Niw3IEBACiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDQ0MTVCMkEzQzAw
MDhGMzYzRSAvKiBERkdSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYx
NUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2Mzk0M0YxNUM3NUYxOTAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNDU3LDYgKzM0NjQsNyBAQAogCQkJ
CTBGNzY2RDJGMTVBOERDRTAwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzQxNUFFMjUzODAwOEYzNjNFIC8qIEp1bXBSZXBsYWNl
bWVudFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAw
OEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkocmV2aXNpb24gMTIzOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNiArNzYsOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKKyAgICBib29s
IGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWUgIT0gRG9udEtub3c7IH0KKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCiAgICAgc3Rh
dGljIFZhbHVlUmVjb3ZlcnkgYWxyZWFkeUluUmVnaXN0ZXJGaWxlKCkKICAgICB7CiAgICAgICAg
IFZhbHVlUmVjb3ZlcnkgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjM5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzM1LDcgKzEzMzUsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKLSAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLmNvZGVPcmlnaW4pOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlJZDoKQEAgLTE0MTUsNyArMTQxNSw4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAotICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgorICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0
YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBub2RlLnNldENhbkV4aXQoCkBAIC0xNjA5
LDYgKzE2MTAsMTIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
CiBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdp
biYgY29kZU9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKQogeworICAgIGNsb2JiZXJDYXB0
dXJlZFZhcnMoY29kZU9yaWdpbik7CisgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2Nr
KTsKK30KKworaW5saW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlckNhcHR1cmVkVmFycyhj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorewogICAgIGlmIChjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkgewogICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFycyA9IGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBjYXB0dXJlZFZhcnMuc2l6ZSgpOyBpLS07KSB7CkBAIC0xNjI0LDcgKzE2MzEsNiBA
QCBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyV29ybGQoCiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBtX3ZhcmlhYmxlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQogICAgICAg
ICAgICAgbV92YXJpYWJsZXMuYXJndW1lbnQoaSkubWFrZVRvcCgpOwogICAgIH0KLSAgICBjbG9i
YmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogfQogCiBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0
YXRlOjpjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTIz
OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxNyw2ICsyMTcsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgog
ICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleElu
QmxvY2spOworICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2RlT3JpZ2luJik7
CiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spOwogICAg
IAogICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwg
QWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxMjM5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzE3LDEzICszMTcsMTQgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsK
ICAgICAgICAgbV90eXBlID0gU3BlY05vbmU7CiAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7
CisgICAgICAgIG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV92YWx1
ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAK
ICAgICBib29sIGlzQ2xlYXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBt
X3R5cGUgPT0gU3BlY05vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgICAgICBib29s
IHJlc3VsdCA9IG1fdHlwZSA9PSBTcGVjTm9uZSAmJiBtX3N0cnVjdHVyZS5pc0NsZWFyKCkgJiYg
bV91bmNsb2JiZXJlZFN0cnVjdHVyZS5pc0NsZWFyKCk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAg
ICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MzMzLDYgKzMzNCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIG1f
dHlwZSA9IFNwZWNUb3A7CiAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAg
bV91bmNsb2JiZXJlZFN0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1Zh
bHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CkBAIC0zNTMsNyArMzU1
LDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIGJvb2wgaXNUb3AoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBTcGVjVG9wICYmIG1fc3RydWN0dXJl
LmlzVG9wKCk7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gU3BlY1RvcCAmJiBtX3N0cnVjdHVy
ZS5pc1RvcCgpICYmIG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUuaXNUb3AoKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCB2YWx1ZUlzVG9wKCkgY29uc3QKQEAgLTM4Myw4ICszODUsMTEgQEAgc3RydWN0
IEFic3RyYWN0VmFsdWUgewogICAgICAgICAgICAgLy8gaXQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0
dXJlIC0gZm9yIGV4YW1wbGUgYmV0d2VlbiB3aGVuIHdlIGNvbXBpbGUKICAgICAgICAgICAgIC8v
IHRoZSBjb2RlIGFuZCB3aGVuIHdlIHJ1biBpdC4KICAgICAgICAgICAgIG1fc3RydWN0dXJlLm1h
a2VUb3AoKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0
dXJlLm1ha2VUb3AoKTsgLy8gRklYTUU6IENvbnNpZGVyIG5vdCBjbG9iYmVyaW5nIHRoaXMuCisg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAg
ICAgICAgbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSk7CiAgICAgICAg
IG1fdmFsdWUgPSB2YWx1ZTsKQEAgLTM5Nyw2ICs0MDIsOSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1
ZSB7CiAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fc3RydWN0dXJlLmFk
ZChzdHJ1Y3R1cmUpOwogICAgICAgICAKKyAgICAgICAgbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5j
bGVhcigpOworICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmFkZChzdHJ1Y3R1cmUpOwor
ICAgICAgICAKICAgICAgICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVj
dHVyZSk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIApAQCAtNDA1LDEw
ICs0MTMsMTMgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgc2V0KFNw
ZWN1bGF0ZWRUeXBlIHR5cGUpCiAgICAgewotICAgICAgICBpZiAodHlwZSAmIFNwZWNDZWxsKQor
ICAgICAgICBpZiAodHlwZSAmIFNwZWNDZWxsKSB7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZS5t
YWtlVG9wKCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdW5jbG9iYmVyZWRTdHJ1Y3R1
cmUubWFrZVRvcCgpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAg
ICAgICAgfQogICAgICAgICBtX3R5cGUgPSB0eXBlOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1
ZSgpOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC00MTgsNiArNDI5LDcgQEAgc3Ry
dWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBvdGhl
ci5tX3R5cGUKICAgICAgICAgICAgICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJl
CisgICAgICAgICAgICAmJiBtX3VuY2xvYmJlcmVkU3RydWN0dXJlID09IG90aGVyLm1fdW5jbG9i
YmVyZWRTdHJ1Y3R1cmUKICAgICAgICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsK
ICAgICB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKSBj
b25zdApAQCAtNDM3LDYgKzQ0OSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZVNwZWN1bGF0aW9uKG1fdHlwZSwg
b3RoZXIubV90eXBlKTsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtX3N0cnVjdHVyZS5hZGRBbGwo
b3RoZXIubV9zdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmVzdWx0IHw9IG1fdW5jbG9iYmVyZWRT
dHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkgewogICAgICAgICAgICAgICAgIHJlc3Vs
dCB8PSAhIW1fdmFsdWU7CiAgICAgICAgICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKQEAg
LTQ1MSw4ICs0NjQsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAg
bWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIHR5cGUpOwogICAgICAgICAKLSAgICAgICAgaWYgKHR5
cGUgJiBTcGVjQ2VsbCkKKyAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV91bmNsb2JiZXJlZFN0cnVj
dHVyZS5tYWtlVG9wKCk7CisgICAgICAgIH0KICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsK
IAogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC00NjIsNiArNDc3LDcgQEAgc3RydWN0
IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0
aW9uRnJvbVN0cnVjdHVyZXMoKTsKICAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsK
KyAgICAgICAgbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5maWx0ZXIob3RoZXIpOwogICAgICAgICAK
ICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHByaW9yIHRvIHRoZSBhYm92ZSB0d28gc3Rh
dGVtZW50cyB3ZSBoYWQgKEZvbywgVE9QKSwgd2hlcmUKICAgICAgICAgLy8gRm9vIGlzIGEgU3Bl
Y3VsYXRlZFR5cGUgdGhhdCBpcyBkaXNqb2ludCB3aXRoIHRoZSBwYXNzZWQgU3RydWN0dXJlU2V0
LiBJbiB0aGF0CkBAIC00NjksNiArNDg1LDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAg
ICAgICAvLyBzdXJlIHRoYXQgbmV3IGluZm9ybWF0aW9uIGdsZWFuZWQgZnJvbSB0aGUgU3BlY3Vs
YXRlZFR5cGUgbmVlZHMgdG8gYmUgZmVkIGJhY2sKICAgICAgICAgLy8gaW50byB0aGUgaW5mb3Jt
YXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTdHJ1Y3R1cmVTZXQuCiAgICAgICAgIG1fc3RydWN0dXJl
LmZpbHRlcihtX3R5cGUpOworICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmZpbHRlciht
X3R5cGUpOwogICAgICAgICAKICAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFsaWRhdGVJZ25v
cmluZ1ZhbHVlKG1fdmFsdWUpKQogICAgICAgICAgICAgY2xlYXIoKTsKQEAgLTQ4Nyw2ICs1MDQs
NyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRo
ZSBzdHJ1Y3R1cmUgZmlsdGVyaW5nIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGlzIHRvIGZpbHRlciBv
bgogICAgICAgICAvLyB0aGUgbmV3IHR5cGUgKE5vbmUpIHJhdGhlciB0aGFuIHRoZSBvbmUgcGFz
c2VkIChBcnJheSkuCiAgICAgICAgIG1fc3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOworICAgICAg
ICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwogCiAgICAgICAgIGlmICgh
IW1fdmFsdWUgJiYgIXZhbGlkYXRlSWdub3JpbmdWYWx1ZShtX3ZhbHVlKSkKICAgICAgICAgICAg
IGNsZWFyKCk7CkBAIC01MjMsOCArNTQxLDggQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAg
ICAgICBpZiAoaXNUb3AoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAg
ICAgICAgaWYgKCEhbV92YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlID09IHZhbHVl
OworICAgICAgICBpZiAoISFtX3ZhbHVlICYmIG1fdmFsdWUgIT0gdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpZiAobWVyZ2VTcGVjdWxhdGlvbnMo
bV90eXBlLCBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSkpICE9IG1fdHlwZSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTU0NSwxMCArNTYzLDM5IEBAIHN0cnVjdCBBYnN0cmFjdFZh
bHVlIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAorICAgIGJvb2wgdmFsaWRh
dGVGb3JFbnRyeShKU1ZhbHVlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9w
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghIW1f
dmFsdWUgJiYgbV92YWx1ZSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChtZXJnZVNwZWN1bGF0aW9ucyhtX3R5cGUsIHNwZWN1bGF0aW9u
RnJvbVZhbHVlKHZhbHVlKSkgIT0gbV90eXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNT
RVJUKG1fdHlwZSAmIFNwZWNFbXB0eSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUuaXNUb3Ao
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKCEhdmFs
dWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBTcGVj
Q2VsbCk7CisgICAgICAgICAgICByZXR1cm4gbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5jb250YWlu
cyh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmICghKG1fdHlwZSAmIFNwZWNDZWxsKSkKKyAgICAg
ICAgaWYgKCEobV90eXBlICYgU3BlY0NlbGwpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9zdHJ1
Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3VuY2xvYmJlcmVkU3RydWN0
dXJlLmlzQ2xlYXIoKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0NsZWFy
KCkpCiAgICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUpOwpAQCAtNTY2LDEyICs2MTMsMTUgQEAg
c3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgZnByaW50ZihvdXQsICIoJXMs
ICIsIHNwZWN1bGF0aW9uVG9TdHJpbmcobV90eXBlKSk7CiAgICAgICAgIG1fc3RydWN0dXJlLmR1
bXAob3V0KTsKKyAgICAgICAgZGF0YUxvZygiLCAiKTsKKyAgICAgICAgbV91bmNsb2JiZXJlZFN0
cnVjdHVyZS5kdW1wKG91dCk7CiAgICAgICAgIGlmICghIW1fdmFsdWUpCiAgICAgICAgICAgICBm
cHJpbnRmKG91dCwgIiwgJXMiLCBtX3ZhbHVlLmRlc2NyaXB0aW9uKCkpOwogICAgICAgICBmcHJp
bnRmKG91dCwgIikiKTsKICAgICB9CiAKICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fc3Ry
dWN0dXJlOworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV91bmNsb2JiZXJlZFN0cnVjdHVy
ZTsKICAgICBTcGVjdWxhdGVkVHlwZSBtX3R5cGU7CiAgICAgSlNWYWx1ZSBtX3ZhbHVlOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxMjM5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDYgKzI1Nyw4IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKKyAg
ICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWls
ZWQoCisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHZh
bHVlKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVy
YW5kKSA9IG5vZGVJbmRleDsKICAgICB9CkBAIC0yOTksNyArMzAxLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBmaXJzdCBi
YXNpYyBibG9jazsgbGluawogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUg
U2V0QXJndW1lbnQuCiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmxvY2FsKCkgPT0g
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7Ci0gICAgICAgICAgICAgICAg
bm9kZUluZGV4ID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExv
Y2FsLCBPcEluZm8obm9kZVB0ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZVB0ci0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gaW5qZWN0
TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFi
bGUpLCBub2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgfQpAQCAtMzQwLDYgKzM0Myw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kKTsKICAgICAgICAgCiAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOworICAgICAgICB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKKyAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENhY2hlKSk7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKFNldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsK
ICAgICB9CkBAIC0xNzIzLDcgKzE3MjgsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLm1fYmxvY2tz
WzBdLmdldCgpICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkgewogICAg
ICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyAr
K2FyZ3VtZW50KSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dy
YXBoKFNldEFyZ3VtZW50LCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50VG9P
cGVyYW5kKGFyZ3VtZW50KSwgbV9jb2RlQmxvY2stPmFyZ3VtZW50SXNDYXB0dXJlZChhcmd1bWVu
dCkpKSk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKAorICAgICAgICAgICAgICAgIGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3Vt
ZW50KSwgbV9jb2RlQmxvY2stPmFyZ3VtZW50SXNDYXB0dXJlZChhcmd1bWVudCkpOworICAgICAg
ICAgICAgdmFyaWFibGUtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKKyAgICAg
ICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRDYWNoZSkpOworICAgICAgICAgICAgTm9kZUluZGV4IHNldEFyZ3Vt
ZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAg
ICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50OwogICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQp
OwpAQCAtMzAxMCw2ICszMDE5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVB
Y2Nlc3NTcAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSAmbV9ncmFwaC5tX3Zh
cmlhYmxlQWNjZXNzRGF0YVtpXTsKICAgICAgICAgZGF0YS0+ZmluZCgpLT5wcmVkaWN0KGRhdGEt
Pm5vblVuaWZpZWRQcmVkaWN0aW9uKCkpOwogICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlSXND
YXB0dXJlZChkYXRhLT5pc0NhcHR1cmVkKCkpOworICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdl
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChkYXRhLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
RmFpbGVkKCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEyMzk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0
dXJlOgorICAgICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCiAgICAgICAgICAgICAgICAgICAgICYm
IHN0cnVjdHVyZVNldC5pc1N1cGVyc2V0T2Yobm9kZS5zdHJ1Y3R1cmVTZXQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzg5LDYgKzM5MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAg
ICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGlmIChu
b2RlLmNoaWxkMSgpID09IGNoaWxkMQogICAgICAgICAgICAgICAgICAgICAmJiBub2RlLnN0cnVj
dHVyZVNldCgpLmNvbnRhaW5zT25seShzdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTQzNyw2ICs0MzksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVy
ZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgpAQCAtNjczLDcgKzY3Niw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRl
eCBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGVJbmRl
eCYgcmVsZXZhbnRMb2NhbE9wKQorICAgIE5vZGVJbmRleCBnZXRMb2NhbExvYWRFbGltaW5hdGlv
bihWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIE5vZGVJbmRleCYgcmVsZXZhbnRMb2NhbE9wLCBib29s
IGNhcmVBYm91dENsb2JiZXJpbmcpCiAgICAgewogICAgICAgICByZWxldmFudExvY2FsT3AgPSBO
b05vZGU7CiAgICAgICAgIApAQCAtNzAzLDcgKzcwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAg
ICAgICAgIGlmIChjYXJlQWJvdXRDbG9iYmVyaW5nICYmIG1fZ3JhcGguY2xvYmJlcnNXb3JsZChp
bmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC05NDQsMTMgKzk0NywxNSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
CisgICAgICAgICAgICBpZiAobV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2Vk
ICYmICF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIE5vZGVJbmRleCByZWxldmFudExvY2FsT3A7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggcG9zc2libGVSZXBsYWNlbWVudCA9IGdldExvY2FsTG9hZEVsaW1pbmF0aW9u
KHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wKTsKLSAgICAgICAg
ICAgIEFTU0VSVChyZWxldmFudExvY2FsT3AgPT0gTm9Ob2RlCi0gICAgICAgICAgICAgICAgICAg
fHwgbV9ncmFwaFtyZWxldmFudExvY2FsT3BdLm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZAotICAg
ICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVsZXZhbnRMb2NhbE9wXS52YXJpYWJsZUFjY2Vz
c0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgTm9kZUluZGV4IHBv
c3NpYmxlUmVwbGFjZW1lbnQgPSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCksIHJlbGV2YW50TG9jYWxPcCwgdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Nh
cHR1cmVkKCkpOworICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcCA9PSBOb05vZGUpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobV9ncmFwaFtyZWxldmFudExv
Y2FsT3BdLm9wKCkgIT0gR2V0TG9jYWxVbmxpbmtlZAorICAgICAgICAgICAgICAgICYmIG1fZ3Jh
cGhbcmVsZXZhbnRMb2NhbE9wXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vz
c0RhdGEpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBOb2RlSW5kZXggcGhp
SW5kZXggPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxh
Y2VtZW50KHBvc3NpYmxlUmVwbGFjZW1lbnQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
OTgwLDcgKzk4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRM
b2NhbFVubGlua2VkOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggcmVsZXZhbnRMb2NhbE9wSWdu
b3JlZDsKLSAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBzZXRSZXBsYWNlbWVudChnZXRMb2NhbExv
YWRFbGltaW5hdGlvbihub2RlLnVubGlua2VkTG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wSWdub3Jl
ZCkpOworICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IHNldFJlcGxhY2VtZW50KGdldExvY2FsTG9h
ZEVsaW1pbmF0aW9uKG5vZGUudW5saW5rZWRMb2NhbCgpLCByZWxldmFudExvY2FsT3BJZ25vcmVk
LCB0cnVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0xMTA4LDYgKzExMTMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1
Y3R1cmU6CiAgICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9k
ZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKICAgICAgICAgICAgICAg
ICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTIzOTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9u
UGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCIKICNp
bmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKQEAgLTEwMSw2ICsxMDIsOCBAQCBp
bmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAgIGRmZy5yZXNl
dEV4aXRTdGF0ZXMoKTsKICAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgfQorICAgIGlm
IChwZXJmb3JtU3RydWN0dXJlQ2hlY2tIb2lzdGluZyhkZmcpKQorICAgICAgICBwZXJmb3JtQ0ZB
KGRmZyk7IC8vIE5lZWQgdG8gcmVjb21wdXRlIENGQSBzaW5jZSBub2RlcyB3ZXJlIGFkZGVkIG9y
IGNoYW5nZWQuCiAgICAgcGVyZm9ybUNTRShkZmcsIEZpeHBvaW50Q29udmVyZ2VkKTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygiREZHIG9wdGltaXphdGlvbiBm
aXhwb2ludCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTIzOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw2ICsyNDUs
MTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjaGlsZHJlbi5yZXNldCgpOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IENoZWNrU3RydWN0dXJlKTsKKyAgICAgICAgbV9v
cEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25T
dHJ1Y3R1cmUoKSk7CisgICAgICAgIG1fb3AgPSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDsKKyAgICB9CisgICAgCiAgICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpOwpAQCAtNjUxLDcgKzY1OCwxMyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmVTZXQoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmU7CisgICAgICAgIHN3aXRjaCAob3Ao
KSkgeworICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEZvcndhcmRD
aGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEyMzk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQdXRCeUlkLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhQdXRCeUlkRGly
ZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhD
aGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZvcndhcmRDaGVj
a1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIC8qIFRyYW5zaXRpb24gd2F0Y2hw
b2ludHMgYXJlIGEgY29udHJhY3QgYmV0d2VlbiB0aGUgcGFydHkgc2V0dGluZyB0aGUgd2F0Y2hw
b2ludCAqL1wKICAgICAvKiBhbmQgdGhlIHJ1bnRpbWUgc3lzdGVtLCB3aGVyZSB0aGUgcGFydHkg
cHJvbWlzZXMgdGhhdCB0aGUgY2hpbGQgb2JqZWN0IG9uY2UgaGFkICovXAogICAgIC8qIHRoZSBz
dHJ1Y3R1cmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRoZSBydW50aW1lIHN5c3RlbSBpbiB0dXJuIHBy
b21pc2VzIHRoYXQgdGhlICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHJldmlzaW9uIDEyMzk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQq
IHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgdmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmd1bWVudCAtIDEpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkudmFs
aWRhdGUodmFsdWUpKSB7CisgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJn
dW1lbnQoYXJndW1lbnQpLnZhbGlkYXRlRm9yRW50cnkodmFsdWUpKSB7CiAjaWYgRU5BQkxFKEpJ
VF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1
c2UgYXJndW1lbnQgJXp1IGlzICVzLCBleHBlY3RlZCAiLCBhcmd1bWVudCwgdmFsdWUuZGVzY3Jp
cHRpb24oKSk7CiAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChh
cmd1bWVudCkuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQq
IHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0
ZWRWYWx1ZXMubG9jYWwobG9jYWwpLnZhbGlkYXRlKGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5q
c1ZhbHVlKCkpKSB7CisgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwo
bG9jYWwpLnZhbGlkYXRlRm9yRW50cnkoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUo
KSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgZGF0YUxvZygi
ICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAlenUgaXMgJXMsIGV4cGVjdGVkICIsIGxv
Y2FsLCBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCkpOwog
ICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLmR1bXAoV1RG
OjpkYXRhRmlsZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMjM5
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcyLDYgKzY3Miw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAg
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVj
dHVyZToKICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAg
ICAgY2FzZSBDaGVja0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTIzOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4NSw3ICszNDg1LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOiB7CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vi
c2V0T2Yobm9kZS5zdHJ1Y3R1cmVTZXQoKSkKICAgICAgICAgICAgICYmIGlzQ2VsbFNwZWN1bGF0
aW9uKHZhbHVlLm1fdHlwZSkpIHsKQEAgLTM0OTcsOSArMzQ5OCwxNSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBBU1NFUlQobm9k
ZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuc3Ry
dWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKVswXSkpOwotICAgICAgICBl
bHNlIHsKKyAgICAgICAgaWYgKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oCisgICAg
ICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hXZWFrUHRyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAg
ICBub2RlLnN0cnVjdHVyZVNldCgpWzBdKSwKKyAgICAgICAgICAgICAgICBub2RlLm9wKCkgPT0g
Rm9yd2FyZENoZWNrU3RydWN0dXJlKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZS5ncHIoKSk7CkBAIC0zNTA5LDcgKzM1MTYsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkK
ICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBp
bGVyOjpFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpW2ldKSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1
YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oCisgICAgICAg
ICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hXZWFrUHRyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
Tm90RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpLAor
ICAgICAgICAgICAgICAgIG5vZGUub3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTIzOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjI4LDcgKzIyMjgsOSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25XYXRjaHBvaW50KFVuY291bnRhYmxlV2F0Y2hw
b2ludCwgSlNWYWx1ZVNvdXJjZSgpLCBOb05vZGUpOwogICAgIH0KLSAgICB2b2lkIGZvcndhcmRT
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKKyAgICAvLyBOb3RlOiBub3Qgc3Bl
Y2lmeWluZyB0aGUgdmFsdWVSZWNvdmVyeSBhcmd1bWVudCAobGVhdmluZyBpdCBhcyBWYWx1ZVJl
Y292ZXJ5KCkpIGltcGxpZXMKKyAgICAvLyB0aGF0IHlvdSd2ZSBlbnN1cmVkIHRoYXQgdGhlcmUg
ZXhpc3RzIGEgTW92SGludCBwcmlvciB0byB5b3VyIHVzZSBvZiBmb3J3YXJkU3BlY3VsYXRpb25D
aGVjaygpLgorICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292
ZXJ5ID0gVmFsdWVSZWNvdmVyeSgpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGF0KG1fY29tcGls
ZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVG9G
YWlsKTsKQEAgLTIyNDUsMTAgKzIyNDcsMTIgQEAgcHVibGljOgogICAgICAgICBpZiAoc2V0TG9j
YWwtPm9wKCkgPT0gRmx1c2ggfHwgc2V0TG9jYWwtPm9wKCkgPT0gUGhhbnRvbSkKICAgICAgICAg
ICAgIHNldExvY2FsID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KCsr
c2V0TG9jYWxJbmRleEluQmxvY2spKTsKICAgICAgICAgCi0gICAgICAgIGlmIChoYWRJbnQzMlRv
RG91YmxlKQotICAgICAgICAgICAgQVNTRVJUKGF0KHNldExvY2FsLT5jaGlsZDEoKSkuY2hpbGQx
KCkgPT0gbV9jb21waWxlSW5kZXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlQo
c2V0TG9jYWwtPmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgaWYgKCEhdmFs
dWVSZWNvdmVyeSkgeworICAgICAgICAgICAgaWYgKGhhZEludDMyVG9Eb3VibGUpCisgICAgICAg
ICAgICAgICAgQVNTRVJUKGF0KHNldExvY2FsLT5jaGlsZDEoKSkuY2hpbGQxKCkgPT0gbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVChzZXRM
b2NhbC0+Y2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXgpOworICAgICAgICB9CiAgICAgICAgIEFT
U0VSVChzZXRMb2NhbC0+b3AoKSA9PSBTZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChzZXRMb2Nh
bC0+Y29kZU9yaWdpbiA9PSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CiAKQEAgLTIy
NTksMTYgKzIyNjMsMjUgQEAgcHVibGljOgogICAgICAgICBleGl0Lm1fY29kZU9yaWdpbiA9IG5l
eHROb2RlLT5jb2RlT3JpZ2luOwogICAgICAgICBleGl0Lm1fbGFzdFNldE9wZXJhbmQgPSBzZXRM
b2NhbC0+bG9jYWwoKTsKICAgICAgICAgCisgICAgICAgIGlmICghdmFsdWVSZWNvdmVyeSkKKyAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZSA9
IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFZhbHVlUmVjb3ZlcnlPdmVycmlkZShzZXRMb2Nh
bC0+bG9jYWwoKSwgdmFsdWVSZWNvdmVyeSkpOwogICAgIH0KLSAgICB2b2lkIGZvcndhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
Tm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFp
bCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKKyAgICB2b2lkIGZvcndhcmRT
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1Rv
RmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnko
KSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8
IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJs
ZXI6Okp1bXAsIDE2PiBqdW1wVmVjdG9yID0ganVtcHNUb0ZhaWwuanVtcHMoKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGp1bXBWZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlSW5k
ZXgsIGp1bXBWZWN0b3JbaV0sIHZhbHVlUmVjb3ZlcnkpOwogICAgIH0KKyAgICB2b2lkIHNwZWN1
bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBib29sIGlzRm9yd2FyZCkKKyAgICB7CisgICAgICAgIGlmIChp
c0ZvcndhcmQpCisgICAgICAgICAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlU291cmNlLCBub2RlSW5kZXgsIGp1bXBUb0ZhaWwpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVt
cFRvRmFpbCk7CisgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRl
cm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdz
LCBOb2RlSW5kZXggbm9kZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFz
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UoR3JhcGgmIGdy
YXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAic3RydWN0dXJlIGNoZWNrIGhvaXN0aW5nIikK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIC8vIElk
ZW50aWZ5IHRoZSBzZXQgb2YgdmFyaWFibGVzIHRoYXQgYXJlIGFsd2F5cyBzdWJqZWN0IHRvIHRo
ZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICAvLyBjaGVja3MuIEZvciBub3csIG9ubHkgY29uc2lk
ZXIgbW9ub21vcnBoaWMgc3RydWN0dXJlIGNoZWNrcyAob25lIHN0cnVjdHVyZSkuCisgICAgICAg
IAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2Nh
bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlh
YmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2
YXJpYWJsZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgbm9kZS5z
dHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZGVudGlmeSB0aGUgc2V0IG9mIHZh
cmlhYmxlcyB0aGF0IGFyZSBsaXZlIGFjcm9zcyBhIHN0cnVjdHVyZSBjbG9iYmVyLgorICAgICAg
ICAKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gbGl2ZSgKKyAgICAgICAg
ICAgIG1fZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50
cygpLAorICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mTG9jYWxzKCkpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRl
eF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgQVNTRVJUKGxpdmUubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICAgICAgQVNT
RVJUKGxpdmUubnVtYmVyT2ZMb2NhbHMoKSA9PSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mTG9jYWxzKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGl2ZS5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXhBdFRhaWwgPSBibG9jay0+
dmFyaWFibGVzQXRUYWlsW2ldOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGU7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4QXRUYWlsID09IE5vTm9kZSkKKyAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSBtX2dyYXBoW2luZGV4QXRUYWlsXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBsaXZlW2ldID0gdmFyaWFibGU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2Nr
LT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIGJpcnRoLgorICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQobm9kZS5s
b2NhbCgpKSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChsaXZlLm9wZXJhbmQobm9kZS5sb2NhbCgpKSk7IC8vIE11c3QgYmUgbGl2ZS4K
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxpdmUub3BlcmFuZChub2RlLmxvY2FsKCkpID09
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpOyAvLyBNdXN0IGhhdmUgdGhlIHZhcmlhYmxlIHdl
IGV4cGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGVhdGguCisgICAg
ICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChub2RlLmxvY2FsKCkpID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIFVzZSB0aGUgQ0ZBJ3Mgbm90aW9uIG9mIHdoYXQgY2xvYmJlcnMgdGhlIHdvcmxkLgorICAg
ICAgICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZU51bWJlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjbG9i
YmVyKGxpdmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgICAgICAgICBj
YXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoK
KyAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgICAgICAgICAg
Y2FzZSBDb21wYXJlRXE6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9n
cmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoKG1fZ3JhcGguaXNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAobV9ncmFwaC5pc0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFu
dChub2RlLmNoaWxkMigpLmluZGV4KCkpLmlzTnVsbCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShsZWZ0LCByaWdodCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYmIHJpZ2h0LnNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0KCkgJiYgbGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgcmlnaHQuc2hvdWxkU3BlY3Vs
YXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHQuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKSAm
JiBsZWZ0LnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGNsb2JiZXIobGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRC
eVZhbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSB8fCAhbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihs
aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOiB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpIHx8ICFtX2dy
YXBoW2NoaWxkMl0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaFtjaGlsZDJdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSB8fCAhaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24obV9ncmFw
aFtjaGlsZDFdLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb2Ji
ZXIobGl2ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxp
YXMpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtj
aGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxk
U3BlY3VsYXRlSW50MTZBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50
MzJBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5z
aG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3Vs
YXRlRmxvYXQzMkFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0
QXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjbG9iYmVyKGxpdmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudHNMZW5ndGhTYWZlOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsU2FmZToKKyAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAgICAgICAgICAg
ICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Cisg
ICAgICAgICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0
OgorICAgICAgICAgICAgICAgIGNhc2UgUmVzb2x2ZToKKyAgICAgICAgICAgICAgICBjYXNlIFJl
c29sdmVCYXNlOgorICAgICAgICAgICAgICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6Cisg
ICAgICAgICAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOgorICAgICAgICAgICAgICAgICAgICBj
bG9iYmVyKGxpdmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUub3AoKSAhPSBQaGkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgY2hhbmdlZCA9IGZhbHNlOworCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQorICAgICAgICBmb3IgKEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hl
Y2tEYXRhPjo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOworICAgICAgICAgICAgIGl0ICE9
IG1fbWFwLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJIb2lzdGluZyBjaGVj
a3MgZm9yICVzXG4iLCBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YShpdC0+Zmlyc3Qp
KTsKKyAgICAgICAgfQorI2VuZGlmIC8vIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKworICAgICAgICAvLyBNYWtlIGNoYW5nZXM6CisgICAgICAgIC8vIDEpIElmIGEgdmFy
aWFibGUncyBsaXZlIHJhbmdlIGRvZXMgbm90IHNwYW4gYSBjbG9iYmVyLCB0aGVuIGluamVjdCBz
dHJ1Y3R1cmUKKyAgICAgICAgLy8gICAgY2hlY2tzIGJlZm9yZSB0aGUgU2V0TG9jYWwuCisgICAg
ICAgIC8vIDIpIElmIGEgdmFyaWFibGUncyBsaXZlIHJhbmdlIHNwYW5zIGEgY2xvYmJlciBidXQg
aXMgd2F0Y2hwb2ludGFibGUsIHRoZW4KKyAgICAgICAgLy8gICAgaW5qZWN0IHN0cnVjdHVyZSBj
aGVja3MgYmVmb3JlIHRoZSBTZXRMb2NhbCBhbmQgcmVwbGFjZSBhbGwgb3RoZXIgc3RydWN0dXJl
CisgICAgICAgIC8vICAgIGNoZWNrcyBvbiB0aGF0IHZhcmlhYmxlIHdpdGggc3RydWN0dXJlIHRy
YW5zaXRpb24gd2F0Y2hwb2ludHMuCisgICAgICAgIAorICAgICAgICBJbnNlcnRpb25TZXQ8Tm9k
ZUluZGV4PiBpbnNlcnRpb25TZXQ7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGlu
ZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgYSBHZXRMb2NhbCBhbmQg
YSBDaGVja1N0cnVjdHVyZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcworICAgICAgICAgICAg
ICAgICAgICAvLyBTZXRBcmd1bWVudCwgaWYgdGhlIHZhcmlhYmxlIHdhcyBhIGNhbmRpZGF0ZSBm
b3Igc3RydWN0dXJlIGhvaXN0aW5nLgorICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmFz
aWMgYmxvY2sgcHJldmlvdXNseSBvbmx5IGhhZCB0aGUgU2V0QXJndW1lbnQgYXMgaXRzCisgICAg
ICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlLWF0LXRhaWwsIHRoZW4gcmVwbGFjZSBpdCB3aXRo
IHRoaXMgR2V0TG9jYWwuCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIg
PSBtX21hcC5maW5kKHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0g
bV9tYXAuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5tX2lz
Q2xvYmJlcmVkICYmICFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG5vZGUucmVmKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSBnZXRMb2NhbChHZXRMb2NhbCwgbm9kZS5jb2RlT3JpZ2lu
LCBPcEluZm8odmFyaWFibGUpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBnZXRM
b2NhbC5wcmVkaWN0KHZhcmlhYmxlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAgICAg
ICBnZXRMb2NhbC5yZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldExvY2Fs
SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBl
bmQoZ2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuYXBwZW5kKGlu
ZGV4SW5CbG9jayArIDEsIGdldExvY2FsSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgbm9k
ZS5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+c2Vjb25k
Lm1fc3RydWN0dXJlKSksIGdldExvY2FsSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBjaGVj
a1N0cnVjdHVyZS5yZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3Ry
dWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuYXBwZW5kKGluZGV4SW5CbG9jayArIDEsIGNoZWNrU3RydWN0dXJlSW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAg
ICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0
ZXIgPSBtX21hcC5maW5kKHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIg
PT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5t
X2lzQ2xvYmJlcmVkICYmICFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgaW5zZXJ0IGEgZGVhZCBTZXRMb2NhbCB0byB0
ZWxsIE9TUiB0aGF0IHRoZSBjaGlsZCdzIHZhbHVlIHNob3VsZAorICAgICAgICAgICAgICAgICAg
ICAvLyBiZSBkcm9wcGVkIGludG8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBpZiB0aGUgQ2hlY2tT
dHJ1Y3R1cmUgZGVjaWRlcworICAgICAgICAgICAgICAgICAgICAvLyB0byBleGl0LgorICAgICAg
ICAgICAgICAgICAgICBOb2RlIHNldExvY2FsKFNldExvY2FsLCBub2RlLmNvZGVPcmlnaW4sIE9w
SW5mbyh2YXJpYWJsZSksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBzZXRMb2NhbEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHNldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ssIHNldExvY2FsSW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnJlZigpOworICAgICAgICAgICAg
ICAgICAgICAvLyBVc2UgYSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUgdG8gaW5kaWNhdGUgdGhhdCB3
ZSBzaG91bGQgZXhpdCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBieXRlY29k
ZSBpbnN0cnVjdGlvbiByYXRoZXIgdGhhbiByZWV4ZWN1dGluZyB0aGUgY3VycmVudCBvbmUuCisg
ICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUoRm9yd2FyZENoZWNrU3RydWN0
dXJlLCBub2RlLmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVy
LT5zZWNvbmQubV9zdHJ1Y3R1cmUpKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUucmVmKCk7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBjaGVja1N0cnVjdHVyZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ssIGNoZWNrU3RydWN0dXJlSW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBD
aGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChjaGlsZC52YXJpYWJsZUFjY2Vz
c0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1faXNDbG9iYmVyZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRv
bSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5tX3N0cnVj
dHVyZSA9PSBub2RlLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCgpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZSgqYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBub3RpY2VTdHJ1Y3R1cmVDaGVjayhWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6QWRkUmVzdWx0
IHJlc3VsdCA9CisgICAgICAgICAgICBtX21hcC5hZGQodmFyaWFibGUsIENoZWNrRGF0YShzdHJ1
Y3R1cmUsIGZhbHNlKSk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm1fc3RydWN0
dXJlID09IHN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5v
dGljZVN0cnVjdHVyZUNoZWNrKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAgICAgICAgaWYgKHNldC5zaXplKCkgIT0gMSkgewor
ICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIDApOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlh
YmxlLCBzZXQuc2luZ2xldG9uU3RydWN0dXJlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5v
dGljZUNsb2JiZXIoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAg
IEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9
CisgICAgICAgICAgICBtX21hcC5maW5kKHZhcmlhYmxlKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0g
bV9tYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGl0ZXItPnNlY29uZC5t
X2lzQ2xvYmJlcmVkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0
IE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+JiBsaXZlKQorICAgIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IGxpdmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbGl2ZVtpXTsKKyAgICAgICAgICAgIGlmICghdmFyaWFibGUp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBub3RpY2VDbG9iYmVyKHZh
cmlhYmxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgQ2hlY2tEYXRhIHsK
KyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgYm9vbCBtX2lzQ2xvYmJl
cmVkOworICAgICAgICAKKyAgICAgICAgQ2hlY2tEYXRhKCkKKyAgICAgICAgICAgIDogbV9zdHJ1
Y3R1cmUoMCkKKyAgICAgICAgICAgICwgbV9pc0Nsb2JiZXJlZChmYWxzZSkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDaGVja0RhdGEoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGJvb2wgaXNDbG9iYmVyZWQpCisgICAgICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVy
ZSkKKyAgICAgICAgICAgICwgbV9pc0Nsb2JiZXJlZChpc0Nsb2JiZXJlZCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSos
IENoZWNrRGF0YT4gbV9tYXA7Cit9OworCitib29sIHBlcmZvcm1TdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIFN0cnVjdHVyZSBDaGVjayBIb2lzdGluZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFz
ZTxTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZV9oCisjZGVmaW5lIERGR1N0cnVj
dHVyZUNoZWNrSG9pc3RpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBIb2lzdHMgQ2hlY2tTdHJ1Y3R1cmUgb24gdmFyaWFibGVzIHRv
IGFzc2lnbm1lbnRzIHRvIHRob3NlIHZhcmlhYmxlcywgaWYgZWl0aGVyIG9mCisvLyB0aGUgZm9s
bG93aW5nIGlzIHRydWU6CisvLyBBKSBUaGUgc3RydWN0dXJlJ3MgdHJhbnNpdGlvbiB3YXRjaHBv
aW50IHNldCBpcyB2YWxpZC4KKy8vIEIpIFRoZSBzcGFuIG9mIGNvZGUgd2l0aGluIHdoaWNoIHRo
ZSB2YXJpYWJsZSBpcyBsaXZlIGhhcyBubyBlZmZlY3RzIHRoYXQgbWlnaHQKKy8vICAgIGNsb2Ji
ZXIgdGhlIHN0cnVjdHVyZS4KKworYm9vbCBwZXJmb3JtU3RydWN0dXJlQ2hlY2tIb2lzdGluZyhH
cmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaAkocmV2aXNpb24gMTIzOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9kb3VibGVGb3JtYXRTdGF0ZShFbXB0eURvdWJsZUZvcm1hdFN0
YXRlKQogICAgICAgICAsIG1faXNDYXB0dXJlZChmYWxzZSkKICAgICAgICAgLCBtX2lzQXJndW1l
bnRzQWxpYXMoZmFsc2UpCisgICAgICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVk
KGZhbHNlKQogICAgIHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAgIH0KQEAgLTYxLDYgKzYy
LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVG
b3JtYXRTdGF0ZSkKICAgICAgICAgLCBtX2lzQ2FwdHVyZWQoaXNDYXB0dXJlZCkKICAgICAgICAg
LCBtX2lzQXJndW1lbnRzQWxpYXMoZmFsc2UpCisgICAgICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hv
aXN0aW5nRmFpbGVkKGZhbHNlKQogICAgIHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAgIH0K
QEAgLTkwLDYgKzkyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNDYXB0dXJlZDsK
ICAgICB9CiAgICAgCisgICAgYm9vbCBtZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQo
Ym9vbCBmYWlsZWQpCisgICAgeworICAgICAgICBib29sIG5ld0ZhaWxlZCA9IG1fc3RydWN0dXJl
Q2hlY2tIb2lzdGluZ0ZhaWxlZCB8IGZhaWxlZDsKKyAgICAgICAgaWYgKG5ld0ZhaWxlZCA9PSBt
X3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCA9IG5ld0ZhaWxlZDsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgc3RydWN0dXJlQ2hlY2tI
b2lzdGluZ0ZhaWxlZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVja0hv
aXN0aW5nRmFpbGVkOworICAgIH0KKyAgICAKICAgICBib29sIG1lcmdlSXNBcmd1bWVudHNBbGlh
cyhib29sIGlzQXJndW1lbnRzQWxpYXMpCiAgICAgewogICAgICAgICBib29sIG5ld0lzQXJndW1l
bnRzQWxpYXMgPSBtX2lzQXJndW1lbnRzQWxpYXMgfCBpc0FyZ3VtZW50c0FsaWFzOwpAQCAtMjU1
LDYgKzI3MSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBtX2lzQ2FwdHVyZWQ7CiAgICAg
Ym9vbCBtX2lzQXJndW1lbnRzQWxpYXM7CisgICAgYm9vbCBtX3N0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdGYWlsZWQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155447</attachid>
            <date>2012-07-30 23:31:44 -0700</date>
            <delta_ts>2012-08-01 15:03:37 -0700</delta_ts>
            <desc>runs benchmarks (on 64-bit)</desc>
            <filename>hoiststruct_patch_3.diff</filename>
            <type>text/plain</type>
            <size>65695</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI0MTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMi0wNy0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaG9pc3Qgc3RydWN0dXJlIGNoZWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI2OTYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorICAgICAgICAKKyAg
ICAgICAgTmVlZCB0byB0ZXN0IE9TUiBlbnRyeSBpZiBhIHZhcmlhYmxlIHdpdGggYSBob2lzdGVk
IGNoZWNrIGhhcyBhbiB1bmV4cGVjdGVkCisgICAgICAgIHN0cnVjdHVyZSwgc3RydWN0dXJlcyBn
ZXQgY2xvYmJlcmVkLCBhbmQgd2UncmUgcHJvdGVjdGluZyBvdXJzZWx2ZXMgd2l0aAorICAgICAg
ICBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cy4KKyAgICAgICAgCisgICAgICAgIE5l
ZWQgdG8gdGVzdCBwZXJmb3JtYW5jZSBvZiBtaXNndWlkZWQgaG9pc3RpbmdzLgorICAgICAgICAK
KyAgICAgICAgTmVlZCB0byB0ZXN0IE9TUiBleGl0IG9uIGhvaXN0ZWQgc3RydWN0dXJlIGNoZWNr
cywgYm90aCBpZiB0aGUgc291cmNlIGlzIG5vdAorICAgICAgICBhIGNlbGwgYW5kIGlmIGl0IGRv
ZXNuJ3QgaGF2ZSB0aGUgZXhwZWN0ZWQgc3RydWN0dXJlLCBhbmQgd2hlcmUgdGhlIHNvdXJjZQor
ICAgICAgICBvZiB0aGUgYXNzaWdubWVudCBpcyBzaWRlLWVmZmVjdGluZy4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5Ojppc1Nl
dCk6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6Om9wZXJhdG9yISk6CisgICAgICAgIChW
YWx1ZVJlY292ZXJ5KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKToKKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6Y2xvYmJlckNhcHR1cmVkVmFycyk6CisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEFic3RyYWN0U3RhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RWYWx1ZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzQ2xl
YXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VUb3ApOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFZhbHVlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0VmFsdWU6OnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjp2YWxpZGF0ZUZvckVudHJ5KToKKyAgICAgICAgKEFic3RyYWN0VmFsdWUpOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExv
Y2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpmaXhWYXJpYWJsZUFjY2Vzc1NwZWN1bGF0aW9ucyk6CisgICAg
ICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6
Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldExvY2FsTG9hZEVsaW1pbmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9E
RkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6aGFzU3RydWN0dXJlU2V0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmg6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVj
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kOjpncHIpOgorICAgICAgICAoU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OlN0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
OjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6
bm90aWNlU3RydWN0dXJlQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZTo6bm90aWNlQ2xvYmJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpjbG9iYmVyKToKKyAgICAgICAgKENoZWNrRGF0YSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpDaGVja0RhdGE6
OkNoZWNrRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybVN0cnVjdHVyZUNoZWNrSG9p
c3RpbmcpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNj
ZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjptZXJnZVN0
cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQpOgorICAgICAgICAoVmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnN0cnVjdHVyZUNoZWNr
SG9pc3RpbmdGYWlsZWQpOgorCiAyMDEyLTA3LTMwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZp
ZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI0
MTIzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyMzk5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDggQEAKIAkJMEY2MjAxNzcx
NDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBE
RkdBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZF
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2MjAxNzkxNDNGQ0Q0ODAwNjhCNzdD
IC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3Rh
dGUuY3BwICovOyB9OworCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjYzOTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcCAqLzsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFj
ZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkMxNERGM0Yx
NjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMjgxNUE4
Q0MxRTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDI2MTVBOENDMUIwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZS5jcHAgKi87IH07CkBAIC04ODUsNiArODg3LDggQEAKIAkJMEY2MjAxNkYxNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1N0
cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hv
aXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0
dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lz
dGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4MTRERjNG
MTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2VuY3lMaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJF
NCAvKiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0VkZ2Uu
aDsgcGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjMyMSw2ICsyMzI1LDggQEAKIAkJCQk4NkVDOURDMzEzMjhERjgyMDAyQjJB
RDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLywKIAkJCQk4Njg4MEYxQjE0MzI4QkI5MDBCMDhE
NDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi8sCiAJCQkJODY4ODBGNEMxNDM1M0Iy
MTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovLAorCQkJCTBGNjM5NDNDMTVD
NzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovLAor
CQkJCTBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
UGhhc2UuaCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNw
cCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCiAJ
CQkJMEYyQkRDM0YxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5o
ICovLApAQCAtMjg2MCw2ICsyODY2LDcgQEAKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0Ug
LyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3NjZENDQxNUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjc2NkQ0NjE1QjM3MDFGMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM0NTcs
NiArMzQ2NCw3IEBACiAJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRT
dHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQzNDE1QUUyNTM4MDA4RjM2
M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
Rjc2NkQzODE1QUU0QTFDMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCShyZXZpc2lv
biAxMjM5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZSAhPSBE
b250S25vdzsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7
IH0KKyAgICAKICAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZpbGUo
KQogICAgIHsKICAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEyMzk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMzUsNyArMTMzNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U2NvcGVkVmFyOgog
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUuY29kZU9y
aWdpbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgpA
QCAtMTQxNSw3ICsxNDE1LDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCi0gICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0
dXJlIHNldHMgb2YgY29uc3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCgKQEAgLTE2MDksNiArMTYxMCwxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAKIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJXb3Js
ZChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2spCiB7
CisgICAgY2xvYmJlckNhcHR1cmVkVmFycyhjb2RlT3JpZ2luKTsKKyAgICBjbG9iYmVyU3RydWN0
dXJlcyhpbmRleEluQmxvY2spOworfQorCitpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9i
YmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCit7CiAgICAgaWYg
KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgIGNvbnN0IEJpdFZlY3RvciYg
Y2FwdHVyZWRWYXJzID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNhcHR1cmVkVmFycy5zaXplKCk7IGktLTspIHsKQEAg
LTE2MjQsNyArMTYzMSw2IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJXb3Js
ZCgKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fdmFyaWFibGVzLm51bWJlck9mQXJndW1lbnRz
KCk7IGktLTspCiAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5hcmd1bWVudChpKS5tYWtlVG9wKCk7
CiAgICAgfQotICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiB9CiAKIGlubGlu
ZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGluZGV4SW5C
bG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5oCShyZXZpc2lvbiAxMjM5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDYgKzIxNyw3IEBAIHB1YmxpYzoK
ICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYs
IHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNv
bnN0IENvZGVPcmlnaW4mKTsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jayk7CiAgICAgCiAgICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJl
dmlzaW9uIDEyMzk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsMTMgKzMxNywxNCBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgewogICAgICAgICBtX3R5cGUgPSBTcGVjTm9uZTsKICAgICAgICAgbV9z
dHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5jbGVhcigp
OwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0CiAgICAgewotICAgICAg
ICBib29sIHJlc3VsdCA9IG1fdHlwZSA9PSBTcGVjTm9uZSAmJiBtX3N0cnVjdHVyZS5pc0NsZWFy
KCk7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gbV90eXBlID09IFNwZWNOb25lICYmIG1fc3RydWN0
dXJlLmlzQ2xlYXIoKSAmJiBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmlzQ2xlYXIoKTsKICAgICAg
ICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZSk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0zMzMsNiArMzM0LDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewog
ICAgIHsKICAgICAgICAgbV90eXBlID0gU3BlY1RvcDsKICAgICAgICAgbV9zdHJ1Y3R1cmUubWFr
ZVRvcCgpOworICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAg
ICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAg
IH0KQEAgLTM1Myw3ICszNTUsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAg
Ym9vbCBpc1RvcCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV90eXBlID09IFNwZWNU
b3AgJiYgbV9zdHJ1Y3R1cmUuaXNUb3AoKTsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBTcGVj
VG9wICYmIG1fc3RydWN0dXJlLmlzVG9wKCkgJiYgbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5pc1Rv
cCgpOwogICAgIH0KICAgICAKICAgICBib29sIHZhbHVlSXNUb3AoKSBjb25zdApAQCAtMzgzLDgg
KzM4NSwxMSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgICAgICAvLyBpdCBtYXkg
Y2hhbmdlIGluIHRoZSBmdXR1cmUgLSBmb3IgZXhhbXBsZSBiZXR3ZWVuIHdoZW4gd2UgY29tcGls
ZQogICAgICAgICAgICAgLy8gdGhlIGNvZGUgYW5kIHdoZW4gd2UgcnVuIGl0LgogICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1f
dW5jbG9iYmVyZWRTdHJ1Y3R1cmUubWFrZVRvcCgpOyAvLyBGSVhNRTogQ29uc2lkZXIgbm90IGNs
b2JiZXJpbmcgdGhpcy4KKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fc3RydWN0dXJl
LmNsZWFyKCk7CisgICAgICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmNsZWFyKCk7Cisg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVl
KHZhbHVlKTsKICAgICAgICAgbV92YWx1ZSA9IHZhbHVlOwpAQCAtMzk3LDYgKzQwMiw5IEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAg
ICAgbV9zdHJ1Y3R1cmUuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgIAorICAgICAgICBtX3VuY2xv
YmJlcmVkU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUu
YWRkKHN0cnVjdHVyZSk7CisgICAgICAgIAogICAgICAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZy
b21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAg
ICAgICAgCkBAIC00MDUsMTAgKzQxMywxMyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAg
CiAgICAgdm9pZCBzZXQoU3BlY3VsYXRlZFR5cGUgdHlwZSkKICAgICB7Ci0gICAgICAgIGlmICh0
eXBlICYgU3BlY0NlbGwpCisgICAgICAgIGlmICh0eXBlICYgU3BlY0NlbGwpIHsKICAgICAgICAg
ICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgbV91
bmNsb2JiZXJlZFN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV91bmNsb2JiZXJlZFN0cnVj
dHVyZS5jbGVhcigpOworICAgICAgICB9CiAgICAgICAgIG1fdHlwZSA9IHR5cGU7CiAgICAgICAg
IG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTQx
OCw2ICs0MjksNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICByZXR1
cm4gbV90eXBlID09IG90aGVyLm1fdHlwZQogICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0g
b3RoZXIubV9zdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUg
PT0gb3RoZXIubV91bmNsb2JiZXJlZFN0cnVjdHVyZQogICAgICAgICAgICAgJiYgbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQWJzdHJh
Y3RWYWx1ZSYgb3RoZXIpIGNvbnN0CkBAIC00MzcsNiArNDQ5LDcgQEAgc3RydWN0IEFic3RyYWN0
VmFsdWUgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0IHw9IG1lcmdlU3Bl
Y3VsYXRpb24obV90eXBlLCBvdGhlci5tX3R5cGUpOwogICAgICAgICAgICAgcmVzdWx0IHw9IG1f
c3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVjdHVyZSk7CisgICAgICAgICAgICByZXN1bHQg
fD0gbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV91bmNsb2JiZXJlZFN0cnVj
dHVyZSk7CiAgICAgICAgICAgICBpZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgcmVzdWx0IHw9ICEhbV92YWx1ZTsKICAgICAgICAgICAgICAgICBtX3ZhbHVl
ID0gSlNWYWx1ZSgpOwpAQCAtNDUxLDggKzQ2NCwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgewogICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKG1fdHlwZSwgdHlwZSk7CiAgICAgICAg
IAotICAgICAgICBpZiAodHlwZSAmIFNwZWNDZWxsKQorICAgICAgICBpZiAodHlwZSAmIFNwZWND
ZWxsKSB7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBt
X3VuY2xvYmJlcmVkU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgfQogICAgICAgICBtX3Zh
bHVlID0gSlNWYWx1ZSgpOwogCiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTQ2Miw2
ICs0NzcsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBtX3R5cGUg
Jj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgICAgICBtX3N0cnVjdHVy
ZS5maWx0ZXIob3RoZXIpOworICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmZpbHRlcihv
dGhlcik7CiAgICAgICAgIAogICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgcHJpb3IgdG8g
dGhlIGFib3ZlIHR3byBzdGF0ZW1lbnRzIHdlIGhhZCAoRm9vLCBUT1ApLCB3aGVyZQogICAgICAg
ICAvLyBGb28gaXMgYSBTcGVjdWxhdGVkVHlwZSB0aGF0IGlzIGRpc2pvaW50IHdpdGggdGhlIHBh
c3NlZCBTdHJ1Y3R1cmVTZXQuIEluIHRoYXQKQEAgLTQ2OSw2ICs0ODUsNyBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgICAgIC8vIHN1cmUgdGhhdCBuZXcgaW5mb3JtYXRpb24gZ2xlYW5l
ZCBmcm9tIHRoZSBTcGVjdWxhdGVkVHlwZSBuZWVkcyB0byBiZSBmZWQgYmFjawogICAgICAgICAv
LyBpbnRvIHRoZSBpbmZvcm1hdGlvbiBnbGVhbmVkIGZyb20gdGhlIFN0cnVjdHVyZVNldC4KICAg
ICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CisgICAgICAgIG1fdW5jbG9iYmVyZWRT
dHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoISFtX3ZhbHVl
ICYmICF2YWxpZGF0ZUlnbm9yaW5nVmFsdWUobV92YWx1ZSkpCiAgICAgICAgICAgICBjbGVhcigp
OwpAQCAtNDg3LDYgKzUwNCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgLy8g
dG8gZW5zdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSBmaWx0ZXJpbmcgZG9lcyB0aGUgcmlnaHQgdGhp
bmcgaXMgdG8gZmlsdGVyIG9uCiAgICAgICAgIC8vIHRoZSBuZXcgdHlwZSAoTm9uZSkgcmF0aGVy
IHRoYW4gdGhlIG9uZSBwYXNzZWQgKEFycmF5KS4KICAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVy
KG1fdHlwZSk7CisgICAgICAgIG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7
CiAKICAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFsaWRhdGVJZ25vcmluZ1ZhbHVlKG1fdmFs
dWUpKQogICAgICAgICAgICAgY2xlYXIoKTsKQEAgLTUyMyw4ICs1NDEsOCBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgICAgIGlmIChpc1RvcCgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIAotICAgICAgICBpZiAoISFtX3ZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IG1fdmFsdWUgPT0gdmFsdWU7CisgICAgICAgIGlmICghIW1fdmFsdWUgJiYgbV92YWx1ZSAhPSB2
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGlmICht
ZXJnZVNwZWN1bGF0aW9ucyhtX3R5cGUsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlKSkgIT0g
bV90eXBlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ1LDEwICs1NjMsMzkgQEAg
c3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CisgICAgYm9vbCB2YWxpZGF0ZUZvckVudHJ5KEpTVmFsdWUgdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAK
KyAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3ZhbHVlICE9IHZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1lcmdlU3BlY3VsYXRpb25zKG1f
dHlwZSwgc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpKSAhPSBtX3R5cGUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBBU1NFUlQobV90eXBlICYgU3BlY0VtcHR5KTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV91bmNsb2JiZXJl
ZFN0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAor
ICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgQVNT
RVJUKG1fdHlwZSAmIFNwZWNDZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBtX3VuY2xvYmJlcmVk
U3RydWN0dXJlLmNvbnRhaW5zKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKICAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCEobV90eXBlICYg
U3BlY0NlbGwpKQorICAgICAgICBpZiAoIShtX3R5cGUgJiBTcGVjQ2VsbCkpIHsKICAgICAgICAg
ICAgIEFTU0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgICAgICAgICAgQVNTRVJUKG1f
dW5jbG9iYmVyZWRTdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKGlzQ2xlYXIoKSkKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZSk7CkBAIC01
NjYsMTIgKzYxMywxNSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBm
cHJpbnRmKG91dCwgIiglcywgIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhtX3R5cGUpKTsKICAgICAg
ICAgbV9zdHJ1Y3R1cmUuZHVtcChvdXQpOworICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAg
ICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmR1bXAob3V0KTsKICAgICAgICAgaWYgKCEhbV92YWx1
ZSkKICAgICAgICAgICAgIGZwcmludGYob3V0LCAiLCAlcyIsIG1fdmFsdWUuZGVzY3JpcHRpb24o
KSk7CiAgICAgICAgIGZwcmludGYob3V0LCAiKSIpOwogICAgIH0KIAogICAgIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUgbV9zdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX3Vu
Y2xvYmJlcmVkU3RydWN0dXJlOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsKICAgICBKU1Zh
bHVlIG1fdmFsdWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyMzk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcs
NiArMjU3LDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQs
IGlzQ2FwdHVyZWQpOworICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ0ZhaWxlZCgKKyAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OwogICAgIH0KQEAgLTI5OSw3ICszMDEs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1l
bnQgaW4gdGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCiAgICAgICAgICAgICAgICAgLy8gdGhl
IEdldExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KICAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZVB0ci0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsK
LSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSksIG5vZGVJbmRleCkpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBu
b2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyh2YXJpYWJsZSksIG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4
OwogICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICB9CkBAIC0z
NDAsNiArMzQzLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQp
OwogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CisgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAor
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2YWx1ZSk7
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1l
bnQpID0gbm9kZUluZGV4OwogICAgIH0KQEAgLTE3MjMsNyArMTcyOCwxMSBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgaWYgKG1fY3VycmVudEJsb2NrID09
IG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1faW5saW5l
Q2FsbEZyYW1lKSB7CiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVtQXJn
dW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwg
bV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBzZXRB
cmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+YXJndW1lbnRJ
c0NhcHR1cmVkKGFyZ3VtZW50KSkpKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAgYXJndW1l
bnRUb09wZXJhbmQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+YXJndW1lbnRJc0NhcHR1cmVkKGFy
Z3VtZW50KSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nRmFpbGVkKAorICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CisgICAgICAgICAgICBO
b2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8odmFy
aWFibGUpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0
QXJndW1lbnQ7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3Vt
ZW50LCBzZXRBcmd1bWVudCk7CkBAIC0zMDEwLDYgKzMwMTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpmaXhWYXJpYWJsZUFjY2Vzc1NwCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0
YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOwogICAgICAgICBkYXRhLT5maW5k
KCktPnByZWRpY3QoZGF0YS0+bm9uVW5pZmllZFByZWRpY3Rpb24oKSk7CiAgICAgICAgIGRhdGEt
PmZpbmQoKS0+bWVyZ2VJc0NhcHR1cmVkKGRhdGEtPmlzQ2FwdHVyZWQoKSk7CisgICAgICAgIGRh
dGEtPmZpbmQoKS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGRhdGEtPnN0cnVj
dHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTIzOTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzNyw2ICszMzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKICAgICAgICAgICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVj
dHVyZToKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKICAgICAg
ICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLnN0cnVjdHVy
ZVNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zODksNiArMzkw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsK
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgorICAgICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCiAgICAgICAgICAgICAgICAg
ICAgICYmIG5vZGUuc3RydWN0dXJlU2V0KCkuY29udGFpbnNPbmx5KHN0cnVjdHVyZSkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDM3LDYgKzQzOSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgIGNhc2UgRm9y
d2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CkBAIC02
NzMsNyArNjc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAg
ICAgCi0gICAgTm9kZUluZGV4IGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCwgTm9kZUluZGV4JiByZWxldmFudExvY2FsT3ApCisgICAgTm9kZUluZGV4IGdldExv
Y2FsTG9hZEVsaW1pbmF0aW9uKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgTm9kZUluZGV4JiByZWxl
dmFudExvY2FsT3AsIGJvb2wgY2FyZUFib3V0Q2xvYmJlcmluZykKICAgICB7CiAgICAgICAgIHJl
bGV2YW50TG9jYWxPcCA9IE5vTm9kZTsKICAgICAgICAgCkBAIC03MDMsNyArNzA2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChp
bmRleCkpCisgICAgICAgICAgICAgICAgaWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9ncmFw
aC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk0NCwxMyArOTQ3
LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDogewog
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3RhdGUgPT0gRml4
cG9pbnROb3RDb252ZXJnZWQgJiYgIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgTm9kZUluZGV4IHJlbGV2YW50TG9j
YWxPcDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwb3NzaWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9j
YWxMb2FkRWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCByZWxldmFudExv
Y2FsT3ApOwotICAgICAgICAgICAgQVNTRVJUKHJlbGV2YW50TG9jYWxPcCA9PSBOb05vZGUKLSAg
ICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0ub3AoKSA9PSBHZXRM
b2NhbFVubGlua2VkCi0gICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtyZWxldmFudExvY2Fs
T3BdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAg
ICAgICBOb2RlSW5kZXggcG9zc2libGVSZXBsYWNlbWVudCA9IGdldExvY2FsTG9hZEVsaW1pbmF0
aW9uKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wLCB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2Nh
bE9wID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICht
X2dyYXBoW3JlbGV2YW50TG9jYWxPcF0ub3AoKSAhPSBHZXRMb2NhbFVubGlua2VkCisgICAgICAg
ICAgICAgICAgJiYgbV9ncmFwaFtyZWxldmFudExvY2FsT3BdLnZhcmlhYmxlQWNjZXNzRGF0YSgp
ICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBwaGlJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKICAgICAgICAg
ICAgIGlmICghc2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC05ODAsNyArOTg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBy
ZWxldmFudExvY2FsT3BJZ25vcmVkOwotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IHNldFJlcGxh
Y2VtZW50KGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKG5vZGUudW5saW5rZWRMb2NhbCgpLCByZWxl
dmFudExvY2FsT3BJZ25vcmVkKSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gc2V0UmVwbGFj
ZW1lbnQoZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS51bmxpbmtlZExvY2FsKCksIHJlbGV2
YW50TG9jYWxPcElnbm9yZWQsIHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTExMDgsNiArMTExMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNl
IEZvcndhcmRDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUxv
YWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkp
KQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxMjM5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgogI2luY2x1
ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUmVkdW5k
YW50UGhpRWxpbWluYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgpAQCAt
MTAxLDYgKzEwMiw4IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0K
ICAgICAgICAgZGZnLnJlc2V0RXhpdFN0YXRlcygpOwogICAgICAgICBwZXJmb3JtRml4dXAoZGZn
KTsKICAgICB9CisgICAgaWYgKHBlcmZvcm1TdHJ1Y3R1cmVDaGVja0hvaXN0aW5nKGRmZykpCisg
ICAgICAgIHBlcmZvcm1DRkEoZGZnKTsgLy8gTmVlZCB0byByZWNvbXB1dGUgQ0ZBIHNpbmNlIG5v
ZGVzIHdlcmUgYWRkZWQgb3IgY2hhbmdlZC4KICAgICBwZXJmb3JtQ1NFKGRmZywgRml4cG9pbnRD
b252ZXJnZWQpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJE
Rkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVyYXRpb25zLlxuIiwg
Y250KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxMjM5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg3LDYgKzI4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoY29uc3QgY2hh
ciogcHJlZml4LCBOb2QKICAgICAgICAgZGF0YUxvZygiJXNGOiMldSIsIGhhc1ByaW50ZWQgPyAi
LCAiIDogIiIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKICAgICB9CisgICAgZGF0YUxvZygiJXNiYyMldSIsIGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICBoYXNQcmludGVkID0g
dHJ1ZTsKICAgICAodm9pZCloYXNQcmludGVkOwogICAgIAogICAgIGRhdGFMb2coIikiKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMjM5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1
LDYgKzI0NSwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gQ2hlY2tTdHJ1Y3R1cmUpOworICAg
ICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZVNldCgpLnNp
bmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgbV9vcCA9IFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OworICAgIH0KKyAgICAKICAgICBKU0NlbGwqIHdlYWtDb25zdGFudCgpCiAgICAg
ewogICAgICAgICBBU1NFUlQob3AoKSA9PSBXZWFrSlNDb25zdGFudCk7CkBAIC02NTEsNyArNjU4
LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1N0cnVjdHVyZVNldCgpCiAg
ICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBDaGVja1N0cnVjdHVyZTsKKyAgICAgICAgc3dp
dGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2Ug
Rm9yd2FyZENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAg
ICAgCiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTIzOTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiAr
MTE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFB1dEJ5
SWQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFB1
dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAg
IG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRm9y
d2FyZENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogVHJhbnNpdGlv
biB3YXRjaHBvaW50cyBhcmUgYSBjb250cmFjdCBiZXR3ZWVuIHRoZSBwYXJ0eSBzZXR0aW5nIHRo
ZSB3YXRjaHBvaW50ICovXAogICAgIC8qIGFuZCB0aGUgcnVudGltZSBzeXN0ZW0sIHdoZXJlIHRo
ZSBwYXJ0eSBwcm9taXNlcyB0aGF0IHRoZSBjaGlsZCBvYmplY3Qgb25jZSBoYWQgKi9cCiAgICAg
LyogdGhlIHN0cnVjdHVyZSBiZWluZyB3YXRjaGVkLCBhbmQgdGhlIHJ1bnRpbWUgc3lzdGVtIGlu
IHR1cm4gcHJvbWlzZXMgdGhhdCB0aGUgKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTIzOTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZ3VtZW50IC0gMSk7CiAgICAg
ICAgIAotICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3Vt
ZW50KS52YWxpZGF0ZSh2YWx1ZSkpIHsKKyAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZh
bHVlcy5hcmd1bWVudChhcmd1bWVudCkudmFsaWRhdGVGb3JFbnRyeSh2YWx1ZSkpIHsKICNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWls
ZWQgYmVjYXVzZSBhcmd1bWVudCAlenUgaXMgJXMsIGV4cGVjdGVkICIsIGFyZ3VtZW50LCB2YWx1
ZS5kZXNjcmlwdGlvbigpKTsKICAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFy
Z3VtZW50KGFyZ3VtZW50KS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CkBAIC0xMTksNyArMTE5LDcg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFlbnRyeS0+
bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClb
bG9jYWxdLmpzVmFsdWUoKSkpIHsKKyAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVl
cy5sb2NhbChsb2NhbCkudmFsaWRhdGVGb3JFbnRyeShleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0u
anNWYWx1ZSgpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV6dSBpcyAlcywgZXhwZWN0
ZWQgIiwgbG9jYWwsIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCkuZGVzY3JpcHRp
b24oKSk7CiAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCku
ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDEyMzk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzIsNiArNjcyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgICAgIGNhc2UgU2V0QXJndW1l
bnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgRm9yd2FyZENo
ZWNrU3RydWN0dXJlOgogICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgogICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxMjM5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI2LDcgKzEzMjYs
NyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgfQogfQog
Ci1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKE5vZGVJbmRleCBub2Rl
SW5kZXgpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKE5vZGVJbmRl
eCBub2RlSW5kZXgsIGJvb2wgaXNGb3J3YXJkU3BlY3VsYXRpb24pCiB7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2coIlNwZWNDZWxsQCVkICAgIiwgbm9kZUluZGV4
KTsKQEAgLTEzMzksNyArMTMzOSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUNlbGwKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2Ug
RGF0YUZvcm1hdE5vbmU6IHsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0SW50ZWdlciB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkg
ewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbldpdGhDb25kaXRpb25hbERpcmVjdGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBpc0ZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4g
YWxsb2NhdGUoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEzNTMsNyArMTM1Myw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgICAgICAgICBp
bmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbldpdGhDb25kaXRp
b25hbERpcmVjdGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBpc0Zvcndh
cmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAgICAg
ICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwpAQCAtMTM2Miw3
ICsxMzYyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogCiAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAg
ICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxE
aXJlY3Rpb24oQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlciksIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7
CiAgICAgfQpAQCAtMTM3OCw3ICsxMzc4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAg
bV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBn
cHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdw
ciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgaXNGb3J3YXJkU3BlY3VsYXRpb24pOwogICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsK
ICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMzg5LDcgKzEzODksNyBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91
YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRC
b29sZWFuOiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbldpdGhDb25kaXRpb25hbERpcmVjdGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBpc0ZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgIHJldHVybiBhbGxv
Y2F0ZSgpOwogICAgIH0KIApAQCAtMzQ4NSw3ICszNDg1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewog
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yobm9kZS5zdHJ1
Y3R1cmVTZXQoKSkKICAgICAgICAgICAgICYmIGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlw
ZSkpIHsKQEAgLTM0OTMsMTMgKzM0OTQsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSwgbm9k
ZS5vcCgpID09IEZvcndhcmRDaGVja1N0cnVjdHVyZSk7CiAgICAgICAgIAogICAgICAgICBBU1NF
UlQobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIo
SklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKVswXSkpOwotICAg
ICAgICBlbHNlIHsKKyAgICAgICAgaWYgKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24o
CisgICAgICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrUHRyKAorICAgICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAg
ICAgICAgICBub2RlLnN0cnVjdHVyZVNldCgpWzBdKSwKKyAgICAgICAgICAgICAgICBub2RlLm9w
KCkgPT0gRm9yd2FyZENoZWNrU3RydWN0dXJlKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZS5ncHIoKSk7CkBAIC0zNTA5LDcgKzM1MTYs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7
ICsraSkKICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrUHRyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpW2ld
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oCisg
ICAgICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hXZWFrUHRyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5sYXN0
KCkpLAorICAgICAgICAgICAgICAgIG5vZGUub3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMTIzOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAgcHVibGljOgog
ICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0KTsKICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlSW5kZXgpOwog
ICAgIEZQUlJlZyBmaWxsU3BlY3VsYXRlRG91YmxlKE5vZGVJbmRleCk7Ci0gICAgR1BSUmVnIGZp
bGxTcGVjdWxhdGVDZWxsKE5vZGVJbmRleCk7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxs
KE5vZGVJbmRleCwgYm9vbCBpc0ZvcndhcmRTcGVjdWxhdGlvbiA9IGZhbHNlKTsKICAgICBHUFJS
ZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZUluZGV4KTsKICAgICBHZW5lcmF0ZWRPcGVyYW5k
VHlwZSBjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKE5vZGVJbmRleCk7CiAKQEAgLTIyMjgs
MTEgKzIyMjgsMjAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludChVbmNvdW50YWJsZVdhdGNocG9pbnQsIEpTVmFsdWVTb3VyY2UoKSwgTm9Ob2Rl
KTsKICAgICB9Ci0gICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVj
b3ZlcnkpCisgICAgLy8gTm90ZTogbm90IHNwZWNpZnlpbmcgdGhlIHZhbHVlUmVjb3ZlcnkgYXJn
dW1lbnQgKGxlYXZpbmcgaXQgYXMgVmFsdWVSZWNvdmVyeSgpKSBpbXBsaWVzCisgICAgLy8gdGhh
dCB5b3UndmUgZW5zdXJlZCB0aGF0IHRoZXJlIGV4aXN0cyBhIE1vdkhpbnQgcHJpb3IgdG8geW91
ciB1c2Ugb2YgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soKS4KKyAgICB2b2lkIGZvcndhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
Tm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29u
c3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSA9IFZhbHVlUmVjb3ZlcnkoKSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFs
dWVTb3VyY2UsIG5vZGVJbmRleCwganVtcFRvRmFpbCk7CiAgICAgICAgIAorICAgICAgICBpZiAo
IXZhbHVlUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHByZWNlZGlu
ZyBub2RlIHdhcyBhIFNldExvY2FsIHdpdGggdGhlIHNhbWUgY29kZSBvcmlnaW4uCisgICAgICAg
ICAgICBOb2RlKiBzZXRMb2NhbCA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LT5hdChtX2luZGV4SW5CbG9jayAtIDEpKTsKKyAgICAgICAgICAgIEFTU0VSVChzZXRMb2NhbC0+
b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NFUlQoc2V0TG9jYWwtPmNvZGVPcmln
aW4gPT0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgICAgICB9CisgICAgICAg
IAogICAgICAgICB1bnNpZ25lZCBzZXRMb2NhbEluZGV4SW5CbG9jayA9IG1faW5kZXhJbkJsb2Nr
ICsgMTsKICAgICAgICAgCiAgICAgICAgIE5vZGUqIHNldExvY2FsID0gJmF0KG1faml0LmdyYXBo
KCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KHNldExvY2FsSW5kZXhJbkJsb2NrKSk7CkBAIC0yMjQ1
LDEwICsyMjU0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNldExvY2FsLT5vcCgpID09IEZs
dXNoIHx8IHNldExvY2FsLT5vcCgpID09IFBoYW50b20pCiAgICAgICAgICAgICBzZXRMb2NhbCA9
ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdCgrK3NldExvY2FsSW5kZXhJ
bkJsb2NrKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaGFkSW50MzJUb0RvdWJsZSkKLSAgICAg
ICAgICAgIEFTU0VSVChhdChzZXRMb2NhbC0+Y2hpbGQxKCkpLmNoaWxkMSgpID09IG1fY29tcGls
ZUluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKHNldExvY2FsLT5jaGls
ZDEoKSA9PSBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGlmICghIXZhbHVlUmVjb3ZlcnkpIHsK
KyAgICAgICAgICAgIGlmIChoYWRJbnQzMlRvRG91YmxlKQorICAgICAgICAgICAgICAgIEFTU0VS
VChhdChzZXRMb2NhbC0+Y2hpbGQxKCkpLmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2V0TG9jYWwtPmNoaWxkMSgp
ID09IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgfQogICAgICAgICBBU1NFUlQoc2V0TG9jYWwt
Pm9wKCkgPT0gU2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQoc2V0TG9jYWwtPmNvZGVPcmlnaW4g
PT0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwogCkBAIC0yMjU3LDE4ICsyMjY4LDI3
IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+bGFzdE9TUkV4aXQoKTsKICAgICAgICAgZXhpdC5tX2NvZGVPcmlnaW4gPSBuZXh0
Tm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgZXhpdC5tX2xhc3RTZXRPcGVyYW5kID0gc2V0TG9j
YWwtPmxvY2FsKCk7CiAgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlUmVjb3ZlcnkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGV4aXQubV9sYXN0U2V0T3BlcmFuZCA9IHNldExvY2Fs
LT5sb2NhbCgpOwogICAgICAgICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlID0gYWRvcHRS
ZWYoCiAgICAgICAgICAgICBuZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKHNldExvY2FsLT5sb2Nh
bCgpLCB2YWx1ZVJlY292ZXJ5KSk7CiAgICAgfQotICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5k
ZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsLCBjb25z
dCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQorICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2Rl
SW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsLCBj
b25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeSgpKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVt
cCwgMTY+IGp1bXBWZWN0b3IgPSBqdW1wc1RvRmFpbC5qdW1wcygpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwganVtcFZlY3Rvci5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGZv
cndhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVt
cFZlY3RvcltpXSwgdmFsdWVSZWNvdmVyeSk7CiAgICAgfQorICAgIHZvaWQgc3BlY3VsYXRpb25D
aGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIGJvb2wgaXNGb3J3YXJkKQorICAgIHsKKyAgICAgICAgaWYgKGlzRm9yd2Fy
ZCkKKyAgICAgICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGVJbmRleCwganVtcFRvRmFpbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVG9GYWls
KTsKKyAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0
aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJ
bmRleCBub2RlSW5kZXgpCkBAIC0yMjg3LDYgKzIzMDcsMTcgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzKTsKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNW
YWx1ZVJlZ3MsIG5vZGVVc2UuaW5kZXgoKSk7CiAgICAgfQorICAgIHZvaWQgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb25XaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRleCBub2RlSW5kZXgsIGJvb2wgaXNGb3J3
YXJkKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkg
fHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQorICAgICAgICBkYXRhTG9nKCJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIp
OworI2VuZGlmCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihraW5k
LCBqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1wKCksIGlzRm9yd2FyZCk7CisgICAg
ICAgIG1fY29tcGlsZU9rYXkgPSBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8Ym9v
bCBzdHJpY3Q+CiAgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlSW5kZXgs
IERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7CkBAIC0yOTEyLDEwICsyOTQzLDExIEBAIHByaXZh
dGU6CiAKIGNsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKKyAg
ICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdl
IHVzZSwgYm9vbCBpc0ZvcndhcmRTcGVjdWxhdGlvbiA9IGZhbHNlKQogICAgICAgICA6IG1faml0
KGppdCkKICAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1fZ3ByT3JJ
bnZhbGlkKEludmFsaWRHUFJSZWcpCisgICAgICAgICwgbV9pc0ZvcndhcmRTcGVjdWxhdGlvbihp
c0ZvcndhcmRTcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAgICAg
ICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7CkBAIC0yOTM3LDcgKzI5Njks
NyBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJP
ckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0g
bV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKGluZGV4KCkpOworICAgICAgICAgICAgbV9ncHJPcklu
dmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUNlbGwoaW5kZXgoKSwgbV9pc0ZvcndhcmRTcGVj
dWxhdGlvbik7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCkBA
IC0yOTUwLDYgKzI5ODIsNyBAQCBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsK
ICAgICBOb2RlSW5kZXggbV9pbmRleDsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CisgICAg
Ym9vbCBtX2lzRm9yd2FyZFNwZWN1bGF0aW9uOwogfTsKIAogY2xhc3MgU3BlY3VsYXRlQm9vbGVh
bk9wZXJhbmQgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1Ymxp
YzoKKyAgICBTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAg
ICA6IFBoYXNlKGdyYXBoLCAic3RydWN0dXJlIGNoZWNrIGhvaXN0aW5nIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIC8vIElkZW50aWZ5IHRoZSBz
ZXQgb2YgdmFyaWFibGVzIHRoYXQgYXJlIGFsd2F5cyBzdWJqZWN0IHRvIHRoZSBzYW1lIHN0cnVj
dHVyZQorICAgICAgICAvLyBjaGVja3MuIEZvciBub3csIG9ubHkgY29uc2lkZXIgbW9ub21vcnBo
aWMgc3RydWN0dXJlIGNoZWNrcyAob25lIHN0cnVjdHVyZSkuCisgICAgICAgIAorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2lu
ZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YXJpYWJsZS0+cHJl
ZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgbm9kZS5zdHJ1Y3R1cmVTZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBJZGVudGlmeSB0aGUgc2V0IG9mIHZhcmlhYmxlcyB0aGF0
IGFyZSBsaXZlIGFjcm9zcyBhIHN0cnVjdHVyZSBjbG9iYmVyLgorICAgICAgICAKKyAgICAgICAg
T3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gbGl2ZSgKKyAgICAgICAgICAgIG1fZ3JhcGgu
bV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAg
ICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCkpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgQVNTRVJUKGxpdmUubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBibG9jay0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICAgICAgQVNTRVJUKGxpdmUubnVt
YmVyT2ZMb2NhbHMoKSA9PSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGl2ZS5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXhBdFRhaWwgPSBibG9jay0+dmFyaWFibGVzQXRU
YWlsW2ldOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7Cisg
ICAgICAgICAgICAgICAgaWYgKGluZGV4QXRUYWlsID09IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUgPSBtX2dyYXBoW2luZGV4QXRUYWlsXS52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICBsaXZlW2ldID0gdmFyaWFibGU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGlu
ZGV4SW5CbG9jay0tOykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBi
bG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAg
ICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJp
cnRoLgorICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAg
ICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChs
aXZlLm9wZXJhbmQobm9kZS5sb2NhbCgpKSk7IC8vIE11c3QgYmUgbGl2ZS4KKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGxpdmUub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCkpOyAvLyBNdXN0IGhhdmUgdGhlIHZhcmlhYmxlIHdlIGV4cGVjdGVkLgor
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGVhdGguCisgICAgICAgICAgICAgICAg
ICAgIGxpdmUub3BlcmFuZChub2RlLmxvY2FsKCkpID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUg
Q0ZBJ3Mgbm90aW9uIG9mIHdoYXQgY2xvYmJlcnMgdGhlIHdvcmxkLgorICAgICAgICAgICAgICAg
IGNhc2UgVmFsdWVBZGQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX2dy
YXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGxpdmUpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVM
ZXNzRXE6CisgICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgICAg
ICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgICAgICAgICAgY2FzZSBDb21wYXJl
RXE6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdCwgcmln
aHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoKG1fZ3JhcGguaXNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGls
ZDEoKS5pbmRleCgpKS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAo
bV9ncmFwaC5pc0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxk
MigpLmluZGV4KCkpLmlzTnVsbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShsZWZ0LCByaWdodCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdC5zaG91
bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkg
JiYgbGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0
LnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgcmlnaHQuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90
aGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmlnaHQuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKSAmJiBsZWZ0LnNob3Vs
ZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIo
bGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlv
bigpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnByZWRpY3Rpb24oKSkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihsaXZlKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW2NoaWxkMl0u
cHJlZGljdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaFtjaGlsZDJdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSB8
fCAhaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24obV9ncmFwaFtjaGlsZDFdLnBy
ZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIobGl2ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
Y2hpbGQxXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3Vs
ZFNwZWN1bGF0ZUludDhBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50
MTZBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
MV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNo
b3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxh
dGVVaW50MzJBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFy
cmF5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjbG9iYmVy
KGxpdmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGhTYWZlOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToK
KyAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgICAgICAgICAgY2FzZSBHZXRC
eUlkRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlJZDoKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgICAgICAg
ICAgY2FzZSBDYWxsOgorICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICAg
ICAgICAgIGNhc2UgUmVzb2x2ZToKKyAgICAgICAgICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgor
ICAgICAgICAgICAgICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBSZXNvbHZlR2xvYmFsOgorICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGxpdmUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUub3Ao
KSAhPSBQaGkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOworCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQor
ICAgICAgICBmb3IgKEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRl
cmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOworICAgICAgICAgICAgIGl0ICE9IG1fbWFwLmVuZCgp
OyArK2l0KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJIb2lzdGluZyBjaGVja3MgZm9yICVzXG4i
LCBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YShpdC0+Zmlyc3QpKTsKKyAgICAgICAg
fQorI2VuZGlmIC8vIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKworICAg
ICAgICAvLyBNYWtlIGNoYW5nZXM6CisgICAgICAgIC8vIDEpIElmIGEgdmFyaWFibGUncyBsaXZl
IHJhbmdlIGRvZXMgbm90IHNwYW4gYSBjbG9iYmVyLCB0aGVuIGluamVjdCBzdHJ1Y3R1cmUKKyAg
ICAgICAgLy8gICAgY2hlY2tzIGJlZm9yZSB0aGUgU2V0TG9jYWwuCisgICAgICAgIC8vIDIpIElm
IGEgdmFyaWFibGUncyBsaXZlIHJhbmdlIHNwYW5zIGEgY2xvYmJlciBidXQgaXMgd2F0Y2hwb2lu
dGFibGUsIHRoZW4KKyAgICAgICAgLy8gICAgaW5qZWN0IHN0cnVjdHVyZSBjaGVja3MgYmVmb3Jl
IHRoZSBTZXRMb2NhbCBhbmQgcmVwbGFjZSBhbGwgb3RoZXIgc3RydWN0dXJlCisgICAgICAgIC8v
ICAgIGNoZWNrcyBvbiB0aGF0IHZhcmlhYmxlIHdpdGggc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0
Y2hwb2ludHMuCisgICAgICAgIAorICAgICAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBpbnNl
cnRpb25TZXQ7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8
IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAg
IE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFu
b2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgYSBHZXRMb2NhbCBhbmQgYSBDaGVja1N0cnVj
dHVyZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcworICAgICAgICAgICAgICAgICAgICAvLyBT
ZXRBcmd1bWVudCwgaWYgdGhlIHZhcmlhYmxlIHdhcyBhIGNhbmRpZGF0ZSBmb3Igc3RydWN0dXJl
IGhvaXN0aW5nLgorICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmFzaWMgYmxvY2sgcHJl
dmlvdXNseSBvbmx5IGhhZCB0aGUgU2V0QXJndW1lbnQgYXMgaXRzCisgICAgICAgICAgICAgICAg
ICAgIC8vIHZhcmlhYmxlLWF0LXRhaWwsIHRoZW4gcmVwbGFjZSBpdCB3aXRoIHRoaXMgR2V0TG9j
YWwuCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFZh
cmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5k
KHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5tX2lzQ2xvYmJlcmVkICYm
ICFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGls
bFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIG5vZGUucmVmKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSBnZXRMb2NhbChHZXRMb2NhbCwgbm9kZS5jb2RlT3JpZ2luLCBPcEluZm8odmFy
aWFibGUpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbC5wcmVkaWN0
KHZhcmlhYmxlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbC5y
ZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldExvY2FsSW5kZXggPSBtX2dy
YXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoZ2V0TG9jYWwp
OworICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9jayAr
IDEsIGdldExvY2FsSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgbm9kZS5jb2RlT3JpZ2lu
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+c2Vjb25kLm1fc3RydWN0dXJl
KSksIGdldExvY2FsSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5y
ZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXgg
PSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hl
Y2tTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuYXBwZW5kKGlu
ZGV4SW5CbG9jayArIDEsIGNoZWNrU3RydWN0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBIYXNoTWFw
PFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5m
aW5kKHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5k
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5tX2lzQ2xvYmJlcmVk
ICYmICFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNT
dGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRmlyc3QgaW5zZXJ0IGEgZGVhZCBTZXRMb2NhbCB0byB0ZWxsIE9TUiB0aGF0
IHRoZSBjaGlsZCdzIHZhbHVlIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAvLyBiZSBkcm9w
cGVkIGludG8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBpZiB0aGUgQ2hlY2tTdHJ1Y3R1cmUgZGVj
aWRlcworICAgICAgICAgICAgICAgICAgICAvLyB0byBleGl0LgorICAgICAgICAgICAgICAgICAg
ICBOb2RlIHNldExvY2FsKFNldExvY2FsLCBub2RlLmNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJs
ZSksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBzZXRMb2NhbEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYXBwZW5kKHNldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
LmFwcGVuZChpbmRleEluQmxvY2ssIHNldExvY2FsSW5kZXgpOworICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnJlZigpOworICAgICAgICAgICAgICAgICAgICAvLyBV
c2UgYSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUgdG8gaW5kaWNhdGUgdGhhdCB3ZSBzaG91bGQgZXhp
dCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBieXRlY29kZSBpbnN0cnVjdGlv
biByYXRoZXIgdGhhbiByZWV4ZWN1dGluZyB0aGUgY3VycmVudCBvbmUuCisgICAgICAgICAgICAg
ICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUoRm9yd2FyZENoZWNrU3RydWN0dXJlLCBub2RlLmNv
ZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT5zZWNvbmQubV9z
dHJ1Y3R1cmUpKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2hlY2tTdHJ1Y3R1cmUucmVmKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGVj
a1N0cnVjdHVyZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ssIGNoZWNrU3RydWN0dXJlSW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIGNoaWxk
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
Lm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+Ojpp
dGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25k
Lm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1faXNDbG9iYmVyZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSA9PSBub2Rl
LnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpOworICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgqYmxvY2sp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBub3RpY2VTdHJ1Y3R1cmVDaGVjayhWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEhhc2hN
YXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6QWRkUmVzdWx0IHJlc3VsdCA9Cisg
ICAgICAgICAgICBtX21hcC5hZGQodmFyaWFibGUsIENoZWNrRGF0YShzdHJ1Y3R1cmUsIGZhbHNl
KSk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm1fc3RydWN0dXJlID09IHN0cnVj
dHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQubV9zdHJ1Y3R1cmUgPSAwOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5vdGljZVN0cnVjdHVy
ZUNoZWNrKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIGNvbnN0IFN0cnVjdHVyZVNldCYg
c2V0KQorICAgIHsKKyAgICAgICAgaWYgKHNldC5zaXplKCkgIT0gMSkgeworICAgICAgICAgICAg
bm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIDApOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzZXQuc2lu
Z2xldG9uU3RydWN0dXJlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5vdGljZUNsb2JiZXIo
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8VmFy
aWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9CisgICAgICAgICAg
ICBtX21hcC5maW5kKHZhcmlhYmxlKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGl0ZXItPnNlY29uZC5tX2lzQ2xvYmJlcmVk
ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IE9wZXJhbmRzPFZh
cmlhYmxlQWNjZXNzRGF0YSo+JiBsaXZlKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IGxpdmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbGl2ZVtpXTsKKyAgICAgICAgICAgIGlmICghdmFyaWFibGUpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBub3RpY2VDbG9iYmVyKHZhcmlhYmxlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgQ2hlY2tEYXRhIHsKKyAgICAgICAgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgYm9vbCBtX2lzQ2xvYmJlcmVkOworICAgICAg
ICAKKyAgICAgICAgQ2hlY2tEYXRhKCkKKyAgICAgICAgICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAg
ICAgICAgICAgICwgbV9pc0Nsb2JiZXJlZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBDaGVja0RhdGEoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgaXND
bG9iYmVyZWQpCisgICAgICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAg
ICAgICwgbV9pc0Nsb2JiZXJlZChpc0Nsb2JiZXJlZCkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgfTsKKyAgICAKKyAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT4g
bV9tYXA7Cit9OworCitib29sIHBlcmZvcm1TdHJ1Y3R1cmVDaGVja0hvaXN0aW5nKEdyYXBoJiBn
cmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFN0cnVjdHVy
ZSBDaGVjayBIb2lzdGluZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxTdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1N0
cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZV9oCisjZGVmaW5lIERGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBo
OworCisvLyBIb2lzdHMgQ2hlY2tTdHJ1Y3R1cmUgb24gdmFyaWFibGVzIHRvIGFzc2lnbm1lbnRz
IHRvIHRob3NlIHZhcmlhYmxlcywgaWYgZWl0aGVyIG9mCisvLyB0aGUgZm9sbG93aW5nIGlzIHRy
dWU6CisvLyBBKSBUaGUgc3RydWN0dXJlJ3MgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHNldCBpcyB2
YWxpZC4KKy8vIEIpIFRoZSBzcGFuIG9mIGNvZGUgd2l0aGluIHdoaWNoIHRoZSB2YXJpYWJsZSBp
cyBsaXZlIGhhcyBubyBlZmZlY3RzIHRoYXQgbWlnaHQKKy8vICAgIGNsb2JiZXIgdGhlIHN0cnVj
dHVyZS4KKworYm9vbCBwZXJmb3JtU3RydWN0dXJlQ2hlY2tIb2lzdGluZyhHcmFwaCYpOworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2
aXNpb24gMTIzOTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAg
ICAgICwgbV9kb3VibGVGb3JtYXRTdGF0ZShFbXB0eURvdWJsZUZvcm1hdFN0YXRlKQogICAgICAg
ICAsIG1faXNDYXB0dXJlZChmYWxzZSkKICAgICAgICAgLCBtX2lzQXJndW1lbnRzQWxpYXMoZmFs
c2UpCisgICAgICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQogICAg
IHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAgIH0KQEAgLTYxLDYgKzYyLDcgQEAgcHVibGlj
OgogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0ZSkK
ICAgICAgICAgLCBtX2lzQ2FwdHVyZWQoaXNDYXB0dXJlZCkKICAgICAgICAgLCBtX2lzQXJndW1l
bnRzQWxpYXMoZmFsc2UpCisgICAgICAgICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVk
KGZhbHNlKQogICAgIHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAgIH0KQEAgLTkwLDYgKzky
LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNDYXB0dXJlZDsKICAgICB9CiAgICAg
CisgICAgYm9vbCBtZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoYm9vbCBmYWlsZWQp
CisgICAgeworICAgICAgICBib29sIG5ld0ZhaWxlZCA9IG1fc3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z0ZhaWxlZCB8IGZhaWxlZDsKKyAgICAgICAgaWYgKG5ld0ZhaWxlZCA9PSBtX3N0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdGYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1f
c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCA9IG5ld0ZhaWxlZDsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxl
ZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVk
OworICAgIH0KKyAgICAKICAgICBib29sIG1lcmdlSXNBcmd1bWVudHNBbGlhcyhib29sIGlzQXJn
dW1lbnRzQWxpYXMpCiAgICAgewogICAgICAgICBib29sIG5ld0lzQXJndW1lbnRzQWxpYXMgPSBt
X2lzQXJndW1lbnRzQWxpYXMgfCBpc0FyZ3VtZW50c0FsaWFzOwpAQCAtMjU1LDYgKzI3MSw3IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBtX2lzQ2FwdHVyZWQ7CiAgICAgYm9vbCBtX2lzQXJn
dW1lbnRzQWxpYXM7CisgICAgYm9vbCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQ7CiB9
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155893</attachid>
            <date>2012-08-01 15:03:37 -0700</date>
            <delta_ts>2012-08-01 17:21:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>hoiststruct_patch_1.diff</filename>
            <type>text/plain</type>
            <size>82894</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI0MzcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBA
QAorMjAxMi0wOC0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaG9pc3Qgc3RydWN0dXJlIGNoZWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI2OTYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGhvaXN0cyBzdHJ1Y3R1cmUgY2hlY2tzIGlu
IHRoZSBzYW1lIHdheSB0aGF0IHdlIHdvdWxkIGhvaXN0IGFycmF5IGNoZWNrcywgYnV0IHdpdGgg
YWRkZWQKKyAgICAgICAgY29tcGxleGl0eSB0byBjb3BlIHdpdGggdGhlIGZhY3QgdGhhdCB0aGUg
c3RydWN0dXJlIG9mIGFuIG9iamVjdCBtYXkgY2hhbmdlLiBUaGlzIGlzIGhhbmRsZWQKKyAgICAg
ICAgYnkgcGVyZm9ybWluZyBhIHNpZGUgZWZmZWN0cyBhbmFseXNpcyBvdmVyIHRoZSByZWdpb24g
aW4gd2hpY2ggdGhlIHJlc3BlY3RpdmUgdmFyaWFibGUgaXMKKyAgICAgICAgbGl2ZS4gSWYgYSBz
dHJ1Y3R1cmUgY2xvYmJlcmluZyBzaWRlIGVmZmVjdCBtYXkgaGFwcGVuIHRoZW4gd2UgZWl0aGVy
IGhvaXN0IHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgY2hlY2tzIGFuZCBmYWxsIGJhY2sgb24gc3Ry
dWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludHMgKGlmIHRoZSB3YXRjaHBvaW50IHNldCBpcyBz
dGlsbAorICAgICAgICB2YWxpZCksIG9yIHdlIGF2b2lkIGhvaXN0aW5nIGFsdG9nZXRoZXIuCisg
ICAgICAgIAorICAgICAgICBEb2luZyB0aGlzIHJlcXVpcmVkIHRlYWNoaW5nIHRoZSBDRkEgdGhh
dCB3ZSBtYXkgaGF2ZSBhbiBleHBlY3RhdGlvbiB0aGF0IGFuIG9iamVjdCBoYXMgYQorICAgICAg
ICBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBldmVuIGFmdGVyIHN0cnVjdHVyZSBjbG9iYmVyaW5nIGhh
cHBlbnMsIGluIHRoZSBzZW5zZSB0aGF0IHN0cnVjdHVyZQorICAgICAgICBwcm9vZnMgdGhhdCB3
ZXJlIGNvYmJlcmVkIGNhbiBiZSByZXZpdmVkIHVzaW5nIHdhdGNocG9pbnRzLiBDRkEgbXVzdCBr
bm93IGFib3V0IHRoaXMgc28gdGhhdAorICAgICAgICBPU1IgZW50cnkgbWF5IGtub3cgYWJvdXQg
aXQsIHNpbmNlIHdlIGNhbm5vdCBhbGxvdyBlbnRyeSB0byBoYXBwZW4gaWYgdGhlIHZhcmlhYmxl
IGhhcyBhCisgICAgICAgIGNsb2JiZXJlZCBzdHJ1Y3R1cmUgcHJvb2YsIHdpbGwgaGF2ZSBhIHdh
dGNocG9pbnQgdG8gcmV2aXZlIHRoZSBwcm9vZiwgYW5kIHRoZSB2YXJpYWJsZSBpbgorICAgICAg
ICB0aGUgYmFzZWxpbmUgSklUIGhhcyBhIGNvbXBsZXRlbHkgdW5yZWxhdGVkIHN0cnVjdHVyZS4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbW9zdGx5IHBlcmZvcm1hbmNlIG5ldXRyYWwuCisK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNv
dmVyeTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpvcGVyYXRvciEpOgor
ICAgICAgICAoVmFsdWVSZWNvdmVyeSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmNsb2JiZXJXb3JsZCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmNsb2JiZXJDYXB0dXJlZFZhcnMp
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChBYnN0cmFjdFN0
YXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZh
bHVlOjppc0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjptYWtlVG9w
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1RvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpt
ZXJnZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGVGb3JFbnRyeSk6CisgICAgICAgIChBYnN0cmFjdFZh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpkdW1wKToKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0QXJndW1lbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NTcGVjdWxhdGlv
bnMpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OmNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6c3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRMb2NhbExvYWRFbGltaW5hdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAg
ICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1w
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
dm90ZSk6CisgICAgICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1
cmVTZXQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVP
U1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFn
YXRlKToKKyAgICAgICAgKFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6ZG9Sb3VuZE9mRG91YmxlVm90aW5n
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0
aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1
bGF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb25XaXRoQ29uZGl0aW9u
YWxEaXJlY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kOjpT
cGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9w
ZXJhbmQ6Omdwcik6CisgICAgICAgIChTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChWYXJpYWJsZUFjY2Vzc0Rh
dGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nl
c3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlU3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVB
Y2Nlc3NEYXRhOjpzdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNsZWFyVm90ZXMpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlQWNjZXNzRGF0YTo6dm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVB
Y2Nlc3NEYXRhOjp2b3RlUmF0aW8pOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNz
RGF0YTo6c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9Wb3RlKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKEpTQyk6CisKIDIwMTItMDgtMDEgIFBhdHJpY2sg
R2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwbGFjZSBXVEY6Omdl
dEN1cnJlbnRMb2NhbFRpbWUoKSB3aXRoIEdyZWdvcmlhbkRhdGVUaW1lOjpzZXRUb0N1cnJlbnRM
b2NhbFRpbWUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEy
NDM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDggQEAKIAkJMEY2
MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3
QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8qIERGR0Fic3RyYWN0
U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2MjAxNzkxNDNGQ0Q0ODAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3Ry
YWN0U3RhdGUuY3BwICovOyB9OworCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHU3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjYzOTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERG
R0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkMx
NERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZE
MjgxNUE4Q0MxRTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDI2MTVBOENDMUIwMDhGMzYzRSAv
KiBKSVRTdHViUm91dGluZS5jcHAgKi87IH07CkBAIC04ODUsNiArODg3LDggQEAKIAkJMEY2MjAx
NkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8q
IERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4
MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2Vu
Y3lMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMw
MEI3QjJFNCAvKiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0VkZ2UuaDsgcGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjMyMSw2ICsyMzI1LDggQEAKIAkJCQk4NkVDOURDMzEzMjhERjgy
MDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLywKIAkJCQk4Njg4MEYxQjE0MzI4QkI5
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi8sCiAJCQkJODY4ODBGNEMx
NDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovLAorCQkJCTBGNjM5
NDNDMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
ICovLAorCQkJCTBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hv
aXN0aW5nUGhhc2UuaCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1
bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmgg
Ki8sCiAJCQkJMEYyQkRDM0YxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVy
cmlkZS5oICovLApAQCAtMjg2MCw2ICsyODY2LDcgQEAKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY3NjZENDQxNUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjc2NkQ0NjE1QjM3MDFGMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5
N0MgLyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTM0NTcsNiArMzQ2NCw3IEBACiAJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdh
cmVKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQzNDE1QUUyNTM4
MDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjc2NkQzODE1QUU0QTFDMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0Mg
LyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCShy
ZXZpc2lvbiAxMjQzNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVS
ZWNvdmVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw5IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1
ZSAhPSBEb250S25vdzsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KKyAgICAKICAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3Rl
ckZpbGUoKQogICAgIHsKICAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDEyNDM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMzUsNyArMTMzNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U2NvcGVk
VmFyOgogICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUu
Y29kZU9yaWdpbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRC
eUlkOgpAQCAtMTQxNSw3ICsxNDE1LDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewor
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6
IHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUg
c3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCgKQEAgLTE2MDksNiArMTYxMCwxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAKIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxv
Y2spCiB7CisgICAgY2xvYmJlckNhcHR1cmVkVmFycyhjb2RlT3JpZ2luKTsKKyAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOworfQorCitpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRl
OjpjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCit7CiAg
ICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgIGNvbnN0IEJpdFZl
Y3RvciYgY2FwdHVyZWRWYXJzID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVk
VmFyczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNhcHR1cmVkVmFycy5zaXplKCk7IGktLTsp
IHsKQEAgLTE2MjQsNyArMTYzMSw2IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJXb3JsZCgKICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fdmFyaWFibGVzLm51bWJlck9mQXJn
dW1lbnRzKCk7IGktLTspCiAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5hcmd1bWVudChpKS5tYWtl
VG9wKCk7CiAgICAgfQotICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiB9CiAK
IGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5oCShyZXZpc2lvbiAxMjQzNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDYgKzIxNyw3IEBAIHB1
YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9y
aWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRW
YXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2ln
bmVkIGluZGV4SW5CbG9jayk7CiAgICAgCiAgICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5k
ZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVl
LmgJKHJldmlzaW9uIDEyNDM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsMTMgKzMxNywxNCBAQCBzdHJ1Y3Qg
QWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBtX3R5cGUgPSBTcGVjTm9uZTsKICAgICAg
ICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5j
bGVhcigpOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0CiAgICAgewot
ICAgICAgICBib29sIHJlc3VsdCA9IG1fdHlwZSA9PSBTcGVjTm9uZSAmJiBtX3N0cnVjdHVyZS5p
c0NsZWFyKCk7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gbV90eXBlID09IFNwZWNOb25lICYmIG1f
c3RydWN0dXJlLmlzQ2xlYXIoKSAmJiBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmlzQ2xlYXIoKTsK
ICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkBAIC0zMzMsNiArMzM0LDcgQEAgc3RydWN0IEFic3RyYWN0VmFs
dWUgewogICAgIHsKICAgICAgICAgbV90eXBlID0gU3BlY1RvcDsKICAgICAgICAgbV9zdHJ1Y3R1
cmUubWFrZVRvcCgpOworICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLm1ha2VUb3AoKTsK
ICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIH0KQEAgLTM1Myw3ICszNTUsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAg
CiAgICAgYm9vbCBpc1RvcCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV90eXBlID09
IFNwZWNUb3AgJiYgbV9zdHJ1Y3R1cmUuaXNUb3AoKTsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9
PSBTcGVjVG9wICYmIG1fc3RydWN0dXJlLmlzVG9wKCkgJiYgbV91bmNsb2JiZXJlZFN0cnVjdHVy
ZS5pc1RvcCgpOwogICAgIH0KICAgICAKICAgICBib29sIHZhbHVlSXNUb3AoKSBjb25zdApAQCAt
MzgzLDggKzM4NSwxMSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgICAgICAvLyBp
dCBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUgLSBmb3IgZXhhbXBsZSBiZXR3ZWVuIHdoZW4gd2Ug
Y29tcGlsZQogICAgICAgICAgICAgLy8gdGhlIGNvZGUgYW5kIHdoZW4gd2UgcnVuIGl0LgogICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUubWFrZVRvcCgpOyAvLyBGSVhNRTogQ29uc2lkZXIg
bm90IGNsb2JiZXJpbmcgdGhpcy4KKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmNsZWFy
KCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJv
bVZhbHVlKHZhbHVlKTsKICAgICAgICAgbV92YWx1ZSA9IHZhbHVlOwpAQCAtMzk3LDYgKzQwMiw5
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsK
ICAgICAgICAgbV9zdHJ1Y3R1cmUuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgIAorICAgICAgICBt
X3VuY2xvYmJlcmVkU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fdW5jbG9iYmVyZWRTdHJ1
Y3R1cmUuYWRkKHN0cnVjdHVyZSk7CisgICAgICAgIAogICAgICAgICBtX3R5cGUgPSBzcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUo
KTsKICAgICAgICAgCkBAIC00MDUsMTAgKzQxMywxMyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgCiAgICAgdm9pZCBzZXQoU3BlY3VsYXRlZFR5cGUgdHlwZSkKICAgICB7Ci0gICAgICAg
IGlmICh0eXBlICYgU3BlY0NlbGwpCisgICAgICAgIGlmICh0eXBlICYgU3BlY0NlbGwpIHsKICAg
ICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV91bmNsb2JiZXJl
ZFN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICB9CiAgICAgICAgIG1fdHlwZSA9IHR5cGU7CiAg
ICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
QEAgLTQxOCw2ICs0MjksNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAg
ICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZQogICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1
cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fdW5jbG9iYmVyZWRTdHJ1
Y3R1cmUgPT0gb3RoZXIubV91bmNsb2JiZXJlZFN0cnVjdHVyZQogICAgICAgICAgICAgJiYgbV92
YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CkBAIC00MzcsNiArNDQ5LDcgQEAgc3RydWN0IEFi
c3RyYWN0VmFsdWUgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0IHw9IG1l
cmdlU3BlY3VsYXRpb24obV90eXBlLCBvdGhlci5tX3R5cGUpOwogICAgICAgICAgICAgcmVzdWx0
IHw9IG1fc3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVjdHVyZSk7CisgICAgICAgICAgICBy
ZXN1bHQgfD0gbV91bmNsb2JiZXJlZFN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV91bmNsb2JiZXJl
ZFN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKSB7
CiAgICAgICAgICAgICAgICAgcmVzdWx0IHw9ICEhbV92YWx1ZTsKICAgICAgICAgICAgICAgICBt
X3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtNDUxLDggKzQ2NCwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgewogICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKG1fdHlwZSwgdHlwZSk7CiAg
ICAgICAgIAotICAgICAgICBpZiAodHlwZSAmIFNwZWNDZWxsKQorICAgICAgICBpZiAodHlwZSAm
IFNwZWNDZWxsKSB7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAg
ICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgfQogICAgICAg
ICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogCiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAg
LTQ2Miw2ICs0NzcsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBt
X3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgICAgICBtX3N0
cnVjdHVyZS5maWx0ZXIob3RoZXIpOworICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmZp
bHRlcihvdGhlcik7CiAgICAgICAgIAogICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgcHJp
b3IgdG8gdGhlIGFib3ZlIHR3byBzdGF0ZW1lbnRzIHdlIGhhZCAoRm9vLCBUT1ApLCB3aGVyZQog
ICAgICAgICAvLyBGb28gaXMgYSBTcGVjdWxhdGVkVHlwZSB0aGF0IGlzIGRpc2pvaW50IHdpdGgg
dGhlIHBhc3NlZCBTdHJ1Y3R1cmVTZXQuIEluIHRoYXQKQEAgLTQ2OSw2ICs0ODUsNyBAQCBzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIC8vIHN1cmUgdGhhdCBuZXcgaW5mb3JtYXRpb24g
Z2xlYW5lZCBmcm9tIHRoZSBTcGVjdWxhdGVkVHlwZSBuZWVkcyB0byBiZSBmZWQgYmFjawogICAg
ICAgICAvLyBpbnRvIHRoZSBpbmZvcm1hdGlvbiBnbGVhbmVkIGZyb20gdGhlIFN0cnVjdHVyZVNl
dC4KICAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CisgICAgICAgIG1fdW5jbG9i
YmVyZWRTdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoISFt
X3ZhbHVlICYmICF2YWxpZGF0ZUlnbm9yaW5nVmFsdWUobV92YWx1ZSkpCiAgICAgICAgICAgICBj
bGVhcigpOwpAQCAtNDg3LDYgKzUwNCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAg
ICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSBmaWx0ZXJpbmcgZG9lcyB0aGUgcmln
aHQgdGhpbmcgaXMgdG8gZmlsdGVyIG9uCiAgICAgICAgIC8vIHRoZSBuZXcgdHlwZSAoTm9uZSkg
cmF0aGVyIHRoYW4gdGhlIG9uZSBwYXNzZWQgKEFycmF5KS4KICAgICAgICAgbV9zdHJ1Y3R1cmUu
ZmlsdGVyKG1fdHlwZSk7CisgICAgICAgIG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUuZmlsdGVyKG1f
dHlwZSk7CiAKICAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFsaWRhdGVJZ25vcmluZ1ZhbHVl
KG1fdmFsdWUpKQogICAgICAgICAgICAgY2xlYXIoKTsKQEAgLTUyMyw4ICs1NDEsOCBAQCBzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGlmIChpc1RvcCgpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIAotICAgICAgICBpZiAoISFtX3ZhbHVlKQotICAgICAgICAgICAg
cmV0dXJuIG1fdmFsdWUgPT0gdmFsdWU7CisgICAgICAgIGlmICghIW1fdmFsdWUgJiYgbV92YWx1
ZSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAg
IGlmIChtZXJnZVNwZWN1bGF0aW9ucyhtX3R5cGUsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVl
KSkgIT0gbV90eXBlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ1LDEwICs1NjMs
MzkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgCisgICAgYm9vbCB2YWxpZGF0ZUZvckVudHJ5KEpTVmFsdWUgdmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAKKyAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3ZhbHVlICE9IHZhbHVlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1lcmdlU3BlY3VsYXRp
b25zKG1fdHlwZSwgc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpKSAhPSBtX3R5cGUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlICYgU3BlY0VtcHR5KTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV91bmNs
b2JiZXJlZFN0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIAorICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAg
ICAgQVNTRVJUKG1fdHlwZSAmIFNwZWNDZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBtX3VuY2xv
YmJlcmVkU3RydWN0dXJlLmNvbnRhaW5zKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKICAg
ICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCEobV90
eXBlICYgU3BlY0NlbGwpKQorICAgICAgICBpZiAoIShtX3R5cGUgJiBTcGVjQ2VsbCkpIHsKICAg
ICAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgICAgICAgICAgQVNT
RVJUKG1fdW5jbG9iYmVyZWRTdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKGlzQ2xlYXIoKSkKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZSk7
CkBAIC01NjYsMTIgKzYxMywxNSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAg
ICAgICBmcHJpbnRmKG91dCwgIiglcywgIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhtX3R5cGUpKTsK
ICAgICAgICAgbV9zdHJ1Y3R1cmUuZHVtcChvdXQpOworICAgICAgICBkYXRhTG9nKCIsICIpOwor
ICAgICAgICBtX3VuY2xvYmJlcmVkU3RydWN0dXJlLmR1bXAob3V0KTsKICAgICAgICAgaWYgKCEh
bV92YWx1ZSkKICAgICAgICAgICAgIGZwcmludGYob3V0LCAiLCAlcyIsIG1fdmFsdWUuZGVzY3Jp
cHRpb24oKSk7CiAgICAgICAgIGZwcmludGYob3V0LCAiKSIpOwogICAgIH0KIAogICAgIFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSBtX3VuY2xvYmJlcmVkU3RydWN0dXJlOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsKICAg
ICBKU1ZhbHVlIG1fdmFsdWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyNDM3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTcsNiArMjU3LDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQsIGlzQ2FwdHVyZWQpOworICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlU3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKKyAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OwogICAgIH0KQEAgLTI5OSw3
ICszMDEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4g
YXJndW1lbnQgaW4gdGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCiAgICAgICAgICAgICAgICAg
Ly8gdGhlIEdldExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KICAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZVB0ci0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJh
bmQpKTsKLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1
bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSksIG5vZGVJbmRleCkpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICBub2RlSW5kZXggPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgo
R2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSksIG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9k
ZUluZGV4OwogICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICB9
CkBAIC0zNDAsNiArMzQzLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9w
ZXJhbmQpOwogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Cisg
ICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFp
bGVkKAorICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCB2
YWx1ZSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
YXJndW1lbnQpID0gbm9kZUluZGV4OwogICAgIH0KQEAgLTE3MjMsNyArMTcyOCwxMSBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgaWYgKG1fY3VycmVudEJs
b2NrID09IG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1f
aW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1f
bnVtQXJndW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgICAgIE5vZGVJbmRl
eCBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+YXJn
dW1lbnRJc0NhcHR1cmVkKGFyZ3VtZW50KSkpKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAg
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+YXJndW1lbnRJc0NhcHR1
cmVkKGFyZ3VtZW50KSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nRmFpbGVkKAorICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CisgICAgICAg
ICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcElu
Zm8odmFyaWFibGUpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRd
ID0gc2V0QXJndW1lbnQ7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRI
ZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1l
KGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CkBAIC0zMDEwLDYgKzMwMTksNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpmaXhWYXJpYWJsZUFjY2Vzc1NwCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogZGF0YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOwogICAgICAgICBkYXRh
LT5maW5kKCktPnByZWRpY3QoZGF0YS0+bm9uVW5pZmllZFByZWRpY3Rpb24oKSk7CiAgICAgICAg
IGRhdGEtPmZpbmQoKS0+bWVyZ2VJc0NhcHR1cmVkKGRhdGEtPmlzQ2FwdHVyZWQoKSk7CisgICAg
ICAgIGRhdGEtPmZpbmQoKS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGRhdGEt
PnN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTI0MzcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNyw2ICszMzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKICAgICAg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEK
ICAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLnN0
cnVjdHVyZVNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zODks
NiArMzkwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2lu
ZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6
CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCiAgICAgICAgICAg
ICAgICAgICAgICYmIG5vZGUuc3RydWN0dXJlU2V0KCkuY29udGFpbnNPbmx5KHN0cnVjdHVyZSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDM3LDYgKzQzOSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3AoKSkgewogICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgIGNh
c2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6
CkBAIC02NzMsNyArNjc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAg
ICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCwgTm9kZUluZGV4JiByZWxldmFudExvY2FsT3ApCisgICAgTm9kZUluZGV4
IGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgTm9kZUluZGV4
JiByZWxldmFudExvY2FsT3AsIGJvb2wgY2FyZUFib3V0Q2xvYmJlcmluZykKICAgICB7CiAgICAg
ICAgIHJlbGV2YW50TG9jYWxPcCA9IE5vTm9kZTsKICAgICAgICAgCkBAIC03MDMsNyArNzA2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNX
b3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYg
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk0NCwx
MyArOTQ3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2Nh
bDogewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3RhdGUg
PT0gRml4cG9pbnROb3RDb252ZXJnZWQgJiYgIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJl
ZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgTm9kZUluZGV4IHJlbGV2
YW50TG9jYWxPcDsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwb3NzaWJsZVJlcGxhY2VtZW50ID0g
Z2V0TG9jYWxMb2FkRWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCByZWxl
dmFudExvY2FsT3ApOwotICAgICAgICAgICAgQVNTRVJUKHJlbGV2YW50TG9jYWxPcCA9PSBOb05v
ZGUKLSAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0ub3AoKSA9
PSBHZXRMb2NhbFVubGlua2VkCi0gICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtyZWxldmFu
dExvY2FsT3BdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlQWNjZXNzRGF0YSk7Cisg
ICAgICAgICAgICBOb2RlSW5kZXggcG9zc2libGVSZXBsYWNlbWVudCA9IGdldExvY2FsTG9hZEVs
aW1pbmF0aW9uKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSwgcmVsZXZhbnRMb2NhbE9wLCB2
YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICBpZiAocmVsZXZh
bnRMb2NhbE9wID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChtX2dyYXBoW3JlbGV2YW50TG9jYWxPcF0ub3AoKSAhPSBHZXRMb2NhbFVubGlua2VkCisg
ICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtyZWxldmFudExvY2FsT3BdLnZhcmlhYmxlQWNjZXNz
RGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIE5vZGVJbmRleCBwaGlJbmRleCA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKICAg
ICAgICAgICAgIGlmICghc2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC05ODAsNyArOTg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCByZWxldmFudExvY2FsT3BJZ25vcmVkOwotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IHNl
dFJlcGxhY2VtZW50KGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKG5vZGUudW5saW5rZWRMb2NhbCgp
LCByZWxldmFudExvY2FsT3BJZ25vcmVkKSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gc2V0
UmVwbGFjZW1lbnQoZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24obm9kZS51bmxpbmtlZExvY2FsKCks
IHJlbGV2YW50TG9jYWxPcElnbm9yZWQsIHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTExMDgsNiArMTExMyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAg
ICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGlmIChjaGVja1N0cnVj
dHVyZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpLmlu
ZGV4KCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAx
MjQzNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgog
I2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAi
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgpAQCAtMTAxLDYgKzEwMiw4IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29t
cGlsZU0KICAgICAgICAgZGZnLnJlc2V0RXhpdFN0YXRlcygpOwogICAgICAgICBwZXJmb3JtRml4
dXAoZGZnKTsKICAgICB9CisgICAgaWYgKHBlcmZvcm1TdHJ1Y3R1cmVDaGVja0hvaXN0aW5nKGRm
ZykpCisgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsgLy8gTmVlZCB0byByZWNvbXB1dGUgQ0ZBIHNp
bmNlIG5vZGVzIHdlcmUgYWRkZWQgb3IgY2hhbmdlZC4KICAgICBwZXJmb3JtQ1NFKGRmZywgRml4
cG9pbnRDb252ZXJnZWQpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRh
TG9nKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVyYXRpb25z
LlxuIiwgY250KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAxMjQzNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDEzICsyODcsMTUgQEAgdm9pZCBHcmFwaDo6ZHVtcChj
b25zdCBjaGFyKiBwcmVmaXgsIE5vZAogICAgICAgICBkYXRhTG9nKCIlc0Y6IyV1IiwgaGFzUHJp
bnRlZCA/ICIsICIgOiAiIiwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CiAgICAgICAgIGhh
c1ByaW50ZWQgPSB0cnVlOwogICAgIH0KKyAgICBkYXRhTG9nKCIlc2JjIyV1IiwgaGFzUHJpbnRl
ZCA/ICIsICIgOiAiIiwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgIGhhc1By
aW50ZWQgPSB0cnVlOwogICAgICh2b2lkKWhhc1ByaW50ZWQ7CiAgICAgCiAgICAgZGF0YUxvZygi
KSIpOwogCiAgICAgaWYgKCFza2lwcGVkKSB7CiAgICAgICAgIGlmIChub2RlLmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YSgpKQotICAgICAgICAgICAgZGF0YUxvZygiICBwcmVkaWN0aW5nICVzLCBkb3Vi
bGUgcmF0aW8gJWxmJXMiLCBzcGVjdWxhdGlvblRvU3RyaW5nKG5vZGUudmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKSksIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmRvdWJsZVZv
dGVSYXRpbygpLCBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3Jt
YXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAg
cHJlZGljdGluZyAlcyVzIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCkpLCBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRV
c2VEb3VibGVGb3JtYXQoKSA/ICIsIGZvcmNpbmcgZG91YmxlIiA6ICIiKTsKICAgICAgICAgZWxz
ZSBpZiAobm9kZS5oYXNIZWFwUHJlZGljdGlvbigpKQogICAgICAgICAgICAgZGF0YUxvZygiICBw
cmVkaWN0aW5nICVzIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhub2RlLmdldEhlYXBQcmVkaWN0aW9u
KCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAxMjQzNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2OCw2ICs1NjgsNDIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgdm90ZShF
ZGdlIGVkZ2UsIHVuc2lnbmVkIGJhbGxvdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXQoZWRn
ZSkub3AoKSkgeworICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgY2FzZSBVSW50
MzJUb051bWJlcjoKKyAgICAgICAgICAgIGVkZ2UgPSBhdChlZGdlKS5jaGlsZDEoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChhdChlZGdlKS5vcCgpID09IEdldExvY2FsKQor
ICAgICAgICAgICAgYXQoZWRnZSkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoYmFsbG90KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCB2b3RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGJhbGxvdCkK
KyAgICB7CisgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOworICAg
ICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGls
ZHJlbigpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAgIHZv
dGUobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGJhbGxvdCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwor
ICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKKyAgICAgICAgaWYgKCFub2RlLmNoaWxkMygp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2b3RlKG5vZGUuY2hpbGQzKCksIGJhbGxv
dCk7CisgICAgfQorICAgIAogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTI0MzcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
NSw2ICsyNDUsMTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjaGlsZHJlbi5yZXNldCgpOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IENoZWNrU3RydWN0dXJlKTsKKyAg
ICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmVTZXQoKS5z
aW5nbGV0b25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1fb3AgPSBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDsKKyAgICB9CisgICAgCiAgICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpOwpAQCAtNjUxLDcgKzY1
OCwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmVTZXQoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tTdHJ1Y3R1cmU7CisgICAgICAgIHN3
aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNl
IEZvcndhcmRDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQog
ICAgIAogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEyNDM3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYg
KzExOSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQdXRC
eUlkLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhQ
dXRCeUlkRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAg
ICBtYWNybyhDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEZv
cndhcmRDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIC8qIFRyYW5zaXRp
b24gd2F0Y2hwb2ludHMgYXJlIGEgY29udHJhY3QgYmV0d2VlbiB0aGUgcGFydHkgc2V0dGluZyB0
aGUgd2F0Y2hwb2ludCAqL1wKICAgICAvKiBhbmQgdGhlIHJ1bnRpbWUgc3lzdGVtLCB3aGVyZSB0
aGUgcGFydHkgcHJvbWlzZXMgdGhhdCB0aGUgY2hpbGQgb2JqZWN0IG9uY2UgaGFkICovXAogICAg
IC8qIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRoZSBydW50aW1lIHN5c3RlbSBp
biB0dXJuIHByb21pc2VzIHRoYXQgdGhlICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDEyNDM3MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgdmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmd1bWVudCAtIDEpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1
bWVudCkudmFsaWRhdGUodmFsdWUpKSB7CisgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0ZWRW
YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLnZhbGlkYXRlRm9yRW50cnkodmFsdWUpKSB7CiAjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFp
bGVkIGJlY2F1c2UgYXJndW1lbnQgJXp1IGlzICVzLCBleHBlY3RlZCAiLCBhcmd1bWVudCwgdmFs
dWUuZGVzY3JpcHRpb24oKSk7CiAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5h
cmd1bWVudChhcmd1bWVudCkuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTE5LDcgKzExOSw3
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICghZW50cnkt
Pm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLnZhbGlkYXRlKGV4ZWMtPnJlZ2lzdGVycygp
W2xvY2FsXS5qc1ZhbHVlKCkpKSB7CisgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0ZWRWYWx1
ZXMubG9jYWwobG9jYWwpLnZhbGlkYXRlRm9yRW50cnkoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxd
LmpzVmFsdWUoKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAg
ZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAlenUgaXMgJXMsIGV4cGVj
dGVkICIsIGxvY2FsLCBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLmRlc2NyaXB0
aW9uKCkpOwogICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwp
LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxMjQzNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcyLDYgKzY3Miw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OgogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEZvcndhcmRD
aGVja1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDoKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVy
ZToKQEAgLTc0Niw0MiArNzQ3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZSht
X2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdm90ZShFZGdl
IG5vZGVVc2UsIFZhcmlhYmxlQWNjZXNzRGF0YTo6QmFsbG90IGJhbGxvdCkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAobV9ncmFwaFtub2RlVXNlXS5vcCgpKSB7Ci0gICAgICAgIGNhc2UgVmFsdWVU
b0ludDMyOgotICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgbm9kZVVz
ZSA9IG1fZ3JhcGhbbm9kZVVzZV0uY2hpbGQxKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlVXNlXS5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAg
bV9ncmFwaFtub2RlVXNlXS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHZvdGUoTm9kZSYgbm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpC
YWxsb3QgYmFsbG90KQotICAgIHsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJz
dENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkg
KyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspCi0gICAg
ICAgICAgICAgICAgdm90ZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBiYWxs
b3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIW5vZGUuY2hpbGQxKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZvdGUobm9k
ZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkMigpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7Ci0gICAg
ICAgIGlmICghbm9kZS5jaGlsZDMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdm90
ZShub2RlLmNoaWxkMygpLCBiYWxsb3QpOwotICAgIH0KLSAgICAKICAgICB2b2lkIGRvUm91bmRP
ZkRvdWJsZVZvdGluZygpCiAgICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKQEAgLTc5OCwxNiArNzYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
OwogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90OworICAgICAgICAgICAgICAgIERvdWJs
ZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlz
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKICAg
ICAgICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVmFyaWFibGVBY2Nlc3NEYXRhOjpW
b3RlRG91YmxlOworICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVmFyaWFibGVB
Y2Nlc3NEYXRhOjpWb3RlVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVW
YWx1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQx
KCksIGJhbGxvdCk7Ci0gICAgICAgICAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3Qp
OworICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwor
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAt
ODE1LDE2ICs3ODAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRp
Y3Rpb24oKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGE6OkJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxv
dDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJTcGVjdWxh
dGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQogICAgICAgICAgICAgICAg
ICAgICAmJiAhbV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAg
ICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVEb3VibGU7Cisg
ICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZv
dGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsK
LSAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAgICAg
ICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7CisgICAgICAgICAgICAg
ICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTgzNSw0NiArODAwLDQ2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0g
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90OworICAgICAg
ICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxh
dGlvbihyaWdodCkKICAgICAgICAgICAgICAgICAgICAgJiYgIShOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0p
CiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkp
KQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZvdGVE
b3VibGU7CisgICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vz
c0RhdGE6OlZvdGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVl
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwg
YmFsbG90KTsKLSAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7Cisg
ICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQxKCksIGJhbGxvdCk7CisgICAg
ICAgICAgICAgICAgbV9ncmFwaC52b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIEFyaXRoQWJzOgotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YTo6
QmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwogICAg
ICAgICAgICAgICAgIGlmICghKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpCiAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpKQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJsZUFjY2Vzc0RhdGE6
OlZvdGVEb3VibGU7CisgICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYWxsb3QgPSBWYXJpYWJs
ZUFjY2Vzc0RhdGE6OlZvdGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90
ZVZhbHVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGls
ZDEoKSwgYmFsbG90KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGUobm9kZS5jaGlsZDEo
KSwgYmFsbG90KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGls
ZDEoKSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpWb3RlRG91YmxlKTsKKyAgICAgICAgICAgICAgICBt
X2dyYXBoLnZvdGUobm9kZS5jaGlsZDEoKSwgVm90ZURvdWJsZSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAg
ICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT52b3RlKFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZURvdWJsZSk7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZURvdWJsZSk7
CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlv
bikgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgICAg
ICBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90
ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
dm90ZShWb3RlVmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB2
b3RlKG5vZGUsIFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZVZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLnZvdGUobm9kZSwgVm90ZVZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMjQzNzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjg0LDEzICsxMjg0LDEzIEBAIEZQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZUluZGV4IG5vZGVJbmRleCkKK0dQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZUluZGV4IG5vZGVJbmRleCwgYm9vbCBpc0Zv
cndhcmRTcGVjdWxhdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAg
ZGF0YUxvZygiU3BlY0NlbGxAJWQgICAiLCBub2RlSW5kZXgpOwogI2VuZGlmCiAgICAgaWYgKGlz
S25vd25Ob3RDZWxsKG5vZGVJbmRleCkpIHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQogCkBAIC0xMzE0LDcgKzEzMTQsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAKICAgICAgICAgQVNTRVJU
KChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpIHx8IGluZm8uc3BpbGxGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0Q2VsbCk7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlw
ZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2Uo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9y
KHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihCYWRUeXBl
LCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlcikp
LCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpLCBpc0ZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwpAQCAtMTMzNSw3ICsxMzM1LDcgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBtX2dwcnMubG9j
ayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKICAgICAgICAgaWYg
KCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENv
bmRpdGlvbmFsRGlyZWN0aW9uKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQ
UiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksIGlzRm9yd2FyZFNwZWN1bGF0
aW9uKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVs
ZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsKQEAgLTM0
NzAsNyArMzQ3MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsK
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3Ry
dWN0dXJlU2V0KCkpCiAgICAgICAgICAgICAmJiBpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpKSB7CkBAIC0zNDc4LDEzICszNDc5LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCksIG5v
ZGUub3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAgICAgQVNT
RVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIG5vZGUuc3RydWN0dXJlU2V0KClbMF0pKTsKLSAg
ICAgICAgZWxzZSB7CisgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAx
KSB7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9u
KAorICAgICAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKKyAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5zdHJ1Y3R1cmVTZXQoKVswXSksCisgICAgICAgICAgICAgICAgbm9kZS5v
cCgpID09IEZvcndhcmRDaGVja1N0cnVjdHVyZSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmUuZ3ByKCkpOwpAQCAtMzQ5NCw3ICszNTAx
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAx
OyArK2kpCiAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1B0cihK
SVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKVtp
XSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgpKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKAor
ICAgICAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFz
dCgpKSwKKyAgICAgICAgICAgICAgICBub2RlLm9wKCkgPT0gRm9yd2FyZENoZWNrU3RydWN0dXJl
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTI0MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyNiw3ICsxMzI2
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgIH0KIH0K
IAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbChOb2RlSW5kZXggbm9k
ZUluZGV4KQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbChOb2RlSW5k
ZXggbm9kZUluZGV4LCBib29sIGlzRm9yd2FyZFNwZWN1bGF0aW9uKQogewogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJTcGVjQ2VsbEAlZCAgICIsIG5vZGVJbmRl
eCk7CkBAIC0xMzM5LDcgKzEzMzksNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVDZWxsCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNl
IERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdEludGVnZXIgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
IHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb25XaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgaXNGb3J3YXJkU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgcmV0dXJu
IGFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMzUzLDcgKzEzNTMsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb25XaXRoQ29uZGl0
aW9uYWxEaXJlY3Rpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgaXNGb3J3
YXJkU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQogICAg
ICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKQEAgLTEzNjIs
NyArMTM2Miw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKIAog
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwog
ICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFs
RGlyZWN0aW9uKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpLCBpc0ZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3By
OwogICAgIH0KQEAgLTEzNzgsNyArMTM3OCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAg
IG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciks
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
Z3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBn
cHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7
CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTM4OSw3ICsxMzg5LDcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgIGNhc2UgRGF0YUZvcm1hdERv
dWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0
Qm9vbGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb25XaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgaXNGb3J3YXJkU3BlY3VsYXRpb24pOwogICAgICAgICByZXR1cm4gYWxs
b2NhdGUoKTsKICAgICB9CiAKQEAgLTM0ODUsNyArMzQ4NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsK
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3Ry
dWN0dXJlU2V0KCkpCiAgICAgICAgICAgICAmJiBpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpKSB7CkBAIC0zNDkzLDEzICszNDk0LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCksIG5v
ZGUub3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAgICAgQVNT
RVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIG5vZGUuc3RydWN0dXJlU2V0KClbMF0pKTsKLSAg
ICAgICAgZWxzZSB7CisgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAx
KSB7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9u
KAorICAgICAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKKyAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5zdHJ1Y3R1cmVTZXQoKVswXSksCisgICAgICAgICAgICAgICAgbm9kZS5v
cCgpID09IEZvcndhcmRDaGVja1N0cnVjdHVyZSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmUuZ3ByKCkpOwpAQCAtMzUwOSw3ICszNTE2
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAx
OyArK2kpCiAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1B0cihK
SVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKVtp
XSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgpKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKAor
ICAgICAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFz
dCgpKSwKKyAgICAgICAgICAgICAgICBub2RlLm9wKCkgPT0gRm9yd2FyZENoZWNrU3RydWN0dXJl
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDEyNDM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIHB1YmxpYzoK
ICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludChOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVy
bkZvcm1hdCk7CiAgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoTm9kZUluZGV4KTsK
ICAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShOb2RlSW5kZXgpOwotICAgIEdQUlJlZyBm
aWxsU3BlY3VsYXRlQ2VsbChOb2RlSW5kZXgpOworICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQ2Vs
bChOb2RlSW5kZXgsIGJvb2wgaXNGb3J3YXJkU3BlY3VsYXRpb24gPSBmYWxzZSk7CiAgICAgR1BS
UmVnIGZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGVJbmRleCk7CiAgICAgR2VuZXJhdGVkT3BlcmFu
ZFR5cGUgY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlSW5kZXgpOwogCkBAIC0yMjI4
LDExICsyMjI4LDIyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlv
bldhdGNocG9pbnQoa2luZCwgSlNWYWx1ZVNvdXJjZSgpLCBOb05vZGUpOwogICAgIH0KLSAgICB2
b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKKyAgICAvLyBO
b3RlOiBub3Qgc3BlY2lmeWluZyB0aGUgdmFsdWVSZWNvdmVyeSBhcmd1bWVudCAobGVhdmluZyBp
dCBhcyBWYWx1ZVJlY292ZXJ5KCkpIGltcGxpZXMKKyAgICAvLyB0aGF0IHlvdSd2ZSBlbnN1cmVk
IHRoYXQgdGhlcmUgZXhpc3RzIGEgTW92SGludCBwcmlvciB0byB5b3VyIHVzZSBvZiBmb3J3YXJk
U3BlY3VsYXRpb25DaGVjaygpLgorICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUlu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5
JiB2YWx1ZVJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeSgpKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUlu
ZGV4LCBqdW1wVG9GYWlsKTsKICAgICAgICAgCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAg
ICBpZiAoIXZhbHVlUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHBy
ZWNlZGluZyBub2RlIHdhcyBhIFNldExvY2FsIHdpdGggdGhlIHNhbWUgY29kZSBvcmlnaW4uCisg
ICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9ICZhdChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21f
YmxvY2tdLT5hdChtX2luZGV4SW5CbG9jayAtIDEpKTsKKyAgICAgICAgICAgIEFTU0VSVChzZXRM
b2NhbC0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NFUlQoc2V0TG9jYWwtPmNv
ZGVPcmlnaW4gPT0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHNldExvY2FsSW5kZXhJbkJsb2NrID0g
bV9pbmRleEluQmxvY2sgKyAxOwogICAgICAgICAKICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSAm
YXQobV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoc2V0TG9jYWxJbmRleEluQmxv
Y2spKTsKQEAgLTIyNDUsMTAgKzIyNTYsMTIgQEAgcHVibGljOgogICAgICAgICBpZiAoc2V0TG9j
YWwtPm9wKCkgPT0gRmx1c2ggfHwgc2V0TG9jYWwtPm9wKCkgPT0gUGhhbnRvbSkKICAgICAgICAg
ICAgIHNldExvY2FsID0gJmF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KCsr
c2V0TG9jYWxJbmRleEluQmxvY2spKTsKICAgICAgICAgCi0gICAgICAgIGlmIChoYWRJbnQzMlRv
RG91YmxlKQotICAgICAgICAgICAgQVNTRVJUKGF0KHNldExvY2FsLT5jaGlsZDEoKSkuY2hpbGQx
KCkgPT0gbV9jb21waWxlSW5kZXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlQo
c2V0TG9jYWwtPmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgaWYgKCEhdmFs
dWVSZWNvdmVyeSkgeworICAgICAgICAgICAgaWYgKGhhZEludDMyVG9Eb3VibGUpCisgICAgICAg
ICAgICAgICAgQVNTRVJUKGF0KHNldExvY2FsLT5jaGlsZDEoKSkuY2hpbGQxKCkgPT0gbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVChzZXRM
b2NhbC0+Y2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXgpOworICAgICAgICB9CiAgICAgICAgIEFT
U0VSVChzZXRMb2NhbC0+b3AoKSA9PSBTZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChzZXRMb2Nh
bC0+Y29kZU9yaWdpbiA9PSBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CiAKQEAgLTIy
NTcsMTggKzIyNzAsMjcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgT1NSRXhpdCYgZXhp
dCA9IG1faml0LmNvZGVCbG9jaygpLT5sYXN0T1NSRXhpdCgpOwogICAgICAgICBleGl0Lm1fY29k
ZU9yaWdpbiA9IG5leHROb2RlLT5jb2RlT3JpZ2luOwotICAgICAgICBleGl0Lm1fbGFzdFNldE9w
ZXJhbmQgPSBzZXRMb2NhbC0+bG9jYWwoKTsKICAgICAgICAgCisgICAgICAgIGlmICghdmFsdWVS
ZWNvdmVyeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZXhpdC5tX2xhc3RTZXRPcGVy
YW5kID0gc2V0TG9jYWwtPmxvY2FsKCk7CiAgICAgICAgIGV4aXQubV92YWx1ZVJlY292ZXJ5T3Zl
cnJpZGUgPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUo
c2V0TG9jYWwtPmxvY2FsKCksIHZhbHVlUmVjb3ZlcnkpKTsKICAgICB9Ci0gICAgdm9pZCBmb3J3
YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVt
cHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCisgICAgdm9pZCBm
b3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFs
dWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
anVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkgPSBWYWx1ZVJl
Y292ZXJ5KCkpCiAgICAgewogICAgICAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4
aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKICAgICAgICAgVmVjdG9yPE1hY3Jv
QXNzZW1ibGVyOjpKdW1wLCAxNj4ganVtcFZlY3RvciA9IGp1bXBzVG9GYWlsLmp1bXBzKCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wVmVjdG9yLnNpemUoKTsgKytpKQog
ICAgICAgICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwg
bm9kZUluZGV4LCBqdW1wVmVjdG9yW2ldLCB2YWx1ZVJlY292ZXJ5KTsKICAgICB9CisgICAgdm9p
ZCBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgYm9vbCBpc0ZvcndhcmQpCisgICAgeworICAgICAg
ICBpZiAoaXNGb3J3YXJkKQorICAgICAgICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVG9GYWlsKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlSW5k
ZXgsIGp1bXBUb0ZhaWwpOworICAgIH0KIAogICAgIC8vIENhbGxlZCB3aGVuIHdlIHN0YXRpY2Fs
bHkgZGV0ZXJtaW5lIHRoYXQgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwuCiAgICAgdm9pZCB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1Zh
bHVlUmVncywgTm9kZUluZGV4IG5vZGVJbmRleCkKQEAgLTIyODcsNiArMjMwOSwxNyBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5pbmRleCgpKTsKICAgICB9CisgICAgdm9p
ZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbldpdGhDb25kaXRpb25hbERpcmVjdGlvbihF
eGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZUluZGV4IG5vZGVJbmRl
eCwgYm9vbCBpc0ZvcndhcmQpCisgICAgeworICAgICAgICBBU1NFUlQoYXQobV9jb21waWxlSW5k
ZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKKyNpZiBERkdfRU5B
QkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIlNwZWN1bGF0aXZlSklUIHdhcyB0
ZXJtaW5hdGVkLlxuIik7CisjZW5kaWYKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFs
RGlyZWN0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlSW5kZXgsIG1faml0Lmp1bXAoKSwgaXNG
b3J3YXJkKTsKKyAgICAgICAgbV9jb21waWxlT2theSA9IGZhbHNlOworICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVy
bmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKQEAgLTI5MTIsMTAgKzI5
NDUsMTEgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQs
IEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZl
SklUKiBqaXQsIEVkZ2UgdXNlLCBib29sIGlzRm9yd2FyZFNwZWN1bGF0aW9uID0gZmFsc2UpCiAg
ICAgICAgIDogbV9qaXQoaml0KQogICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4KCkpCiAgICAg
ICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKKyAgICAgICAgLCBtX2lzRm9yd2Fy
ZFNwZWN1bGF0aW9uKGlzRm9yd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1faml0KTsKICAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKQEAg
LTI5MzcsNyArMjk3MSw3IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAg
ICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9n
cHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUNlbGwoaW5kZXgoKSk7CisgICAgICAg
ICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQ2VsbChpbmRleCgpLCBt
X2lzRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwog
ICAgIH0KICAgICAKQEAgLTI5NTAsNiArMjk4NCw3IEBAIHByaXZhdGU6CiAgICAgU3BlY3VsYXRp
dmVKSVQqIG1faml0OwogICAgIE5vZGVJbmRleCBtX2luZGV4OwogICAgIEdQUlJlZyBtX2dwck9y
SW52YWxpZDsKKyAgICBib29sIG1faXNGb3J3YXJkU3BlY3VsYXRpb247CiB9OwogCiBjbGFzcyBT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1Bo
YXNlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitlbnVtIENoZWNrQmFsbG90IHsgVm90ZU90aGVyLCBWb3RlU3RydWN0dXJl
Q2hlY2sgfTsKKworY2xhc3MgU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UoR3JhcGgmIGdy
YXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAic3RydWN0dXJlIGNoZWNrIGhvaXN0aW5nIikK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gJm1fZ3JhcGgubV92
YXJpYWJsZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5pc1Jvb3Qo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5jbGVh
clZvdGVzKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIElkZW50aWZ5IHRoZSBz
ZXQgb2YgdmFyaWFibGVzIHRoYXQgYXJlIGFsd2F5cyBzdWJqZWN0IHRvIHRoZSBzYW1lIHN0cnVj
dHVyZQorICAgICAgICAvLyBjaGVja3MuIEZvciBub3csIG9ubHkgY29uc2lkZXIgbW9ub21vcnBo
aWMgc3RydWN0dXJlIGNoZWNrcyAob25lIHN0cnVjdHVyZSkuCisgICAgICAgIAorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2lu
ZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLT52b3RlKFZvdGVTdHJ1Y3R1cmVDaGVjayk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YXJpYWJsZS0+cHJl
ZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgbm9kZS5zdHJ1Y3R1cmVTZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1
cmU6CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSByZWx5IG9uIHRoZSBmYWN0
IHRoYXQgd2UncmUgdGhlIG9ubHkgb25lcyB3aG8gd291bGQKKyAgICAgICAgICAgICAgICAgICAg
Ly8gaW5zZXJ0IHRoaXMgbm9kZS4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAg
ICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgICAg
ICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIEdldFByb3Bl
cnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNl
cy4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZShu
b2RlLCBWb3RlT3RoZXIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIERp
c2FibGUgc3RydWN0dXJlIGhvaXN0aW5nIG9uIHZhcmlhYmxlcyB0aGF0IGFwcGVhciB0byBtb3N0
bHkgYmUgdXNlZCBpbgorICAgICAgICAvLyBjb250ZXh0cyB3aGVyZSBpdCBkb2Vzbid0IG1ha2Ug
c2Vuc2UuCisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fdmFy
aWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOworICAg
ICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPnZvdGVSYXRpbygpID49IE9wdGlvbnM6OnN0
cnVjdHVyZUNoZWNrVm90ZVJhdGlvRm9ySG9pc3RpbmcoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRh
Pjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQodmFyaWFibGUpOworICAgICAgICAgICAgaWYg
KGl0ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWRlbnRpZnkgdGhlIHNldCBvZiB2YXJpYWJsZXMgdGhhdCBhcmUgbGl2ZSBhY3Jvc3MgYSBz
dHJ1Y3R1cmUgY2xvYmJlci4KKyAgICAgICAgCisgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNj
ZXNzRGF0YSo+IGxpdmUoCisgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9j
a3NbMF0tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChsaXZlLm51
bWJlck9mQXJndW1lbnRzKCkgPT0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpKTsKKyAgICAgICAgICAgIEFTU0VSVChsaXZlLm51bWJlck9mTG9jYWxzKCkgPT0gYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGxpdmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IGluZGV4QXRUYWlsID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbFtpXTsKKyAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOworICAgICAgICAgICAgICAgIGlmIChp
bmRleEF0VGFpbCA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gMDsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbV9n
cmFwaFtpbmRleEF0VGFpbF0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
bGl2ZVtpXSA9IHZhcmlhYmxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKKyAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiaXJ0aC4KKyAgICAgICAgICAgICAg
ICAgICAgbGl2ZS5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobGl2ZS5vcGVyYW5kKG5vZGUubG9j
YWwoKSkpOyAvLyBNdXN0IGJlIGxpdmUuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsaXZl
Lm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsgLy8g
TXVzdCBoYXZlIHRoZSB2YXJpYWJsZSB3ZSBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIGRlYXRoLgorICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQobm9k
ZS5sb2NhbCgpKSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIENGQSdzIG5vdGlvbiBvZiB3aGF0
IGNsb2JiZXJzIHRoZSB3b3JsZC4KKyAgICAgICAgICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAg
ICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwg
bV9ncmFwaFtub2RlLmNoaWxkMigpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihsaXZlKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CisgICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICAgICAg
ICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlR3Jl
YXRlckVxOgorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUVxOiB7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUmIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAg
ICAgICAgICBOb2RlJiByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV07CisgICAgICAgICAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IENv
bXBhcmVFcSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlzQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkuaXNOdWxs
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChu
b2RlLmNoaWxkMigpLmluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKS5pc051bGwo
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVGaW5hbE9iamVjdChsZWZ0LCByaWdodCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
QXJyYXkobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmpl
Y3QoKSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyaWdodC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYmIGxlZnQuc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVBcnJh
eSgpICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0
LnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgbGVmdC5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3Ro
ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGxpdmUpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICAgICAgICAgIGlmICgh
bm9kZS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
IHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZUFy
cmF5U3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpIHx8ICFt
X2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNsb2JiZXIobGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgor
ICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgICAgICAg
ICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAg
ICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaFtjaGls
ZDFdLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgfHwgIWlzQWN0aW9uYWJsZU11dGFi
bGVBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjbG9iYmVyKGxpdmUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFzKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3Vs
YXRlQXJndW1lbnRzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXko
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtj
aGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVp
bnQ4Q2xhbXBlZEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MTZB
cnJheSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
MV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihsaXZlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKKyAgICAgICAg
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6CisgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRCeUlkOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgorICAgICAgICAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbVB1
dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAg
ICAgICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIFJlc29sdmU6
CisgICAgICAgICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICAgICAgICAgICAgICBjYXNl
IFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgICAgICAgICAgICAgIGNhc2UgUmVzb2x2ZUdsb2Jh
bDoKKyAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihsaXZlKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgIT0gUGhpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKworI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZm9yIChIYXNoTWFw
PFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46Oml0ZXJhdG9yIGl0ID0gbV9tYXAuYmVn
aW4oKTsKKyAgICAgICAgICAgICBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgeworICAgICAgICAg
ICAgZGF0YUxvZygiSG9pc3RpbmcgY2hlY2tzIGZvciAlc1xuIiwgbV9ncmFwaC5uYW1lT2ZWYXJp
YWJsZUFjY2Vzc0RhdGEoaXQtPmZpcnN0KSk7CisgICAgICAgIH0KKyNlbmRpZiAvLyBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisKKyAgICAgICAgLy8gTWFrZSBjaGFuZ2Vz
OgorICAgICAgICAvLyAxKSBJZiBhIHZhcmlhYmxlJ3MgbGl2ZSByYW5nZSBkb2VzIG5vdCBzcGFu
IGEgY2xvYmJlciwgdGhlbiBpbmplY3Qgc3RydWN0dXJlCisgICAgICAgIC8vICAgIGNoZWNrcyBi
ZWZvcmUgdGhlIFNldExvY2FsLgorICAgICAgICAvLyAyKSBJZiBhIHZhcmlhYmxlJ3MgbGl2ZSBy
YW5nZSBzcGFucyBhIGNsb2JiZXIgYnV0IGlzIHdhdGNocG9pbnRhYmxlLCB0aGVuCisgICAgICAg
IC8vICAgIGluamVjdCBzdHJ1Y3R1cmUgY2hlY2tzIGJlZm9yZSB0aGUgU2V0TG9jYWwgYW5kIHJl
cGxhY2UgYWxsIG90aGVyIHN0cnVjdHVyZQorICAgICAgICAvLyAgICBjaGVja3Mgb24gdGhhdCB2
YXJpYWJsZSB3aXRoIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzLgorICAgICAgICAK
KyAgICAgICAgSW5zZXJ0aW9uU2V0PE5vZGVJbmRleD4gaW5zZXJ0aW9uU2V0OworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2lu
ZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gSW5zZXJ0IGEgR2V0TG9jYWwgYW5kIGEgQ2hlY2tTdHJ1Y3R1cmUgaW1tZWRpYXRlbHkgZm9s
bG93aW5nIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQsIGlmIHRoZSB2
YXJpYWJsZSB3YXMgYSBjYW5kaWRhdGUgZm9yIHN0cnVjdHVyZSBob2lzdGluZy4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIGJhc2ljIGJsb2NrIHByZXZpb3VzbHkgb25seSBoYWQgdGhl
IFNldEFyZ3VtZW50IGFzIGl0cworICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZS1hdC10
YWlsLCB0aGVuIHJlcGxhY2UgaXQgd2l0aCB0aGlzIEdldExvY2FsLgorICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBD
aGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1fc3Ry
dWN0dXJlKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCAmJiAhaXRlci0+c2Vjb25kLm1fc3Ry
dWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBub2RlLnJlZigpOworCisgICAgICAgICAgICAgICAgICAgIE5vZGUgZ2V0TG9jYWwo
R2V0TG9jYWwsIG5vZGUuY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWwucHJlZGljdCh2YXJpYWJsZS0+cHJlZGljdGlv
bigpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWwucmVmKCk7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBnZXRMb2NhbEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2sgKyAxLCBnZXRMb2NhbEluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1
Y3R1cmUoQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUuY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KGl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkpLCBnZXRMb2NhbEluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUucmVmKCk7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBjaGVja1N0cnVjdHVyZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2sgKyAxLCBjaGVj
a1N0cnVjdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEq
LCBDaGVja0RhdGE+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZCh2YXJpYWJsZSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLm1f
c3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCAmJiAhaXRlci0+c2Vjb25kLm1f
c3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGlu
c2VydCBhIGRlYWQgU2V0TG9jYWwgdG8gdGVsbCBPU1IgdGhhdCB0aGUgY2hpbGQncyB2YWx1ZSBz
aG91bGQKKyAgICAgICAgICAgICAgICAgICAgLy8gYmUgZHJvcHBlZCBpbnRvIHRoaXMgYnl0ZWNv
ZGUgdmFyaWFibGUgaWYgdGhlIENoZWNrU3RydWN0dXJlIGRlY2lkZXMKKyAgICAgICAgICAgICAg
ICAgICAgLy8gdG8gZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgTm9kZSBzZXRMb2NhbChTZXRM
b2NhbCwgbm9kZS5jb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBub2RlLmNoaWxkMSgpLmlu
ZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRleCA9IG1f
Z3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChzZXRMb2Nh
bCk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2Nr
LCBzZXRMb2NhbEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5yZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgRm9yd2FyZENoZWNrU3Ry
dWN0dXJlIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGV4aXQgdG8gdGhlCisgICAgICAgICAg
ICAgICAgICAgIC8vIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gcmVleGVj
dXRpbmcgdGhlIGN1cnJlbnQgb25lLgorICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3Ry
dWN0dXJlKEZvcndhcmRDaGVja1N0cnVjdHVyZSwgbm9kZS5jb2RlT3JpZ2luLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+c2Vjb25kLm1fc3RydWN0dXJlKSksIG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJlZigp
OworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1cmVJbmRleCA9IG1f
Z3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChjaGVja1N0
cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJ
bkJsb2NrLCBjaGVja1N0cnVjdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZTogeworICAgICAgICAgICAgICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIEhhc2hN
YXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQ2hlY2tEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFw
LmZpbmQoY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnNlY29uZC5tX3N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXIt
PnNlY29uZC5tX2lzQ2xvYmJlcmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+
c2Vjb25kLm1fc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpdGVyLT5zZWNvbmQubV9zdHJ1Y3R1cmUgPT0gbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaW5n
bGV0b25TdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUuY29udmVydFRvU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKmJsb2NrKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
bm90aWNlU3RydWN0dXJlQ2hlY2soVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0
YSosIENoZWNrRGF0YT46OkFkZFJlc3VsdCByZXN1bHQgPQorICAgICAgICAgICAgbV9tYXAuYWRk
KHZhcmlhYmxlLCBDaGVja0RhdGEoc3RydWN0dXJlLCBmYWxzZSkpOworICAgICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZC5tX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLm1fc3RydWN0dXJlID0gMDsK
KyAgICB9CisgICAgCisgICAgdm9pZCBub3RpY2VTdHJ1Y3R1cmVDaGVjayhWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICB7CisgICAgICAg
IGlmIChzZXQuc2l6ZSgpICE9IDEpIHsKKyAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNr
KHZhcmlhYmxlLCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBu
b3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc2V0LnNpbmdsZXRvblN0cnVjdHVyZSgpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBub3RpY2VDbG9iYmVyKFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUpCisgICAgeworICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENo
ZWNrRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPQorICAgICAgICAgICAgbV9tYXAuZmluZCh2YXJpYWJs
ZSk7CisgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpdGVyLT5zZWNvbmQubV9pc0Nsb2JiZXJlZCA9IHRydWU7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2xvYmJlcihjb25zdCBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiYg
bGl2ZSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZlLnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGxpdmVbaV07Cisg
ICAgICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgbm90aWNlQ2xvYmJlcih2YXJpYWJsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgc3RydWN0IENoZWNrRGF0YSB7CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7
CisgICAgICAgIGJvb2wgbV9pc0Nsb2JiZXJlZDsKKyAgICAgICAgCisgICAgICAgIENoZWNrRGF0
YSgpCisgICAgICAgICAgICA6IG1fc3RydWN0dXJlKDApCisgICAgICAgICAgICAsIG1faXNDbG9i
YmVyZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ2hl
Y2tEYXRhKFN0cnVjdHVyZSogc3RydWN0dXJlLCBib29sIGlzQ2xvYmJlcmVkKQorICAgICAgICAg
ICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgICAgICAsIG1faXNDbG9iYmVyZWQo
aXNDbG9iYmVyZWQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgSGFz
aE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBDaGVja0RhdGE+IG1fbWFwOworfTsKKworYm9vbCBw
ZXJmb3JtU3RydWN0dXJlQ2hlY2tIb2lzdGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxp
bmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBTdHJ1Y3R1cmUgQ2hlY2sgSG9pc3RpbmcgUGhh
c2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlPihn
cmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0
dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
UGhhc2VfaAorI2RlZmluZSBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2VfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gSG9pc3RzIENoZWNr
U3RydWN0dXJlIG9uIHZhcmlhYmxlcyB0byBhc3NpZ25tZW50cyB0byB0aG9zZSB2YXJpYWJsZXMs
IGlmIGVpdGhlciBvZgorLy8gdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorLy8gQSkgVGhlIHN0cnVj
dHVyZSdzIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBzZXQgaXMgdmFsaWQuCisvLyBCKSBUaGUgc3Bh
biBvZiBjb2RlIHdpdGhpbiB3aGljaCB0aGUgdmFyaWFibGUgaXMgbGl2ZSBoYXMgbm8gZWZmZWN0
cyB0aGF0IG1pZ2h0CisvLyAgICBjbG9iYmVyIHRoZSBzdHJ1Y3R1cmUuCisKK2Jvb2wgcGVyZm9y
bVN0cnVjdHVyZUNoZWNrSG9pc3RpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDEyNDM3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDEwICszNywxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKK2VudW0gRG91YmxlQmFsbG90IHsgVm90ZVZhbHVlLCBWb3RlRG91YmxlIH07CisKIGNs
YXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NE
YXRhPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBCYWxsb3QgeyBWb3RlVmFsdWUsIFZvdGVEb3VibGUg
fTsKLQogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgICAgIDogbV9sb2NhbChzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQog
ICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGlj
OgogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0ZSkK
ICAgICAgICAgLCBtX2lzQ2FwdHVyZWQoZmFsc2UpCiAgICAgICAgICwgbV9pc0FyZ3VtZW50c0Fs
aWFzKGZhbHNlKQorICAgICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChmYWxz
ZSkKICAgICB7CiAgICAgICAgIGNsZWFyVm90ZXMoKTsKICAgICB9CkBAIC02MSw2ICs2Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0
U3RhdGUpCiAgICAgICAgICwgbV9pc0NhcHR1cmVkKGlzQ2FwdHVyZWQpCiAgICAgICAgICwgbV9p
c0FyZ3VtZW50c0FsaWFzKGZhbHNlKQorICAgICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z0ZhaWxlZChmYWxzZSkKICAgICB7CiAgICAgICAgIGNsZWFyVm90ZXMoKTsKICAgICB9CkBAIC05
MCw2ICs5MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzQ2FwdHVyZWQ7CiAgICAg
fQogICAgIAorICAgIGJvb2wgbWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGJvb2wg
ZmFpbGVkKQorICAgIHsKKyAgICAgICAgYm9vbCBuZXdGYWlsZWQgPSBtX3N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdGYWlsZWQgfCBmYWlsZWQ7CisgICAgICAgIGlmIChuZXdGYWlsZWQgPT0gbV9zdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQgPSBuZXdGYWlsZWQ7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIHN0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdGYWlsZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z0ZhaWxlZDsKKyAgICB9CisgICAgCiAgICAgYm9vbCBtZXJnZUlzQXJndW1lbnRzQWxpYXMoYm9v
bCBpc0FyZ3VtZW50c0FsaWFzKQogICAgIHsKICAgICAgICAgYm9vbCBuZXdJc0FyZ3VtZW50c0Fs
aWFzID0gbV9pc0FyZ3VtZW50c0FsaWFzIHwgaXNBcmd1bWVudHNBbGlhczsKQEAgLTEzNiwyMCAr
MTUyLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyVm90ZXMoKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGZpbmQoKSA9PSB0aGlzKTsKLSAgICAgICAgbV92b3Rlc1tWb3RlVmFsdWVdID0gMDsK
LSAgICAgICAgbV92b3Rlc1tWb3RlRG91YmxlXSA9IDA7CisgICAgICAgIG1fdm90ZXNbMF0gPSAw
OworICAgICAgICBtX3ZvdGVzWzFdID0gMDsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKEJh
bGxvdCBiYWxsb3QpCisgICAgdm9pZCB2b3RlKHVuc2lnbmVkIGJhbGxvdCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYmFsbG90KSA8IDIpOworICAgICAgICBB
U1NFUlQoYmFsbG90IDwgMik7CiAgICAgICAgIG1fdm90ZXNbYmFsbG90XSsrOwogICAgIH0KICAg
ICAKLSAgICBkb3VibGUgZG91YmxlVm90ZVJhdGlvKCkKKyAgICBkb3VibGUgdm90ZVJhdGlvKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChmaW5kKCkgPT0gdGhpcyk7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxkb3VibGU+KG1fdm90ZXNbVm90ZURvdWJsZV0pIC8gbV92b3Rlc1tWb3RlVmFs
dWVdOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3ZvdGVzWzFdKSAvIG1f
dm90ZXNbMF07CiAgICAgfQogICAgIAogICAgIGJvb2wgc2hvdWxkVXNlRG91YmxlRm9ybWF0QWNj
b3JkaW5nVG9Wb3RlKCkKQEAgLTE3Niw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaGFzIGJlZW4gdm90ZWQgdG8gYmVjb21lIGEgZG91Ymxl
LCB0aGVuIG1ha2UgaXQgYQogICAgICAgICAvLyBkb3VibGUuCi0gICAgICAgIGlmIChkb3VibGVW
b3RlUmF0aW8oKSA+PSBPcHRpb25zOjpkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3JtYXQoKSkK
KyAgICAgICAgaWYgKHZvdGVSYXRpbygpID49IE9wdGlvbnM6OmRvdWJsZVZvdGVSYXRpb0ZvckRv
dWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yNTAsMTEgKzI2NiwxMiBAQCBwcml2YXRlOgogICAgIFNwZWN1
bGF0ZWRUeXBlIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb247CiAgICAgTm9kZUZsYWdzIG1fZmxh
Z3M7CiAgICAgCi0gICAgZmxvYXQgbV92b3Rlc1syXTsKKyAgICBmbG9hdCBtX3ZvdGVzWzJdOyAv
LyBVc2VkIHByaW1hcmlseSBmb3IgZG91YmxlIHZvdGluZyBidXQgbWF5IGJlIHJldXNlZCBmb3Ig
b3RoZXIgcHVycG9zZXMuCiAgICAgRG91YmxlRm9ybWF0U3RhdGUgbV9kb3VibGVGb3JtYXRTdGF0
ZTsKICAgICAKICAgICBib29sIG1faXNDYXB0dXJlZDsKICAgICBib29sIG1faXNBcmd1bWVudHNB
bGlhczsKKyAgICBib29sIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZDsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHJldmlzaW9uIDEyNDM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHYoZG91YmxlLCBkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSwgMC4z
NSkgXAogICAgIFwKICAgICB2KGRvdWJsZSwgZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9ybWF0
LCAyKSBcCisgICAgdihkb3VibGUsIHN0cnVjdHVyZUNoZWNrVm90ZVJhdGlvRm9ySG9pc3Rpbmcs
IDEpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgbWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVu
UmViYWxhbmNlLCAxMDApIFwKICAgICB2KHVuc2lnbmVkLCBnY01hcmtTdGFja1NlZ21lbnRTaXpl
LCBwYWdlU2l6ZSgpKSBcCg==
</data>
<flag name="review"
          id="165452"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="165456"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>