<?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>83924</bug_id>
          
          <creation_ts>2012-04-13 11:44:10 -0700</creation_ts>
          <short_desc>Don&apos;t rely on fixed offsets to patch get_by_id/put_by_id</short_desc>
          <delta_ts>2012-04-13 12:24:26 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>602282</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-04-13 11:44:10 -0700</bug_when>
    <thetext>Store offsets in the structure stub info, as we do for the DFG JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602288</commentid>
    <comment_count>1</comment_count>
      <attachid>137120</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-04-13 11:48:49 -0700</bug_when>
    <thetext>Created attachment 137120
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602310</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-04-13 12:24:26 -0700</bug_when>
    <thetext>Fixed in r114157</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137120</attachid>
            <date>2012-04-13 11:48:49 -0700</date>
            <delta_ts>2012-04-13 11:51:58 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>83924.patch</filename>
            <type>text/plain</type>
            <size>61749</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDEyLTA0LTEzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBEb24ndCByZWx5IG9uIGZpeGVkIG9mZnNldHMgdG8gcGF0Y2ggZ2V0X2J5X2lk
L3B1dF9ieV9pZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODM5MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTdG9yZSBvZmZzZXRzIGluIHRoZSBzdHJ1Y3R1cmUgc3R1YiBpbmZvLCBhcyB3ZSBkbyBmb3Ig
dGhlIERGRyBKSVQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0
d2Vlbik6CisgICAgICAgICAgICAtIHRoaXMgbWV0aG9kIGNhbiBiZSBzdGF0aWMgKG5vdyB1c2Vk
IGZyb20gUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOjpjb3B5VG9TdHViSW5mbywgd2lsbCBi
ZSByZW1vdmVkIHNvb24hKQorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgICAgICAtIGFkZGVkIG5ldyBmaWVsZHMgZm9yIGJhc2VsaW5lIEpJVCBvZmZzZXRz
LgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVN0dWJDb21w
aWxhdGlvbkluZm86OmNvcHlUb1N0dWJJbmZvKToKKyAgICAgICAgICAgIC0gbW92ZWQgb3V0IGZy
b20gSklUOjpwcml2YXRlQ29tcGlsZS4KKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZSk6CisgICAgICAgICAgICAtIG1vdmVkIG91dCBjb2RlIHRvIFByb3BlcnR5U3R1YkNvbXBpbGF0
aW9uSW5mbzo6Y29weVRvU3R1YkluZm8uCisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAo
UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKToKKyAgICAgICAgICAgIC0gYWRkZWQgaGVscGVy
IGZ1bmN0aW9ucyB0byBpbml0aWFsaXphZSBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8sIHN0
YXRlIHRvIHN0b3JlIG1vcmUgb2Zmc2V0IGluZm8uCisgICAgICAgICAgICAtIHJlbW92ZWQgbWFu
eSBvZmZzZXRzLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9tZXRob2RfY2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRT
bG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
cGF0Y2hHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OkpJVDo6cGF0Y2hQdXRCeUlkUmVwbGFj
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRQ
YXRjaEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKToKKyAg
ICAgICAgICAgIC0gY2hhbmdlZCBjb2RlIGdlbmVyYXRpb24gdG8gdXNlIG5ldyBpbnRlcmZhY2Ug
dG8gc3RvcmUgaW5mbyBvbiBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8uCisgICAgICAgICAg
ICAtIGNoYW5nZWQgcmVwYXRjaCBmdW5jdGlvbnMgdG8gcmVhZCBvZmZzZXRzIGZyb20gdGhlIHN0
cnVjdHVyZSBzdHViIGluZm8uCisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbWV0aG9kX2NoZWNrKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVHZXRCeUlkU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnBhdGNoR2V0QnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpKSVQ6OnBhdGNo
UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hH
ZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
UHJvdG8pOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAoSlND
OjpKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6SklUOjpyZXNldFBhdGNo
UHV0QnlJZCk6CisgICAgICAgICAgICAtIGNoYW5nZWQgY29kZSBnZW5lcmF0aW9uIHRvIHVzZSBu
ZXcgaW50ZXJmYWNlIHRvIHN0b3JlIGluZm8gb24gUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZv
LgorICAgICAgICAgICAgLSBjaGFuZ2VkIHJlcGF0Y2ggZnVuY3Rpb25zIHRvIHJlYWQgb2Zmc2V0
cyBmcm9tIHRoZSBzdHJ1Y3R1cmUgc3R1YiBpbmZvLgorCiAyMDEyLTA0LTEyICBCZW5qYW1pbiBQ
b3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgcmVwbGFjZVVz
aW5nU3RyaW5nU2VhcmNoKCkgZm9yIGNhc2Ugb2YgYSBzaW5nbGUgY2hhcmFjdGVyIHNlYXJjaFZh
bHVlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTE0MDM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU2Myw3ICs1NjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICBwdHJkaWZmX3QgZGlmZmVyZW5jZUJldHdlZW4o
VCBmcm9tLCBVIHRvKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgZGlmZmVyZW5jZUJldHdlZW4oVCBm
cm9tLCBVIHRvKQogICAgIHsKICAgICAgICAgcmV0dXJuIEFzc2VtYmxlclR5cGU6OmdldERpZmZl
cmVuY2VCZXR3ZWVuTGFiZWxzKGZyb20ubV9sYWJlbCwgdG8ubV9sYWJlbCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgJKHJldmlzaW9uIDExNDAzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNiArMjEyLDMwIEBA
IG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgICAgICB9IGRmZzsKICAgICAgICAgICAg
IHN0cnVjdCB7CisgICAgICAgICAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCBzdHJ1Y3R1cmVUb0NvbXBh
cmU7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90IHN0cnVjdHVyZUNoZWNrOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90IGRpc3BsYWNl
bWVudExhYmVsOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgZGlzcGxh
Y2VtZW50TGFiZWwxOworICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCBkaXNwbGFjZW1l
bnRMYWJlbDI7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgcHV0UmVz
dWx0OworICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCBjb2xkUGF0aEJlZ2luOworICAg
ICAgICAgICAgICAgICAgICB9IGdldDsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGludDE2X3Qgc3RydWN0dXJlVG9Db21wYXJlOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90IGRpc3BsYWNlbWVu
dExhYmVsOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgZGlzcGxhY2Vt
ZW50TGFiZWwxOworICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCBkaXNwbGFjZW1lbnRM
YWJlbDI7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgfSBwdXQ7CisgICAgICAgICAgICAg
ICAgfSB1OworCiAgICAgICAgICAgICB9IGJhc2VsaW5lOwogICAgICAgICB9IHBhdGNoOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxMTQwMzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNyw2ICs1
MTcsNDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQog
CitBTFdBWVNfSU5MSU5FIHZvaWQgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvOjpjb3B5VG9T
dHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywgTGlua0J1ZmZlciAmbGlua0J1ZmZlcikK
K3sKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpOworICAgIGluZm8uYnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7Cisg
ICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoY2FsbFJl
dHVybkxvY2F0aW9uKTsKKyAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihob3RQYXRoQmVnaW4pOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIE1l
dGhvZENoZWNrOgorICAgICAgICBBU1NFUlRfSklUX09GRlNFVChNYWNyb0Fzc2VtYmxlcjo6ZGlm
ZmVyZW5jZUJldHdlZW4obWV0aG9kQ2hlY2tTdHJ1Y3R1cmVUb0NvbXBhcmUsIG1ldGhvZENoZWNr
UHJvdG9PYmopLCBKSVQ6OnBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaik7CisgICAgICAg
IEFTU0VSVF9KSVRfT0ZGU0VUKE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbihtZXRo
b2RDaGVja1N0cnVjdHVyZVRvQ29tcGFyZSwgbWV0aG9kQ2hlY2tQcm90b1N0cnVjdHVyZVRvQ29t
cGFyZSksIEpJVDo6cGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0KTsKKyAgICAgICAg
QVNTRVJUX0pJVF9PRkZTRVQoTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuKG1ldGhv
ZENoZWNrU3RydWN0dXJlVG9Db21wYXJlLCBtZXRob2RDaGVja1B1dEZ1bmN0aW9uKSwgSklUOjpw
YXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24pOworICAgICAgICAvLyBObyBicmVhayAt
IGZhbGwgdGhyb3VnaCB0byBHZXRCeUlkLgorICAgIGNhc2UgR2V0QnlJZDogeworICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihob3RQYXRoQmVnaW4pOworICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0
cnVjdHVyZVRvQ29tcGFyZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXRTdHJ1Y3R1
cmVUb0NvbXBhcmUpKTsKKyAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1
cmVDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0
aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXRTdHJ1Y3R1cmVDaGVjaykp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQu
ZGlzcGxhY2VtZW50TGFiZWwgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0RGlzcGxh
Y2VtZW50TGFiZWwpKTsKKyNlbHNlCisgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUudS5nZXQu
ZGlzcGxhY2VtZW50TGFiZWwxID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGdldERpc3Bs
YWNlbWVudExhYmVsMSkpOworICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmRpc3Bs
YWNlbWVudExhYmVsMiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
aG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXREaXNwbGFjZW1l
bnRMYWJlbDIpKTsKKyNlbmRpZgorICAgICAgICBpbmZvLnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoaG90UGF0
aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihnZXRQdXRSZXN1bHQpKTsKKyAg
ICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luID0gTWFjcm9Bc3Nl
bWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2V0
Q29sZFBhdGhCZWdpbiksIGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsUmV0dXJuTG9jYXRpb24p
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoaG90UGF0aEJlZ2luKTsKKyAgICAgICAgaW5mby5wYXRjaC5iYXNlbGluZS51LnB1dC5zdHJ1
Y3R1cmVUb0NvbXBhcmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHV0U3RydWN0dXJl
VG9Db21wYXJlKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaW5mby5wYXRjaC5iYXNl
bGluZS51LnB1dC5kaXNwbGFjZW1lbnRMYWJlbCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIoaG90UGF0aEJlZ2luTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihwdXREaXNwbGFjZW1lbnRMYWJlbCkpOworI2Vsc2UKKyAgICAgICAgaW5mby5wYXRjaC5iYXNl
bGluZS51LnB1dC5kaXNwbGFjZW1lbnRMYWJlbDEgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGhvdFBhdGhCZWdpbkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YocHV0RGlzcGxhY2VtZW50TGFiZWwxKSk7CisgICAgICAgIGluZm8ucGF0Y2guYmFzZWxpbmUu
dS5wdXQuZGlzcGxhY2VtZW50TGFiZWwyID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihob3RQYXRoQmVnaW5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHB1
dERpc3BsYWNlbWVudExhYmVsMikpOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KK30K
KwogSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0
eUNoZWNrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAjaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKQEAgLTY2NCwxMyArNzA0LDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21w
aWxlKENvZGVQdHIqIGZ1bgogICAgIH0KIAogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0
cnVjdHVyZVN0dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlv
bkluZm8uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBt
X2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSk7Ci0gICAgICAgIEFTU0VSVChtX3Byb3Bl
cnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgaW5mby5ieXRlY29kZUluZGV4ID0g
bV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4OwotICAgICAg
ICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9w
ZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwotICAgICAg
ICBpbmZvLmhvdFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwotICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7
ICsraSkKKyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5VG9T
dHViSW5mbyhtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSksIHBhdGNoQnVmZmVyKTsK
ICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAg
Q2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTE0MDM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQAogI2Rl
ZmluZSBKSVRfQ0xBU1NfQUxJR05NRU5UCiAjZW5kaWYKIAotI2RlZmluZSBBU1NFUlRfSklUX09G
RlNFVF9VTlVTRUQodmFyaWFibGUsIGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NB
R0VfVU5VU0VEKHZhcmlhYmxlLCBhY3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0IFwiJXNc
IiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8aW50Pihl
eHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7CiAjZGVmaW5lIEFTU0VSVF9KSVRf
T0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4
cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhw
ZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVh
bCkpOwogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCkBAIC0xNDcsMTcgKzE0NiwxMDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9OwogCisgICAgZW51bSBQcm9wZXJ0eVN0dWJH
ZXRCeUlkX1QgeyBQcm9wZXJ0eVN0dWJHZXRCeUlkIH07CisgICAgZW51bSBQcm9wZXJ0eVN0dWJQ
dXRCeUlkX1QgeyBQcm9wZXJ0eVN0dWJQdXRCeUlkIH07CisKICAgICBzdHJ1Y3QgUHJvcGVydHlT
dHViQ29tcGlsYXRpb25JbmZvIHsKKyAgICAgICAgZW51bSBUeXBlIHsgR2V0QnlJZCwgUHV0QnlJ
ZCwgTWV0aG9kQ2hlY2sgfSBtX3R5cGU7CisgICAgCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXg7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhvdFBhdGhCZWdpbjsKLSAgICAgICAgCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgZ2V0U3RydWN0dXJlVG9Db21wYXJl
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBnZXRTdHJ1Y3R1cmVDaGVjazsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBn
ZXREaXNwbGFjZW1lbnRMYWJlbDsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxDb21wYWN0IGdldERpc3BsYWNlbWVudExhYmVsMTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbENvbXBhY3QgZ2V0RGlzcGxhY2VtZW50TGFiZWwyOworI2VuZGlmCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBnZXRQdXRSZXN1bHQ7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBnZXRDb2xkUGF0aEJlZ2luOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsUHRyIHB1dFN0cnVjdHVyZVRvQ29tcGFyZTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgcHV0RGlzcGxhY2VtZW50TGFiZWw7
CisjZWxzZQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgcHV0RGlzcGxhY2Vt
ZW50TGFiZWwxOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgcHV0RGlzcGxh
Y2VtZW50TGFiZWwyOworI2VuZGlmCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQ
dHIgbWV0aG9kQ2hlY2tTdHJ1Y3R1cmVUb0NvbXBhcmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxQdHIgbWV0aG9kQ2hlY2tQcm90b09iajsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbFB0ciBtZXRob2RDaGVja1Byb3RvU3RydWN0dXJlVG9Db21wYXJlOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1ldGhvZENoZWNrUHV0RnVuY3Rpb247
CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9u
SW5mbygpCiAgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQogICAgICAgICB7CiAgICAgICAgIH0KICNlbmRpZgorCisKKyAgICAg
ICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YkdldEJ5SWRfVCwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhvdFBhdGhCZWdpbiwK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJl
bFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN0cnVjdHVyZUNo
ZWNrLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCwg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHB1dFJlc3VsdCkKKyNlbHNlCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZSwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxDb21wYWN0
IGRpc3BsYWNlbWVudExhYmVsMSwgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbENvbXBhY3QgZGlz
cGxhY2VtZW50TGFiZWwyLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgcHV0UmVzdWx0KQorI2VuZGlm
CisgICAgICAgICAgICA6IG1fdHlwZShHZXRCeUlkKQorICAgICAgICAgICAgLCBieXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIGhvdFBhdGhCZWdpbihob3RQYXRoQmVn
aW4pCisgICAgICAgICAgICAsIGdldFN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBh
cmUpCisgICAgICAgICAgICAsIGdldFN0cnVjdHVyZUNoZWNrKHN0cnVjdHVyZUNoZWNrKQorI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAsIGdldERpc3BsYWNlbWVudExhYmVsKGRpc3Bs
YWNlbWVudExhYmVsKQorI2Vsc2UKKyAgICAgICAgICAgICwgZ2V0RGlzcGxhY2VtZW50TGFiZWwx
KGRpc3BsYWNlbWVudExhYmVsMSkKKyAgICAgICAgICAgICwgZ2V0RGlzcGxhY2VtZW50TGFiZWwy
KGRpc3BsYWNlbWVudExhYmVsMikKKyNlbmRpZgorICAgICAgICAgICAgLCBnZXRQdXRSZXN1bHQo
cHV0UmVzdWx0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBQcm9wZXJ0eVN0dWJD
b21waWxhdGlvbkluZm8oUHJvcGVydHlTdHViUHV0QnlJZF9ULCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaG90UGF0aEJlZ2luLAorI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRv
Q29tcGFyZSwgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsKQor
I2Vsc2UKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJl
VG9Db21wYXJlLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwx
LCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwyKQorI2VuZGlm
CisgICAgICAgICAgICA6IG1fdHlwZShQdXRCeUlkKQorICAgICAgICAgICAgLCBieXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIGhvdFBhdGhCZWdpbihob3RQYXRoQmVn
aW4pCisgICAgICAgICAgICAsIHB1dFN0cnVjdHVyZVRvQ29tcGFyZShzdHJ1Y3R1cmVUb0NvbXBh
cmUpCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICwgcHV0RGlzcGxhY2VtZW50TGFi
ZWwoZGlzcGxhY2VtZW50TGFiZWwpCisjZWxzZQorICAgICAgICAgICAgLCBwdXREaXNwbGFjZW1l
bnRMYWJlbDEoZGlzcGxhY2VtZW50TGFiZWwxKQorICAgICAgICAgICAgLCBwdXREaXNwbGFjZW1l
bnRMYWJlbDIoZGlzcGxhY2VtZW50TGFiZWwyKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgc2xvd0Nhc2VJbmZvKFByb3BlcnR5U3R1YkdldEJ5SWRfVCwgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGNvbGRQYXRoQmVnaW4sIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gR2V0QnlJZCB8fCBt
X3R5cGUgPT0gTWV0aG9kQ2hlY2spOworICAgICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uID0g
Y2FsbDsKKyAgICAgICAgICAgIGdldENvbGRQYXRoQmVnaW4gPSBjb2xkUGF0aEJlZ2luOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBzbG93Q2FzZUluZm8oUHJvcGVydHlTdHViUHV0QnlJZF9U
LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQobV90eXBlID09IFB1dEJ5SWQpOworICAgICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uID0g
Y2FsbDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWRkTWV0aG9kQ2hlY2tJbmZvKE1hY3Jv
QXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlLCBNYWNyb0Fzc2VtYmxl
cjo6RGF0YUxhYmVsUHRyIHByb3RvT2JqLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHBy
b3RvU3RydWN0dXJlVG9Db21wYXJlLCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHB1dEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBtX3R5cGUgPSBNZXRob2RDaGVjazsKKyAg
ICAgICAgICAgIG1ldGhvZENoZWNrU3RydWN0dXJlVG9Db21wYXJlID0gc3RydWN0dXJlVG9Db21w
YXJlOworICAgICAgICAgICAgbWV0aG9kQ2hlY2tQcm90b09iaiA9IHByb3RvT2JqOworICAgICAg
ICAgICAgbWV0aG9kQ2hlY2tQcm90b1N0cnVjdHVyZVRvQ29tcGFyZSA9IHByb3RvU3RydWN0dXJl
VG9Db21wYXJlOworICAgICAgICAgICAgbWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IHB1dEZ1bmN0
aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVT
dHViSW5mbyYgaW5mbywgTGlua0J1ZmZlciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKICAgICBz
dHJ1Y3QgU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyB7CkBAIC0xODcsNiArMjc3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklU
IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOworICAgICAgICBmcmllbmQgc3Ry
dWN0IFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbzsKIAogICAgICAgICB1c2luZyBNYWNyb0Fz
c2VtYmxlcjo6SnVtcDsKICAgICAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwpA
QCAtMzg5LDQyICs0ODAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJp
bmFyeURvdWJsZU9wKE9wY29kZUlELCB1bnNpZ25lZCBkc3QsIHVuc2lnbmVkIG9wMSwgdW5zaWdu
ZWQgb3AyLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5v
dEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMgPSB0cnVlLCBib29sIG9wMklzSW5SZWdp
c3RlcnMgPSB0cnVlKTsKIAogI2lmIENQVShYODYpCi0gICAgICAgIC8vIFRoZXNlIGFyY2hpdGVj
dHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29t
bWVudCBvbiBvcF9wdXRfYnlfaWQuCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZz
ZXRQdXRCeUlkU3RydWN0dXJlID0gNzsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEgPSAyMjsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIgPSAyODsKLSAgICAgICAg
Ly8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBw
YXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX2dldF9ieV9pZC4KLSAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUgPSA3OwotICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSAxMzsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEg
PSAxOTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0
eU1hcE9mZnNldDIgPSAyMjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdl
dEJ5SWRQdXRSZXN1bHQgPSAyMjsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDQ0Owot
I2Vsc2UKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGwgPSA0MDsKLSNlbmRpZgogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDY7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAxMTsKICAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAxODsKICAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSAyOTsKICNlbGlm
IENQVShBUk1fVFJBRElUSU9OQUwpCi0gICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVj
aWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBv
cF9wdXRfYnlfaWQuCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlk
U3RydWN0dXJlID0gNDsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5
SWRQcm9wZXJ0eU1hcE9mZnNldDEgPSAyMDsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIgPSAyODsKLSAgICAgICAgLy8gVGhlc2Ug
YXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAt
IHNlZSBjb21tZW50IG9uIG9wX2dldF9ieV9pZC4KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUgPSA0OwotICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSAxNjsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEgPSAyMDsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNl
dDIgPSAyODsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRS
ZXN1bHQgPSAzNjsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgICAgICAjZXJyb3Ig
Ik9QQ09ERV9TQU1QTElORyBpcyBub3QgeWV0IHN1cHBvcnRlZCIKLSNlbHNlCi0gICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gNDg7Ci0jZW5k
aWYKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1
bXAgPSAxMjsKIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hl
Y2tQcm90b09iaiA9IDEyOwpAQCAtNDQ3LDIxICs1MDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRJbnN0cnVjdGlvblNwYWNlID0g
MzY7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkQ29uc3RhbnRTcGFj
ZSA9IDQ7CiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0
dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21t
ZW50IG9uIG9wX3B1dF9ieV9pZC4KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dFB1dEJ5SWRTdHJ1Y3R1cmUgPSAxMDsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEgPSAzNjsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIgPSA0ODsKLSAgICAgICAg
Ly8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBw
YXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX2dldF9ieV9pZC4KLSAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUgPSAxMDsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlID0gMjY7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQx
ID0gMjg7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVy
dHlNYXBPZmZzZXQyID0gMzA7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRH
ZXRCeUlkUHV0UmVzdWx0ID0gMzI7Ci0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICAg
ICAgI2Vycm9yICJPUENPREVfU0FNUExJTkcgaXMgbm90IHlldCBzdXBwb3J0ZWQiCi0jZWxzZQot
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9
IDUyOwotI2VuZGlmCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRPcENhbGxD
b21wYXJlVG9KdW1wID0gMTY7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dE1ldGhvZENoZWNrUHJvdG9PYmogPSAyNDsKQEAgLTQ4NSw1MiArNTMxLDE3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlUHV0QnlJZENvbnN0YW50
U3BhY2UgPSA0OwogI2VsaWYgQ1BVKE1JUFMpCiAjaWYgV1RGX01JUFNfSVNBKDEpCi0gICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0gMTY7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQx
ID0gNTY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVy
dHlNYXBPZmZzZXQyID0gNzI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRH
ZXRCeUlkU3RydWN0dXJlID0gMTY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZz
ZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDQ4OwotICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSA9IDU2OwotICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiA9IDc2Owot
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDk2
OwotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgICAgICNlcnJvciAiT1BDT0RFX1NB
TVBMSU5HIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgotI2Vsc2UKLSAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSA2ODsKLSNlbmRpZgogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDMyOwog
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9
IDMyOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90
b1N0cnVjdCA9IDU2OwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9k
Q2hlY2tQdXRGdW5jdGlvbiA9IDg4OwogI2Vsc2UgLy8gV1RGX01JUFNfSVNBKDEpCi0gICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0gMTI7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQx
ID0gNDg7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVy
dHlNYXBPZmZzZXQyID0gNjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRH
ZXRCeUlkU3RydWN0dXJlID0gMTI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZz
ZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDQ0OwotICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSA9IDQ4OwotICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiA9IDY0Owot
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDgw
OwotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgICAgICNlcnJvciAiT1BDT0RFX1NB
TVBMSU5HIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgotI2Vsc2UKLSAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSA2ODsKLSNlbmRpZgogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDMyOwog
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9
IDMyOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90
b1N0cnVjdCA9IDUyOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9k
Q2hlY2tQdXRGdW5jdGlvbiA9IDg0OwogI2VuZGlmCiAjZWxpZiBDUFUoU0g0KQotICAgICAgIC8v
IFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0
Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9wdXRfYnlfaWQuCi0gICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlID0gNjsKLSAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDI0OwotICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSA9IDY7Ci0gICAg
ICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFi
bGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9nZXRfYnlfaWQuCi0gICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDEwOwotICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0
ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVz
dWx0ID0gMjQ7Ci0KICAgICAgICAgLy8gc2VxdWVuY2VPcENhbGwKICAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzZXF1ZW5jZU9wQ2FsbEluc3RydWN0aW9uU3BhY2UgPSAxMjsKICAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbENvbnN0YW50U3BhY2UgPSAyOwpAQCAtNTQ3LDE3
ICs1NTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1
ZW5jZVB1dEJ5SWRJbnN0cnVjdGlvblNwYWNlID0gMzY7CiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgc2VxdWVuY2VQdXRCeUlkQ29uc3RhbnRTcGFjZSA9IDU7CiAKLSAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEgPSAyMDsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIg
PSAyMjsKLQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3Bl
cnR5TWFwT2Zmc2V0MSA9IDIwOwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiA9IDI2OwotCi0jaWYgRU5BQkxFKE9QQ09ERV9TQU1Q
TElORykKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGwgPSAwOyAvLyBGSU1YRQotI2Vsc2UKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAzNDsKLSNlbmRpZgogICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDQ7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAxMjsKQEAg
LTYwOCwxOSArNjA4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29tcGlsZVB1
dERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgdmFsdWUsIHNpemVfdCBj
YWNoZWRPZmZzZXQpOwogCiAjaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgLy8gVGhlc2UgYXJjaGl0
ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBj
b21tZW50IG9uIG9wX3B1dF9ieV9pZC4KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSAxMDsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDMxOwotICAgICAgICAvLyBUaGVzZSBh
cmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0g
c2VlIGNvbW1lbnQgb24gb3BfZ2V0X2J5X2lkLgotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDEwOwotICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSAyMDsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDI4OwotICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDI4Owot
I2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gNzI7Ci0jZWxzZQotICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDYyOwotI2VuZGlmCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0g
OTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90
b09iaiA9IDIwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMTQwMzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjAsMTAgKzEyMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX21ldGhvZF9jaGVjayhJbnN0
cnVjdGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwog
ICAgIEp1bXAgbWF0Y2ggPSBqdW1wKCk7CiAgICAgCi0gICAgQVNTRVJUX0pJVF9PRkZTRVRfVU5V
U0VEKHByb3RvT2JqLCBkaWZmZXJlbmNlQmV0d2VlbihpbmZvLnN0cnVjdHVyZVRvQ29tcGFyZSwg
cHJvdG9PYmopLCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmopOwotICAgIEFTU0VSVF9K
SVRfT0ZGU0VUKGRpZmZlcmVuY2VCZXR3ZWVuKGluZm8uc3RydWN0dXJlVG9Db21wYXJlLCBwcm90
b1N0cnVjdHVyZVRvQ29tcGFyZSksIHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCk7
Ci0gICAgQVNTRVJUX0pJVF9PRkZTRVRfVU5VU0VEKHB1dEZ1bmN0aW9uLCBkaWZmZXJlbmNlQmV0
d2VlbihpbmZvLnN0cnVjdHVyZVRvQ29tcGFyZSwgcHV0RnVuY3Rpb24pLCBwYXRjaE9mZnNldE1l
dGhvZENoZWNrUHV0RnVuY3Rpb24pOwotICAgIAogICAgIC8vIExpbmsgdGhlIGZhaWx1cmUgY2Fz
ZXMgaGVyZS4KICAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKHRoaXMpOwogICAgIHByb3RvU3RydWN0
dXJlQ2hlY2subGluayh0aGlzKTsKQEAgLTEzOSw2ICsxMzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9tZXRob2RfY2hlY2soSW5zdHJ1Y3RpCiAgICAgCiAgICAgLy8gV2UndmUgYWxyZWFkeSBnZW5l
cmF0ZWQgdGhlIGZvbGxvd2luZyBnZXRfYnlfaWQsIHNvIG1ha2Ugc3VyZSBpdCdzIHNraXBwZWQg
b3Zlci4KICAgICBtX2J5dGVjb2RlT2Zmc2V0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lk
KTsKKworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8ubGFzdCgpLmFkZE1ldGhv
ZENoZWNrSW5mbyhpbmZvLnN0cnVjdHVyZVRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0
dXJlVG9Db21wYXJlLCBwdXRGdW5jdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9t
ZXRob2RfY2hlY2soSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTMyOSwyNiArMzI3LDIwIEBAIHZvaWQgSklU
Ojpjb21waWxlR2V0QnlJZEhvdFBhdGgoKQogICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVO
Q0Uoc2VxdWVuY2VHZXRCeUlkSG90UGF0aCk7CiAgICAgCiAgICAgTGFiZWwgaG90UGF0aEJlZ2lu
KHRoaXMpOwotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFByb3Bl
cnR5U3R1YkNvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRp
b25JbmZvLmxhc3QoKS5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZU9mZnNldDsKLSAgICBtX3By
b3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmxhc3QoKS5ob3RQYXRoQmVnaW4gPSBob3RQYXRo
QmVnaW47CiAgICAgCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBK
dW1wIHN0cnVjdHVyZUNoZWNrID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBU
cnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRT
dHJ1Y3R1cmUpKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJlQ2hlY2spOwotICAgIEFTU0VS
VF9KSVRfT0ZGU0VUKGRpZmZlcmVuY2VCZXR3ZWVuKGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9D
b21wYXJlKSwgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlKTsKLSAgICBBU1NFUlRfSklUX09G
RlNFVChkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRoQmVnaW4sIHN0cnVjdHVyZUNoZWNrKSwgcGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgCiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlZ1QyKTsK
ICAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsMSA9IGxvYWRQdHJXaXRoQ29t
cGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1QyLCBwYXRjaEdldEJ5SWREZWZhdWx0
T2Zmc2V0KSwgcmVnVDApOyAvLyBwYXlsb2FkCi0gICAgQVNTRVJUX0pJVF9PRkZTRVRfVU5VU0VE
KGRpc3BsYWNlbWVudExhYmVsMSwgZGlmZmVyZW5jZUJldHdlZW4oaG90UGF0aEJlZ2luLCBkaXNw
bGFjZW1lbnRMYWJlbDEpLCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEpOwog
ICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwyID0gbG9hZFB0cldpdGhDb21w
YWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDIsIHBhdGNoR2V0QnlJZERlZmF1bHRP
ZmZzZXQpLCByZWdUMSk7IC8vIHRhZwotICAgIEFTU0VSVF9KSVRfT0ZGU0VUX1VOVVNFRChkaXNw
bGFjZW1lbnRMYWJlbDIsIGRpZmZlcmVuY2VCZXR3ZWVuKGhvdFBhdGhCZWdpbiwgZGlzcGxhY2Vt
ZW50TGFiZWwyKSwgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQyKTsKICAgICAK
ICAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7Ci0gICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlmZmVy
ZW5jZUJldHdlZW4oaG90UGF0aEJlZ2luLCBwdXRSZXN1bHQpLCBwYXRjaE9mZnNldEdldEJ5SWRQ
dXRSZXN1bHQpOwogICAgIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNl
R2V0QnlJZEhvdFBhdGgpOworCisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5h
cHBlbmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKFByb3BlcnR5U3R1YkdldEJ5SWQsIG1f
Ynl0ZWNvZGVPZmZzZXQsIGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBzdHJ1Y3R1
cmVDaGVjaywgZGlzcGxhY2VtZW50TGFiZWwxLCBkaXNwbGFjZW1lbnRMYWJlbDIsIHB1dFJlc3Vs
dCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CkBAIC0zNzMsOSArMzY1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50
IGRzdAogICAgIAogICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRC
eUlkU2xvd0Nhc2UpOwogICAgIAotI2lmbmRlZiBOREVCVUcKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luKHRoaXMpOwotI2VuZGlmCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgaXNNZXRo
b2RDaGVjayA/IGN0aV9vcF9nZXRfYnlfaWRfbWV0aG9kX2NoZWNrIDogY3RpX29wX2dldF9ieV9p
ZCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEsIHJlZ1QwKTsKICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGlkZW50KSk7CkBAIC0zODMsMTAgKzM3Myw4IEBA
IHZvaWQgSklUOjpjb21waWxlR2V0QnlJZFNsb3dDYXNlKGludCBkc3QKICAgICAKICAgICBFTkRf
VU5JTlRFUlJVUFRFRF9TRVFVRU5DRV9GT1JfUFVUKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlLCBk
c3QpOwogICAgIAotICAgIEFTU0VSVF9KSVRfT0ZGU0VUKGRpZmZlcmVuY2VCZXR3ZWVuKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpLCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwotICAgIAog
ICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQg
dG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGls
YXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KytdLmNhbGxSZXR1cm5M
b2NhdGlvbiA9IGNhbGw7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oUHJvcGVydHlTdHVi
R2V0QnlJZCwgY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDA1LDE0ICszOTMs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIEJFR0lO
X1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKICAgICAKICAgICBMYWJl
bCBob3RQYXRoQmVnaW4odGhpcyk7Ci0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5m
by5hcHBlbmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fcHJvcGVydHlB
Y2Nlc3NDb21waWxhdGlvbkluZm8ubGFzdCgpLmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlT2Zm
c2V0OwotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8ubGFzdCgpLmhvdFBhdGhC
ZWdpbiA9IGhvdFBhdGhCZWdpbjsKICAgICAKICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0
aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIHBsYW50cyBhIDMyYml0IGltbWVkaWF0ZSwgaW4gb3Jk
ZXIgdGhhdCBpdCBjYW4gYmUgcGF0Y2hlZCBvdmVyLgogICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1
cmVUb0NvbXBhcmU7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9D
b21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJ
ZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwotICAgIEFTU0VSVF9KSVRfT0ZGU0VUKGRpZmZlcmVuY2VC
ZXR3ZWVuKGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlKSwgcGF0Y2hPZmZzZXRQdXRC
eUlkU3RydWN0dXJlKTsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVnVDEpOwogICAgIERhdGFMYWJlbDMyIGRp
c3BsYWNlbWVudExhYmVsMSA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMiwg
QWRkcmVzcyhyZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOyAvLyBwYXlsb2FkCkBA
IC00MjEsOSArNDA1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9u
KgogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiAKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMiwgcmVnVDEsIHJlZ1QyLCBTaG91bGRGaWx0
ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgCi0gICAg
QVNTRVJUX0pJVF9PRkZTRVRfVU5VU0VEKGRpc3BsYWNlbWVudExhYmVsMSwgZGlmZmVyZW5jZUJl
dHdlZW4oaG90UGF0aEJlZ2luLCBkaXNwbGFjZW1lbnRMYWJlbDEpLCBwYXRjaE9mZnNldFB1dEJ5
SWRQcm9wZXJ0eU1hcE9mZnNldDEpOwotICAgIEFTU0VSVF9KSVRfT0ZGU0VUX1VOVVNFRChkaXNw
bGFjZW1lbnRMYWJlbDIsIGRpZmZlcmVuY2VCZXR3ZWVuKGhvdFBhdGhCZWdpbiwgZGlzcGxhY2Vt
ZW50TGFiZWwyKSwgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQyKTsKKworICAg
IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFByb3BlcnR5U3R1YkNvbXBp
bGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJQdXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBob3RQYXRo
QmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZGlzcGxhY2VtZW50TGFiZWwxLCBkaXNwbGFjZW1l
bnRMYWJlbDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpAQCAtNDQyLDcgKzQyNSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQoSW5zdHJ1Y3QKICAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKCk7CiAgICAgCiAgICAg
Ly8gVHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byBy
ZWNvdmVyIHBhdGNoIGluZm9ybWF0aW9uLgotICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlv
bkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgrK10uY2FsbFJldHVybkxvY2F0
aW9uID0gY2FsbDsKKyAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW21fcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KytdLnNsb3dDYXNlSW5mbyhQcm9wZXJ0eVN0dWJQdXRC
eUlkLCBjYWxsKTsKIH0KIAogLy8gQ29tcGlsZSBhIHN0b3JlIGludG8gYW4gb2JqZWN0J3MgcHJv
cGVydHkgc3RvcmFnZS4gIE1heSBvdmVyd3JpdGUgYmFzZS4KQEAgLTU3Nyw5ICs1NjAsOSBAQCB2
b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvCiAgICAgaW50IG9mZnNldCA9
IHNpemVvZihKU1ZhbHVlKSAqIGNhY2hlZE9mZnNldDsKIAogICAgIC8vIFBhdGNoIHRoZSBvZmZz
ZXQgaW50byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcGF0Y2ggdGhlIFN0
cnVjdHVyZSB0byBsb29rIGZvci4KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRTdHJ1
Y3R1cmUpLCBzdHJ1Y3R1cmUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+
aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQ
cm9wZXJ0eU1hcE9mZnNldDEpLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpOyAvLyBwYXlsb2FkCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHBhdGNoT2Zmc2V0
R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiksIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKTsgLy8gdGFnCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsUHRyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZVRvQ29tcGFyZSksIHN0cnVjdHVyZSk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1lbnRMYWJl
bDEpLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
OyAvLyBwYXlsb2FkCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5kaXNwbGFjZW1lbnRMYWJlbDIpLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSk7IC8vIHRhZwogfQogCiB2b2lkIEpJVDo6cGF0Y2hQdXRCeUlkUmVw
bGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTU5Myw5ICs1NzYsOSBAQCB2b2lkIEpJ
VDo6cGF0Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqCiAgICAgaW50IG9mZnNldCA9IHNpemVv
ZihKU1ZhbHVlKSAqIGNhY2hlZE9mZnNldDsKIAogICAgIC8vIFBhdGNoIHRoZSBvZmZzZXQgaW50
byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcGF0Y2ggdGhlIFN0cnVjdHVy
ZSB0byBsb29rIGZvci4KLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUp
LCBzdHJ1Y3R1cmUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0
aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZzZXQocGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBP
ZmZzZXQxKSwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxv
YWQpKTsgLy8gcGF5bG9hZAotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90
UGF0aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZzZXQocGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlN
YXBPZmZzZXQyKSwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpOyAvLyB0YWcKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5wdXQu
c3RydWN0dXJlVG9Db21wYXJlKSwgc3RydWN0dXJlKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LnB1dC5kaXNwbGFjZW1lbnRMYWJlbDEpLCBvZmZzZXQgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpOyAvLyBwYXlsb2FkCisgICAgcmVw
YXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsMzJBdE9m
ZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5wdXQuZGlzcGxhY2VtZW50TGFiZWwyKSwg
b2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpOyAvLyB0YWcK
IH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MTksMTggKzYwMiwxOCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dD
YXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBh
dGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xv
d0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgt
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMSwgc2xvd0Nhc2VCZWdpbik7CiAgICAgcGF0Y2hCdWZm
ZXIubGluayhmYWlsdXJlQ2FzZXMyLCBzbG93Q2FzZUJlZ2luKTsKICAgICAKICAgICAvLyBPbiBz
dWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3
aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zm
c2V0R2V0QnlJZFB1dFJlc3VsdCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5wdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZl
IGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCiAgICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKKyAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAKQEAg
LTY3OCwxMiArNjYxLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhT
dHIKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29k
ZUJsb2NrKTsKICAgICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxs
KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQuY29sZFBhdGhCZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxLCBz
bG93Q2FzZUJlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIHNsb3dD
YXNlQmVnaW4pOwogICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhv
dCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVz
dCBmb3IgdXMuCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogCiAgICAg
aWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytp
dGVyKSB7CkBAIC02OTYsNyArNjc5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvKFN0cgogICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBj
YXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVM
b2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRP
ZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CisgICAgQ29kZUxvY2F0
aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNl
dChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJv
dXRpbmUuY29kZSgpKSk7CiAgICAgCkBAIC03NDQsMTkgKzcyNywxOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1h
dGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cg
Y2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29k
ZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAt
IDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKLSAgICAg
ICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CisgICAgICAgIGxhc3RQcm90
b0JlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHVi
SW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdpbik7CiAgICAgCiAgICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZSwgbGFzdFByb3RvQmVnaW4pOwogICAgIAogICAgIC8v
IE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50
IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCi0gICAgcGF0Y2hCdWZm
ZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0
Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNz
LCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogCiAgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgIAogICAg
IC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBw
YXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0
aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRC
eUlkQnJhbmNoVG9TbG93Q2FzZSk7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFz
ZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihtX2NvZGVCbG9jayk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIH0KQEAgLTgxNCwxNCAr
Nzk3LDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKICAgICAKICAg
ICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBw
b2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKICAgICAKICAgICBDb2RlUmVmIHN0dWJSb3V0
aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKICAgICBwcm90b3R5cGVTdHJ1Y3R1
cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHByb3Rv
dHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhl
IGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0
ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7
CisgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJl
Q2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CiAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS5jb2RlKCkpKTsKIH0KQEAgLTg4NCw3ICs4NjcsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRz
T2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4g
YmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRo
ZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRS
ZXN1bHQpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KSk7CiAgICAgCiAgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogICAgIApAQCAtODkyLDcgKzg3NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7CiAg
ICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0
aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgQ29kZUxvY2F0aW9uSnVtcCBq
dW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9m
ZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKKyAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBM
b2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1w
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogfQpAQCAt
OTQ2LDE3ICs5MjksMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0
cgogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8g
bGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91
dGluZS4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIHN0dWJJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VD
YWxsKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5jb2xkUGF0aEJlZ2luKSk7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1
bHQpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0
KSk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQg
aXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgogICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHVi
Um91dGluZTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2Fz
ZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBDb2RlTG9j
YXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zm
c2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOworICAgIENvZGVMb2NhdGlv
bkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwogICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgp
KSk7CiAgICAgCkBAIC0xMTA5LDEwICsxMDkyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
bG9iYWxfdmFyKEluc3RydWMKIHZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCiB7CiAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29w
X2dldF9ieV9pZCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uZGF0YUxhYmVsUHRyQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQxKSwgMCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBh
dGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHBhdGNo
T2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZEJyYW5jaFRvU2xvd0Nhc2UpLCBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCkpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0
KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVUb0NvbXBhcmUpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50TGFiZWwxKSwgMCk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1lbnRMYWJlbDIpLCAw
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBB
dE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spLCBz
dHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKSk7CiB9CiAKIHZvaWQgSklUOjpyZXNldFBh
dGNoUHV0QnlJZChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8pCkBAIC0xMTIxLDkgKzExMDQsOSBAQCB2b2lkIEpJVDo6cmVzZXRQYXRjaFB1
dEJ5SWQoUmVwYXRjaEJ1ZmZlCiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24sIGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0KTsKICAgICBlbHNl
CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24sIGN0aV9vcF9wdXRfYnlfaWQpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5m
by0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHBhdGNoT2Zmc2V0UHV0QnlJZFN0
cnVjdHVyZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7Ci0gICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsMzJBdE9mZnNldChwYXRj
aE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEpLCAwKTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHBhdGNo
T2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiksIDApOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHN0dWJJ
bmZvLT5wYXRjaC5iYXNlbGluZS51LnB1dC5zdHJ1Y3R1cmVUb0NvbXBhcmUpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+
aG90UGF0aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUucHV0LmRpc3BsYWNlbWVudExhYmVsMSksIDApOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUucHV0LmRpc3BsYWNlbWVudExhYmVsMiksIDApOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMTQwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDEwICsz
MTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tZXRob2RfY2hlY2soSW5zdHJ1Y3RpCiAKICAgICBK
dW1wIG1hdGNoID0ganVtcCgpOwogCi0gICAgQVNTRVJUX0pJVF9PRkZTRVRfVU5VU0VEKHByb3Rv
T2JqLCBkaWZmZXJlbmNlQmV0d2VlbihpbmZvLnN0cnVjdHVyZVRvQ29tcGFyZSwgcHJvdG9PYmop
LCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmopOwotICAgIEFTU0VSVF9KSVRfT0ZGU0VU
KGRpZmZlcmVuY2VCZXR3ZWVuKGluZm8uc3RydWN0dXJlVG9Db21wYXJlLCBwcm90b1N0cnVjdHVy
ZVRvQ29tcGFyZSksIHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCk7Ci0gICAgQVNT
RVJUX0pJVF9PRkZTRVRfVU5VU0VEKHB1dEZ1bmN0aW9uLCBkaWZmZXJlbmNlQmV0d2VlbihpbmZv
LnN0cnVjdHVyZVRvQ29tcGFyZSwgcHV0RnVuY3Rpb24pLCBwYXRjaE9mZnNldE1ldGhvZENoZWNr
UHV0RnVuY3Rpb24pOwotCiAgICAgLy8gTGluayB0aGUgZmFpbHVyZSBjYXNlcyBoZXJlLgogICAg
IG5vdENlbGwubGluayh0aGlzKTsKICAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKHRoaXMpOwpAQCAt
MzI5LDYgKzMyNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX21ldGhvZF9jaGVjayhJbnN0cnVjdGkK
IAogICAgIC8vIFdlJ3ZlIGFscmVhZHkgZ2VuZXJhdGVkIHRoZSBmb2xsb3dpbmcgZ2V0X2J5X2lk
LCBzbyBtYWtlIHN1cmUgaXQncyBza2lwcGVkIG92ZXIuCiAgICAgbV9ieXRlY29kZU9mZnNldCAr
PSBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCk7CisKKyAgICBtX3Byb3BlcnR5QWNjZXNzQ29t
cGlsYXRpb25JbmZvLmxhc3QoKS5hZGRNZXRob2RDaGVja0luZm8oaW5mby5zdHJ1Y3R1cmVUb0Nv
bXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdHVyZVRvQ29tcGFyZSwgcHV0RnVuY3Rpb24pOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9kX2NoZWNrKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBA
IC0zNjksMjUgKzM2NywxOSBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBi
YXNlCiAgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRIb3RQ
YXRoKTsKIAogICAgIExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsKLSAgICBtX3Byb3BlcnR5QWNj
ZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oKSk7
Ci0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5sYXN0KCkuYnl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5m
by5sYXN0KCkuaG90UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOwogCiAgICAgRGF0YUxhYmVsUHRy
IHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBKdW1wIHN0cnVjdHVyZUNoZWNrID0gYnJhbmNoUHRy
V2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CiAgICAgYWRkU2xvd0Nhc2Uo
c3RydWN0dXJlQ2hlY2spOwotICAgIEFTU0VSVF9KSVRfT0ZGU0VUKGRpZmZlcmVuY2VCZXR3ZWVu
KGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlKSwgcGF0Y2hPZmZzZXRHZXRCeUlkU3Ry
dWN0dXJlKTsKLSAgICBBU1NFUlRfSklUX09GRlNFVChkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRo
QmVnaW4sIHN0cnVjdHVyZUNoZWNrKSwgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2Fz
ZSkKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVy
dHlTdG9yYWdlKCkpLCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRM
YWJlbCA9IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1Qw
LCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwotICAgIEFTU0VSVF9KSVRfT0ZG
U0VUX1VOVVNFRChkaXNwbGFjZW1lbnRMYWJlbCwgZGlmZmVyZW5jZUJldHdlZW4oaG90UGF0aEJl
Z2luLCBkaXNwbGFjZW1lbnRMYWJlbCksIHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zm
c2V0KTsKIAogICAgIExhYmVsIHB1dFJlc3VsdCh0aGlzKTsKIAogICAgIEVORF9VTklOVEVSUlVQ
VEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgpOwogCi0gICAgQVNTRVJUX0pJVF9P
RkZTRVQoZGlmZmVyZW5jZUJldHdlZW4oaG90UGF0aEJlZ2luLCBwdXRSZXN1bHQpLCBwYXRjaE9m
ZnNldEdldEJ5SWRQdXRSZXN1bHQpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm8uYXBwZW5kKFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJHZXRCeUlk
LCBtX2J5dGVjb2RlT2Zmc2V0LCBob3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgc3Ry
dWN0dXJlQ2hlY2ssIGRpc3BsYWNlbWVudExhYmVsLCBwdXRSZXN1bHQpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNDEzLDkgKzQwNSw3
IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZFNsb3dDYXNlKGludCByZXMKIAogICAgIEJFR0lO
X1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UpOwogCi0jaWZu
ZGVmIE5ERUJVRwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0jZW5kaWYKICAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBpc01ldGhvZENoZWNrID8gY3RpX29wX2dldF9ieV9p
ZF9tZXRob2RfY2hlY2sgOiBjdGlfb3BfZ2V0X2J5X2lkKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChyZWdUMCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihpZGVu
dCkpOwpAQCAtNDIzLDEwICs0MTMsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2Fz
ZShpbnQgcmVzCiAKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5
SWRTbG93Q2FzZSk7CiAKLSAgICBBU1NFUlRfSklUX09GRlNFVChkaWZmZXJlbmNlQmV0d2Vlbihj
b2xkUGF0aEJlZ2luLCBjYWxsKSwgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKLQog
ICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQg
dG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGls
YXRpb25JbmZvW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KytdLmNhbGxSZXR1cm5M
b2NhdGlvbiA9IGNhbGw7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCsrXS5zbG93Q2FzZUluZm8oUHJvcGVydHlTdHVi
R2V0QnlJZCwgY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQ2LDE0ICs0MzQs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIEJFR0lO
X1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKIAogICAgIExhYmVsIGhv
dFBhdGhCZWdpbih0aGlzKTsKLSAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mby5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVPZmZzZXQ7
Ci0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5sYXN0KCkuaG90UGF0aEJlZ2lu
ID0gaG90UGF0aEJlZ2luOwogCiAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxv
d2luZyBpbnN0cnVjdGlvbiBwbGFudHMgYSAzMmJpdCBpbW1lZGlhdGUsIGluIG9yZGVyIHRoYXQg
aXQgY2FuIGJlIHBhdGNoZWQgb3Zlci4KICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21w
YXJlOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwg
VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0
U3RydWN0dXJlKSkpKTsKLSAgICBBU1NFUlRfSklUX09GRlNFVChkaWZmZXJlbmNlQmV0d2Vlbiho
b3RQYXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSksIHBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVj
dHVyZSk7CiAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpvZmZzZXRPZlBy
b3BlcnR5U3RvcmFnZSgpKSwgcmVnVDIpOwogICAgIERhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExh
YmVsID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CkBAIC00NjIsNyArNDQ2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogCiAgICAgZW1pdFdyaXRlQmFycmll
cihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwogCi0gICAgQVNTRVJUX0pJVF9PRkZTRVRfVU5V
U0VEKGRpc3BsYWNlbWVudExhYmVsLCBkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRoQmVnaW4sIGRp
c3BsYWNlbWVudExhYmVsKSwgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOwor
ICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFByb3BlcnR5U3R1YkNv
bXBpbGF0aW9uSW5mbyhQcm9wZXJ0eVN0dWJQdXRCeUlkLCBtX2J5dGVjb2RlT2Zmc2V0LCBob3RQ
YXRoQmVnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZGlzcGxhY2VtZW50TGFiZWwpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNDgxLDcg
KzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKICAgICBD
YWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKCk7CiAKICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24g
b2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcGF0Y2ggaW5mb3JtYXRp
b24uCi0gICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1ttX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25JbmRleCsrXS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOworICAgIG1fcHJv
cGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXgrK10uc2xvd0Nhc2VJbmZvKFByb3BlcnR5U3R1YlB1dEJ5SWQsIGNhbGwpOwogfQogCiAvLyBD
b21waWxlIGEgc3RvcmUgaW50byBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlLiAgTWF5IG92
ZXJ3cml0ZSB0aGUKQEAgLTU5NSw4ICs1NzksOCBAQCB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2Vs
ZihDb2RlQmxvY2sqIGNvCiAgICAgaW50IG9mZnNldCA9IHNpemVvZihKU1ZhbHVlKSAqIGNhY2hl
ZE9mZnNldDsKIAogICAgIC8vIFBhdGNoIHRoZSBvZmZzZXQgaW50byB0aGUgcHJvcG9lcnR5IG1h
cCB0byBsb2FkIGZyb20sIHRoZW4gcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZvci4KLSAg
ICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQ
dHJBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUpOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENv
bXBhY3RBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCksIG9mZnNl
dCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0
YUxhYmVsUHRyQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVy
ZVRvQ29tcGFyZSksIHN0cnVjdHVyZSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5kaXNwbGFjZW1lbnRMYWJlbCksIG9mZnNldCk7CiB9CiAKIHZvaWQg
SklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zm
c2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KQpAQCAtNjEw
LDggKzU5NCw4IEBAIHZvaWQgSklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayoKICAg
ICBpbnQgb2Zmc2V0ID0gc2l6ZW9mKEpTVmFsdWUpICogY2FjaGVkT2Zmc2V0OwogCiAgICAgLy8g
UGF0Y2ggdGhlIG9mZnNldCBpbnRvIHRoZSBwcm9wb2VydHkgbWFwIHRvIGxvYWQgZnJvbSwgdGhl
biBwYXRjaCB0aGUgU3RydWN0dXJlIHRvIGxvb2sgZm9yLgotICAgIHJlcGF0Y2hCdWZmZXIucmVw
YXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHBhdGNoT2Zm
c2V0UHV0QnlJZFN0cnVjdHVyZSksIHN0cnVjdHVyZSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBh
dGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsMzJBdE9mZnNldChwYXRjaE9mZnNl
dFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCksIG9mZnNldCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsUHRyQXRPZmZzZXQoc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LnN0cnVjdHVyZVRvQ29tcGFyZSksIHN0cnVjdHVyZSk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxh
YmVsMzJBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5wdXQuZGlzcGxhY2VtZW50
TGFiZWwpLCBvZmZzZXQpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFy
cmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTYzMiwxOCArNjE2
LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKIAog
ICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNl
cyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOworICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2lu
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIHNsb3dDYXNlQmVnaW4pOwog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdpbik7CiAKICAg
ICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBw
b2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdl
IGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KICAgICBzdHVi
SW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8v
IEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9u
ID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlk
QnJhbmNoVG9TbG93Q2FzZSk7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihtX2NvZGVCbG9jayk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAKQEAgLTY4
OSwxMiArNjczLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIK
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJs
b2NrKTsKIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFp
bHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOworICAg
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xk
UGF0aEJlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIHNsb3dDYXNl
QmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgc2xvd0Nhc2VCZWdp
bik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29k
ZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKIAogICAgIGlmIChuZWVkc1N0
dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVy
ID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAt
NzA2LDcgKzY5MCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIK
ICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsK
IAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhl
IGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVt
cExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9j
YXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7
CiAKQEAgLTc1MywxOSArNzM3LDE5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRT
ZWxmTGlzdCgKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZh
aWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5
bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29k
ZSgpKTsKICAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQotICAgICAgICBsYXN0UHJvdG9CZWdpbiA9
IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRH
ZXRCeUlkU2xvd0Nhc2VDYWxsKTsKKyAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2UsIGxhc3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8g
dGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUg
dG8gZGVzdCBmb3IgdXMuCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwog
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCk7CiAKICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Q29kZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBq
dW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVh
ZC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwor
ICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNo
ZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwogICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkNvZGUuY29kZSgpKSk7CiB9CkBAIC04MjQsMTMgKzgwOCwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2Fz
ZXMyLCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRv
IHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3Jl
IHRvIGRlc3QgZm9yIHVzLgotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsK
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5z
ZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29k
ZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKIAogICAgIC8vIEZp
bmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRv
IGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJh
bmNoVG9TbG93Q2FzZSk7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlciht
X2NvZGVCbG9jayk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViQ29kZS5jb2RlKCkpKTsKIH0KQEAgLTg5Myw3ICs4NzcsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgcGF0Y2hCdWZmZXIu
bGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNz
IHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBl
cmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFB1dFJlc3VsdCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5wdXRSZXN1bHQpKTsKIAogICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKIApAQCAtOTAxLDcgKzg4NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7CiAK
ICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBo
b3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBM
b2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0
R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOworICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0
aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIobV9jb2RlQmxvY2spOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CkBAIC05NTYs
MTcgKzk0MCwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAg
ICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIHBh
dGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFpbCwgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRo
QmVnaW4pKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRj
aCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3Ig
dXMuCi0gICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogCiAgICAgLy8gVHJh
Y2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxh
dGVyLgogICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUo
KTsKICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKIAogICAgIC8vIEZp
bmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRv
IGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJh
bmNoVG9TbG93Q2FzZSk7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlciht
X2NvZGVCbG9jayk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIApAQCAtMTA0OCw5ICsxMDMyLDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1Ywogdm9pZCBKSVQ6OnJl
c2V0UGF0Y2hHZXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbykKIHsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfZ2V0X2J5X2lkKTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRj
aE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJl
bENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCksIDAp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0
T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpLCBzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNl
Q2FsbCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1
Y3R1cmVUb0NvbXBhcmUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RB
dE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuZGlzcGxhY2VtZW50TGFiZWwp
LCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2sp
LCBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKSk7CiB9CiAKIHZvaWQgSklUOjpyZXNl
dFBhdGNoUHV0QnlJZChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8pCkBAIC0xMDU5LDggKzEwNDMsOCBAQCB2b2lkIEpJVDo6cmVzZXRQYXRj
aFB1dEJ5SWQoUmVwYXRjaEJ1ZmZlCiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0KTsKICAgICBl
bHNlCiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24sIGN0aV9vcF9wdXRfYnlfaWQpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHBhdGNoT2Zmc2V0UHV0QnlJ
ZFN0cnVjdHVyZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0KSwgMCk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsUHRyQXRPZmZz
ZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUucHV0LnN0cnVjdHVyZVRvQ29tcGFyZSksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LnB1dC5kaXNwbGFjZW1lbnRMYWJlbCksIDApOwogfQogCiAjZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkK
</data>
<flag name="review"
          id="142106"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>