<?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>17025</bug_id>
          
          <creation_ts>2008-01-26 13:27:21 -0800</creation_ts>
          <short_desc>nodes.h/cpp has been rolling around in the mud - lets hose it down</short_desc>
          <delta_ts>2008-01-27 16:16:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>68314</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-26 13:27:21 -0800</bug_when>
    <thetext>nodes.h/cpp is an large and unwieldily file.  One step in the right direction is to make it match our current style guidelines.  Patches forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68346</commentid>
    <comment_count>1</comment_count>
      <attachid>18717</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-27 00:15:44 -0800</bug_when>
    <thetext>Created attachment 18717
add m_ prefixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68397</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-27 16:16:05 -0800</bug_when>
    <thetext>Fix landed in r29825.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18717</attachid>
            <date>2008-01-27 00:15:44 -0800</date>
            <delta_ts>2008-01-27 15:58:19 -0800</delta_ts>
            <desc>add m_ prefixes</desc>
            <filename>cleanup1.diff</filename>
            <type>text/plain</type>
            <size>170842</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI5ODE1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDgtMDEt
MjYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMjUKKyAgICAgICAgbm9kZXMuaC9jcHAgaGFzIGJlZW4gcm9s
bGluZyBhcm91bmQgaW4gdGhlIG11ZCAtIGxldHMgaG9zZSBpdCBkb3duCisKKyAgICAgICAgLSBS
ZW5hbWUgbWVtYmVyIHZhcmlhYmxlcyB0byB1c2UgdGhlIG1fIHByZWZpeC4KKworICAgICAgICAo
Tk9URTogU3BlY2lmaWMgY2hhbmdlZCBmdW5jdGlvbnMgZWxpZGVkIGZvciBzcGFjZSBhbmQgY2xh
cml0eSkKKyAgICAgICAgKiBranMvZ3JhbW1hci55OgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6
CisgICAgICAgICoga2pzL25vZGVzLmg6CisgICAgICAgICoga2pzL25vZGVzMnN0cmluZy5jcHA6
CisKIDIwMDgtMDEtMjYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE9saXZlci4KSW5kZXg6IGtqcy9ncmFtbWFyLnkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL2dyYW1tYXIueQkocmV2aXNpb24gMjk4MTUpCisrKyBranMvZ3JhbW1hci55CSh3b3JraW5n
IGNvcHkpCkBAIC0xMjcsOSArMTI3LDkgQEAgc3RhdGljIHZvaWQgYXBwZW5kVG9WYXJEZWNsYXJh
dGlvbkxpc3QoUAogc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFRvVmFyRGVjbGFyYXRpb25MaXN0
KFBhcnNlclJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qJiB2YXJE
ZWNscywgQ29uc3REZWNsTm9kZSogZGVjbCkKIHsKICAgICB1bnNpZ25lZCBhdHRycyA9IERlY2xh
cmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50OwotICAgIGlmIChkZWNsLT5pbml0KQorICAgIGlmIChk
ZWNsLT5tX2luaXQpCiAgICAgICAgIGF0dHJzIHw9IERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJbml0
aWFsaXplcjsgICAgICAgIAotICAgIGFwcGVuZFRvVmFyRGVjbGFyYXRpb25MaXN0KHZhckRlY2xz
LCBkZWNsLT5pZGVudCwgYXR0cnMpOworICAgIGFwcGVuZFRvVmFyRGVjbGFyYXRpb25MaXN0KHZh
ckRlY2xzLCBkZWNsLT5tX2lkZW50LCBhdHRycyk7CiB9CiAKICV9CkBAIC03OTEsNyArNzkxLDcg
QEAgQ29uc3REZWNsYXJhdGlvbkxpc3Q6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkJC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOyB9CiAgIHwgQ29uc3REZWNsYXJh
dGlvbkxpc3QgJywnIENvbnN0RGVjbGFyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7ICAkJC5tX25vZGUuaGVhZCA9ICQxLm1fbm9kZS5oZWFkOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDEubV9ub2RlLnRhaWwtPm5leHQg
PSAkMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxLm1fbm9k
ZS50YWlsLT5tX25leHQgPSAkMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICQkLm1fbm9kZS50YWlsID0gJDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucyA9ICQxLm1fdmFyRGVjbGFyYXRpb25z
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9WYXJE
ZWNsYXJhdGlvbkxpc3QoJCQubV92YXJEZWNsYXJhdGlvbnMsICQzKTsKSW5kZXg6IGtqcy9ub2Rl
czJzdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2RlczJzdHJpbmcuY3BwCShyZXZpc2lv
biAyOTgxNSkKKysrIGtqcy9ub2RlczJzdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUs
NjggKzMyNSw2OCBAQCB2b2lkIFRoaXNOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpCiAK
IHZvaWQgUmVzb2x2ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKLSAg
ICBzIDw8IGlkZW50OworICAgIHMgPDwgbV9pZGVudDsKIH0KIAogdm9pZCBFbGVtZW50Tm9kZTo6
c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIGZvciAoY29uc3QgRWxlbWVu
dE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkgewotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG4tPmVsaXNpb247IGkrKykKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnROb2Rl
KiBuID0gdGhpczsgbjsgbiA9IG4tPm1fbmV4dC5nZXQoKSkgeworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG4tPm1fZWxpc2lvbjsgaSsrKQogICAgICAgICAgICAgcyA8PCAnLCc7Ci0gICAg
ICAgIHMgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbi0+bm9kZTsKLSAgICAgICAgaWYgKG4tPm5leHQp
CisgICAgICAgIHMgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbi0+bV9ub2RlOworICAgICAgICBpZiAo
bi0+bV9uZXh0KQogICAgICAgICAgICAgcyA8PCAnLCc7CiAgICAgfQogfQogCiB2b2lkIEFycmF5
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHMgPDwgJ1snIDw8
IGVsZW1lbnQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGlzaW9uOyBpKyspCisgICAgcyA8
PCAnWycgPDwgbV9lbGVtZW50OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9lbGlzaW9uOyBp
KyspCiAgICAgICAgIHMgPDwgJywnOwogICAgIC8vIFBhcnNlciBjb25zdW1lcyBvbmUgZWxpc2lv
biBjb21tYSBpZiB0aGVyZSdzIGFycmF5IGVsZW1lbnRzIAogICAgIC8vIHByZXNlbnQgaW4gdGhl
IGV4cHJlc3Npb24uCi0gICAgaWYgKG9wdCAmJiBlbGVtZW50KQorICAgIGlmIChtX29wdCAmJiBt
X2VsZW1lbnQpCiAgICAgICAgIHMgPDwgJywnOwogICAgIHMgPDwgJ10nOwogfQogCiB2b2lkIE9i
amVjdExpdGVyYWxOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAg
aWYgKGxpc3QpCi0gICAgICAgIHMgPDwgInsgIiA8PCBsaXN0IDw8ICIgfSI7CisgICAgaWYgKG1f
bGlzdCkKKyAgICAgICAgcyA8PCAieyAiIDw8IG1fbGlzdCA8PCAiIH0iOwogICAgIGVsc2UKICAg
ICAgICAgcyA8PCAieyB9IjsKIH0KIAogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8PCBub2RlOwotICAgIGZvciAoY29uc3Qg
UHJvcGVydHlMaXN0Tm9kZSogbiA9IG5leHQuZ2V0KCk7IG47IG4gPSBuLT5uZXh0LmdldCgpKQot
ICAgICAgICBzIDw8ICIsICIgPDwgbi0+bm9kZTsKKyAgICBzIDw8IG1fbm9kZTsKKyAgICBmb3Ig
KGNvbnN0IFByb3BlcnR5TGlzdE5vZGUqIG4gPSBtX25leHQuZ2V0KCk7IG47IG4gPSBuLT5tX25l
eHQuZ2V0KCkpCisgICAgICAgIHMgPDwgIiwgIiA8PCBuLT5tX25vZGU7CiB9CiAKIHZvaWQgUHJv
cGVydHlOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBDb25zdGFudDog
ewogICAgICAgICAgICAgVVN0cmluZyBwcm9wZXJ0eU5hbWUgPSBuYW1lKCkudXN0cmluZygpOwog
ICAgICAgICAgICAgaWYgKGlzUGFyc2VyUm91bmRUcmlwTnVtYmVyKHByb3BlcnR5TmFtZSkpCiAg
ICAgICAgICAgICAgICAgcyA8PCBwcm9wZXJ0eU5hbWU7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgcyA8PCAnIicgPDwgZXNjYXBlU3RyaW5nRm9yUHJldHR5UHJpbnRpbmcocHJv
cGVydHlOYW1lKSA8PCAnIic7Ci0gICAgICAgICAgICBzIDw8ICI6ICIgPDwgUHJlY0Fzc2lnbm1l
bnQgPDwgYXNzaWduOworICAgICAgICAgICAgcyA8PCAiOiAiIDw8IFByZWNBc3NpZ25tZW50IDw8
IG1fYXNzaWduOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBH
ZXR0ZXI6CiAgICAgICAgIGNhc2UgU2V0dGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBGdW5jRXhw
ck5vZGUqIGZ1bmMgPSBzdGF0aWNfY2FzdDxjb25zdCBGdW5jRXhwck5vZGUqPihhc3NpZ24uZ2V0
KCkpOwotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgY29uc3Qg
RnVuY0V4cHJOb2RlKiBmdW5jID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnVuY0V4cHJOb2RlKj4obV9h
c3NpZ24uZ2V0KCkpOworICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIpCiAgICAgICAg
ICAgICAgICAgcyA8PCAiZ2V0ICI7IAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IHMgPDwgInNldCAiOwogICAgICAgICAgICAgcyA8PCBlc2NhcGVTdHJpbmdGb3JQcmV0dHlQcmlu
dGluZyhuYW1lKCkudXN0cmluZygpKQotICAgICAgICAgICAgICAgIDw8ICIoIiA8PCBmdW5jLT5w
YXJhbSA8PCAnKScgPDwgZnVuYy0+Ym9keTsKKyAgICAgICAgICAgICAgICA8PCAiKCIgPDwgZnVu
Yy0+bV9wYXJhbWV0ZXIgPDwgJyknIDw8IGZ1bmMtPm1fYm9keTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpAQCAtMzk0LDUxICszOTQsNTEgQEAgdm9pZCBQcm9wZXJ0eU5v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbQogCiB2b2lkIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OnN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBicmFja2V0Tm9kZVN0cmVhbVRv
KHMsIGV4cHIxLCBleHByMik7CisgICAgYnJhY2tldE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1f
c3Vic2NyaXB0KTsKIH0KIAogdm9pZCBEb3RBY2Nlc3Nvck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgcykgY29uc3QKIHsKLSAgICBkb3ROb2RlU3RyZWFtVG8ocywgZXhwciwgaWRlbnQpOwor
ICAgIGRvdE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1faWRlbnQpOwogfQogCiB2b2lkIEFyZ3Vt
ZW50TGlzdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBzIDw8
IFByZWNBc3NpZ25tZW50IDw8IGV4cHI7Ci0gICAgZm9yIChBcmd1bWVudExpc3ROb2RlKiBuID0g
bmV4dC5nZXQoKTsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpCi0gICAgICAgIHMgPDwgIiwgIiA8PCBQ
cmVjQXNzaWdubWVudCA8PCBuLT5leHByOworICAgIHMgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbV9l
eHByOworICAgIGZvciAoQXJndW1lbnRMaXN0Tm9kZSogbiA9IG1fbmV4dC5nZXQoKTsgbjsgbiA9
IG4tPm1fbmV4dC5nZXQoKSkKKyAgICAgICAgcyA8PCAiLCAiIDw8IFByZWNBc3NpZ25tZW50IDw8
IG4tPm1fZXhwcjsKIH0KIAogdm9pZCBBcmd1bWVudHNOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8PCAnKCcgPDwgbGlzdE5vZGUgPDwgJyknOworICAgIHMg
PDwgJygnIDw8IG1fbGlzdE5vZGUgPDwgJyknOwogfQogCiB2b2lkIE5ld0V4cHJOb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8PCAibmV3ICIgPDwgUHJlY01l
bWJlciA8PCBleHByIDw8IGFyZ3M7CisgICAgcyA8PCAibmV3ICIgPDwgUHJlY01lbWJlciA8PCBt
X2V4cHIgPDwgbV9hcmdzOwogfQogCiB2b2lkIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6c3RyZWFt
VG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHMgPDwgUHJlY0NhbGwgPDwgZXhwciA8
PCBhcmdzOworICAgIHMgPDwgUHJlY0NhbGwgPDwgbV9leHByIDw8IG1fYXJnczsKIH0KIAogdm9p
ZCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25z
dAogewotICAgIHMgPDwgaWRlbnQgPDwgYXJnczsKKyAgICBzIDw8IG1faWRlbnQgPDwgbV9hcmdz
OwogfQogCiB2b2lkIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mIHMpIGNvbnN0CiB7Ci0gICAgYnJhY2tldE5vZGVTdHJlYW1UbyhzLCBiYXNlLCBzdWJzY3Jp
cHQpOwotICAgIHMgPDwgYXJnczsKKyAgICBicmFja2V0Tm9kZVN0cmVhbVRvKHMsIG1fYmFzZSwg
bV9zdWJzY3JpcHQpOworICAgIHMgPDwgbV9hcmdzOwogfQogCiB2b2lkIEZ1bmN0aW9uQ2FsbERv
dE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBkb3ROb2RlU3Ry
ZWFtVG8ocywgYmFzZSwgaWRlbnQpOwotICAgIHMgPDwgYXJnczsKKyAgICBkb3ROb2RlU3RyZWFt
VG8ocywgbV9iYXNlLCBtX2lkZW50KTsKKyAgICBzIDw8IG1fYXJnczsKIH0KIAogdm9pZCBQb3N0
SW5jUmVzb2x2ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKQEAgLTUwOCw3
ICs1MDgsNyBAQCB2b2lkIERlbGV0ZVZhbHVlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyCiAKIHZv
aWQgVm9pZE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBzIDw8
ICJ2b2lkICIgPDwgUHJlY1VuYXJ5IDw8IGV4cHI7CisgICAgcyA8PCAidm9pZCAiIDw8IFByZWNV
bmFyeSA8PCBtX2V4cHI7CiB9CiAKIHZvaWQgVHlwZU9mVmFsdWVOb2RlOjpzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mIHMpIGNvbnN0CkBAIC01NzAsMTM5ICs1NzAsMTM5IEBAIHZvaWQgVW5hcnlQbHVz
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWEKIAogdm9pZCBOZWdhdGVOb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8PCAiLSAiIDw8IFByZWNVbmFyeSA8PCBl
eHByOworICAgIHMgPDwgIi0gIiA8PCBQcmVjVW5hcnkgPDwgbV9leHByOwogfQogCiB2b2lkIEJp
dHdpc2VOb3ROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8
PCAifiIgPDwgUHJlY1VuYXJ5IDw8IGV4cHI7CisgICAgcyA8PCAifiIgPDwgUHJlY1VuYXJ5IDw8
IG1fZXhwcjsKIH0KIAogdm9pZCBMb2dpY2FsTm90Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFt
JiBzKSBjb25zdAogewotICAgIHMgPDwgIiEiIDw8IFByZWNVbmFyeSA8PCBleHByOworICAgIHMg
PDwgIiEiIDw8IFByZWNVbmFyeSA8PCBtX2V4cHI7CiB9CiAKIHZvaWQgTXVsdE5vZGU6OnN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVC
aW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICIqIiwgdGVybTEsIHRlcm0yKTsKKyAgICBz
dHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICIqIiwg
bV90ZXJtMSwgbV90ZXJtMik7CiB9CiAKIHZvaWQgRGl2Tm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdAogewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9y
KHMsIHByZWNlZGVuY2UoKSwgIi8iLCB0ZXJtMSwgdGVybTIpOworICAgIHN0cmVhbUxlZnRBc3Nv
Y2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIi8iLCBtX3Rlcm0xLCBtX3Rl
cm0yKTsKIH0KIAogdm9pZCBNb2ROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0
CiB7Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5j
ZSgpLCAiJSIsIHRlcm0xLCB0ZXJtMik7CisgICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5
T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiJSIsIG1fdGVybTEsIG1fdGVybTIpOwogfQogCiB2
b2lkIEFkZE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBzdHJl
YW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICIrIiwgdGVy
bTEsIHRlcm0yKTsKKyAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBw
cmVjZWRlbmNlKCksICIrIiwgbV90ZXJtMSwgbV90ZXJtMik7CiB9CiAKIHZvaWQgU3ViTm9kZTo6
c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHN0cmVhbUxlZnRBc3NvY2lh
dGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIi0iLCB0ZXJtMSwgdGVybTIpOwor
ICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwg
Ii0iLCBtX3Rlcm0xLCBtX3Rlcm0yKTsKIH0KIAogdm9pZCBMZWZ0U2hpZnROb2RlOjpzdHJlYW1U
byhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmlu
YXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiPDwiLCB0ZXJtMSwgdGVybTIpOworICAgIHN0
cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIjw8Iiwg
bV90ZXJtMSwgbV90ZXJtMik7CiB9CiAKIHZvaWQgUmlnaHRTaGlmdE5vZGU6OnN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlP
cGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI+PiIsIHRlcm0xLCB0ZXJtMik7CisgICAgc3RyZWFt
TGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiPj4iLCBtX3Rl
cm0xLCBtX3Rlcm0yKTsKIH0KIAogdm9pZCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpzdHJlYW1U
byhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmlu
YXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiPj4+IiwgdGVybTEsIHRlcm0yKTsKKyAgICBz
dHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI+Pj4i
LCBtX3Rlcm0xLCBtX3Rlcm0yKTsKIH0KIAogdm9pZCBMZXNzTm9kZTo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzKSBjb25zdAogewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJh
dG9yKHMsIHByZWNlZGVuY2UoKSwgIjwiLCBleHByMSwgZXhwcjIpOworICAgIHN0cmVhbUxlZnRB
c3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIjwiLCBtX2V4cHIxLCBt
X2V4cHIyKTsKIH0KIAogdm9pZCBHcmVhdGVyTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAogewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHBy
ZWNlZGVuY2UoKSwgIj4iLCBleHByMSwgZXhwcjIpOworICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2
ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIj4iLCBtX2V4cHIxLCBtX2V4cHIyKTsK
IH0KIAogdm9pZCBMZXNzRXFOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7
Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgp
LCAiPD0iLCBleHByMSwgZXhwcjIpOworICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9w
ZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIjw9IiwgbV9leHByMSwgbV9leHByMik7CiB9CiAKIHZv
aWQgR3JlYXRlckVxTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAg
IHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIj49
IiwgZXhwcjEsIGV4cHIyKTsKKyAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRv
cihzLCBwcmVjZWRlbmNlKCksICI+PSIsIG1fZXhwcjEsIG1fZXhwcjIpOwogfQogCiB2b2lkIElu
c3RhbmNlT2ZOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgc3Ry
ZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiaW5zdGFu
Y2VvZiIsIGV4cHIxLCBleHByMik7CisgICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3Bl
cmF0b3IocywgcHJlY2VkZW5jZSgpLCAiaW5zdGFuY2VvZiIsIG1fZXhwcjEsIG1fZXhwcjIpOwog
fQogCiB2b2lkIEluTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAg
IHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgImlu
IiwgZXhwcjEsIGV4cHIyKTsKKyAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRv
cihzLCBwcmVjZWRlbmNlKCksICJpbiIsIG1fZXhwcjEsIG1fZXhwcjIpOwogfQogCiB2b2lkIEVx
dWFsTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHN0cmVhbUxl
ZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIj09IiwgZXhwcjEs
IGV4cHIyKTsKKyAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVj
ZWRlbmNlKCksICI9PSIsIG1fZXhwcjEsIG1fZXhwcjIpOwogfQogCiB2b2lkIE5vdEVxdWFsTm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHN0cmVhbUxlZnRBc3Nv
Y2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIiE9IiwgZXhwcjEsIGV4cHIy
KTsKKyAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNl
KCksICIhPSIsIG1fZXhwcjEsIG1fZXhwcjIpOwogfQogCiB2b2lkIFN0cmljdEVxdWFsTm9kZTo6
c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHN0cmVhbUxlZnRBc3NvY2lh
dGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIj09PSIsIGV4cHIxLCBleHByMik7
CisgICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgp
LCAiPT09IiwgbV9leHByMSwgbV9leHByMik7CiB9CiAKIHZvaWQgTm90U3RyaWN0RXF1YWxOb2Rl
OjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgc3RyZWFtTGVmdEFzc29j
aWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiIT09IiwgZXhwcjEsIGV4cHIy
KTsKKyAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNl
KCksICIhPT0iLCBtX2V4cHIxLCBtX2V4cHIyKTsKIH0KIAogdm9pZCBCaXRBbmROb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZl
QmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiJiIsIGV4cHIxLCBleHByMik7CisgICAg
c3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiJiIs
IG1fZXhwcjEsIG1fZXhwcjIpOwogfQogCiB2b2lkIEJpdFhPck5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVy
YXRvcihzLCBwcmVjZWRlbmNlKCksICJeIiwgZXhwcjEsIGV4cHIyKTsKKyAgICBzdHJlYW1MZWZ0
QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICJeIiwgbV9leHByMSwg
bV9leHByMik7CiB9CiAKIHZvaWQgQml0T3JOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMp
IGNvbnN0CiB7Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJl
Y2VkZW5jZSgpLCAifCIsIGV4cHIxLCBleHByMik7CisgICAgc3RyZWFtTGVmdEFzc29jaWF0aXZl
QmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAifCIsIG1fZXhwcjEsIG1fZXhwcjIpOwog
fQogCiB2b2lkIExvZ2ljYWxBbmROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0
CiB7Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5j
ZSgpLCAiJiYiLCBleHByMSwgZXhwcjIpOworICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFy
eU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIiYmIiwgbV9leHByMSwgbV9leHByMik7CiB9CiAK
IHZvaWQgTG9naWNhbE9yTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewot
ICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwg
Inx8IiwgZXhwcjEsIGV4cHIyKTsKKyAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVy
YXRvcihzLCBwcmVjZWRlbmNlKCksICJ8fCIsIG1fZXhwcjEsIG1fZXhwcjIpOwogfQogCiB2b2lk
IENvbmRpdGlvbmFsTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAg
IHMgPDwgUHJlY0xvZ2ljYWxPciA8PCBsb2dpY2FsCi0gICAgICAgIDw8ICIgPyAiIDw8IFByZWNB
c3NpZ25tZW50IDw8IGV4cHIxCi0gICAgICAgIDw8ICIgOiAiIDw8IFByZWNBc3NpZ25tZW50IDw8
IGV4cHIyOworICAgIHMgPDwgUHJlY0xvZ2ljYWxPciA8PCBtX2xvZ2ljYWwKKyAgICAgICAgPDwg
IiA/ICIgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbV9leHByMQorICAgICAgICA8PCAiIDogIiA8PCBQ
cmVjQXNzaWdubWVudCA8PCBtX2V4cHIyOwogfQogCiB2b2lkIFJlYWRNb2RpZnlSZXNvbHZlTm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdApAQCAtNzQ3LDI0ICs3NDcsMjQgQEAg
dm9pZCBBc3NpZ25FcnJvck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cgogCiB2b2lkIENvbW1hTm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHMgPDwgUHJlY0Fzc2ln
bm1lbnQgPDwgZXhwcjEgPDwgIiwgIiA8PCBQcmVjQXNzaWdubWVudCA8PCBleHByMjsKKyAgICBz
IDw8IFByZWNBc3NpZ25tZW50IDw8IG1fZXhwcjEgPDwgIiwgIiA8PCBQcmVjQXNzaWdubWVudCA8
PCBtX2V4cHIyOwogfQogCiB2b2lkIENvbnN0RGVjbE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYgcykgY29uc3QKIHsKLSAgICBzIDw8IGlkZW50OwotICAgIGlmIChpbml0KQotICAgICAgICBz
IDw8ICIgPSAiIDw8IGluaXQ7Ci0gICAgZm9yIChDb25zdERlY2xOb2RlKiBuID0gbmV4dC5nZXQo
KTsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpIHsKLSAgICAgICAgcyA8PCAiLCAiIDw8IGlkZW50Owot
ICAgICAgICBpZiAoaW5pdCkKLSAgICAgICAgICAgIHMgPDwgIiA9ICIgPDwgaW5pdDsKKyAgICBz
IDw8IG1faWRlbnQ7CisgICAgaWYgKG1faW5pdCkKKyAgICAgICAgcyA8PCAiID0gIiA8PCBtX2lu
aXQ7CisgICAgZm9yIChDb25zdERlY2xOb2RlKiBuID0gbV9uZXh0LmdldCgpOyBuOyBuID0gbi0+
bV9uZXh0LmdldCgpKSB7CisgICAgICAgIHMgPDwgIiwgIiA8PCBtX2lkZW50OworICAgICAgICBp
ZiAobV9pbml0KQorICAgICAgICAgICAgcyA8PCAiID0gIiA8PCBtX2luaXQ7CiAgICAgfQogfQog
CiB2b2lkIENvbnN0U3RhdGVtZW50Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25z
dAogewotICAgIHMgPDwgRW5kbCA8PCAiY29uc3QgIiA8PCBuZXh0IDw8ICc7JzsKKyAgICBzIDw8
IEVuZGwgPDwgImNvbnN0ICIgPDwgbV9uZXh0IDw8ICc7JzsKIH0KIAogc3RhdGljIGlubGluZSB2
b2lkIHN0YXRlbWVudExpc3RTdHJlYW1Ubyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0YXRlbWVudE5v
ZGU+ID4mIG5vZGVzLCBTb3VyY2VTdHJlYW0mIHMpCkBAIC04MDksMTIgKzgwOSwxMiBAQCB2b2lk
IEVtcHR5U3RhdGVtZW50Tm9kZTo6c3RyZWFtVG8oU291cmNlCiAKIHZvaWQgRXhwclN0YXRlbWVu
dE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBzIDw8IEVuZGwg
PDwgZXhwciA8PCAnOyc7CisgICAgcyA8PCBFbmRsIDw8IG1fZXhwciA8PCAnOyc7CiB9CiAKIHZv
aWQgVmFyU3RhdGVtZW50Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewot
ICAgIHMgPDwgRW5kbCA8PCAidmFyICIgPDwgZXhwciA8PCAnOyc7CisgICAgcyA8PCBFbmRsIDw8
ICJ2YXIgIiA8PCBtX2V4cHIgPDwgJzsnOwogfQogCiB2b2lkIElmTm9kZTo6c3RyZWFtVG8oU291
cmNlU3RyZWFtJiBzKSBjb25zdApAQCAtODMwLDc0ICs4MzAsNzQgQEAgdm9pZCBJZkVsc2VOb2Rl
OjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIAogCiB2b2lkIERvV2hpbGVOb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8PCBFbmRsIDw8ICJkbyAiIDw8IEluZGVu
dCA8PCBzdGF0ZW1lbnQgPDwgVW5pbmRlbnQgPDwgRW5kbAotICAgICAgICA8PCAid2hpbGUgKCIg
PDwgZXhwciA8PCAiKTsiOworICAgIHMgPDwgRW5kbCA8PCAiZG8gIiA8PCBJbmRlbnQgPDwgbV9z
dGF0ZW1lbnQgPDwgVW5pbmRlbnQgPDwgRW5kbAorICAgICAgICA8PCAid2hpbGUgKCIgPDwgbV9l
eHByIDw8ICIpOyI7CiB9CiAKIHZvaWQgV2hpbGVOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
IHMpIGNvbnN0CiB7Ci0gICAgcyA8PCBFbmRsIDw8ICJ3aGlsZSAoIiA8PCBleHByIDw8ICcpJyA8
PCBJbmRlbnQgPDwgc3RhdGVtZW50IDw8IFVuaW5kZW50OworICAgIHMgPDwgRW5kbCA8PCAid2hp
bGUgKCIgPDwgbV9leHByIDw8ICcpJyA8PCBJbmRlbnQgPDwgbV9zdGF0ZW1lbnQgPDwgVW5pbmRl
bnQ7CiB9CiAKIHZvaWQgRm9yTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAog
ewogICAgIHMgPDwgRW5kbCA8PCAiZm9yICgiCi0gICAgICAgIDw8IChleHByMVdhc1ZhckRlY2wg
PyAidmFyICIgOiAiIikKLSAgICAgICAgPDwgZXhwcjEKLSAgICAgICAgPDwgIjsgIiA8PCBleHBy
MgotICAgICAgICA8PCAiOyAiIDw8IGV4cHIzCi0gICAgICAgIDw8ICcpJyA8PCBJbmRlbnQgPDwg
c3RhdGVtZW50IDw8IFVuaW5kZW50OworICAgICAgICA8PCAobV9leHByMVdhc1ZhckRlY2wgPyAi
dmFyICIgOiAiIikKKyAgICAgICAgPDwgbV9leHByMQorICAgICAgICA8PCAiOyAiIDw8IG1fZXhw
cjIKKyAgICAgICAgPDwgIjsgIiA8PCBtX2V4cHIzCisgICAgICAgIDw8ICcpJyA8PCBJbmRlbnQg
PDwgbV9zdGF0ZW1lbnQgPDwgVW5pbmRlbnQ7CiB9CiAKIHZvaWQgRm9ySW5Ob2RlOjpzdHJlYW1U
byhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7CiAgICAgcyA8PCBFbmRsIDw8ICJmb3IgKCI7Ci0g
ICAgaWYgKGlkZW50SXNWYXJEZWNsKSB7CisgICAgaWYgKG1faWRlbnRJc1ZhckRlY2wpIHsKICAg
ICAgICAgcyA8PCAidmFyICI7Ci0gICAgICAgIGlmIChpbml0KQotICAgICAgICAgICAgcyA8PCBp
bml0OworICAgICAgICBpZiAobV9pbml0KQorICAgICAgICAgICAgcyA8PCBtX2luaXQ7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHMgPDwgUHJlY0xlZnRIYW5kU2lkZSA8PCBsZXhwcjsKKyAg
ICAgICAgICAgIHMgPDwgUHJlY0xlZnRIYW5kU2lkZSA8PCBtX2xleHByOwogICAgIH0gZWxzZQot
ICAgICAgICBzIDw8IFByZWNMZWZ0SGFuZFNpZGUgPDwgbGV4cHI7CisgICAgICAgIHMgPDwgUHJl
Y0xlZnRIYW5kU2lkZSA8PCBtX2xleHByOwogCi0gICAgcyA8PCAiIGluICIgPDwgZXhwciA8PCAn
KScgPDwgSW5kZW50IDw8IHN0YXRlbWVudCA8PCBVbmluZGVudDsKKyAgICBzIDw8ICIgaW4gIiA8
PCBtX2V4cHIgPDwgJyknIDw8IEluZGVudCA8PCBtX3N0YXRlbWVudCA8PCBVbmluZGVudDsKIH0K
IAogdm9pZCBDb250aW51ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsK
ICAgICBzIDw8IEVuZGwgPDwgImNvbnRpbnVlIjsKLSAgICBpZiAoIWlkZW50LmlzTnVsbCgpKQot
ICAgICAgICBzIDw8ICcgJyA8PCBpZGVudDsKKyAgICBpZiAoIW1faWRlbnQuaXNOdWxsKCkpCisg
ICAgICAgIHMgPDwgJyAnIDw8IG1faWRlbnQ7CiAgICAgcyA8PCAnOyc7CiB9CiAKIHZvaWQgQnJl
YWtOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7CiAgICAgcyA8PCBFbmRs
IDw8ICJicmVhayI7Ci0gICAgaWYgKCFpZGVudC5pc051bGwoKSkKLSAgICAgICAgcyA8PCAnICcg
PDwgaWRlbnQ7CisgICAgaWYgKCFtX2lkZW50LmlzTnVsbCgpKQorICAgICAgICBzIDw8ICcgJyA8
PCBtX2lkZW50OwogICAgIHMgPDwgJzsnOwogfQogCiB2b2lkIFJldHVybk5vZGU6OnN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKICAgICBzIDw8IEVuZGwgPDwgInJldHVybiI7Ci0g
ICAgaWYgKHZhbHVlKQotICAgICAgICBzIDw8ICcgJyA8PCB2YWx1ZTsKKyAgICBpZiAobV92YWx1
ZSkKKyAgICAgICAgcyA8PCAnICcgPDwgbV92YWx1ZTsKICAgICBzIDw8ICc7JzsKIH0KIAogdm9p
ZCBXaXRoTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHMgPDwg
RW5kbCA8PCAid2l0aCAoIiA8PCBleHByIDw8ICIpICIgPDwgc3RhdGVtZW50OworICAgIHMgPDwg
RW5kbCA8PCAid2l0aCAoIiA8PCBtX2V4cHIgPDwgIikgIiA8PCBtX3N0YXRlbWVudDsKIH0KIAog
dm9pZCBDYXNlQ2xhdXNlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewog
ICAgIHMgPDwgRW5kbDsKLSAgICBpZiAoZXhwcikKLSAgICAgICAgcyA8PCAiY2FzZSAiIDw8IGV4
cHI7CisgICAgaWYgKG1fZXhwcikKKyAgICAgICAgcyA8PCAiY2FzZSAiIDw8IG1fZXhwcjsKICAg
ICBlbHNlCiAgICAgICAgIHMgPDwgImRlZmF1bHQiOwogICAgIHMgPDwgIjoiIDw8IEluZGVudDsK
QEAgLTkxMyw1NCArOTEzLDU0IEBAIHZvaWQgQ2xhdXNlTGlzdE5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmUKIAogdm9pZCBDYXNlQmxvY2tOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNv
bnN0CiB7Ci0gICAgZm9yIChjb25zdCBDbGF1c2VMaXN0Tm9kZSogbiA9IGxpc3QxLmdldCgpOyBu
OyBuID0gbi0+Z2V0TmV4dCgpKQorICAgIGZvciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUqIG4gPSBt
X2xpc3QxLmdldCgpOyBuOyBuID0gbi0+Z2V0TmV4dCgpKQogICAgICAgICBzIDw8IG4tPmdldENs
YXVzZSgpOwotICAgIHMgPDwgZGVmOwotICAgIGZvciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUqIG4g
PSBsaXN0Mi5nZXQoKTsgbjsgbiA9IG4tPmdldE5leHQoKSkKKyAgICBzIDw8IG1fZGVmYXVsdENs
YXVzZTsKKyAgICBmb3IgKGNvbnN0IENsYXVzZUxpc3ROb2RlKiBuID0gbV9saXN0Mi5nZXQoKTsg
bjsgbiA9IG4tPmdldE5leHQoKSkKICAgICAgICAgcyA8PCBuLT5nZXRDbGF1c2UoKTsKIH0KIAog
dm9pZCBTd2l0Y2hOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAg
cyA8PCBFbmRsIDw8ICJzd2l0Y2ggKCIgPDwgZXhwciA8PCAiKSB7IgotICAgICAgICA8PCBJbmRl
bnQgPDwgYmxvY2sgPDwgVW5pbmRlbnQKKyAgICBzIDw8IEVuZGwgPDwgInN3aXRjaCAoIiA8PCBt
X2V4cHIgPDwgIikgeyIKKyAgICAgICAgPDwgSW5kZW50IDw8IG1fYmxvY2sgPDwgVW5pbmRlbnQK
ICAgICAgICAgPDwgRW5kbCA8PCAifSI7CiB9CiAKIHZvaWQgTGFiZWxOb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8PCBFbmRsIDw8IGxhYmVsIDw8ICI6IiA8
PCBJbmRlbnQgPDwgc3RhdGVtZW50IDw8IFVuaW5kZW50OworICAgIHMgPDwgRW5kbCA8PCBtX2xh
YmVsIDw8ICI6IiA8PCBJbmRlbnQgPDwgbV9zdGF0ZW1lbnQgPDwgVW5pbmRlbnQ7CiB9CiAKIHZv
aWQgVGhyb3dOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8
PCBFbmRsIDw8ICJ0aHJvdyAiIDw8IGV4cHIgPDwgJzsnOworICAgIHMgPDwgRW5kbCA8PCAidGhy
b3cgIiA8PCBtX2V4cHIgPDwgJzsnOwogfQogCiB2b2lkIFRyeU5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBzIDw8IEVuZGwgPDwgInRyeSAiIDw8IHRyeUJsb2Nr
OwotICAgIGlmIChjYXRjaEJsb2NrKQotICAgICAgICBzIDw8IEVuZGwgPDwgImNhdGNoICgiIDw8
IGV4Y2VwdGlvbklkZW50IDw8ICcpJyA8PCBjYXRjaEJsb2NrOwotICAgIGlmIChmaW5hbGx5Qmxv
Y2spCi0gICAgICAgIHMgPDwgRW5kbCA8PCAiZmluYWxseSAiIDw8IGZpbmFsbHlCbG9jazsKKyAg
ICBzIDw8IEVuZGwgPDwgInRyeSAiIDw8IG1fdHJ5QmxvY2s7CisgICAgaWYgKG1fY2F0Y2hCbG9j
aykKKyAgICAgICAgcyA8PCBFbmRsIDw8ICJjYXRjaCAoIiA8PCBtX2V4Y2VwdGlvbklkZW50IDw8
ICcpJyA8PCBtX2NhdGNoQmxvY2s7CisgICAgaWYgKG1fZmluYWxseUJsb2NrKQorICAgICAgICBz
IDw8IEVuZGwgPDwgImZpbmFsbHkgIiA8PCBtX2ZpbmFsbHlCbG9jazsKIH0KIAogdm9pZCBQYXJh
bWV0ZXJOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8PCBp
ZDsKLSAgICBmb3IgKFBhcmFtZXRlck5vZGUqIG4gPSBuZXh0LmdldCgpOyBuOyBuID0gbi0+bmV4
dC5nZXQoKSkKLSAgICAgICAgcyA8PCAiLCAiIDw8IG4tPmlkOworICAgIHMgPDwgbV9pZGVudDsK
KyAgICBmb3IgKFBhcmFtZXRlck5vZGUqIG4gPSBtX25leHQuZ2V0KCk7IG47IG4gPSBuLT5tX25l
eHQuZ2V0KCkpCisgICAgICAgIHMgPDwgIiwgIiA8PCBuLT5tX2lkZW50OwogfQogCiB2b2lkIEZ1
bmNEZWNsTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHMgPDwg
RW5kbCA8PCAiZnVuY3Rpb24gIiA8PCBpZGVudCA8PCAnKCcgPDwgcGFyYW0gPDwgJyknIDw8IGJv
ZHk7CisgICAgcyA8PCBFbmRsIDw8ICJmdW5jdGlvbiAiIDw8IG1faWRlbnQgPDwgJygnIDw8IG1f
cGFyYW1ldGVyIDw8ICcpJyA8PCBtX2JvZHk7CiB9CiAKIHZvaWQgRnVuY0V4cHJOb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8PCAiZnVuY3Rpb24gIiA8PCBp
ZGVudCA8PCAnKCcgPDwgcGFyYW0gPDwgJyknIDw8IGJvZHk7CisgICAgcyA8PCAiZnVuY3Rpb24g
IiA8PCBtX2lkZW50IDw8ICcoJyA8PCBtX3BhcmFtZXRlciA8PCAnKScgPDwgbV9ib2R5OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IGtqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL25vZGVzLmNwcAkocmV2aXNpb24gMjk4MTUpCisrKyBranMvbm9kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MjksNyArNTI5LDcgQEAgSlNWYWx1ZSAqVGhpc05vZGU6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZQogSlNWYWx1ZSogUmVzb2x2ZU5vZGU6OmlubGluZUV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgLy8gQ2hlY2sgZm9yIG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5p
dHkuCi0gIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBpZGVudCkpOworICBBU1NFUlQoIWNh
blNraXBMb29rdXAoZXhlYywgbV9pZGVudCkpOwogCiAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWlu
ID0gZXhlYy0+c2NvcGVDaGFpbigpOwogICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IGNoYWlu
LmJlZ2luKCk7CkBAIC01NDIsMTMgKzU0MiwxMyBAQCBKU1ZhbHVlKiBSZXNvbHZlTm9kZTo6aW5s
aW5lRXZhbHVhdGUoRXhlCiAgIGRvIHsgCiAgICAgSlNPYmplY3QgKm8gPSAqaXRlcjsKIAotICAg
IGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKQotICAgICAgcmV0dXJu
IHNsb3QuZ2V0VmFsdWUoZXhlYywgbywgaWRlbnQpOworICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNs
b3QoZXhlYywgbV9pZGVudCwgc2xvdCkpCisgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVj
LCBvLCBtX2lkZW50KTsKICAgICAKICAgICArK2l0ZXI7CiAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5k
KTsKIAotICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KTsK
KyAgcmV0dXJuIHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBtX2lkZW50KTsKIH0K
IAogSlNWYWx1ZSogUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTU4
Niw3ICs1ODYsNyBAQCB1aW50MzJfdCBSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFCiAK
IHZvaWQgUmVzb2x2ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikKIHsKLSAgICBzaXplX3Qg
aW5kZXggPSBzeW1ib2xUYWJsZS5nZXQoaWRlbnQudXN0cmluZygpLnJlcCgpKTsKKyAgICBzaXpl
X3QgaW5kZXggPSBzeW1ib2xUYWJsZS5nZXQobV9pZGVudC51c3RyaW5nKCkucmVwKCkpOwogICAg
IGlmIChpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCiAgICAgICAgIG5ldyAodGhpcykg
TG9jYWxWYXJBY2Nlc3NOb2RlKGluZGV4KTsKIH0KQEAgLTU5NCw3ICs1OTQsNyBAQCB2b2lkIFJl
c29sdmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzCiBKU1ZhbHVlKiBMb2NhbFZhckFjY2Vz
c05vZGU6OmlubGluZUV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoZXhl
Yy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIHJl
dHVybiBleGVjLT5sb2NhbFN0b3JhZ2UoKVtpbmRleF0udmFsdWU7CisgICAgcmV0dXJuIGV4ZWMt
PmxvY2FsU3RvcmFnZSgpW21faW5kZXhdLnZhbHVlOwogfQogCiBKU1ZhbHVlKiBMb2NhbFZhckFj
Y2Vzc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTYyNiwxMCArNjI2LDEwIEBA
IHVpbnQzMl90IExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb1UKIAogdm9pZCBFbGVtZW50
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBpZiAobmV4dCkKLSAgICAgICAgbm9k
ZVN0YWNrLmFwcGVuZChuZXh0LmdldCgpKTsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgbm9kZVN0
YWNrLmFwcGVuZChub2RlLmdldCgpKTsKKyAgICBpZiAobV9uZXh0KQorICAgICAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fbmV4dC5nZXQoKSk7CisgICAgQVNTRVJUKG1fbm9kZSk7CisgICAgbm9kZVN0
YWNrLmFwcGVuZChtX25vZGUuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDExLjEuNApAQCAtNjM3LDEw
ICs2MzcsMTAgQEAgSlNWYWx1ZSAqRWxlbWVudE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZQogewog
ICBKU09iamVjdCogYXJyYXkgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29u
c3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKICAgaW50IGxl
bmd0aCA9IDA7Ci0gIGZvciAoRWxlbWVudE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5n
ZXQoKSkgewotICAgIEpTVmFsdWUgKnZhbCA9IG4tPm5vZGUtPmV2YWx1YXRlKGV4ZWMpOworICBm
b3IgKEVsZW1lbnROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm1fbmV4dC5nZXQoKSkgeworICAg
IEpTVmFsdWUgKnZhbCA9IG4tPm1fbm9kZS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OVkFMVUUKLSAgICBsZW5ndGggKz0gbi0+ZWxpc2lvbjsKKyAgICBsZW5ndGggKz0g
bi0+bV9lbGlzaW9uOwogICAgIGFycmF5LT5wdXQoZXhlYywgbGVuZ3RoKyssIHZhbCk7CiAgIH0K
ICAgcmV0dXJuIGFycmF5OwpAQCAtNjUwLDggKzY1MCw4IEBAIEpTVmFsdWUgKkVsZW1lbnROb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUKIAogdm9pZCBBcnJheU5vZGU6Om9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3Rh
Y2spCiB7Ci0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQoZWxlbWVu
dC5nZXQoKSk7CisgICAgaWYgKG1fZWxlbWVudCkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVuZCht
X2VsZW1lbnQuZ2V0KCkpOwogfQogCiAKQEAgLTY2MSwxOCArNjYxLDE4IEBAIEpTVmFsdWUgKkFy
cmF5Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICoKICAgSlNPYmplY3QgKmFycmF5OwogICBpbnQg
bGVuZ3RoOwogCi0gIGlmIChlbGVtZW50KSB7Ci0gICAgYXJyYXkgPSBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KGVsZW1lbnQtPmV2YWx1YXRlKGV4ZWMpKTsKKyAgaWYgKG1fZWxlbWVudCkgeworICAg
IGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihtX2VsZW1lbnQtPmV2YWx1YXRlKGV4ZWMp
KTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIGxlbmd0aCA9IG9wdCA/IGFycmF5
LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvSW50MzIoZXhlYykg
OiAwOworICAgIGxlbmd0aCA9IG1fb3B0ID8gYXJyYXktPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKS0+dG9JbnQzMihleGVjKSA6IDA7CiAgIH0gZWxzZSB7CiAgICAgSlNW
YWx1ZSogbmV3QXJyID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheUNvbnN0cnVj
dG9yKCktPmNvbnN0cnVjdChleGVjLCBleGVjLT5lbXB0eUxpc3QoKSk7CiAgICAgYXJyYXkgPSBz
dGF0aWNfY2FzdDxKU09iamVjdCo+KG5ld0Fycik7CiAgICAgbGVuZ3RoID0gMDsKICAgfQogCi0g
IGlmIChvcHQpCi0gICAgYXJyYXktPnB1dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoLCBqc051bWJlcihlbGlzaW9uICsgbGVuZ3RoKSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsK
KyAgaWYgKG1fb3B0KQorICAgIGFycmF5LT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIobV9lbGlzaW9uICsgbGVuZ3RoKSwgRG9udEVudW0gfCBEb250RGVs
ZXRlKTsKIAogICByZXR1cm4gYXJyYXk7CiB9CkBAIC02ODEsMTUgKzY4MSwxNSBAQCBKU1ZhbHVl
ICpBcnJheU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqCiAKIHZvaWQgT2JqZWN0TGl0ZXJhbE5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgaWYgKGxpc3QpCi0gICAgICAgIG5vZGVT
dGFjay5hcHBlbmQobGlzdC5nZXQoKSk7CisgICAgaWYgKG1fbGlzdCkKKyAgICAgICAgbm9kZVN0
YWNrLmFwcGVuZChtX2xpc3QuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDExLjEuNQogSlNWYWx1ZSAq
T2JqZWN0TGl0ZXJhbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgaWYgKGxp
c3QpCi0gICAgcmV0dXJuIGxpc3QtPmV2YWx1YXRlKGV4ZWMpOworICBpZiAobV9saXN0KQorICAg
IHJldHVybiBtX2xpc3QtPmV2YWx1YXRlKGV4ZWMpOwogCiAgIHJldHVybiBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPm9iamVjdENvbnN0cnVjdG9yKCktPmNvbnN0cnVjdChleGVjLCBleGVj
LT5lbXB0eUxpc3QoKSk7CiB9CkBAIC02OTgsOSArNjk4LDkgQEAgSlNWYWx1ZSAqT2JqZWN0TGl0
ZXJhbE5vZGU6OmV2YWx1YXRlKEV4ZQogCiB2b2lkIFByb3BlcnR5TGlzdE5vZGU6Om9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JiBub2RlU3RhY2spCiB7Ci0gICAgaWYgKG5leHQpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQo
bmV4dC5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChub2RlLmdldCgpKTsKKyAgICBpZiAo
bV9uZXh0KQorICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5nZXQoKSk7CisgICAgbm9k
ZVN0YWNrLmFwcGVuZChtX25vZGUuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDExLjEuNQpAQCAtNzA4
LDIxICs3MDgsMjEgQEAgSlNWYWx1ZSAqUHJvcGVydHlMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhlYwog
ewogICBKU09iamVjdCogb2JqID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RD
b25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICAKLSAg
Zm9yIChQcm9wZXJ0eUxpc3ROb2RlICpwID0gdGhpczsgcDsgcCA9IHAtPm5leHQuZ2V0KCkpIHsK
LSAgICBKU1ZhbHVlICp2ID0gcC0+bm9kZS0+YXNzaWduLT5ldmFsdWF0ZShleGVjKTsKKyAgZm9y
IChQcm9wZXJ0eUxpc3ROb2RlICpwID0gdGhpczsgcDsgcCA9IHAtPm1fbmV4dC5nZXQoKSkgewor
ICAgIEpTVmFsdWUgKnYgPSBwLT5tX25vZGUtPm1fYXNzaWduLT5ldmFsdWF0ZShleGVjKTsKICAg
ICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIAotICAgIHN3aXRjaCAocC0+bm9kZS0+dHlw
ZSkgeworICAgIHN3aXRjaCAocC0+bV9ub2RlLT5tX3R5cGUpIHsKICAgICAgIGNhc2UgUHJvcGVy
dHlOb2RlOjpHZXR0ZXI6CiAgICAgICAgIEFTU0VSVCh2LT5pc09iamVjdCgpKTsKLSAgICAgICAg
b2JqLT5kZWZpbmVHZXR0ZXIoZXhlYywgcC0+bm9kZS0+bmFtZSgpLCBzdGF0aWNfY2FzdDxKU09i
amVjdCAqPih2KSk7CisgICAgICAgIG9iai0+ZGVmaW5lR2V0dGVyKGV4ZWMsIHAtPm1fbm9kZS0+
bmFtZSgpLCBzdGF0aWNfY2FzdDxKU09iamVjdCAqPih2KSk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBQcm9wZXJ0eU5vZGU6OlNldHRlcjoKICAgICAgICAgQVNTRVJUKHYtPmlzT2JqZWN0
KCkpOwotICAgICAgICBvYmotPmRlZmluZVNldHRlcihleGVjLCBwLT5ub2RlLT5uYW1lKCksIHN0
YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYpKTsKKyAgICAgICAgb2JqLT5kZWZpbmVTZXR0ZXIoZXhl
YywgcC0+bV9ub2RlLT5uYW1lKCksIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQ6Ci0gICAgICAgIG9i
ai0+cHV0KGV4ZWMsIHAtPm5vZGUtPm5hbWUoKSwgdik7CisgICAgICAgIG9iai0+cHV0KGV4ZWMs
IHAtPm1fbm9kZS0+bmFtZSgpLCB2KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CkBAIC03
MzQsNyArNzM0LDcgQEAgSlNWYWx1ZSAqUHJvcGVydHlMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhlYwog
CiB2b2lkIFByb3BlcnR5Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYs
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKGFzc2lnbi5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2Fzc2lnbi5n
ZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEuMS41CkBAIC03NDgsMTYgKzc0OCwxNiBAQCBKU1ZhbHVl
ICpQcm9wZXJ0eU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0CiAKIHZvaWQgQnJhY2tldEFjY2Vzc29y
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIy
LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgpKTsKKyAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fc3Vic2NyaXB0LmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFz
ZS5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEuMi4xYQogSlNWYWx1ZSogQnJhY2tldEFjY2Vzc29y
Tm9kZTo6aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlKiB2MSA9
IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgSlNWYWx1ZSogdjEgPSBtX2Jhc2UtPmV2YWx1YXRl
KGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICBKU1ZhbHVlKiB2MiA9IGV4cHIy
LT5ldmFsdWF0ZShleGVjKTsKKyAgSlNWYWx1ZSogdjIgPSBtX3N1YnNjcmlwdC0+ZXZhbHVhdGUo
ZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgIEpTT2JqZWN0KiBvID0gdjEtPnRv
T2JqZWN0KGV4ZWMpOwogICB1aW50MzJfdCBpOwpAQCAtODAzLDE1ICs4MDMsMTUgQEAgdWludDMy
X3QgQnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUbwogCiB2b2lkIERvdEFjY2Vzc29yTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0
KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKIH0KIAogLy8gRUNNQSAx
MS4yLjFiCiBKU1ZhbHVlKiBEb3RBY2Nlc3Nvck5vZGU6OmlubGluZUV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgICAg
SlNWYWx1ZSogdiA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKLSAgICByZXR1cm4gdi0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCBpZGVudCk7
CisgICAgcmV0dXJuIHYtPnRvT2JqZWN0KGV4ZWMpLT5nZXQoZXhlYywgbV9pZGVudCk7CiB9CiAK
IEpTVmFsdWUqIERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQpAQCAt
ODUxLDE3ICs4NTEsMTcgQEAgdWludDMyX3QgRG90QWNjZXNzb3JOb2RlOjpldmFsdWF0ZVRvVUlu
dAogCiB2b2lkIEFyZ3VtZW50TGlzdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9s
VGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAg
aWYgKG5leHQpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobmV4dC5nZXQoKSk7Ci0gICAgQVNT
RVJUKGV4cHIpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwci5nZXQoKSk7CisgICAgaWYgKG1f
bmV4dCkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChtX25leHQuZ2V0KCkpOworICAgIEFTU0VS
VChtX2V4cHIpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsKIH0KIAogLy8g
RUNNQSAxMS4yLjQKIHZvaWQgQXJndW1lbnRMaXN0Tm9kZTo6ZXZhbHVhdGVMaXN0KEV4ZWNTdGF0
ZSogZXhlYywgTGlzdCYgbGlzdCkKIHsKLSAgZm9yIChBcmd1bWVudExpc3ROb2RlICpuID0gdGhp
czsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpIHsKLSAgICBKU1ZhbHVlICp2ID0gbi0+ZXhwci0+ZXZh
bHVhdGUoZXhlYyk7CisgIGZvciAoQXJndW1lbnRMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBu
LT5tX25leHQuZ2V0KCkpIHsKKyAgICBKU1ZhbHVlICp2ID0gbi0+bV9leHByLT5ldmFsdWF0ZShl
eGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WT0lECiAgICAgbGlzdC5hcHBlbmQodik7CiAg
IH0KQEAgLTg3MSwzOCArODcxLDM4IEBAIHZvaWQgQXJndW1lbnRMaXN0Tm9kZTo6ZXZhbHVhdGVM
aXN0KEV4ZWMKIAogdm9pZCBBcmd1bWVudHNOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5
bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewot
ICAgIGlmIChsaXN0Tm9kZSkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChsaXN0Tm9kZS5nZXQo
KSk7CisgICAgaWYgKG1fbGlzdE5vZGUpCisgICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9saXN0
Tm9kZS5nZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOZXdF
eHByTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgTmV3RXhw
ck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgaWYgKGFyZ3MpCi0gICAgICAgIG5v
ZGVTdGFjay5hcHBlbmQoYXJncy5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByLmdl
dCgpKTsKKyAgICBpZiAobV9hcmdzKQorICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fYXJncy5n
ZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwogfQogCiAvLyBFQ01B
IDExLjIuMgogCiBKU1ZhbHVlKiBOZXdFeHByTm9kZTo6aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjKQogewotICBKU1ZhbHVlKiB2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgIEpTVmFs
dWUqIHYgPSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQogCiAgIExpc3QgYXJnTGlzdDsKLSAgaWYgKGFyZ3MpIHsKLSAgICBhcmdzLT5ldmFsdWF0ZUxp
c3QoZXhlYywgYXJnTGlzdCk7CisgIGlmIChtX2FyZ3MpIHsKKyAgICBtX2FyZ3MtPmV2YWx1YXRl
TGlzdChleGVjLCBhcmdMaXN0KTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICB9CiAK
ICAgaWYgKCF2LT5pc09iamVjdCgpKQotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFuIG9iamVj
dC4gQ2Fubm90IGJlIHVzZWQgd2l0aCBuZXcuIiwgdiwgZXhwci5nZXQoKSk7CisgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNz
aW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoIG5ldy4iLCB2LCBt
X2V4cHIuZ2V0KCkpOwogCiAgIEpTT2JqZWN0ICpjb25zdHIgPSBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KHYpOwogICBpZiAoIWNvbnN0ci0+aW1wbGVtZW50c0NvbnN0cnVjdCgpKQotICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVz
c2lvbiAlcykgaXMgbm90IGEgY29uc3RydWN0b3IuIENhbm5vdCBiZSB1c2VkIHdpdGggbmV3LiIs
IHYsIGV4cHIuZ2V0KCkpOworICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwg
IlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGEgY29uc3RydWN0b3Iu
IENhbm5vdCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIG1fZXhwci5nZXQoKSk7CiAKICAgcmV0dXJu
IGNvbnN0ci0+Y29uc3RydWN0KGV4ZWMsIGFyZ0xpc3QpOwogfQpAQCAtOTQyLDI4ICs5NDIsMjgg
QEAgdWludDMyX3QgTmV3RXhwck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoRQogCiB2b2lkIEZ1bmN0
aW9uQ2FsbFZhbHVlTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBub2RlU3RhY2su
YXBwZW5kKGFyZ3MuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwci5nZXQoKSk7Cisg
ICAgbm9kZVN0YWNrLmFwcGVuZChtX2FyZ3MuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9leHByLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMS4yLjMKIEpTVmFsdWUgKkZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBKU1ZhbHVlICp2ID0g
ZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgIEpTVmFsdWUgKnYgPSBtX2V4cHItPmV2YWx1YXRlKGV4
ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgIGlmICghdi0+aXNPYmplY3QoKSkg
ewotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1
bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9iamVjdC4iLCB2LCBleHByLmdldCgpKTsKKyAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9m
IGV4cHJlc3Npb24gJXMpIGlzIG5vdCBvYmplY3QuIiwgdiwgbV9leHByLmdldCgpKTsKICAgfQog
ICAKICAgSlNPYmplY3QgKmZ1bmMgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpOwogCiAgIGlm
ICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkgewotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIk9iamVjdCAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGRvZXMgbm90
IGFsbG93IGNhbGxzLiIsIHYsIGV4cHIuZ2V0KCkpOworICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvciwgIk9iamVjdCAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGRvZXMg
bm90IGFsbG93IGNhbGxzLiIsIHYsIG1fZXhwci5nZXQoKSk7CiAgIH0KIAogICBMaXN0IGFyZ0xp
c3Q7Ci0gIGFyZ3MtPmV2YWx1YXRlTGlzdChleGVjLCBhcmdMaXN0KTsKKyAgbV9hcmdzLT5ldmFs
dWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAg
SlNPYmplY3QgKnRoaXNPYmogPSAgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwpAQCAtOTcz
LDkgKzk3Myw5IEBAIEpTVmFsdWUgKkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZXZhbHVhdGUKIAog
dm9pZCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKGFyZ3MuZ2V0KCkpOworICAgIG5vZGVTdGFj
ay5hcHBlbmQobV9hcmdzLmdldCgpKTsKIAotICAgIHNpemVfdCBpbmRleCA9IHN5bWJvbFRhYmxl
LmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpOworICAgIHNpemVfdCBpbmRleCA9IHN5bWJvbFRh
YmxlLmdldChtX2lkZW50LnVzdHJpbmcoKS5yZXAoKSk7CiAgICAgaWYgKGluZGV4ICE9IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSkKICAgICAgICAgbmV3ICh0aGlzKSBMb2NhbFZhckZ1bmN0aW9uQ2Fs
bE5vZGUoaW5kZXgpOwogfQpAQCAtOTg0LDcgKzk4NCw3IEBAIHZvaWQgRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6Om9wdGltaXplVmEKIEpTVmFsdWUqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpp
bmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgIC8vIENoZWNrIGZvciBtaXNzZWQg
b3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LgotICBBU1NFUlQoIWNhblNraXBMb29rdXAoZXhlYywg
aWRlbnQpKTsKKyAgQVNTRVJUKCFjYW5Ta2lwTG9va3VwKGV4ZWMsIG1faWRlbnQpKTsKIAogICBj
b25zdCBTY29wZUNoYWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwpAQCAtOTk0LDIzICs5OTQsMjMgQEAgSlNW
YWx1ZSogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmlubGluZQogICBBU1NFUlQoaXRlciAhPSBl
bmQpOwogCiAgIFByb3BlcnR5U2xvdCBzbG90OwotICBKU09iamVjdCAqYmFzZTsKKyAgSlNPYmpl
Y3QqIGJhc2U7CiAgIGRvIHsgCiAgICAgYmFzZSA9ICppdGVyOwotICAgIGlmIChiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICBKU1ZhbHVlICp2ID0gc2xv
dC5nZXRWYWx1ZShleGVjLCBiYXNlLCBpZGVudCk7CisgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5
U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0
VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7CiAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQogICAgICAgICAKICAgICAgIGlmICghdi0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9u
ICVzKSBpcyBub3Qgb2JqZWN0LiIsIHYsIGlkZW50KTsKKyAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBp
cyBub3Qgb2JqZWN0LiIsIHYsIG1faWRlbnQpOwogICAgICAgCiAgICAgICBKU09iamVjdCAqZnVu
YyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odik7CiAgICAgICAKICAgICAgIGlmICghZnVuYy0+
aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yLCAiT2JqZWN0ICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgZG9lcyBub3QgYWxsb3cg
Y2FsbHMuIiwgdiwgaWRlbnQpOworICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IsICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBkb2VzIG5vdCBhbGxv
dyBjYWxscy4iLCB2LCBtX2lkZW50KTsKICAgICAgIAogICAgICAgTGlzdCBhcmdMaXN0OwotICAg
ICAgYXJncy0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGFyZ0xpc3QpOworICAgICAgbV9hcmdzLT5ldmFs
dWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7CiAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQog
ICAgICAgICAKICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gYmFzZTsKQEAgLTEwMjgsNyArMTAy
OCw3IEBAIEpTVmFsdWUqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjppbmxpbmUKICAgICArK2l0
ZXI7CiAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKICAgCi0gIHJldHVybiB0aHJvd1VuZGVmaW5l
ZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpOworICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJp
YWJsZUVycm9yKGV4ZWMsIG1faWRlbnQpOwogfQogCiBKU1ZhbHVlKiBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTA2OCwxNyArMTA2OCwxNyBA
QCBKU1ZhbHVlKiBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmlubGluCiB7CiAgICAgQVNTRVJU
KGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKIAot
ICAgIEpTVmFsdWUqIHYgPSBleGVjLT5sb2NhbFN0b3JhZ2UoKVtpbmRleF0udmFsdWU7CisgICAg
SlNWYWx1ZSogdiA9IGV4ZWMtPmxvY2FsU3RvcmFnZSgpW21faW5kZXhdLnZhbHVlOwogCiAgICAg
aWYgKCF2LT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBvYmplY3Qu
IiwgdiwgaWRlbnQpOworICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Is
ICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBvYmplY3QuIiwgdiwg
bV9pZGVudCk7CiAgICAgICAKICAgICBKU09iamVjdCogZnVuYyA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4odik7CiAgICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHBy
ZXNzaW9uICVzKSBkb2VzIG5vdCBhbGxvdyBjYWxscy4iLCB2LCBpZGVudCk7CisgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIk9iamVjdCAlcyAocmVzdWx0IG9mIGV4
cHJlc3Npb24gJXMpIGRvZXMgbm90IGFsbG93IGNhbGxzLiIsIHYsIG1faWRlbnQpOwogICAgICAg
CiAgICAgTGlzdCBhcmdMaXN0OwotICAgIGFyZ3MtPmV2YWx1YXRlTGlzdChleGVjLCBhcmdMaXN0
KTsKKyAgICBtX2FyZ3MtPmV2YWx1YXRlTGlzdChleGVjLCBhcmdMaXN0KTsKICAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQogCiAgICAgcmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpLCBhcmdMaXN0KTsKQEAgLTExMTksMTggKzExMTksMTggQEAgdWlu
dDMyX3QgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdQogCiB2b2lkIEZ1bmN0aW9uQ2Fs
bEJyYWNrZXROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAgIG5vZGVTdGFjay5hcHBl
bmQoYXJncy5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChzdWJzY3JpcHQuZ2V0KCkpOwot
ICAgIG5vZGVTdGFjay5hcHBlbmQoYmFzZS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZCht
X2FyZ3MuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9zdWJzY3JpcHQuZ2V0KCkpOwor
ICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMS4yLjMK
IEpTVmFsdWUgKkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4
ZWMpCiB7Ci0gIEpTVmFsdWUgKmJhc2VWYWwgPSBiYXNlLT5ldmFsdWF0ZShleGVjKTsKKyAgSlNW
YWx1ZSAqYmFzZVZhbCA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCiAKLSAgSlNWYWx1ZSAqc3Vic2NyaXB0VmFsID0gc3Vic2NyaXB0LT5ldmFsdWF0
ZShleGVjKTsKKyAgSlNWYWx1ZSAqc3Vic2NyaXB0VmFsID0gbV9zdWJzY3JpcHQtPmV2YWx1YXRl
KGV4ZWMpOwogCiAgIEpTT2JqZWN0ICpiYXNlT2JqID0gYmFzZVZhbC0+dG9PYmplY3QoZXhlYyk7
CiAgIHVpbnQzMl90IGk7CkBAIC0xMTUzLDE3ICsxMTUzLDE3IEBAIEpTVmFsdWUgKkZ1bmN0aW9u
Q2FsbEJyYWNrZXROb2RlOjpldmFsdWEKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgCiAg
IGlmICghZnVuY1ZhbC0+aXNPYmplY3QoKSkgewotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlc1slc10pIGlzIG5v
dCBvYmplY3QuIiwgZnVuY1ZhbCwgYmFzZS5nZXQoKSwgc3Vic2NyaXB0LmdldCgpKTsKKyAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4
cHJlc3Npb24gJXNbJXNdKSBpcyBub3Qgb2JqZWN0LiIsIGZ1bmNWYWwsIG1fYmFzZS5nZXQoKSwg
bV9zdWJzY3JpcHQuZ2V0KCkpOwogICB9CiAgIAogICBKU09iamVjdCAqZnVuYyA9IHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4oZnVuY1ZhbCk7CiAKICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgp
KSB7Ci0gICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiT2JqZWN0ICVzIChy
ZXN1bHQgb2YgZXhwcmVzc2lvbiAlc1slc10pIGRvZXMgbm90IGFsbG93IGNhbGxzLiIsIGZ1bmNW
YWwsIGJhc2UuZ2V0KCksIHN1YnNjcmlwdC5nZXQoKSk7CisgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yLCAiT2JqZWN0ICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlc1slc10p
IGRvZXMgbm90IGFsbG93IGNhbGxzLiIsIGZ1bmNWYWwsIG1fYmFzZS5nZXQoKSwgbV9zdWJzY3Jp
cHQuZ2V0KCkpOwogICB9CiAKICAgTGlzdCBhcmdMaXN0OwotICBhcmdzLT5ldmFsdWF0ZUxpc3Qo
ZXhlYywgYXJnTGlzdCk7CisgIG1fYXJncy0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGFyZ0xpc3QpOwog
ICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgIEpTT2JqZWN0ICp0aGlzT2JqID0gYmFzZU9i
ajsKQEAgLTExODgsMzEgKzExODgsMzEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmRvdEV4cHJEb2Vz
Tm90QWxsb3dDYQogCiB2b2lkIEZ1bmN0aW9uQ2FsbERvdE5vZGU6Om9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3Rh
Y2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChhcmdzLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKGJhc2UuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsK
KyAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEuMi4z
CiBKU1ZhbHVlKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjppbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gIEpTVmFsdWUgKmJhc2VWYWwgPSBiYXNlLT5ldmFsdWF0ZShleGVjKTsKKyAg
SlNWYWx1ZSAqYmFzZVZhbCA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCiAKICAgSlNPYmplY3QgKmJhc2VPYmogPSBiYXNlVmFsLT50b09iamVjdChl
eGVjKTsKICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gIEpTVmFsdWUgKmZ1bmNWYWwgPSBiYXNlT2Jq
LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVj
LCBiYXNlT2JqLCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpOworICBKU1ZhbHVlICpmdW5jVmFsID0g
YmFzZU9iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8gc2xvdC5nZXRW
YWx1ZShleGVjLCBiYXNlT2JqLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7CiAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCiAKICAgaWYgKCFmdW5jVmFsLT5pc09iamVjdCgpKQotICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgZG90RXhwck5vdEFuT2JqZWN0U3RyaW5nKCks
IGZ1bmNWYWwsIGJhc2UuZ2V0KCksIGlkZW50KTsKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IsIGRvdEV4cHJOb3RBbk9iamVjdFN0cmluZygpLCBmdW5jVmFsLCBtX2Jhc2Uu
Z2V0KCksIG1faWRlbnQpOwogICAKICAgSlNPYmplY3QgKmZ1bmMgPSBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KGZ1bmNWYWwpOwogCiAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsIGRvdEV4cHJEb2VzTm90QWxsb3dDYWxs
c1N0cmluZygpLCBmdW5jVmFsLCBiYXNlLmdldCgpLCBpZGVudCk7CisgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yLCBkb3RFeHByRG9lc05vdEFsbG93Q2FsbHNTdHJpbmcoKSwg
ZnVuY1ZhbCwgbV9iYXNlLmdldCgpLCBtX2lkZW50KTsKIAogICBMaXN0IGFyZ0xpc3Q7Ci0gIGFy
Z3MtPmV2YWx1YXRlTGlzdChleGVjLCBhcmdMaXN0KTsKKyAgbV9hcmdzLT5ldmFsdWF0ZUxpc3Qo
ZXhlYywgYXJnTGlzdCk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgSlNPYmplY3Qg
KnRoaXNPYmogPSBiYXNlT2JqOwpAQCAtMTYyNCwxMyArMTYyNCwxMyBAQCBKU1ZhbHVlICpEZWxl
dGVWYWx1ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTCiAKIHZvaWQgVm9pZE5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBu
b2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByLmdldCgpKTsKKyAgICBub2Rl
U3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEuNC4yCiBKU1ZhbHVl
ICpWb2lkTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBleHByLT5ldmFsdWF0
ZShleGVjKTsKKyAgbV9leHByLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKIAogICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTE5ODMsMzMgKzE5ODMsMzMgQEAg
dWludDMyX3QgVW5hcnlQbHVzTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMgogCiB2b2lkIE5lZ2F0ZU5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByLmdl
dCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7CiB9CiAKIC8vIEVDTUEg
MTEuNC43Ci1KU1ZhbHVlICpOZWdhdGVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitK
U1ZhbHVlKiBOZWdhdGVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8g
Tm8gbmVlZCB0byBjaGVjayBleGNlcHRpb24sIGNhbGxlciB3aWxsIGRvIHNvIHJpZ2h0IGFmdGVy
IGV2YWx1YXRlKCkKLSAgICByZXR1cm4ganNOdW1iZXIoLWV4cHItPmV2YWx1YXRlVG9OdW1iZXIo
ZXhlYykpOworICAgIHJldHVybiBqc051bWJlcigtbV9leHByLT5ldmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpKTsKIH0KIAogZG91YmxlIE5lZ2F0ZU5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZXhjZXB0aW9uLCBjYWxsZXIgd2ls
bCBkbyBzbyByaWdodCBhZnRlciBldmFsdWF0ZVRvTnVtYmVyKCkKLSAgICByZXR1cm4gLWV4cHIt
PmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgcmV0dXJuIC1tX2V4cHItPmV2YWx1YXRlVG9O
dW1iZXIoZXhlYyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaXR3
aXNlTm90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgQml0d2lz
ZU5vdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChl
eHByLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7CiB9CiAKIC8v
IEVDTUEgMTEuNC44CiBpbnQzMl90IEJpdHdpc2VOb3ROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50
MzIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiB+ZXhwci0+ZXZhbHVhdGVUb0ludDMy
KGV4ZWMpOworICAgIHJldHVybiB+bV9leHByLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAK
IEpTVmFsdWUqIEJpdHdpc2VOb3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0y
MDQxLDM0ICsyMDQxLDM0IEBAIHVpbnQzMl90IEJpdHdpc2VOb3ROb2RlOjpldmFsdWF0ZVRvVUlu
dDMKIAogdm9pZCBMb2dpY2FsTm90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xU
YWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHBy
LmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMS40LjkKIEpTVmFsdWUqIExvZ2ljYWxOb3ROb2RlOjpl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbighZXhwci0+
ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOworICAgIHJldHVybiBqc0Jvb2xlYW4oIW1fZXhwci0+
ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwogfQogCiBib29sIExvZ2ljYWxOb3ROb2RlOjpldmFs
dWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuICFleHByLT5ldmFs
dWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICByZXR1cm4gIW1fZXhwci0+ZXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNdWx0aXBs
aWNhdGl2ZSBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lk
IE11bHROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAgIG5vZGVTdGFjay5hcHBlbmQo
dGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQodGVybTIuZ2V0KCkpOworICAgIG5v
ZGVTdGFjay5hcHBlbmQobV90ZXJtMS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rl
cm0yLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMS41LjEKIGRvdWJsZSBNdWx0Tm9kZTo6aW5saW5l
RXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIG4xID0gdGVy
bTEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIG4xID0gbV90ZXJtMS0+ZXZh
bHVhdGVUb051bWJlcihleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICBk
b3VibGUgbjIgPSB0ZXJtMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbjIg
PSBtX3Rlcm0yLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBuMSAqIG4yOwog
fQogCkBAIC0yMDk5LDE2ICsyMDk5LDE2IEBAIHVpbnQzMl90IE11bHROb2RlOjpldmFsdWF0ZVRv
VUludDMyKEV4ZWMKIAogdm9pZCBEaXZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJv
bFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAg
IG5vZGVTdGFjay5hcHBlbmQodGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQodGVy
bTIuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMS5nZXQoKSk7CisgICAgbm9k
ZVN0YWNrLmFwcGVuZChtX3Rlcm0yLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMS41LjIKIGRvdWJs
ZSBEaXZOb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBkb3VibGUgbjEgPSB0ZXJtMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUg
bjEgPSBtX3Rlcm0xLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgotICAgIGRvdWJsZSBuMiA9IHRlcm0yLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
OworICAgIGRvdWJsZSBuMiA9IG1fdGVybTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiAgICAg
cmV0dXJuIG4xIC8gbjI7CiB9CiAKQEAgLTIxMzQsMTYgKzIxMzQsMTYgQEAgdWludDMyX3QgRGl2
Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjUwogCiB2b2lkIE1vZE5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBu
b2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMS5nZXQoKSk7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZCh0ZXJtMi5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0x
LmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0KCkpOwogfQogCiAvLyBF
Q01BIDExLjUuMwogZG91YmxlIE1vZE5vZGU6OmlubGluZUV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGRvdWJsZSBuMSA9IHRlcm0xLT5ldmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpOworICAgIGRvdWJsZSBuMSA9IG1fdGVybTEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiAg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgZG91YmxlIG4yID0gdGVybTItPmV2YWx1
YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIG4yID0gbV90ZXJtMi0+ZXZhbHVhdGVUb051
bWJlcihleGVjKTsKICAgICByZXR1cm4gZm1vZChuMSwgbjIpOwogfQogCkBAIC0yMjcxLDE3ICsy
MjcxLDE3IEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIGFkZFRvTnVtYmVyKEV4ZWNTdGEKIAogdm9p
ZCBBZGROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAgIG5vZGVTdGFjay5hcHBlbmQo
dGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQodGVybTIuZ2V0KCkpOworICAgIG5v
ZGVTdGFjay5hcHBlbmQobV90ZXJtMS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rl
cm0yLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMS42LjEKIEpTVmFsdWUqIEFkZE5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSogdjEgPSB0ZXJtMS0+ZXZhbHVhdGUo
ZXhlYyk7CisgIEpTVmFsdWUqIHYxID0gbV90ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCiAKLSAgSlNWYWx1ZSogdjIgPSB0ZXJtMi0+ZXZhbHVhdGUoZXhl
Yyk7CisgIEpTVmFsdWUqIHYyID0gbV90ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCiAKICAgcmV0dXJuIGFkZChleGVjLCB2MSwgdjIpOwpAQCAtMjI4OSwx
MCArMjI4OSwxMCBAQCBKU1ZhbHVlKiBBZGROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4CiAK
IGRvdWJsZSBBZGROb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBKU1ZhbHVlKiB2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVl
KiB2MSA9IG1fdGVybTEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5V
TUJFUgogICAgIAotICAgIEpTVmFsdWUqIHYyID0gdGVybTItPmV2YWx1YXRlKGV4ZWMpOworICAg
IEpTVmFsdWUqIHYyID0gbV90ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhD
RVBUSU9OTlVNQkVSCiAgICAgCiAgICAgcmV0dXJuIGFkZFRvTnVtYmVyKGV4ZWMsIHYxLCB2Mik7
CkBAIC0yMzE1LDkgKzIzMTUsOSBAQCB1aW50MzJfdCBBZGROb2RlOjpldmFsdWF0ZVRvVUludDMy
KEV4ZWNTCiAKIGRvdWJsZSBBZGROdW1iZXJzTm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIG4xID0gdGVybTEtPmV2YWx1YXRlVG9OdW1i
ZXIoZXhlYyk7CisgICAgZG91YmxlIG4xID0gbV90ZXJtMS0+ZXZhbHVhdGVUb051bWJlcihleGVj
KTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICBkb3VibGUgbjIgPSB0ZXJtMi0+
ZXZhbHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbjIgPSBtX3Rlcm0yLT5ldmFsdWF0
ZVRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBuMSArIG4yOwogfQogCkBAIC0yMzQzLDEwICsy
MzQzLDEwIEBAIHVpbnQzMl90IEFkZE51bWJlcnNOb2RlOjpldmFsdWF0ZVRvVUludDMKIAogSlNW
YWx1ZSogQWRkU3RyaW5nc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBK
U1ZhbHVlKiB2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1f
dGVybTEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAg
Ci0gICAgSlNWYWx1ZSogdjIgPSB0ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSog
djIgPSBtX3Rlcm0yLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQogICAgIAogICAgIHJldHVybiBqc1N0cmluZyhzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MSkt
PnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MiktPnZhbHVlKCkpOwpAQCAtMjM1
NCwxMCArMjM1NCwxMCBAQCBKU1ZhbHVlKiBBZGRTdHJpbmdzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0
CiAKIEpTVmFsdWUqIEFkZFN0cmluZ0xlZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgSlNWYWx1ZSogdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1
ZSogdjEgPSBtX3Rlcm0xLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05W
QUxVRQogICAgIAotICAgIEpTVmFsdWUqIHYyID0gdGVybTItPmV2YWx1YXRlKGV4ZWMpOworICAg
IEpTVmFsdWUqIHYyID0gbV90ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKICAgICAKICAgICBKU1ZhbHVlKiBwMiA9IHYyLT50b1ByaW1pdGl2ZShleGVj
LCBVbnNwZWNpZmllZFR5cGUpOwpAQCAtMjM2NiwxMCArMjM2NiwxMCBAQCBKU1ZhbHVlKiBBZGRT
dHJpbmdMZWZ0Tm9kZTo6ZXZhbHVhdGUoRXhlCiAKIEpTVmFsdWUqIEFkZFN0cmluZ1JpZ2h0Tm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUqIHYxID0gdGVybTEt
PmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0gbV90ZXJtMS0+ZXZhbHVhdGUoZXhl
Yyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgICAKLSAgICBKU1ZhbHVlKiB2MiA9
IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MiA9IG1fdGVybTItPmV2YWx1
YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgCiAgICAgSlNWYWx1
ZSogcDEgPSB2MS0+dG9QcmltaXRpdmUoZXhlYywgVW5zcGVjaWZpZWRUeXBlKTsKQEAgLTIzNzgs
MTYgKzIzNzgsMTYgQEAgSlNWYWx1ZSogQWRkU3RyaW5nUmlnaHROb2RlOjpldmFsdWF0ZShFeAog
CiB2b2lkIFN1Yk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFw
cGVuZCh0ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCh0ZXJtMi5nZXQoKSk7Cisg
ICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5k
KG1fdGVybTIuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDExLjYuMgogZG91YmxlIFN1Yk5vZGU6Omlu
bGluZUV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGRvdWJsZSBuMSA9
IHRlcm0xLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBuMSA9IG1fdGVybTEt
PmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0g
ICAgZG91YmxlIG4yID0gdGVybTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7CisgICAgZG91Ymxl
IG4yID0gbV90ZXJtMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKICAgICByZXR1cm4gbjEgLSBu
MjsKIH0KIApAQCAtMjQxNSwxNiArMjQxNSwxNiBAQCB1aW50MzJfdCBTdWJOb2RlOjpldmFsdWF0
ZVRvVUludDMyKEV4ZWNTCiAKIHZvaWQgTGVmdFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKHRlcm0yLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fdGVybTEuZ2V0KCkp
OworICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEu
Ny4xCiBpbnQzMl90IExlZnRTaGlmdE5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgaW50IGkxID0gdGVybTEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsK
KyAgICBpbnQgaTEgPSBtX3Rlcm0xLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAgS0pTX0NI
RUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgdW5zaWduZWQgaW50IGkyID0gdGVybTItPmV2YWx1YXRl
VG9VSW50MzIoZXhlYykgJiAweDFmOworICAgIHVuc2lnbmVkIGludCBpMiA9IG1fdGVybTItPmV2
YWx1YXRlVG9VSW50MzIoZXhlYykgJiAweDFmOwogICAgIHJldHVybiAoaTEgPDwgaTIpOwogfQog
CkBAIC0yNDUwLDE2ICsyNDUwLDE2IEBAIHVpbnQzMl90IExlZnRTaGlmdE5vZGU6OmV2YWx1YXRl
VG9VSW50MzIKIAogdm9pZCBSaWdodFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhT
eW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsK
LSAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5k
KHRlcm0yLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fdGVybTEuZ2V0KCkpOworICAg
IG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEuNy4yCiBp
bnQzMl90IFJpZ2h0U2hpZnROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIGludCBpMSA9IHRlcm0xLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAg
aW50IGkxID0gbV90ZXJtMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VY
Q0VQVElPTk5VTUJFUgotICAgIHVuc2lnbmVkIGludCBpMiA9IHRlcm0yLT5ldmFsdWF0ZVRvVUlu
dDMyKGV4ZWMpICYgMHgxZjsKKyAgICB1bnNpZ25lZCBpbnQgaTIgPSBtX3Rlcm0yLT5ldmFsdWF0
ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKICAgICByZXR1cm4gKGkxID4+IGkyKTsKIH0KIApAQCAt
MjQ4NSwxNiArMjQ4NSwxNiBAQCB1aW50MzJfdCBSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb1VJ
bnQzCiAKIHZvaWQgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykK
IHsKLSAgICBub2RlU3RhY2suYXBwZW5kKHRlcm0xLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKHRlcm0yLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fdGVybTEuZ2V0KCkpOwor
ICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEuNy4z
CiB1aW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjppbmxpbmVFdmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICB1bnNpZ25lZCBpbnQgaTEgPSB0ZXJtMS0+ZXZhbHVh
dGVUb1VJbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCBpbnQgaTEgPSBtX3Rlcm0xLT5ldmFsdWF0
ZVRvVUludDMyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHVuc2ln
bmVkIGludCBpMiA9IHRlcm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKKyAgICB1
bnNpZ25lZCBpbnQgaTIgPSBtX3Rlcm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsK
ICAgICByZXR1cm4gKGkxID4+IGkyKTsKIH0KIApAQCAtMjU1MiwxNiArMjU1MiwxNiBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgbGVzc1RoYW5FcShFeGVjU3RhdGUgCiAKIHZvaWQgTGVzc05vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2V4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwog
fQogCiAvLyBFQ01BIDExLjguMQogYm9vbCBMZXNzTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1
YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgogICAgIHJldHVybiBsZXNzVGhhbihleGVjLCB2
MSwgdjIpOwogfQpAQCAtMjU3OCw5ICsyNTc4LDkgQEAgYm9vbCBMZXNzTm9kZTo6ZXZhbHVhdGVU
b0Jvb2xlYW4oRXhlY1N0YQogCiBib29sIExlc3NOdW1iZXJzTm9kZTo6aW5saW5lRXZhbHVhdGVU
b0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIGRvdWJsZSBuMSA9IGV4cHIxLT5ldmFs
dWF0ZVRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBuMSA9IG1fZXhwcjEtPmV2YWx1YXRlVG9O
dW1iZXIoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBkb3VibGUgbjIg
PSBleHByMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbjIgPSBtX2V4cHIy
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBuMSA8IG4yOwogfQogCkBAIC0y
NTk2LDkgKzI1OTYsOSBAQCBib29sIExlc3NOdW1iZXJzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4o
CiAKIGJvb2wgTGVzc1N0cmluZ3NOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7Cisg
ICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tF
WENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwor
ICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN0cmluZ0ltcCo+KHYxKS0+dmFsdWUoKSA8IHN0YXRpY19jYXN0PFN0cmluZ0lt
cCo+KHYyKS0+dmFsdWUoKTsKIH0KIApAQCAtMjYxNCwxNiArMjYxNCwxNiBAQCBib29sIExlc3NT
dHJpbmdzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oCiAKIHZvaWQgR3JlYXRlck5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7Ci0g
ICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZCht
X2V4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwogfQog
CiAvLyBFQ01BIDExLjguMgogYm9vbCBHcmVhdGVyTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oRXhlY1N0YXRlICpleGVjKQogewotICAgIEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOworICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1
YXRlKGV4ZWMpOworICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgogICAgIHJldHVybiBsZXNzVGhhbihleGVjLCB2
MiwgdjEpOwogfQpAQCAtMjY0MCwxNiArMjY0MCwxNiBAQCBib29sIEdyZWF0ZXJOb2RlOjpldmFs
dWF0ZVRvQm9vbGVhbihFeGVjCiAKIHZvaWQgTGVzc0VxTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKGV4cHIxLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkp
OworICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEu
OC4zCiBib29sIExlc3NFcU5vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBK
U1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQ
VElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAg
ICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VY
Q0VQVElPTkJPT0xFQU4KICAgICByZXR1cm4gbGVzc1RoYW5FcShleGVjLCB2MSwgdjIpOwogfQpA
QCAtMjY2NiwxNiArMjY2NiwxNiBAQCBib29sIExlc3NFcU5vZGU6OmV2YWx1YXRlVG9Cb29sZWFu
KEV4ZWNTCiAKIHZvaWQgR3JlYXRlckVxTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1i
b2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4
cHIxLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOworICAgIG5v
ZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEuOC40CiBib29s
IEdyZWF0ZXJFcU5vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVl
KiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTkJP
T0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1Zh
bHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElP
TkJPT0xFQU4KICAgICByZXR1cm4gbGVzc1RoYW5FcShleGVjLCB2MiwgdjEpOwogfQpAQCAtMjY5
MiwyMCArMjY5MiwyMCBAQCBib29sIEdyZWF0ZXJFcU5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEV4
CiAKIHZvaWQgSW5zdGFuY2VPZk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFi
bGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5n
ZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKKyAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDExLjguNgogSlNWYWx1ZSog
SW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVl
KiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEt
PmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1
ZSogdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIy
LT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgICAgaWYg
KCF2Mi0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0
LiBDYW5ub3QgYmUgdXNlZCB3aXRoIGluc3RhbmNlb2Ygb3BlcmF0b3IuIiwgdjIsIGV4cHIyLmdl
dCgpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUg
JXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUg
dXNlZCB3aXRoIGluc3RhbmNlb2Ygb3BlcmF0b3IuIiwgdjIsIG1fZXhwcjIuZ2V0KCkpOwogCiAg
ICAgSlNPYmplY3QqIG8yID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2Mik7CiAKQEAgLTI3MjEs
MTMgKzI3MjEsMTMgQEAgSlNWYWx1ZSogSW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRlKEV4ZWNTdAog
CiBib29sIEluc3RhbmNlT2ZOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1
ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05C
T09MRUFOCi0gICAgSlNWYWx1ZSogdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNW
YWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05CT09MRUFOCiAKICAgICBpZiAoIXYyLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBp
cyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoICdpbnN0YW5jZW9mJyBvcGVyYXRv
ci4iLCB2MiwgZXhwcjIuZ2V0KCkpOworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
ciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFuIG9iamVjdC4g
Q2Fubm90IGJlIHVzZWQgd2l0aCAnaW5zdGFuY2VvZicgb3BlcmF0b3IuIiwgdjIsIG1fZXhwcjIu
Z2V0KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yNzQ1LDMzICsyNzQ1
LDMzIEBAIGJvb2wgSW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKEUKIAogdm9pZCBJ
bk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHBy
Mi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7CisgICAgbm9kZVN0
YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEu
Z2V0KCkpOwogfQogCiAvLyBFQ01BIDExLjguNwogSlNWYWx1ZSogSW5Ob2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhl
Yyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNf
Q0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4
ZWMpOworICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pT
X0NIRUNLRVhDRVBUSU9OVkFMVUUKIAogICAgIGlmICghdjItPmlzT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2Yg
ZXhwcmVzc2lvbiAlcykgaXMgbm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCAnaW4n
IG9wZXJhdG9yLiIsIHYyLCBleHByMi5nZXQoKSk7CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMg
bm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCAnaW4nIG9wZXJhdG9yLiIsIHYyLCBt
X2V4cHIyLmdldCgpKTsKIAogICAgIHJldHVybiBqc0Jvb2xlYW4oc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPih2MiktPmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIodjEtPnRvU3RyaW5nKGV4ZWMp
KSkpOwogfQogCiBib29sIEluTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlICpleGVj
KQogewotICAgIEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFs
dWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9O
Qk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpT
VmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBU
SU9OQk9PTEVBTgogCiAgICAgaWYgKCF2Mi0+aXNPYmplY3QoKSkgewotICAgICAgICB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykg
aXMgbm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCAnaW4nIG9wZXJhdG9yLiIsIHYy
LCBleHByMi5nZXQoKSk7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFs
dWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3Qg
YmUgdXNlZCB3aXRoICdpbicgb3BlcmF0b3IuIiwgdjIsIG1fZXhwcjIuZ2V0KCkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yNzgyLDE2ICsyNzgyLDE2IEBAIGJvb2wgSW5O
b2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUKIAogdm9pZCBFcXVhbE5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7Ci0g
ICAgbm9kZVN0YWNrLmFwcGVuZChleHByMS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZCht
X2V4cHIyLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwogfQog
CiAvLyBFQ01BIDExLjkuMQogYm9vbCBFcXVhbE5vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFu
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShl
eGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtK
U19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0
ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAg
IEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KICAgICAKICAgICByZXR1cm4gZXF1YWwoZXhlYywg
djEsIHYyKTsKQEAgLTI4MDksMTYgKzI4MDksMTYgQEAgYm9vbCBFcXVhbE5vZGU6OmV2YWx1YXRl
VG9Cb29sZWFuKEV4ZWNTdAogCiB2b2lkIE5vdEVxdWFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKGV4cHIxLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkp
OworICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEu
OS4yCiBib29sIE5vdEVxdWFsTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRl
KiBleGVjKQogewotICAgIEpTVmFsdWUqIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICAg
IEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhD
RVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwor
ICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OQk9PTEVBTgogCiAgICAgcmV0dXJuICFlcXVhbChleGVjLHYxLCB2Mik7CkBAIC0y
ODM2LDE2ICsyODM2LDE2IEBAIGJvb2wgTm90RXF1YWxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihF
eGUKIAogdm9pZCBTdHJpY3RFcXVhbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9s
VGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAg
bm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHBy
MS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKKyAgICBub2Rl
U3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDExLjkuNAogYm9vbCBT
dHJpY3RFcXVhbE5vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVl
KiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTkJP
T0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1Zh
bHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElP
TkJPT0xFQU4KIAogICAgIHJldHVybiBzdHJpY3RFcXVhbChleGVjLHYxLCB2Mik7CkBAIC0yODYz
LDE2ICsyODYzLDE2IEBAIGJvb2wgU3RyaWN0RXF1YWxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbigK
IAogdm9pZCBOb3RTdHJpY3RFcXVhbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9s
VGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAg
bm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHBy
MS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKKyAgICBub2Rl
U3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDExLjkuNQogYm9vbCBO
b3RTdHJpY3RFcXVhbE5vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1Zh
bHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElP
TkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgICBK
U1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQ
VElPTkJPT0xFQU4KIAogICAgIHJldHVybiAhc3RyaWN0RXF1YWwoZXhlYyx2MSwgdjIpOwpAQCAt
Mjg5MiwxNiArMjg5MiwxNiBAQCBib29sIE5vdFN0cmljdEVxdWFsTm9kZTo6ZXZhbHVhdGVUb0Jv
b2xlCiAKIHZvaWQgQml0QW5kTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJs
ZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIxLmdl
dCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOworICAgIG5vZGVTdGFj
ay5hcHBlbmQobV9leHByMS5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEuMTAKIEpTVmFsdWUqIEJp
dEFuZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsgICAgCi0gICAgSlNWYWx1ZSAq
djEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSAqdjEgPSBtX2V4cHIxLT5l
dmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUg
KnYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICAgIEpTVmFsdWUgKnYyID0gbV9leHByMi0+
ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKIAogICAgIHJldHVy
biBqc051bWJlckZyb21BbmQoZXhlYywgdjEsIHYyKTsKQEAgLTI5MDksOSArMjkwOSw5IEBAIEpT
VmFsdWUqIEJpdEFuZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSoKIAogaW50MzJfdCBCaXRBbmRO
b2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGludDMy
X3QgaTEgPSBleHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOworICAgIGludDMyX3QgaTEgPSBt
X2V4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCi0gICAgaW50MzJfdCBpMiA9IGV4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAg
aW50MzJfdCBpMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKICAgICByZXR1cm4g
KGkxICYgaTIpOwogfQogCkBAIC0yOTM3LDE1ICsyOTM3LDE1IEBAIHVpbnQzMl90IEJpdEFuZE5v
ZGU6OmV2YWx1YXRlVG9VSW50MzIoRXgKIAogdm9pZCBCaXRYT3JOb2RlOjpvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9k
ZVN0YWNrKQogewotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVT
dGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5n
ZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKIH0KIAogaW50MzJf
dCBCaXRYT3JOb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGludCBpMSA9IGV4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgaW50IGkxID0g
bV9leHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5V
TUJFUgotICAgIGludCBpMiA9IGV4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgaW50
IGkyID0gbV9leHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHJldHVybiAoaTEgXiBp
Mik7CiB9CiAKQEAgLTI5NzYsMTUgKzI5NzYsMTUgQEAgdWludDMyX3QgQml0WE9yTm9kZTo6ZXZh
bHVhdGVUb1VJbnQzMihFeAogCiB2b2lkIEJpdE9yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykK
IHsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKGV4cHIxLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwor
ICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7CiB9CiAKIGludDMyX3QgQml0T3JO
b2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGludCBp
MSA9IGV4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgaW50IGkxID0gbV9leHByMS0+
ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAg
IGludCBpMiA9IGV4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgaW50IGkyID0gbV9l
eHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwogICAgIHJldHVybiAoaTEgfCBpMik7CiB9CiAK
QEAgLTMwMTcsOTYgKzMwMTcsOTYgQEAgdWludDMyX3QgQml0T3JOb2RlOjpldmFsdWF0ZVRvVUlu
dDMyKEV4ZQogCiB2b2lkIExvZ2ljYWxBbmROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5
bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewot
ICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQo
ZXhwcjEuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7CisgICAg
bm9kZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMS4xMQogSlNW
YWx1ZSogTG9naWNhbEFuZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBK
U1ZhbHVlKiB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2MSA9IG1f
ZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAg
Ym9vbCBiMSA9IHYxLT50b0Jvb2xlYW4oZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKICAgICBpZiAoIWIxKQogICAgICAgICByZXR1cm4gdjE7Ci0gICAgSlNWYWx1ZSogdjIgPSBl
eHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0
ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIHJldHVybiB2MjsKIH0K
IAogYm9vbCBMb2dpY2FsQW5kTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGJvb2wgYiA9IGV4cHIxLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICBi
b29sIGIgPSBtX2V4cHIxLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKICAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGIgJiYgZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFu
KGV4ZWMpOworICAgIHJldHVybiBiICYmIG1fZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMp
OwogfQogCiB2b2lkIExvZ2ljYWxPck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9s
VGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAg
bm9kZVN0YWNrLmFwcGVuZChleHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHBy
MS5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKKyAgICBub2Rl
U3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwogfQogCiBKU1ZhbHVlKiBMb2dpY2FsT3JOb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBleHByMS0+
ZXZhbHVhdGUoZXhlYyk7CisgICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVj
KTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIGlmICh2MS0+dG9Cb29sZWFuKGV4
ZWMpKQogICAgICAgICByZXR1cm4gdjE7Ci0gICAgcmV0dXJuIGV4cHIyLT5ldmFsdWF0ZShleGVj
KTsKKyAgICByZXR1cm4gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiB9CiAKIGJvb2wgTG9naWNh
bE9yTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIGJvb2wg
YiA9IGV4cHIxLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIGIgPSBtX2V4cHIx
LT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFO
Ci0gICAgcmV0dXJuIGIgfHwgZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIHJl
dHVybiBiIHx8IG1fZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogfQogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uZGl0aW9uYWxOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIENvbmRpdGlvbmFsTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVT
dGFjaykKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKGV4cHIxLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGxvZ2ljYWwuZ2V0
KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7CisgICAgbm9kZVN0YWNr
LmFwcGVuZChtX2V4cHIxLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fbG9naWNhbC5n
ZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTEuMTIKIEpTVmFsdWUqIENvbmRpdGlvbmFsTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGJvb2wgYiA9IGxvZ2ljYWwtPmV2YWx1YXRl
VG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgYiA9IG1fbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICByZXR1cm4gYiA/IGV4
cHIxLT5ldmFsdWF0ZShleGVjKSA6IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgICByZXR1cm4g
YiA/IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpIDogbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiB9
CiAKIGJvb2wgQ29uZGl0aW9uYWxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgYm9vbCBiID0gbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Cisg
ICAgYm9vbCBiID0gbV9sb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKICAgICBLSlNf
Q0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGIgPyBleHByMS0+ZXZhbHVhdGVUb0Jv
b2xlYW4oZXhlYykgOiBleHByMi0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJu
IGIgPyBtX2V4cHIxLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKSA6IG1fZXhwcjItPmV2YWx1YXRl
VG9Cb29sZWFuKGV4ZWMpOwogfQogCiBkb3VibGUgQ29uZGl0aW9uYWxOb2RlOjpldmFsdWF0ZVRv
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBib29sIGIgPSBsb2dpY2FsLT5ldmFsdWF0
ZVRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIGIgPSBtX2xvZ2ljYWwtPmV2YWx1YXRlVG9Cb29s
ZWFuKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiBiID8g
ZXhwcjEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYykgOiBleHByMi0+ZXZhbHVhdGVUb051bWJlcihl
eGVjKTsKKyAgICByZXR1cm4gYiA/IG1fZXhwcjEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYykgOiBt
X2V4cHIyLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwogfQogCiBpbnQzMl90IENvbmRpdGlvbmFs
Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBib29sIGIgPSBs
b2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIGIgPSBtX2xvZ2ljYWwt
PmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgot
ICAgIHJldHVybiBiID8gZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKSA6IGV4cHIyLT5ldmFs
dWF0ZVRvSW50MzIoZXhlYyk7CisgICAgcmV0dXJuIGIgPyBtX2V4cHIxLT5ldmFsdWF0ZVRvSW50
MzIoZXhlYykgOiBtX2V4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7CiB9CiAKIHVpbnQzMl90
IENvbmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgYm9vbCBiID0gbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7CisgICAgYm9vbCBi
ID0gbV9sb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05OVU1CRVIKLSAgICByZXR1cm4gYiA/IGV4cHIxLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMp
IDogZXhwcjItPmV2YWx1YXRlVG9VSW50MzIoZXhlYyk7CisgICAgcmV0dXJuIGIgPyBtX2V4cHIx
LT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpIDogbV9leHByMi0+ZXZhbHVhdGVUb1VJbnQzMihleGVj
KTsKIH0KIAogLy8gRUNNQSAxMS4xMwpAQCAtMzQzMywzMiArMzQzMywzMiBAQCBKU1ZhbHVlICpS
ZWFkTW9kaWZ5QnJhY2tldE5vZGU6OmV2YWx1YXRlCiAKIHZvaWQgQ29tbWFOb2RlOjpvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYgbm9kZVN0YWNrKQogewotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwcjIuZ2V0KCkpOwotICAg
IG5vZGVTdGFjay5hcHBlbmQoZXhwcjEuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9l
eHByMi5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKIH0KIAog
Ly8gRUNNQSAxMS4xNAogSlNWYWx1ZSogQ29tbWFOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4
ZWMpCiB7Ci0gICAgZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICAgIG1fZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgcmV0dXJuIGV4cHIyLT5l
dmFsdWF0ZShleGVjKTsKKyAgICByZXR1cm4gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7CiB9CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25zdERlY2xOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29uc3REZWNsTm9kZTo6Q29uc3REZWNsTm9k
ZShjb25zdCBJZGVudGlmaWVyJiBpZCwgRXhwcmVzc2lvbk5vZGUqIGluKQotICAgIDogaWRlbnQo
aWQpCi0gICAgLCBpbml0KGluKQorQ29uc3REZWNsTm9kZTo6Q29uc3REZWNsTm9kZShjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGluaXQpCisgICAgOiBtX2lkZW50KGlk
ZW50KQorICAgICwgbV9pbml0KGluaXQpCiB7CiB9CiAKIHZvaWQgQ29uc3REZWNsTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBpZiAobmV4dCkKLSAgICAgICAgbm9kZVN0YWNrLmFw
cGVuZChuZXh0LmdldCgpKTsKLSAgICBpZiAoaW5pdCkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVu
ZChpbml0LmdldCgpKTsKKyAgICBpZiAobV9uZXh0KQorICAgICAgICBub2RlU3RhY2suYXBwZW5k
KG1fbmV4dC5nZXQoKSk7CisgICAgaWYgKG1faW5pdCkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2luaXQuZ2V0KCkpOwogfQogCiB2b2lkIENvbnN0RGVjbE5vZGU6OmhhbmRsZVNsb3dDYXNl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4sIEpTVmFsdWUqIHZhbCkK
QEAgLTM0NzQsMjMgKzM0NzQsMjMgQEAgdm9pZCBDb25zdERlY2xOb2RlOjpoYW5kbGVTbG93Q2Fz
ZShFeGVjUwogICAgIAogICAgIGRvIHsKICAgICAgICAgYmFzZSA9ICppdGVyOwotICAgICAgICBp
ZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkKKyAgICAgICAgaWYg
KGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICAgICAgKytpdGVyOwogICAgIH0gd2hpbGUgKGl0ZXIgIT0g
ZW5kKTsKICAgICAKICAgICB1bnNpZ25lZCBmbGFncyA9IDA7Ci0gICAgYmFzZS0+Z2V0UHJvcGVy
dHlBdHRyaWJ1dGVzKGlkZW50LCBmbGFncyk7CisgICAgYmFzZS0+Z2V0UHJvcGVydHlBdHRyaWJ1
dGVzKG1faWRlbnQsIGZsYWdzKTsKICAgICBmbGFncyB8PSBSZWFkT25seTsKICAgICAKLSAgICBi
YXNlLT5wdXQoZXhlYywgaWRlbnQsIHZhbCwgZmxhZ3MpOworICAgIGJhc2UtPnB1dChleGVjLCBt
X2lkZW50LCB2YWwsIGZsYWdzKTsKIH0KIAogLy8gRUNNQSAxMi4yCiBpbmxpbmUgdm9pZCBDb25z
dERlY2xOb2RlOjpldmFsdWF0ZVNpbmdsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQVNTRVJU
KGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCktPmhhc093blByb3BlcnR5KGV4ZWMsIGlkZW50KSB8fCBl
eGVjLT5jb2RlVHlwZSgpID09IEV2YWxDb2RlKTsgLy8gR3VhcmFudGVlZCBieSBwcm9jZXNzRGVj
bGFyYXRpb25zLgorICAgIEFTU0VSVChleGVjLT52YXJpYWJsZU9iamVjdCgpLT5oYXNPd25Qcm9w
ZXJ0eShleGVjLCBtX2lkZW50KSB8fCBleGVjLT5jb2RlVHlwZSgpID09IEV2YWxDb2RlKTsgLy8g
R3VhcmFudGVlZCBieSBwcm9jZXNzRGVjbGFyYXRpb25zLgogICAgIGNvbnN0IFNjb3BlQ2hhaW4m
IGNoYWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwogICAgIEpTT2JqZWN0KiB2YXJpYWJsZU9iamVj
dCA9IGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCk7CiAKQEAgLTM0OTgsMTYgKzM0OTgsMTYgQEAgaW5s
aW5lIHZvaWQgQ29uc3REZWNsTm9kZTo6ZXZhbHVhdGVTaW5nbAogCiAgICAgYm9vbCBpbkdsb2Jh
bFNjb3BlID0gKytjaGFpbi5iZWdpbigpID09IGNoYWluLmVuZCgpOwogCi0gICAgaWYgKGluaXQp
IHsKKyAgICBpZiAobV9pbml0KSB7CiAgICAgICAgIGlmIChpbkdsb2JhbFNjb3BlKSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlKiB2YWwgPSBpbml0LT5ldmFsdWF0ZShleGVjKTsKKyAgICAgICAgICAg
IEpTVmFsdWUqIHZhbCA9IG1faW5pdC0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgICAgICAgICBpbnQg
ZmxhZ3MgPSBJbnRlcm5hbDsKICAgICAgICAgICAgIGlmIChleGVjLT5jb2RlVHlwZSgpICE9IEV2
YWxDb2RlKQogICAgICAgICAgICAgICAgIGZsYWdzIHw9IERvbnREZWxldGU7CiAgICAgICAgICAg
ICBmbGFncyB8PSBSZWFkT25seTsKLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXQoZXhl
YywgaWRlbnQsIHZhbCwgZmxhZ3MpOworICAgICAgICAgICAgdmFyaWFibGVPYmplY3QtPnB1dChl
eGVjLCBtX2lkZW50LCB2YWwsIGZsYWdzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEpTVmFsdWUqIHZhbCA9IGluaXQtPmV2YWx1YXRlKGV4ZWMpOworICAgICAgICAgICAgSlNWYWx1
ZSogdmFsID0gbV9pbml0LT5ldmFsdWF0ZShleGVjKTsKICAgICAgICAgICAgIEtKU19DSEVDS0VY
Q0VQVElPTlZPSUQKIAogICAgICAgICAgICAgLy8gaWYgdGhlIHZhcmlhYmxlIG9iamVjdCBpcyB0
aGUgdG9wIG9mIHRoZSBzY29wZSBjaGFpbiwgdGhlbiB0aGF0IG11c3QKQEAgLTM1MTcsMTAgKzM1
MTcsMTAgQEAgaW5saW5lIHZvaWQgQ29uc3REZWNsTm9kZTo6ZXZhbHVhdGVTaW5nbAogICAgICAg
ICAgICAgICAgIHJldHVybiBoYW5kbGVTbG93Q2FzZShleGVjLCBjaGFpbiwgdmFsKTsKIAogICAg
ICAgICAgICAgdW5zaWduZWQgZmxhZ3MgPSAwOwotICAgICAgICAgICAgdmFyaWFibGVPYmplY3Qt
PmdldFByb3BlcnR5QXR0cmlidXRlcyhpZGVudCwgZmxhZ3MpOworICAgICAgICAgICAgdmFyaWFi
bGVPYmplY3QtPmdldFByb3BlcnR5QXR0cmlidXRlcyhtX2lkZW50LCBmbGFncyk7CiAgICAgICAg
ICAgICBmbGFncyB8PSBSZWFkT25seTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFi
bGVPYmplY3QtPnB1dChleGVjLCBpZGVudCwgdmFsLCBmbGFncyk7CisgICAgICAgICAgICB2YXJp
YWJsZU9iamVjdC0+cHV0KGV4ZWMsIG1faWRlbnQsIHZhbCwgZmxhZ3MpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMzUyOSwxMSArMzUyOSwxMSBAQCBKU1ZhbHVlKiBDb25zdERlY2xOb2RlOjpl
dmFsdWF0ZShFeGVjU3RhCiB7CiAgICAgZXZhbHVhdGVTaW5nbGUoZXhlYyk7CiAKLSAgICBpZiAo
Q29uc3REZWNsTm9kZSogbiA9IG5leHQuZ2V0KCkpIHsKKyAgICBpZiAoQ29uc3REZWNsTm9kZSog
biA9IG1fbmV4dC5nZXQoKSkgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICBuLT5ldmFsdWF0
ZVNpbmdsZShleGVjKTsKICAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAg
ICAgICAgICBuID0gbi0+bmV4dC5nZXQoKTsKKyAgICAgICAgICAgIG4gPSBuLT5tX25leHQuZ2V0
KCk7CiAgICAgICAgIH0gd2hpbGUgKG4pOwogICAgIH0KICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKQEAgLTM1NDMsMTQgKzM1NDMsMTQgQEAgSlNWYWx1ZSogQ29uc3REZWNsTm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YQogCiB2b2lkIENvbnN0U3RhdGVtZW50Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFj
aykKIHsKLSAgICBBU1NFUlQobmV4dCk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChuZXh0LmdldCgp
KTsKKyAgICBBU1NFUlQobV9uZXh0KTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5nZXQo
KSk7CiB9CiAKIC8vIEVDTUEgMTIuMgogSlNWYWx1ZSogQ29uc3RTdGF0ZW1lbnROb2RlOjpleGVj
dXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBuZXh0LT5ldmFsdWF0ZShleGVjKTsKKyAgICBt
X25leHQtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTgogCiAgICAgcmV0
dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24oKTsKQEAgLTM2MzAsMTQgKzM2MzAsMTQgQEAg
SlNWYWx1ZSogRW1wdHlTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4ZQogCiB2b2lkIEV4cHJTdGF0
ZW1lbnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAgIEFTU0VSVChleHByKTsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworICAgIEFTU0VSVChtX2V4cHIpOworICAg
IG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMi40CiBKU1Zh
bHVlKiBFeHByU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
SlNWYWx1ZSogdmFsdWUgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2YWx1
ZSA9IG1fZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKICAg
ICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbih2YWx1ZSk7CkBAIC0zNjQ3LDEzICsz
NjQ3LDEzIEBAIEpTVmFsdWUqIEV4cHJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4ZWMKIAogdm9p
ZCBWYXJTdGF0ZW1lbnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwg
RGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAgIEFTU0VSVChl
eHByKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworICAgIEFTU0VSVChtX2V4
cHIpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsKIH0KIAogSlNWYWx1ZSog
VmFyU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZXhwci0+
ZXZhbHVhdGUoZXhlYyk7CisgICAgbV9leHByLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hF
Q0tFWENFUFRJT04KIAogICAgIHJldHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKCk7CkBA
IC0zNzAwLDggKzM3MDAsOCBAQCBKU1ZhbHVlKiBJZkVsc2VOb2RlOjpleGVjdXRlKEV4ZWNTdGF0
ZSogCiAKIHZvaWQgRG9XaGlsZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFi
bGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhw
ci5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX3N0YXRlbWVudC5nZXQoKSk7CisgICAg
bm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDEyLjYuMQpAQCAt
MzcxMSw3ICszNzExLDcgQEAgSlNWYWx1ZSogRG9XaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRl
KgogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgZXhlYy0+cHVzaEl0ZXJhdGlvbigpOwotICAg
ICAgICBKU1ZhbHVlKiBzdGF0ZW1lbnRWYWx1ZSA9IHN0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsK
KyAgICAgICAgSlNWYWx1ZSogc3RhdGVtZW50VmFsdWUgPSBtX3N0YXRlbWVudC0+ZXhlY3V0ZShl
eGVjKTsKICAgICAgICAgZXhlYy0+cG9wSXRlcmF0aW9uKCk7CiAKICAgICAgICAgaWYgKGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGltZWRPdXQoKSkKQEAgLTM3MjEsMTUgKzM3MjEsMTUg
QEAgSlNWYWx1ZSogRG9XaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKgogICAgICAgICAgICAg
dmFsdWUgPSBzdGF0ZW1lbnRWYWx1ZTsKIAogICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5
cGUoKSAhPSBOb3JtYWwpIHsKLSAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgp
ID09IENvbnRpbnVlICYmIGxzLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgp
KSkKKyAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IENvbnRpbnVlICYm
IG1fbGFiZWxTdGFjay5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCiAg
ICAgICAgICAgICAgICAgZ290byBjb250aW51ZURvV2hpbGVMb29wOwotICAgICAgICAgICAgaWYg
KGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQnJlYWsgJiYgbHMuY29udGFpbnMoZXhlYy0+YnJl
YWtPckNvbnRpbnVlVGFyZ2V0KCkpKQorICAgICAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25U
eXBlKCkgPT0gQnJlYWsgJiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250
aW51ZVRhcmdldCgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHVy
biBzdGF0ZW1lbnRWYWx1ZTsKICAgICAgICAgfQogCiBjb250aW51ZURvV2hpbGVMb29wOgotICAg
ICAgICBib29sIGIgPSBleHByLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9v
bCBiID0gbV9leHByLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKICAgICAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OCiAgICAgICAgIGlmICghYikKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzc0Miw4
ICszNzQyLDggQEAgY29udGludWVEb1doaWxlTG9vcDoKIAogdm9pZCBXaGlsZU5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQuZ2V0KCkp
OwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwci5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVu
ZChtX3N0YXRlbWVudC5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkp
OwogfQogCiAvLyBFQ01BIDEyLjYuMgpAQCAtMzc1MiwxMyArMzc1MiwxMyBAQCBKU1ZhbHVlKiBX
aGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBlCiAgICAgSlNWYWx1ZSogdmFsdWUgPSAwOwog
CiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgYm9vbCBiID0gZXhwci0+ZXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7CisgICAgICAgIGJvb2wgYiA9IG1fZXhwci0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhl
Yyk7CiAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTgogICAgICAgICBpZiAoIWIpCiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBleGVjLT5wdXNoSXRlcmF0aW9uKCk7Ci0gICAgICAgIEpT
VmFsdWUqIHN0YXRlbWVudFZhbHVlID0gc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOworICAgICAg
ICBKU1ZhbHVlKiBzdGF0ZW1lbnRWYWx1ZSA9IG1fc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwog
ICAgICAgICBleGVjLT5wb3BJdGVyYXRpb24oKTsKIAogICAgICAgICBpZiAoZXhlYy0+ZHluYW1p
Y0dsb2JhbE9iamVjdCgpLT50aW1lZE91dCgpKQpAQCAtMzc2OCw5ICszNzY4LDkgQEAgSlNWYWx1
ZSogV2hpbGVOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgdmFsdWUgPSBz
dGF0ZW1lbnRWYWx1ZTsKIAogICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAhPSBO
b3JtYWwpIHsKLSAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IENvbnRp
bnVlICYmIGxzLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKKyAgICAg
ICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IENvbnRpbnVlICYmIG1fbGFiZWxT
dGFjay5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSA9
PSBCcmVhayAmJiBscy5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCisg
ICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSA9PSBCcmVhayAmJiBtX2xhYmVs
U3RhY2suY29udGFpbnMoZXhlYy0+YnJlYWtPckNvbnRpbnVlVGFyZ2V0KCkpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIHN0YXRlbWVudFZhbHVlOwogICAgICAg
ICB9CkBAIC0zNzgzLDEwICszNzgzLDEwIEBAIEpTVmFsdWUqIFdoaWxlTm9kZTo6ZXhlY3V0ZShF
eGVjU3RhdGUqIGUKIAogdm9pZCBGb3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJv
bFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAg
IG5vZGVTdGFjay5hcHBlbmQoc3RhdGVtZW50LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5k
KGV4cHIzLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIyLmdldCgpKTsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKGV4cHIxLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Rh
dGVtZW50LmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjMuZ2V0KCkpOworICAg
IG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZCht
X2V4cHIxLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMi42LjMKQEAgLTM3OTQsMTcgKzM3OTQsMTcg
QEAgSlNWYWx1ZSogRm9yTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZQogewogICAgIEpTVmFs
dWUqIHZhbHVlID0gMDsKIAotICAgIGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgICBtX2V4cHIx
LT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KIAogICAgIHdoaWxlICgx
KSB7Ci0gICAgICAgIGJvb2wgYiA9IGV4cHIyLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAg
ICAgICAgYm9vbCBiID0gbV9leHByMi0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7CiAgICAgICAg
IEtKU19DSEVDS0VYQ0VQVElPTgogICAgICAgICBpZiAoIWIpCiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBleGVjLT5wdXNoSXRlcmF0aW9uKCk7Ci0gICAgICAgIEpTVmFsdWUqIHN0YXRl
bWVudFZhbHVlID0gc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBz
dGF0ZW1lbnRWYWx1ZSA9IG1fc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwogICAgICAgICBleGVj
LT5wb3BJdGVyYXRpb24oKTsKICAgICAgICAgaWYgKHN0YXRlbWVudFZhbHVlKQogICAgICAgICAg
ICAgdmFsdWUgPSBzdGF0ZW1lbnRWYWx1ZTsKQEAgLTM4MTMsMTUgKzM4MTMsMTUgQEAgSlNWYWx1
ZSogRm9yTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZQogICAgICAgICAgICAgcmV0dXJuIGV4
ZWMtPnNldEludGVycnVwdGVkQ29tcGxldGlvbigpOwogCiAgICAgICAgIGlmIChleGVjLT5jb21w
bGV0aW9uVHlwZSgpICE9IE5vcm1hbCkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRp
b25UeXBlKCkgPT0gQ29udGludWUgJiYgbHMuY29udGFpbnMoZXhlYy0+YnJlYWtPckNvbnRpbnVl
VGFyZ2V0KCkpKQorICAgICAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQ29u
dGludWUgJiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdl
dCgpKSkKICAgICAgICAgICAgICAgICBnb3RvIGNvbnRpbnVlRm9yTG9vcDsKLSAgICAgICAgICAg
IGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIGxzLmNvbnRhaW5zKGV4ZWMt
PmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKKyAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0
aW9uVHlwZSgpID09IEJyZWFrICYmIG1fbGFiZWxTdGFjay5jb250YWlucyhleGVjLT5icmVha09y
Q29udGludWVUYXJnZXQoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGVtZW50VmFsdWU7CiAgICAgICAgIH0KIAogY29udGludWVGb3JMb29wOgotICAg
ICAgICBleHByMy0+ZXZhbHVhdGUoZXhlYyk7CisgICAgICAgIG1fZXhwcjMtPmV2YWx1YXRlKGV4
ZWMpOwogICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgICB9CiAgIApAQCAtMzgzMCwyNiAr
MzgzMCwzNCBAQCBjb250aW51ZUZvckxvb3A6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBGb3JJbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LUZvckluTm9kZTo6Rm9ySW5Ob2RlKEV4cHJlc3Npb25Ob2RlKiBsLCBFeHByZXNzaW9uTm9kZSog
ZSwgU3RhdGVtZW50Tm9kZSogcykKLSAgICA6IGluaXQoMEwpLCBsZXhwcihsKSwgZXhwcihlKSwg
c3RhdGVtZW50KHMpLCBpZGVudElzVmFyRGVjbChmYWxzZSkKK0ZvckluTm9kZTo6Rm9ySW5Ob2Rl
KEV4cHJlc3Npb25Ob2RlKiBsLCBFeHByZXNzaW9uTm9kZSogZXhwciwgU3RhdGVtZW50Tm9kZSog
c3RhdGVtZW50KQorICAgIDogbV9pbml0KDBMKQorICAgICwgbV9sZXhwcihsKQorICAgICwgbV9l
eHByKGV4cHIpCisgICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCisgICAgLCBtX2lkZW50SXNW
YXJEZWNsKGZhbHNlKQogewogfQogCi1Gb3JJbk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlm
aWVyJiBpLCBFeHByZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnRO
b2RlKiBzKQotICAgIDogaWRlbnQoaSksIGxleHByKG5ldyBSZXNvbHZlTm9kZShpKSksIGV4cHIo
ZSksIHN0YXRlbWVudChzKSwgaWRlbnRJc1ZhckRlY2wodHJ1ZSkKK0ZvckluTm9kZTo6Rm9ySW5O
b2RlKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW4sIEV4cHJlc3Np
b25Ob2RlKiBleHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQpCisgICAgOiBtX2lkZW50KGlk
ZW50KQorICAgICwgbV9sZXhwcihuZXcgUmVzb2x2ZU5vZGUoaWRlbnQpKQorICAgICwgbV9leHBy
KGV4cHIpCisgICAgLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCisgICAgLCBtX2lkZW50SXNWYXJE
ZWNsKHRydWUpCiB7CiAgIGlmIChpbikKLSAgICAgIGluaXQgPSBuZXcgQXNzaWduUmVzb2x2ZU5v
ZGUoaSwgaW4pOworICAgICAgbV9pbml0ID0gbmV3IEFzc2lnblJlc29sdmVOb2RlKGlkZW50LCBp
bik7CiAgIC8vIGZvciggdmFyIGZvbyA9IGJhciBpbiBiYXogKQogfQogCiB2b2lkIEZvckluTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKHN0YXRlbWVu
dC5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByLmdldCgpKTsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKGxleHByLmdldCgpKTsKLSAgICBpZiAoaW5pdCkKLSAgICAgICAgbm9kZVN0YWNr
LmFwcGVuZChpbml0LmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fc3RhdGVtZW50Lmdl
dCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7CisgICAgbm9kZVN0YWNr
LmFwcGVuZChtX2xleHByLmdldCgpKTsKKyAgICBpZiAobV9pbml0KQorICAgICAgICBub2RlU3Rh
Y2suYXBwZW5kKG1faW5pdC5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTIuNi40CkBAIC0zODU3LDEy
ICszODY1LDEyIEBAIEpTVmFsdWUqIEZvckluTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGUKIHsK
ICAgSlNWYWx1ZSogdmFsdWUgPSAwOwogCi0gIGlmIChpbml0KSB7Ci0gICAgaW5pdC0+ZXZhbHVh
dGUoZXhlYyk7CisgIGlmIChtX2luaXQpIHsKKyAgICBtX2luaXQtPmV2YWx1YXRlKGV4ZWMpOwog
ICAgIEtKU19DSEVDS0VYQ0VQVElPTgogICB9CiAKLSAgSlNWYWx1ZSogZSA9IGV4cHItPmV2YWx1
YXRlKGV4ZWMpOworICBKU1ZhbHVlKiBlID0gbV9leHByLT5ldmFsdWF0ZShleGVjKTsKICAgS0pT
X0NIRUNLRVhDRVBUSU9OCiAKICAgLy8gRm9yIE51bGwgYW5kIFVuZGVmaW5lZCwgd2Ugd2FudCB0
byBtYWtlIHN1cmUgbm90IHRvIGdvIHRocm91Z2gKQEAgLTM4ODIsOCArMzg5MCw4IEBAIEpTVmFs
dWUqIEZvckluTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGUKIAogICAgICAgSlNWYWx1ZSAqc3Ry
ID0ganNPd25lZFN0cmluZyhuYW1lLnVzdHJpbmcoKSk7CiAKLSAgICAgIGlmIChsZXhwci0+aXNS
ZXNvbHZlTm9kZSgpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIgJmlkZW50ID0gc3RhdGlj
X2Nhc3Q8UmVzb2x2ZU5vZGUgKj4obGV4cHIuZ2V0KCkpLT5pZGVudGlmaWVyKCk7CisgICAgICBp
ZiAobV9sZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2xleHByLmdldCgpKS0+aWRlbnRp
ZmllcigpOwogCiAgICAgICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0gZXhlYy0+c2NvcGVD
aGFpbigpOwogICAgICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IGNoYWluLmJlZ2luKCk7
CkBAIC0zOTA1LDE4ICszOTEzLDE4IEBAIEpTVmFsdWUqIEZvckluTm9kZTo6ZXhlY3V0ZShFeGVj
U3RhdGUqIGUKICAgICAgICAgCiAgICAgICAgIGlmIChpdGVyID09IGVuZCkKICAgICAgICAgICAg
IG8tPnB1dChleGVjLCBpZGVudCwgc3RyKTsKLSAgICB9IGVsc2UgaWYgKGxleHByLT5pc0RvdEFj
Y2Vzc29yTm9kZSgpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGlj
X2Nhc3Q8RG90QWNjZXNzb3JOb2RlICo+KGxleHByLmdldCgpKS0+aWRlbnRpZmllcigpOwotICAg
ICAgICBKU1ZhbHVlICp2ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlICo+KGxleHByLmdl
dCgpKS0+YmFzZSgpLT5ldmFsdWF0ZShleGVjKTsKKyAgICB9IGVsc2UgaWYgKG1fbGV4cHItPmlz
RG90QWNjZXNzb3JOb2RlKCkpIHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBz
dGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihtX2xleHByLmdldCgpKS0+aWRlbnRpZmllcigp
OworICAgICAgICBKU1ZhbHVlKiB2ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4obV9s
ZXhwci5nZXQoKSktPmJhc2UoKS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgICAgIEtKU19DSEVDS0VY
Q0VQVElPTgogICAgICAgICBKU09iamVjdCAqbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwogCiAgICAg
ICAgIG8tPnB1dChleGVjLCBpZGVudCwgc3RyKTsKICAgICB9IGVsc2UgewotICAgICAgICBBU1NF
UlQobGV4cHItPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKTsKLSAgICAgICAgSlNWYWx1ZSAqdiA9
IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUgKj4obGV4cHIuZ2V0KCkpLT5iYXNlKCkt
PmV2YWx1YXRlKGV4ZWMpOworICAgICAgICBBU1NFUlQobV9sZXhwci0+aXNCcmFja2V0QWNjZXNz
b3JOb2RlKCkpOworICAgICAgICBKU1ZhbHVlKiB2ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vz
c29yTm9kZSo+KG1fbGV4cHIuZ2V0KCkpLT5iYXNlKCktPmV2YWx1YXRlKGV4ZWMpOwogICAgICAg
ICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAgICAgICAgSlNWYWx1ZSAqdjIgPSBzdGF0aWNfY2FzdDxC
cmFja2V0QWNjZXNzb3JOb2RlICo+KGxleHByLmdldCgpKS0+c3Vic2NyaXB0KCktPmV2YWx1YXRl
KGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiB2MiA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nv
ck5vZGUqPihtX2xleHByLmdldCgpKS0+c3Vic2NyaXB0KCktPmV2YWx1YXRlKGV4ZWMpOwogICAg
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgICAgICAgSlNPYmplY3QgKm8gPSB2LT50b09iamVj
dChleGVjKTsKIApAQCAtMzkyOSwxNSArMzkzNywxNSBAQCBKU1ZhbHVlKiBGb3JJbk5vZGU6OmV4
ZWN1dGUoRXhlY1N0YXRlKiBlCiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKICAgICBleGVjLT5w
dXNoSXRlcmF0aW9uKCk7Ci0gICAgSlNWYWx1ZSogc3RhdGVtZW50VmFsdWUgPSBzdGF0ZW1lbnQt
PmV4ZWN1dGUoZXhlYyk7CisgICAgSlNWYWx1ZSogc3RhdGVtZW50VmFsdWUgPSBtX3N0YXRlbWVu
dC0+ZXhlY3V0ZShleGVjKTsKICAgICBleGVjLT5wb3BJdGVyYXRpb24oKTsKICAgICBpZiAoc3Rh
dGVtZW50VmFsdWUpCiAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZhbHVlOwogCiAgICAgaWYgKGV4
ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKSB7Ci0gICAgICAgIGlmIChleGVjLT5jb21w
bGV0aW9uVHlwZSgpID09IENvbnRpbnVlICYmIGxzLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250
aW51ZVRhcmdldCgpKSkKKyAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQ29u
dGludWUgJiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdl
dCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlv
blR5cGUoKSA9PSBCcmVhayAmJiBscy5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJn
ZXQoKSkpCisgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIG1f
bGFiZWxTdGFjay5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgcmV0dXJuIHN0YXRlbWVudFZhbHVlOwogICAgIH0KQEAg
LTM5NTEsMTEgKzM5NTksMTEgQEAgSlNWYWx1ZSogRm9ySW5Ob2RlOjpleGVjdXRlKEV4ZWNTdGF0
ZSogZQogLy8gRUNNQSAxMi43CiBKU1ZhbHVlKiBDb250aW51ZU5vZGU6OmV4ZWN1dGUoRXhlY1N0
YXRlKiBleGVjKQogewotICBpZiAoaWRlbnQuaXNFbXB0eSgpICYmICFleGVjLT5pbkl0ZXJhdGlv
bigpKQorICBpZiAobV9pZGVudC5pc0VtcHR5KCkgJiYgIWV4ZWMtPmluSXRlcmF0aW9uKCkpCiAg
ICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkludmFsaWQg
Y29udGludWUgc3RhdGVtZW50LiIpOwotICBpZiAoIWlkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+
c2VlbkxhYmVscygpLmNvbnRhaW5zKGlkZW50KSkKLSAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0
aW9uKGV4ZWMsIFN5bnRheEVycm9yLCAiTGFiZWwgJXMgbm90IGZvdW5kLiIsIGlkZW50KTsKLSAg
cmV0dXJuIGV4ZWMtPnNldENvbnRpbnVlQ29tcGxldGlvbigmaWRlbnQpOworICBpZiAoIW1faWRl
bnQuaXNFbXB0eSgpICYmICFleGVjLT5zZWVuTGFiZWxzKCkuY29udGFpbnMobV9pZGVudCkpCisg
ICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkxhYmVsICVz
IG5vdCBmb3VuZC4iLCBtX2lkZW50KTsKKyAgcmV0dXJuIGV4ZWMtPnNldENvbnRpbnVlQ29tcGxl
dGlvbigmbV9pZGVudCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBC
cmVha05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zOTYzLDE5
ICszOTcxLDE5IEBAIEpTVmFsdWUqIENvbnRpbnVlTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUKIC8v
IEVDTUEgMTIuOAogSlNWYWx1ZSogQnJlYWtOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykK
IHsKLSAgaWYgKGlkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+aW5JdGVyYXRpb24oKSAmJiAhZXhl
Yy0+aW5Td2l0Y2goKSkKKyAgaWYgKG1faWRlbnQuaXNFbXB0eSgpICYmICFleGVjLT5pbkl0ZXJh
dGlvbigpICYmICFleGVjLT5pblN3aXRjaCgpKQogICAgIHJldHVybiBzZXRFcnJvckNvbXBsZXRp
b24oZXhlYywgU3ludGF4RXJyb3IsICJJbnZhbGlkIGJyZWFrIHN0YXRlbWVudC4iKTsKLSAgaWYg
KCFpZGVudC5pc0VtcHR5KCkgJiYgIWV4ZWMtPnNlZW5MYWJlbHMoKS5jb250YWlucyhpZGVudCkp
CisgIGlmICghbV9pZGVudC5pc0VtcHR5KCkgJiYgIWV4ZWMtPnNlZW5MYWJlbHMoKS5jb250YWlu
cyhtX2lkZW50KSkKICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVy
cm9yLCAiTGFiZWwgJXMgbm90IGZvdW5kLiIpOwotICByZXR1cm4gZXhlYy0+c2V0QnJlYWtDb21w
bGV0aW9uKCZpZGVudCk7CisgIHJldHVybiBleGVjLT5zZXRCcmVha0NvbXBsZXRpb24oJm1faWRl
bnQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmV0dXJuTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIFJldHVybk5vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBub2RlU3RhY2su
YXBwZW5kKHZhbHVlLmdldCgpKTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgbm9kZVN0YWNr
LmFwcGVuZChtX3ZhbHVlLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMi45CkBAIC0zOTg1LDEwICsz
OTkzLDEwIEBAIEpTVmFsdWUqIFJldHVybk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiAKICAgaWYg
KGNvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9u
KGV4ZWMsIFN5bnRheEVycm9yLCAiSW52YWxpZCByZXR1cm4gc3RhdGVtZW50LiIpOwogCi0gIGlm
ICghdmFsdWUpCisgIGlmICghbV92YWx1ZSkKICAgICByZXR1cm4gZXhlYy0+c2V0UmV0dXJuVmFs
dWVDb21wbGV0aW9uKGpzVW5kZWZpbmVkKCkpOwogCi0gIEpTVmFsdWUqIHYgPSB2YWx1ZS0+ZXZh
bHVhdGUoZXhlYyk7CisgIEpTVmFsdWUqIHYgPSBtX3ZhbHVlLT5ldmFsdWF0ZShleGVjKTsKICAg
S0pTX0NIRUNLRVhDRVBUSU9OCiAKICAgcmV0dXJuIGV4ZWMtPnNldFJldHVyblZhbHVlQ29tcGxl
dGlvbih2KTsKQEAgLTM5OTksMTkgKzQwMDcsMTkgQEAgSlNWYWx1ZSogUmV0dXJuTm9kZTo6ZXhl
Y3V0ZShFeGVjU3RhdGUqIAogdm9pZCBXaXRoTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhT
eW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsK
ICAgICAvLyBDYW4ndCBvcHRpbWl6ZSB3aXRoaW4gc3RhdGVtZW50IGJlY2F1c2UgIndpdGgiIGlu
dHJvZHVjZXMgYSBkeW5hbWljIHNjb3BlLgotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwci5nZXQo
KSk7CisgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDEy
LjEwCiBKU1ZhbHVlKiBXaXRoTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIEpT
VmFsdWUgKnYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKKyAgSlNWYWx1ZSAqdiA9IG1fZXhwci0+
ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgogICBKU09iamVjdCAqbyA9IHYt
PnRvT2JqZWN0KGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpLT50ZWFyT2ZmQWN0aXZhdGlvbihleGVjKTsKICAgZXhlYy0+cHVzaFNjb3Bl
KG8pOwotICBKU1ZhbHVlKiB2YWx1ZSA9IHN0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKKyAgSlNW
YWx1ZSogdmFsdWUgPSBtX3N0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKICAgZXhlYy0+cG9wU2Nv
cGUoKTsKIAogICByZXR1cm4gdmFsdWU7CkBAIC00MDIxLDE1ICs0MDI5LDE1IEBAIEpTVmFsdWUq
IFdpdGhOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXgKIAogdm9pZCBDYXNlQ2xhdXNlTm9kZTo6
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBpZiAoZXhwcikKLSAgICAgICAgbm9kZVN0YWNr
LmFwcGVuZChleHByLmdldCgpKTsKKyAgICBpZiAobV9leHByKQorICAgICAgICBub2RlU3RhY2su
YXBwZW5kKG1fZXhwci5nZXQoKSk7CiAgICAgc3RhdGVtZW50TGlzdFB1c2hGSUZPKG1fY2hpbGRy
ZW4sIG5vZGVTdGFjayk7CiB9CiAKIC8vIEVDTUEgMTIuMTEKIEpTVmFsdWUgKkNhc2VDbGF1c2VO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIEpTVmFsdWUgKnYgPSBleHByLT5l
dmFsdWF0ZShleGVjKTsKKyAgSlNWYWx1ZSAqdiA9IG1fZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAg
IEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgcmV0dXJuIHY7CkBAIC00MDQ1LDM0ICs0MDUz
LDM0IEBAIEpTVmFsdWUqIENhc2VDbGF1c2VOb2RlOjpleGVjdXRlU3RhdGVtZW4KIAogdm9pZCBD
bGF1c2VMaXN0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKLSAgICBpZiAobmV4dCkKLSAg
ICAgICAgbm9kZVN0YWNrLmFwcGVuZChuZXh0LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5k
KGNsYXVzZS5nZXQoKSk7CisgICAgaWYgKG1fbmV4dCkKKyAgICAgICAgbm9kZVN0YWNrLmFwcGVu
ZChtX25leHQuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV9jbGF1c2UuZ2V0KCkpOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2FzZUJsb2NrTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1DYXNlQmxvY2tOb2RlOjpDYXNlQmxvY2tO
b2RlKENsYXVzZUxpc3ROb2RlKiBsMSwgQ2FzZUNsYXVzZU5vZGUqIGQsIENsYXVzZUxpc3ROb2Rl
KiBsMikKLSAgICA6IGxpc3QxKGwxKQotICAgICwgZGVmKGQpCi0gICAgLCBsaXN0MihsMikKK0Nh
c2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE5vZGUqIGxpc3QxLCBDYXNlQ2xh
dXNlTm9kZSogZGVmYXVsdENsYXVzZSwgQ2xhdXNlTGlzdE5vZGUqIGxpc3QyKQorICAgIDogbV9s
aXN0MShsaXN0MSkKKyAgICAsIG1fZGVmYXVsdENsYXVzZShkZWZhdWx0Q2xhdXNlKQorICAgICwg
bV9saXN0MihsaXN0MikKIHsKIH0KICAKIHZvaWQgQ2FzZUJsb2NrTm9kZTo6b3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5v
ZGVTdGFjaykKIHsKLSAgICBpZiAobGlzdDIpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobGlz
dDIuZ2V0KCkpOwotICAgIGlmIChkZWYpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQoZGVmLmdl
dCgpKTsKLSAgICBpZiAobGlzdDEpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobGlzdDEuZ2V0
KCkpOworICAgIGlmIChtX2xpc3QyKQorICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbGlzdDIu
Z2V0KCkpOworICAgIGlmIChtX2RlZmF1bHRDbGF1c2UpCisgICAgICAgIG5vZGVTdGFjay5hcHBl
bmQobV9kZWZhdWx0Q2xhdXNlLmdldCgpKTsKKyAgICBpZiAobV9saXN0MSkKKyAgICAgICAgbm9k
ZVN0YWNrLmFwcGVuZChtX2xpc3QxLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMi4xMQogSlNWYWx1
ZSogQ2FzZUJsb2NrTm9kZTo6ZXhlY3V0ZUJsb2NrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSog
aW5wdXQpCiB7Ci0gIENsYXVzZUxpc3ROb2RlKiBhID0gbGlzdDEuZ2V0KCk7CisgIENsYXVzZUxp
c3ROb2RlKiBhID0gbV9saXN0MS5nZXQoKTsKICAgICB3aGlsZSAoYSkgewogICAgICAgQ2FzZUNs
YXVzZU5vZGUqIGNsYXVzZSA9IGEtPmdldENsYXVzZSgpOwogICAgICAgYSA9IGEtPmdldE5leHQo
KTsKQEAgLTQwOTEsNyArNDA5OSw3IEBAIEpTVmFsdWUqIENhc2VCbG9ja05vZGU6OmV4ZWN1dGVC
bG9jayhFeGUKICAgICAgIH0KICAgICB9CiAKLSAgQ2xhdXNlTGlzdE5vZGUqIGIgPSBsaXN0Mi5n
ZXQoKTsKKyAgQ2xhdXNlTGlzdE5vZGUqIGIgPSBtX2xpc3QyLmdldCgpOwogICB3aGlsZSAoYikg
ewogICAgIENhc2VDbGF1c2VOb2RlKiBjbGF1c2UgPSBiLT5nZXRDbGF1c2UoKTsKICAgICBiID0g
Yi0+Z2V0TmV4dCgpOwpAQCAtNDEwNiwxMiArNDExNCwxMiBAQCBKU1ZhbHVlKiBDYXNlQmxvY2tO
b2RlOjpleGVjdXRlQmxvY2soRXhlCiAgIH0KIAogICAvLyBkZWZhdWx0IGNsYXVzZQotICBpZiAo
ZGVmKSB7Ci0gICAgSlNWYWx1ZSogcmVzID0gZGVmLT5leGVjdXRlU3RhdGVtZW50cyhleGVjKTsK
KyAgaWYgKG1fZGVmYXVsdENsYXVzZSkgeworICAgIEpTVmFsdWUqIHJlcyA9IG1fZGVmYXVsdENs
YXVzZS0+ZXhlY3V0ZVN0YXRlbWVudHMoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25U
eXBlKCkgIT0gTm9ybWFsKQogICAgICAgcmV0dXJuIHJlczsKICAgfQotICBiID0gbGlzdDIuZ2V0
KCk7CisgIGIgPSBtX2xpc3QyLmdldCgpOwogIHN0ZXAxODoKICAgd2hpbGUgKGIpIHsKICAgICBD
YXNlQ2xhdXNlTm9kZSogY2xhdXNlID0gYi0+Z2V0Q2xhdXNlKCk7CkBAIC00MTMxLDIxICs0MTM5
LDIxIEBAIEpTVmFsdWUqIENhc2VCbG9ja05vZGU6OmV4ZWN1dGVCbG9jayhFeGUKIAogdm9pZCBT
d2l0Y2hOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAgIG5vZGVTdGFjay5hcHBlbmQo
YmxvY2suZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQoZXhwci5nZXQoKSk7CisgICAgbm9k
ZVN0YWNrLmFwcGVuZChtX2Jsb2NrLmdldCgpKTsKKyAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhw
ci5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTIuMTEKIEpTVmFsdWUqIFN3aXRjaE5vZGU6OmV4ZWN1
dGUoRXhlY1N0YXRlKiBleGVjKQogewotICBKU1ZhbHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhl
Yyk7CisgIEpTVmFsdWUgKnYgPSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tF
WENFUFRJT04KIAogICBleGVjLT5wdXNoU3dpdGNoKCk7Ci0gIEpTVmFsdWUqIHJlc3VsdCA9IGJs
b2NrLT5leGVjdXRlQmxvY2soZXhlYywgdik7CisgIEpTVmFsdWUqIHJlc3VsdCA9IG1fYmxvY2st
PmV4ZWN1dGVCbG9jayhleGVjLCB2KTsKICAgZXhlYy0+cG9wU3dpdGNoKCk7CiAKLSAgaWYgKGV4
ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQnJlYWsgJiYgbHMuY29udGFpbnMoZXhlYy0+YnJlYWtP
ckNvbnRpbnVlVGFyZ2V0KCkpKQorICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSA9PSBCcmVh
ayAmJiBtX2xhYmVsU3RhY2suY29udGFpbnMoZXhlYy0+YnJlYWtPckNvbnRpbnVlVGFyZ2V0KCkp
KQogICAgIGV4ZWMtPnNldENvbXBsZXRpb25UeXBlKE5vcm1hbCk7CiAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC00MTU0LDE4ICs0MTYyLDE4IEBAIEpTVmFsdWUqIFN3aXRjaE5vZGU6OmV4ZWN1dGUo
RXhlY1N0YXRlKiAKIAogdm9pZCBMYWJlbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3lt
Ym9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7Ci0g
ICAgbm9kZVN0YWNrLmFwcGVuZChzdGF0ZW1lbnQuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBl
bmQobV9zdGF0ZW1lbnQuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDEyLjEyCi1KU1ZhbHVlKiBMYWJl
bE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogTGFiZWxOb2RlOjpleGVj
dXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgaWYgKCFleGVjLT5zZWVuTGFiZWxzKCkucHVzaChs
YWJlbCkpCi0gICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwg
IkR1cGxpY2F0ZWQgbGFiZWwgJXMgZm91bmQuIiwgbGFiZWwpOwotICBKU1ZhbHVlKiByZXN1bHQg
PSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CisgIGlmICghZXhlYy0+c2VlbkxhYmVscygpLnB1
c2gobV9sYWJlbCkpCisgICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhF
cnJvciwgIkR1cGxpY2F0ZWQgbGFiZWwgJXMgZm91bmQuIiwgbV9sYWJlbCk7CisgIEpTVmFsdWUq
IHJlc3VsdCA9IG1fc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwogICBleGVjLT5zZWVuTGFiZWxz
KCkucG9wKCk7CiAKLSAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQnJlYWsgJiYgZXhl
Yy0+YnJlYWtPckNvbnRpbnVlVGFyZ2V0KCkgPT0gbGFiZWwpCisgIGlmIChleGVjLT5jb21wbGV0
aW9uVHlwZSgpID09IEJyZWFrICYmIGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpID09IG1f
bGFiZWwpCiAgICAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTQxNzQsMTMgKzQxODIsMTMgQEAgSlNWYWx1ZSogTGFiZWxOb2RlOjpleGVj
dXRlKEV4ZWNTdGF0ZSAqZQogCiB2b2lkIFRocm93Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykK
IHsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBl
bmQobV9leHByLmdldCgpKTsKIH0KIAogLy8gRUNNQSAxMi4xMwogSlNWYWx1ZSogVGhyb3dOb2Rl
OjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgSlNWYWx1ZSAqdiA9IGV4cHItPmV2YWx1
YXRlKGV4ZWMpOworICBKU1ZhbHVlICp2ID0gbV9leHByLT5ldmFsdWF0ZShleGVjKTsKICAgS0pT
X0NIRUNLRVhDRVBUSU9OCiAKICAgaGFuZGxlRXhjZXB0aW9uKGV4ZWMsIHYpOwpAQCAtNDE5Miwz
MSArNDIwMCwzMSBAQCBKU1ZhbHVlKiBUaHJvd05vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBlCiB2
b2lkIFRyeU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7CiAgICAgLy8gQ2FuJ3Qgb3B0aW1p
emUgd2l0aGluIGNhdGNoQmxvY2sgYmVjYXVzZSAiY2F0Y2giIGludHJvZHVjZXMgYSBkeW5hbWlj
IHNjb3BlLgotICAgIGlmIChmaW5hbGx5QmxvY2spCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQo
ZmluYWxseUJsb2NrLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKHRyeUJsb2NrLmdldCgp
KTsKKyAgICBpZiAobV9maW5hbGx5QmxvY2spCisgICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9m
aW5hbGx5QmxvY2suZ2V0KCkpOworICAgIG5vZGVTdGFjay5hcHBlbmQobV90cnlCbG9jay5nZXQo
KSk7CiB9CiAKIC8vIEVDTUEgMTIuMTQKLUpTVmFsdWUqIFRyeU5vZGU6OmV4ZWN1dGUoRXhlY1N0
YXRlICpleGVjKQorSlNWYWx1ZSogVHJ5Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gIEpTVmFsdWUqIHJlc3VsdCA9IHRyeUJsb2NrLT5leGVjdXRlKGV4ZWMpOworICBKU1ZhbHVl
KiByZXN1bHQgPSBtX3RyeUJsb2NrLT5leGVjdXRlKGV4ZWMpOwogCiAgIGlmIChDb2xsZWN0b3I6
OmlzT3V0T2ZNZW1vcnkoKSkKICAgICAgIHJldHVybiByZXN1bHQ7IC8vIGRvbid0IHRyeSB0byBj
YXRjaCBhbiBvdXQgb2YgbWVtb3J5IGV4Y2VwdGlvbiB0aHJvd24gYnkgdGhlIGNvbGxlY3Rvcgog
ICAKLSAgaWYgKGNhdGNoQmxvY2sgJiYgZXhlYy0+Y29tcGxldGlvblR5cGUoKSA9PSBUaHJvdykg
eworICBpZiAobV9jYXRjaEJsb2NrICYmIGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gVGhyb3cp
IHsKICAgICBKU09iamVjdCogb2JqID0gbmV3IEpTT2JqZWN0OwotICAgIG9iai0+cHV0KGV4ZWMs
IGV4Y2VwdGlvbklkZW50LCByZXN1bHQsIERvbnREZWxldGUpOworICAgIG9iai0+cHV0KGV4ZWMs
IG1fZXhjZXB0aW9uSWRlbnQsIHJlc3VsdCwgRG9udERlbGV0ZSk7CiAgICAgZXhlYy0+ZHluYW1p
Y0dsb2JhbE9iamVjdCgpLT50ZWFyT2ZmQWN0aXZhdGlvbihleGVjKTsKICAgICBleGVjLT5wdXNo
U2NvcGUob2JqKTsKLSAgICByZXN1bHQgPSBjYXRjaEJsb2NrLT5leGVjdXRlKGV4ZWMpOworICAg
IHJlc3VsdCA9IG1fY2F0Y2hCbG9jay0+ZXhlY3V0ZShleGVjKTsKICAgICBleGVjLT5wb3BTY29w
ZSgpOwogICB9CiAKLSAgaWYgKGZpbmFsbHlCbG9jaykgeworICBpZiAobV9maW5hbGx5QmxvY2sp
IHsKICAgICBDb21wbFR5cGUgc2F2ZWRDb21wbGV0aW9uVHlwZSA9IGV4ZWMtPmNvbXBsZXRpb25U
eXBlKCk7Ci0gICAgSlNWYWx1ZSogZmluYWxseVJlc3VsdCA9IGZpbmFsbHlCbG9jay0+ZXhlY3V0
ZShleGVjKTsKKyAgICBKU1ZhbHVlKiBmaW5hbGx5UmVzdWx0ID0gbV9maW5hbGx5QmxvY2stPmV4
ZWN1dGUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKQog
ICAgICAgICByZXN1bHQgPSBmaW5hbGx5UmVzdWx0OwogICAgIGVsc2UKQEAgLTQyODYsNyArNDI5
NCw3IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6aW5pdGlhbGl6ZVN5bWJvbFQKICAgICB9CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG1fZnVuY3Rpb25TdGFjay5zaXplKCk7IGkg
PCBzaXplOyArK2ksICsrbG9jYWxTdG9yYWdlSW5kZXgpIHsKLSAgICAgICAgVVN0cmluZzo6UmVw
KiByZXAgPSBtX2Z1bmN0aW9uU3RhY2tbaV0tPmlkZW50LnVzdHJpbmcoKS5yZXAoKTsKKyAgICAg
ICAgVVN0cmluZzo6UmVwKiByZXAgPSBtX2Z1bmN0aW9uU3RhY2tbaV0tPm1faWRlbnQudXN0cmlu
ZygpLnJlcCgpOwogICAgICAgICBzeW1ib2xUYWJsZS5zZXQocmVwLCBsb2NhbFN0b3JhZ2VJbmRl
eCk7CiAgICAgfQogCkBAIC00MzE1LDcgKzQzMjMsNyBAQCB2b2lkIFByb2dyYW1Ob2RlOjppbml0
aWFsaXplU3ltYm9sVGFibGUoCiAgICAgc2l6ZSA9IG1fZnVuY3Rpb25TdGFjay5zaXplKCk7CiAg
ICAgbV9mdW5jdGlvbkluZGV4ZXMucmVzaXplKHNpemUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFVTdHJpbmc6OlJlcCogcmVwID0gbV9mdW5jdGlv
blN0YWNrW2ldLT5pZGVudC51c3RyaW5nKCkucmVwKCk7CisgICAgICAgIFVTdHJpbmc6OlJlcCog
cmVwID0gbV9mdW5jdGlvblN0YWNrW2ldLT5tX2lkZW50LnVzdHJpbmcoKS5yZXAoKTsKICAgICAg
ICAgcGFpcjxTeW1ib2xUYWJsZTo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IHN5bWJvbFRhYmxl
LmFkZChyZXAsIGxvY2FsU3RvcmFnZUluZGV4KTsKICAgICAgICAgbV9mdW5jdGlvbkluZGV4ZXNb
aV0gPSByZXN1bHQuZmlyc3QtPnNlY29uZDsKICAgICAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCkBA
IC00NDg0LDcgKzQ0OTIsNyBAQCB2b2lkIEV2YWxOb2RlOjpwcm9jZXNzRGVjbGFyYXRpb25zKEV4
ZWNTCiAKICAgICBmb3IgKGkgPSAwLCBzaXplID0gbV9mdW5jdGlvblN0YWNrLnNpemUoKTsgaSA8
IHNpemU7ICsraSkgewogICAgICAgICBGdW5jRGVjbE5vZGUqIG5vZGUgPSBtX2Z1bmN0aW9uU3Rh
Y2tbaV07Ci0gICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXQoZXhlYywgbm9kZS0+aWRlbnQsIG5v
ZGUtPm1ha2VGdW5jdGlvbihleGVjKSwgbWluQXR0cmlidXRlcyk7CisgICAgICAgIHZhcmlhYmxl
T2JqZWN0LT5wdXQoZXhlYywgbm9kZS0+bV9pZGVudCwgbm9kZS0+bWFrZUZ1bmN0aW9uKGV4ZWMp
LCBtaW5BdHRyaWJ1dGVzKTsKICAgICB9CiB9CiAKQEAgLTQ1NTQsMTkgKzQ1NjIsMTkgQEAgSlNW
YWx1ZSogRnVuY3Rpb25Cb2R5Tm9kZVdpdGhEZWJ1Z2dlckhvbwogCiB2b2lkIEZ1bmNEZWNsTm9k
ZTo6YWRkUGFyYW1zKCkgCiB7Ci0gIGZvciAoUGFyYW1ldGVyTm9kZSAqcCA9IHBhcmFtLmdldCgp
OyBwICE9IDBMOyBwID0gcC0+bmV4dFBhcmFtKCkpCi0gICAgYm9keS0+cGFyYW1ldGVycygpLmFw
cGVuZChwLT5pZGVudCgpKTsKKyAgZm9yIChQYXJhbWV0ZXJOb2RlICpwID0gbV9wYXJhbWV0ZXIu
Z2V0KCk7IHAgIT0gMEw7IHAgPSBwLT5uZXh0UGFyYW0oKSkKKyAgICBtX2JvZHktPnBhcmFtZXRl
cnMoKS5hcHBlbmQocC0+aWRlbnQoKSk7CiB9CiAKIEZ1bmN0aW9uSW1wKiBGdW5jRGVjbE5vZGU6
Om1ha2VGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEZ1bmN0aW9uSW1wICpmdW5jID0g
bmV3IEZ1bmN0aW9uSW1wKGV4ZWMsIGlkZW50LCBib2R5LmdldCgpLCBleGVjLT5zY29wZUNoYWlu
KCkpOworICBGdW5jdGlvbkltcCAqZnVuYyA9IG5ldyBGdW5jdGlvbkltcChleGVjLCBtX2lkZW50
LCBtX2JvZHkuZ2V0KCksIGV4ZWMtPnNjb3BlQ2hhaW4oKSk7CiAKICAgSlNPYmplY3QqIHByb3Rv
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RDb25zdHJ1Y3RvcigpLT5jb25z
dHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICBwcm90by0+cHV0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRl
IHwgRG9udEVudW0pOwogICBmdW5jLT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgcHJvdG8sIEludGVybmFsfERvbnREZWxldGUpOwogCi0gIGZ1bmMtPnB1dChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihib2R5LT5wYXJhbWV0ZXJz
KCkuc2l6ZSgpKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CisgIGZ1bmMtPnB1dChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihtX2JvZHktPnBhcmFt
ZXRlcnMoKS5zaXplKCkpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKICAgcmV0dXJu
IGZ1bmM7CiB9CiAKQEAgLTQ1ODAsMTUgKzQ1ODgsMTUgQEAgSlNWYWx1ZSogRnVuY0RlY2xOb2Rl
OjpleGVjdXRlKEV4ZWNTdGF0ZQogLy8gRUNNQSAxMwogdm9pZCBGdW5jRXhwck5vZGU6OmFkZFBh
cmFtcygpCiB7Ci0gIGZvciAoUGFyYW1ldGVyTm9kZSAqcCA9IHBhcmFtLmdldCgpOyBwICE9IDBM
OyBwID0gcC0+bmV4dFBhcmFtKCkpCi0gICAgYm9keS0+cGFyYW1ldGVycygpLmFwcGVuZChwLT5p
ZGVudCgpKTsKKyAgZm9yIChQYXJhbWV0ZXJOb2RlKiBwID0gbV9wYXJhbWV0ZXIuZ2V0KCk7IHAg
IT0gMEw7IHAgPSBwLT5uZXh0UGFyYW0oKSkKKyAgICBtX2JvZHktPnBhcmFtZXRlcnMoKS5hcHBl
bmQocC0+aWRlbnQoKSk7CiB9CiAKIEpTVmFsdWUgKkZ1bmNFeHByTm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlICpleGVjKQogewogICBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZB
Y3RpdmF0aW9uKGV4ZWMpOwogICAKLSAgYm9vbCBuYW1lZCA9ICFpZGVudC5pc051bGwoKTsKKyAg
Ym9vbCBuYW1lZCA9ICFtX2lkZW50LmlzTnVsbCgpOwogICBKU09iamVjdCAqZnVuY3Rpb25TY29w
ZU9iamVjdCA9IDA7CiAKICAgaWYgKG5hbWVkKSB7CkBAIC00NTk5LDEzICs0NjA3LDEzIEBAIEpT
VmFsdWUgKkZ1bmNFeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXQKICAgICBleGVjLT5wdXNoU2Nv
cGUoZnVuY3Rpb25TY29wZU9iamVjdCk7CiAgIH0KIAotICBGdW5jdGlvbkltcCogZnVuYyA9IG5l
dyBGdW5jdGlvbkltcChleGVjLCBpZGVudCwgYm9keS5nZXQoKSwgZXhlYy0+c2NvcGVDaGFpbigp
KTsKKyAgRnVuY3Rpb25JbXAqIGZ1bmMgPSBuZXcgRnVuY3Rpb25JbXAoZXhlYywgbV9pZGVudCwg
bV9ib2R5LmdldCgpLCBleGVjLT5zY29wZUNoYWluKCkpOwogICBKU09iamVjdCogcHJvdG8gPSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdENvbnN0cnVjdG9yKCktPmNvbnN0cnVj
dChleGVjLCBleGVjLT5lbXB0eUxpc3QoKSk7CiAgIHByb3RvLT5wdXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7CiAgIGZ1bmMtPnB1dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCBwcm90bywgSW50ZXJuYWwgfCBEb250RGVsZXRlKTsKIAogICBpZiAobmFtZWQpIHsKLSAg
ICBmdW5jdGlvblNjb3BlT2JqZWN0LT5wdXQoZXhlYywgaWRlbnQsIGZ1bmMsIEludGVybmFsIHwg
UmVhZE9ubHkgfCAoZXhlYy0+Y29kZVR5cGUoKSA9PSBFdmFsQ29kZSA/IDAgOiBEb250RGVsZXRl
KSk7CisgICAgZnVuY3Rpb25TY29wZU9iamVjdC0+cHV0KGV4ZWMsIG1faWRlbnQsIGZ1bmMsIElu
dGVybmFsIHwgUmVhZE9ubHkgfCAoZXhlYy0+Y29kZVR5cGUoKSA9PSBFdmFsQ29kZSA/IDAgOiBE
b250RGVsZXRlKSk7CiAgICAgZXhlYy0+cG9wU2NvcGUoKTsKICAgfQogCkluZGV4OiBranMvbm9k
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBranMvbm9kZXMuaAkocmV2aXNpb24gMjk4MTUpCisrKyBranMv
bm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDExICsyMDIsMTEgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgaW50IGZpcnN0TGluZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbGlu
ZU5vKCk7IH0KICAgICBpbnQgbGFzdExpbmUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IG1fbGFzdExpbmU7IH0KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlICpl
eGVjKSBLSlNfRkFTVF9DQUxMID0gMDsKLSAgICB2b2lkIHB1c2hMYWJlbChjb25zdCBJZGVudGlm
aWVyICZpZCkgS0pTX0ZBU1RfQ0FMTCB7IGxzLnB1c2goaWQpOyB9CisgICAgdm9pZCBwdXNoTGFi
ZWwoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwgeyBtX2xhYmVsU3RhY2su
cHVzaChpZGVudCk7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0VtcHR5U3RhdGVtZW50KCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVy
biBmYWxzZTsgfQogICBwcm90ZWN0ZWQ6Ci0gICAgTGFiZWxTdGFjayBsczsKKyAgICBMYWJlbFN0
YWNrIG1fbGFiZWxTdGFjazsKICAgcHJpdmF0ZToKICAgICBpbnQgbV9sYXN0TGluZTsKICAgfTsK
QEAgLTMxMSwxNSArMzExLDE1IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIFJlc29sdmVO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIFJlc29sdmVOb2Rl
KGNvbnN0IElkZW50aWZpZXIgJnMpIEtKU19GQVNUX0NBTEwgCi0gICAgICAgIDogaWRlbnQocykg
CisgICAgUmVzb2x2ZU5vZGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwg
CisgICAgICAgIDogbV9pZGVudChpZGVudCkKICAgICB7IAogICAgIH0KIAogICAgIC8vIFNwZWNp
YWwgY29uc3RydWN0b3IgZm9yIGNhc2VzIHdoZXJlIHdlIG92ZXJ3cml0ZSBhbiBvYmplY3QgaW4g
cGxhY2UuCiAgICAgUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSBLSlNfRkFTVF9D
QUxMIAogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAg
ICAsIGlkZW50KFBsYWNlbWVudE5ld0Fkb3B0KQorICAgICAgICAsIG1faWRlbnQoUGxhY2VtZW50
TmV3QWRvcHQpCiAgICAgewogICAgIH0KIApAQCAtMzM1LDEyICszMzUsMTIgQEAgbmFtZXNwYWNl
IEtKUyB7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2NhdGlvbigpIGNvbnN0IEtKU19GQVNUX0NB
TEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Jlc29sdmVOb2RlKCkgY29u
c3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9Ci0gICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllcigpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gaWRlbnQ7IH0KKyAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVy
biBtX2lkZW50OyB9CiAKICAgcHJvdGVjdGVkOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
aW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7Ci0gICAgSWRlbnRpZmllciBpZGVudDsKLSAgICBz
aXplX3QgaW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxWYXJBY2Nlc3NOb2RlLgorICAgIElkZW50aWZp
ZXIgbV9pZGVudDsKKyAgICBzaXplX3QgbV9pbmRleDsgLy8gVXNlZCBieSBMb2NhbFZhckFjY2Vz
c05vZGUuCiAgIH07CiAKICAgY2xhc3MgTG9jYWxWYXJBY2Nlc3NOb2RlIDogcHVibGljIFJlc29s
dmVOb2RlIHsKQEAgLTM1MCw3ICszNTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgOiBS
ZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpICE9
IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7Ci0gICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgbV9p
bmRleCA9IGk7CiAgICAgfQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0zNjMsNDYgKzM2Myw0OCBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICBjbGFzcyBFbGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgot
ICAgIEVsZW1lbnROb2RlKGludCBlLCBFeHByZXNzaW9uTm9kZSogbikgS0pTX0ZBU1RfQ0FMTCA6
IGVsaXNpb24oZSksIG5vZGUobikgeyB9Ci0gICAgRWxlbWVudE5vZGUoRWxlbWVudE5vZGUqIGws
IGludCBlLCBFeHByZXNzaW9uTm9kZSogbikgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBlbGlzaW9u
KGUpLCBub2RlKG4pIHsgbC0+bmV4dCA9IHRoaXM7IH0KKyAgICBFbGVtZW50Tm9kZShpbnQgZWxp
c2lvbiwgRXhwcmVzc2lvbk5vZGUqIG5vZGUpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9lbGlz
aW9uKGVsaXNpb24pLCBtX25vZGUobm9kZSkgeyB9CisgICAgRWxlbWVudE5vZGUoRWxlbWVudE5v
ZGUqIGwsIGludCBlbGlzaW9uLCBFeHByZXNzaW9uTm9kZSogbm9kZSkgS0pTX0ZBU1RfQ0FMTAor
ICAgICAgOiBtX2VsaXNpb24oZWxpc2lvbiksIG1fbm9kZShub2RlKSB7IGwtPm1fbmV4dCA9IHRo
aXM7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAKLSAgICBQYXNzUmVmUHRyPEVsZW1l
bnROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbmV4dC5yZWxlYXNl
KCk7IH0KKyAgICBQYXNzUmVmUHRyPEVsZW1lbnROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNU
X0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQogCiAgICAgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKIAogICBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBBcnJheU5vZGU7Ci0gICAgTGlzdFJlZlB0cjxFbGVtZW50Tm9kZT4gbmV4dDsKLSAgICBp
bnQgZWxpc2lvbjsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG5vZGU7CisgICAgTGlzdFJl
ZlB0cjxFbGVtZW50Tm9kZT4gbV9uZXh0OworICAgIGludCBtX2VsaXNpb247CisgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBtX25vZGU7CiAgIH07CiAKICAgY2xhc3MgQXJyYXlOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEFycmF5Tm9kZShpbnQgZSkgS0pT
X0ZBU1RfQ0FMTCA6IGVsaXNpb24oZSksIG9wdCh0cnVlKSB7IH0KLSAgICBBcnJheU5vZGUoRWxl
bWVudE5vZGUqIGVsZSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBlbGVtZW50KGVsZSksIGVsaXNp
b24oMCksIG9wdChmYWxzZSkgeyB9Ci0gICAgQXJyYXlOb2RlKGludCBlbGksIEVsZW1lbnROb2Rl
KiBlbGUpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogZWxlbWVudChlbGUpLCBlbGlzaW9uKGVsaSks
IG9wdCh0cnVlKSB7IH0KKyAgICBBcnJheU5vZGUoaW50IGUpIEtKU19GQVNUX0NBTEwKKyAgICAg
IDogbV9lbGlzaW9uKGUpLCBtX29wdCh0cnVlKSB7IH0KKyAgICBBcnJheU5vZGUoRWxlbWVudE5v
ZGUqIGVsZW1lbnQpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9lbGVtZW50KGVsZW1lbnQpLCBt
X2VsaXNpb24oMCksIG1fb3B0KGZhbHNlKSB7IH0KKyAgICBBcnJheU5vZGUoaW50IGVsaXNpb24s
IEVsZW1lbnROb2RlKiBlbGVtZW50KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1fZWxlbWVudChl
bGVtZW50KSwgbV9lbGlzaW9uKGVsaXNpb24pLCBtX29wdCh0cnVlKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9CiAgIHByaXZh
dGU6Ci0gICAgUmVmUHRyPEVsZW1lbnROb2RlPiBlbGVtZW50OwotICAgIGludCBlbGlzaW9uOwot
ICAgIGJvb2wgb3B0OworICAgIFJlZlB0cjxFbGVtZW50Tm9kZT4gbV9lbGVtZW50OworICAgIGlu
dCBtX2VsaXNpb247CisgICAgYm9vbCBtX29wdDsKICAgfTsKIAogICBjbGFzcyBQcm9wZXJ0eU5v
ZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgeyBDb25zdGFudCwg
R2V0dGVyLCBTZXR0ZXIgfTsKICAgICBQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbiwg
RXhwcmVzc2lvbk5vZGUqIGEsIFR5cGUgdCkgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBtX25hbWUo
biksIGFzc2lnbihhKSwgdHlwZSh0KSB7IH0KKyAgICAgIDogbV9uYW1lKG4pLCBtX2Fzc2lnbihh
KSwgbV90eXBlKHQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KQEAgLTQxMyw0NSAr
NDE1LDQ2IEBAIG5hbWVzcGFjZSBLSlMgewogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQ
cm9wZXJ0eUxpc3ROb2RlOwogICAgIElkZW50aWZpZXIgbV9uYW1lOwotICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gYXNzaWduOwotICAgIFR5cGUgdHlwZTsKKyAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fYXNzaWduOworICAgIFR5cGUgbV90eXBlOwogICB9OwogICAKICAgY2xhc3MgUHJv
cGVydHlMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAgIFByb3BlcnR5TGlz
dE5vZGUoUHJvcGVydHlOb2RlKiBuKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IG5vZGUobikgeyB9
Ci0gICAgUHJvcGVydHlMaXN0Tm9kZShQcm9wZXJ0eU5vZGUqIG4sIFByb3BlcnR5TGlzdE5vZGUq
IGwpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogbm9kZShuKSB7IGwtPm5leHQgPSB0aGlzOyB9Cisg
ICAgUHJvcGVydHlMaXN0Tm9kZShQcm9wZXJ0eU5vZGUqIG5vZGUpIEtKU19GQVNUX0NBTEwKKyAg
ICAgIDogbV9ub2RlKG5vZGUpIHsgfQorICAgIFByb3BlcnR5TGlzdE5vZGUoUHJvcGVydHlOb2Rl
KiBub2RlLCBQcm9wZXJ0eUxpc3ROb2RlKiBsaXN0KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1f
bm9kZShub2RlKSB7IGxpc3QtPm1fbmV4dCA9IHRoaXM7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNz
aW9uOyB9CiAKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwotICAgIFBhc3NSZWZQdHI8UHJvcGVydHlMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFT
VF9DQUxMIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CisgICAgUGFzc1JlZlB0cjxQcm9wZXJ0
eUxpc3ROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJl
bGVhc2UoKTsgfQogCiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE9iamVjdExpdGVyYWxO
b2RlOwotICAgIFJlZlB0cjxQcm9wZXJ0eU5vZGU+IG5vZGU7Ci0gICAgTGlzdFJlZlB0cjxQcm9w
ZXJ0eUxpc3ROb2RlPiBuZXh0OworICAgIFJlZlB0cjxQcm9wZXJ0eU5vZGU+IG1fbm9kZTsKKyAg
ICBMaXN0UmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IG1fbmV4dDsKICAgfTsKIAogICBjbGFzcyBP
YmplY3RMaXRlcmFsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKICAg
ICBPYmplY3RMaXRlcmFsTm9kZSgpIEtKU19GQVNUX0NBTEwgeyB9Ci0gICAgT2JqZWN0TGl0ZXJh
bE5vZGUoUHJvcGVydHlMaXN0Tm9kZSogbCkgS0pTX0ZBU1RfQ0FMTCA6IGxpc3QobCkgeyB9Cisg
ICAgT2JqZWN0TGl0ZXJhbE5vZGUoUHJvcGVydHlMaXN0Tm9kZSogbGlzdCkgS0pTX0ZBU1RfQ0FM
TCA6IG1fbGlzdChsaXN0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9CiAgICAgdmlydHVhbCBib29sIG5lZWRzUGFyZW5zSWZM
ZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8
UHJvcGVydHlMaXN0Tm9kZT4gbGlzdDsKKyAgICBSZWZQdHI8UHJvcGVydHlMaXN0Tm9kZT4gbV9s
aXN0OwogICB9OwogCiAgIGNsYXNzIEJyYWNrZXRBY2Nlc3Nvck5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgQnJhY2tldEFjY2Vzc29yTm9kZShFeHByZXNzaW9u
Tm9kZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIxKGUxKSwg
ZXhwcjIoZTIpIHt9CisgICAgQnJhY2tldEFjY2Vzc29yTm9kZShFeHByZXNzaW9uTm9kZSogYmFz
ZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2Jh
c2UoYmFzZSksIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051
bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwpAQCAtNDYzLDE4ICs0NjYsMTggQEAgbmFt
ZXNwYWNlIEtKUyB7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2NhdGlvbigpIGNvbnN0IEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0JyYWNrZXRBY2Nl
c3Nvck5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KLSAgICBFeHBy
ZXNzaW9uTm9kZSogYmFzZSgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZXhwcjEuZ2V0KCk7IH0K
LSAgICBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBl
eHByMi5nZXQoKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBiYXNlKCkgS0pTX0ZBU1RfQ0FMTCB7
IHJldHVybiBtX2Jhc2UuZ2V0KCk7IH0KKyAgICBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KCkg
S0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX3N1YnNjcmlwdC5nZXQoKTsgfQogCiAgIHByaXZhdGU6
CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShFeGVjU3RhdGUqKTsK
LSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7CisgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX3N1YnNjcmlwdDsKICAgfTsKIAogICBjbGFzcyBEb3RBY2Nl
c3Nvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgRG90QWNj
ZXNzb3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBjb25zdCBJZGVudGlmaWVyJiBzKSBLSlNfRkFT
VF9DQUxMIDogZXhwcihlKSwgaWRlbnQocykgeyB9CisgICAgRG90QWNjZXNzb3JOb2RlKEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgS0pTX0ZBU1RfQ0FMTCA6
IG1fYmFzZShiYXNlKSwgbV9pZGVudChpZGVudCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFu
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC00ODYsNTIgKzQ4OSw1NSBAQCBuYW1lc3Bh
Y2UgS0pTIHsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgS0pTX0ZBU1Rf
Q0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRG90QWNjZXNzb3JOb2Rl
KCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9Ci0gICAgRXhwcmVzc2lvbk5v
ZGUqIGJhc2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGV4cHIuZ2V0KCk7IH0KLSAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJl
dHVybiBpZGVudDsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBiYXNlKCkgY29uc3QgS0pTX0ZBU1Rf
Q0FMTCB7IHJldHVybiBtX2Jhc2UuZ2V0KCk7IH0KKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2lkZW50OyB9CiAKICAgcHJp
dmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1YXRlKEV4ZWNTdGF0
ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKLSAgICBJZGVudGlmaWVyIGlk
ZW50OworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOworICAgIElkZW50aWZpZXIg
bV9pZGVudDsKICAgfTsKIAogICBjbGFzcyBBcmd1bWVudExpc3ROb2RlIDogcHVibGljIE5vZGUg
ewogICBwdWJsaWM6Ci0gICAgQXJndW1lbnRMaXN0Tm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pT
X0ZBU1RfQ0FMTCA6IGV4cHIoZSkgeyB9Ci0gICAgQXJndW1lbnRMaXN0Tm9kZShBcmd1bWVudExp
c3ROb2RlKiBsLCBFeHByZXNzaW9uTm9kZSogZSkgS0pTX0ZBU1RfQ0FMTCAKLSAgICAgIDogZXhw
cihlKSB7IGwtPm5leHQgPSB0aGlzOyB9CisgICAgQXJndW1lbnRMaXN0Tm9kZShFeHByZXNzaW9u
Tm9kZSogZXhwcikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2V4cHIoZXhwcikgeyB9CisgICAg
QXJndW1lbnRMaXN0Tm9kZShBcmd1bWVudExpc3ROb2RlKiBsaXN0Tm9kZSwgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIpIEtKU19GQVNUX0NBTEwgCisgICAgICA6IG1fZXhwcihleHByKSB7IGxpc3ROb2Rl
LT5tX25leHQgPSB0aGlzOyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCiAgICAgdm9p
ZCBldmFsdWF0ZUxpc3QoRXhlY1N0YXRlKiwgTGlzdCYpIEtKU19GQVNUX0NBTEw7Ci0gICAgUGFz
c1JlZlB0cjxBcmd1bWVudExpc3ROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyBy
ZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KKyAgICBQYXNzUmVmUHRyPEFyZ3VtZW50TGlzdE5vZGU+
IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9
CiAKICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXJndW1lbnRzTm9kZTsKLSAgICBMaXN0
UmVmUHRyPEFyZ3VtZW50TGlzdE5vZGU+IG5leHQ7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBleHByOworICAgIExpc3RSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4gbV9uZXh0OworICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICB9OwogCiAgIGNsYXNzIEFyZ3VtZW50c05v
ZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBBcmd1bWVudHNOb2RlKCkgS0pTX0ZB
U1RfQ0FMTCB7IH0KLSAgICBBcmd1bWVudHNOb2RlKEFyZ3VtZW50TGlzdE5vZGUqIGwpIEtKU19G
QVNUX0NBTEwKLSAgICAgIDogbGlzdE5vZGUobCkgeyB9CisgICAgQXJndW1lbnRzTm9kZShBcmd1
bWVudExpc3ROb2RlKiBsaXN0Tm9kZSkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2xpc3ROb2Rl
KGxpc3ROb2RlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhT
eW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAKLSAgICB2b2lkIGV2
YWx1YXRlTGlzdChFeGVjU3RhdGUqIGV4ZWMsIExpc3QmIGxpc3QpIEtKU19GQVNUX0NBTEwgeyBp
ZiAobGlzdE5vZGUpIGxpc3ROb2RlLT5ldmFsdWF0ZUxpc3QoZXhlYywgbGlzdCk7IH0KKyAgICB2
b2lkIGV2YWx1YXRlTGlzdChFeGVjU3RhdGUqIGV4ZWMsIExpc3QmIGxpc3QpIEtKU19GQVNUX0NB
TEwgeyBpZiAobV9saXN0Tm9kZSkgbV9saXN0Tm9kZS0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGxpc3Qp
OyB9CiAKICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4gbGlzdE5vZGU7
CisgICAgUmVmUHRyPEFyZ3VtZW50TGlzdE5vZGU+IG1fbGlzdE5vZGU7CiAgIH07CiAKICAgY2xh
c3MgTmV3RXhwck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAg
TmV3RXhwck5vZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHt9
Ci0gICAgTmV3RXhwck5vZGUoRXhwcmVzc2lvbk5vZGUqIGUsIEFyZ3VtZW50c05vZGUqIGEpIEtK
U19GQVNUX0NBTEwgOiBleHByKGUpLCBhcmdzKGEpIHt9CisgICAgTmV3RXhwck5vZGUoRXhwcmVz
c2lvbk5vZGUqIGV4cHIpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9leHByKGV4cHIpIHsgfQor
ICAgIE5ld0V4cHJOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByLCBBcmd1bWVudHNOb2RlKiBhcmdz
KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1fZXhwcihleHByKSwgbV9hcmdzKGFyZ3MpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
ZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTU0
MiwzNCArNTQ4LDM1IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0xlZnRIYW5kU2lkZTsgfQogICBwcml2YXRl
OgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7
Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwotICAgIFJlZlB0cjxBcmd1bWVudHNO
b2RlPiBhcmdzOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOworICAgIFJlZlB0
cjxBcmd1bWVudHNOb2RlPiBtX2FyZ3M7CiAgIH07CiAKICAgY2xhc3MgRnVuY3Rpb25DYWxsVmFs
dWVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEZ1bmN0aW9u
Q2FsbFZhbHVlTm9kZShFeHByZXNzaW9uTm9kZSogZSwgQXJndW1lbnRzTm9kZSogYSkgS0pTX0ZB
U1RfQ0FMTCA6IGV4cHIoZSksIGFyZ3MoYSkge30KKyAgICBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUo
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIEFyZ3VtZW50c05vZGUqIGFyZ3MpIEtKU19GQVNUX0NBTEwK
KyAgICAgIDogbV9leHByKGV4cHIpLCBtX2FyZ3MoYXJncykgeyB9CiAgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQogICBwcml2YXRlOgotICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKLSAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4g
YXJnczsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKKyAgICBSZWZQdHI8QXJn
dW1lbnRzTm9kZT4gbV9hcmdzOwogICB9OwogCiAgIGNsYXNzIEZ1bmN0aW9uQ2FsbFJlc29sdmVO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEZ1bmN0aW9uQ2Fs
bFJlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXImIGksIEFyZ3VtZW50c05vZGUqIGEpIEtKU19G
QVNUX0NBTEwKLSAgICAgICAgOiBpZGVudChpKQotICAgICAgICAsIGFyZ3MoYSkKKyAgICBGdW5j
dGlvbkNhbGxSZXNvbHZlTm9kZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9k
ZSogYXJncykgS0pTX0ZBU1RfQ0FMTAorICAgICAgICA6IG1faWRlbnQoaWRlbnQpCisgICAgICAg
ICwgbV9hcmdzKGFyZ3MpCiAgICAgewogICAgIH0KIAogICAgIEZ1bmN0aW9uQ2FsbFJlc29sdmVO
b2RlKFBsYWNlbWVudE5ld0Fkb3B0VHlwZSkgS0pTX0ZBU1RfQ0FMTCAKICAgICAgICAgOiBFeHBy
ZXNzaW9uTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgLCBpZGVudChQbGFjZW1lbnRO
ZXdBZG9wdCkKLSAgICAgICAgLCBhcmdzKFBsYWNlbWVudE5ld0Fkb3B0KQorICAgICAgICAsIG1f
aWRlbnQoUGxhY2VtZW50TmV3QWRvcHQpCisgICAgICAgICwgbV9hcmdzKFBsYWNlbWVudE5ld0Fk
b3B0KQogICAgIHsKICAgICB9CiAKQEAgLTU4NCw5ICs1OTEsOSBAQCBuYW1lc3BhY2UgS0pTIHsK
IAogICBwcm90ZWN0ZWQ6CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0
ZShFeGVjU3RhdGUqKTsKLSAgICBJZGVudGlmaWVyIGlkZW50OwotICAgIFJlZlB0cjxBcmd1bWVu
dHNOb2RlPiBhcmdzOwotICAgIHNpemVfdCBpbmRleDsgLy8gVXNlZCBieSBMb2NhbFZhckZ1bmN0
aW9uQ2FsbE5vZGUuCisgICAgSWRlbnRpZmllciBtX2lkZW50OworICAgIFJlZlB0cjxBcmd1bWVu
dHNOb2RlPiBtX2FyZ3M7CisgICAgc2l6ZV90IG1faW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxWYXJG
dW5jdGlvbkNhbGxOb2RlLgogICB9OwogCiAgIGNsYXNzIExvY2FsVmFyRnVuY3Rpb25DYWxsTm9k
ZSA6IHB1YmxpYyBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSB7CkBAIC01OTUsNyArNjAyLDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIDogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGUoUGxhY2Vt
ZW50TmV3QWRvcHQpCiAgICAgewogICAgICAgICBBU1NFUlQoaSAhPSBtaXNzaW5nU3ltYm9sTWFy
a2VyKCkpOwotICAgICAgICBpbmRleCA9IGk7CisgICAgICAgIG1faW5kZXggPSBpOwogICAgIH0K
IAogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKQEAgLTYwOSwyMCArNjE2LDIyIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIEZ1bmN0
aW9uQ2FsbEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgot
ICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiLCBFeHByZXNzaW9u
Tm9kZSogcywgQXJndW1lbnRzTm9kZSogYSkgS0pTX0ZBU1RfQ0FMTCA6IGJhc2UoYiksIHN1YnNj
cmlwdChzKSwgYXJncyhhKSB7fQorICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKEV4cHJlc3Np
b25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0LCBBcmd1bWVudHNOb2RlKiBh
cmdzKSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1fYmFzZShiYXNlKSwgbV9zdWJzY3JpcHQoc3Vi
c2NyaXB0KSwgbV9hcmdzKGFyZ3MpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KICAgcHJvdGVjdGVkOgotICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gYmFzZTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHN1YnNjcmlwdDsK
LSAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gYXJnczsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IG1fYmFzZTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fc3Vic2NyaXB0OworICAg
IFJlZlB0cjxBcmd1bWVudHNOb2RlPiBtX2FyZ3M7CiAgIH07CiAKICAgY2xhc3MgRnVuY3Rpb25D
YWxsRG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBGdW5j
dGlvbkNhbGxEb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBiLCBjb25zdCBJZGVudGlmaWVyJiBpLCBB
cmd1bWVudHNOb2RlKiBhKSBLSlNfRkFTVF9DQUxMIDogYmFzZShiKSwgaWRlbnQoaSksIGFyZ3Mo
YSkge30KKyAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncykgS0pTX0ZBU1RfQ0FMTAor
ICAgICAgOiBtX2Jhc2UoYmFzZSksIG1faWRlbnQoaWRlbnQpLCBtX2FyZ3MoYXJncykgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBi
b29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC02MzMs
OSArNjQyLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQogICBwcml2YXRlOgogICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoRXhlY1N0YXRlKik7Ci0gICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBiYXNlOwotICAgIElkZW50aWZpZXIgaWRlbnQ7Ci0gICAgUmVmUHRy
PEFyZ3VtZW50c05vZGU+IGFyZ3M7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7
CisgICAgSWRlbnRpZmllciBtX2lkZW50OworICAgIFJlZlB0cjxBcmd1bWVudHNOb2RlPiBtX2Fy
Z3M7CiAgIH07CiAKICAgY2xhc3MgUHJlUG9zdFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlIHsKQEAgLTcyMCw3ICs3MjksOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBQ
b3N0Zml4QnJhY2tldE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0g
ICAgUG9zdGZpeEJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiLCBFeHByZXNzaW9uTm9kZSog
cykgS0pTX0ZBU1RfQ0FMTCA6IG1fYmFzZShiKSwgbV9zdWJzY3JpcHQocykge30KKyAgICBQb3N0
Zml4QnJhY2tldE5vZGUoRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJz
Y3JpcHQpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9iYXNlKGJhc2UpLCBtX3N1YnNjcmlwdChz
dWJzY3JpcHQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5
bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
UG9zdGZpeDsgfQogICBwcm90ZWN0ZWQ6CkBAIC03MzAsMjEgKzc0MCwyNCBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICBjbGFzcyBQb3N0SW5jQnJhY2tldE5vZGUgOiBwdWJsaWMgUG9zdGZpeEJyYWNr
ZXROb2RlIHsKICAgcHVibGljOgotICAgIFBvc3RJbmNCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9k
ZSogYiwgRXhwcmVzc2lvbk5vZGUqIHMpIEtKU19GQVNUX0NBTEwgOiBQb3N0Zml4QnJhY2tldE5v
ZGUoYiwgcykge30KKyAgICBQb3N0SW5jQnJhY2tldE5vZGUoRXhwcmVzc2lvbk5vZGUqIGJhc2Us
IEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogUG9zdGZp
eEJyYWNrZXROb2RlKGJhc2UsIHN1YnNjcmlwdCkgeyB9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICB9OwogCiAgIGNsYXNz
IFBvc3REZWNCcmFja2V0Tm9kZSA6IHB1YmxpYyBQb3N0Zml4QnJhY2tldE5vZGUgewogICBwdWJs
aWM6Ci0gICAgUG9zdERlY0JyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiLCBFeHByZXNzaW9u
Tm9kZSogcykgS0pTX0ZBU1RfQ0FMTCA6IFBvc3RmaXhCcmFja2V0Tm9kZShiLCBzKSB7fQorICAg
IFBvc3REZWNCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUq
IHN1YnNjcmlwdCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBQb3N0Zml4QnJhY2tldE5vZGUoYmFz
ZSwgc3Vic2NyaXB0KSB7IH0KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgIH07CiAKICAgICBjbGFzcyBQb3N0Zml4RG90Tm9k
ZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBQb3N0Zml4RG90Tm9k
ZShFeHByZXNzaW9uTm9kZSogYiwgY29uc3QgSWRlbnRpZmllciYgaSkgS0pTX0ZBU1RfQ0FMTCA6
IG1fYmFzZShiKSwgbV9pZGVudChpKSB7fQorICAgIFBvc3RmaXhEb3ROb2RlKEV4cHJlc3Npb25O
b2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgS0pTX0ZBU1RfQ0FMTAorICAgICAg
OiBtX2Jhc2UoYmFzZSksIG1faWRlbnQoaWRlbnQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQogICBwcm90ZWN0ZWQ6CkBAIC03NTQsMjEg
Kzc2NywyNCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBQb3N0SW5jRG90Tm9kZSA6IHB1
YmxpYyBQb3N0Zml4RG90Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBQb3N0SW5jRG90Tm9kZShFeHBy
ZXNzaW9uTm9kZSogIGIsIGNvbnN0IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwgOiBQb3N0
Zml4RG90Tm9kZShiLCBpKSB7fQorICAgIFBvc3RJbmNEb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBi
YXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBQb3N0
Zml4RG90Tm9kZShiYXNlLCBpZGVudCkgeyB9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICB9OwogCiAgIGNsYXNzIFBvc3RE
ZWNEb3ROb2RlIDogcHVibGljIFBvc3RmaXhEb3ROb2RlIHsKICAgcHVibGljOgotICAgIFBvc3RE
ZWNEb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiAgYiwgY29uc3QgSWRlbnRpZmllciYgaSkgS0pTX0ZB
U1RfQ0FMTCA6IFBvc3RmaXhEb3ROb2RlKGIsIGkpIHt9CisgICAgUG9zdERlY0RvdE5vZGUoRXhw
cmVzc2lvbk5vZGUqICBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgS0pTX0ZBU1RfQ0FM
TAorICAgICAgOiBQb3N0Zml4RG90Tm9kZShiYXNlLCBpZGVudCkgeyB9CiAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICB9Owog
CiAgIGNsYXNzIFBvc3RmaXhFcnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBw
dWJsaWM6Ci0gICAgUG9zdGZpeEVycm9yTm9kZShFeHByZXNzaW9uTm9kZSogZSwgT3BlcmF0b3Ig
bykgS0pTX0ZBU1RfQ0FMTCA6IG1fZXhwcihlKSwgbV9vcGVyKG8pIHt9CisgICAgUG9zdGZpeEVy
cm9yTm9kZShFeHByZXNzaW9uTm9kZSogZXhwciwgT3BlcmF0b3Igb3BlcikgS0pTX0ZBU1RfQ0FM
TAorICAgICAgOiBtX2V4cHIoZXhwciksIG1fb3BlcihvcGVyKSB7IH0KICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsg
fQpAQCAtNzc5LDcgKzc5NSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBEZWxldGVS
ZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBEZWxl
dGVSZXNvbHZlTm9kZShjb25zdCBJZGVudGlmaWVyJiBpKSBLSlNfRkFTVF9DQUxMIDogbV9pZGVu
dChpKSB7fQorICAgIERlbGV0ZVJlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBL
SlNfRkFTVF9DQUxMCisgICAgICAgIDogbV9pZGVudChpZGVudCkKKyAgICB7CisgICAgfQogICAg
IERlbGV0ZVJlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0VHlwZSkgS0pTX0ZBU1RfQ0FMTCAK
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKICAgICAgICAgLCBt
X2lkZW50KFBsYWNlbWVudE5ld0Fkb3B0KQpAQCAtODA2LDcgKzgyNSw4IEBAIG5hbWVzcGFjZSBL
SlMgewogCiAgIGNsYXNzIERlbGV0ZUJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
IHsKICAgcHVibGljOgotICAgIERlbGV0ZUJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiYXNl
LCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KSBLSlNfRkFTVF9DQUxMIDogbV9iYXNlKGJhc2Up
LCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpIHt9CisgICAgRGVsZXRlQnJhY2tldE5vZGUoRXhwcmVz
c2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQpIEtKU19GQVNUX0NBTEwK
KyAgICAgIDogbV9iYXNlKGJhc2UpLCBtX3N1YnNjcmlwdChzdWJzY3JpcHQpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwpAQCAtODE4LDcgKzgz
OCw4IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIERlbGV0ZURvdE5vZGUgOiBwdWJsaWMg
RXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgRGVsZXRlRG90Tm9kZShFeHByZXNzaW9u
Tm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaSkgS0pTX0ZBU1RfQ0FMTCA6IG1fYmFzZShi
YXNlKSwgbV9pZGVudChpKSB7fQorICAgIERlbGV0ZURvdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGJh
c2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1fYmFz
ZShiYXNlKSwgbV9pZGVudChpZGVudCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFy
aWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC04MzAsNyArODUxLDggQEAgbmFtZXNwYWNlIEtKUyB7
CiAKICAgY2xhc3MgRGVsZXRlVmFsdWVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAg
cHVibGljOgotICAgIERlbGV0ZVZhbHVlTm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pTX0ZBU1Rf
Q0FMTCA6IG1fZXhwcihlKSB7fQorICAgIERlbGV0ZVZhbHVlTm9kZShFeHByZXNzaW9uTm9kZSog
ZXhwcikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2V4cHIoZXhwcikgeyB9CiAgICAgdmlydHVh
bCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC04NDEsMTkgKzg2Mywy
MyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBWb2lkTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBWb2lkTm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pT
X0ZBU1RfQ0FMTCA6IGV4cHIoZSkge30KKyAgICBWb2lkTm9kZShFeHByZXNzaW9uTm9kZSogZXhw
cikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2V4cHIoZXhwcikgeyB9CiAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1
YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgcHJpdmF0ZToK
LSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX2V4cHI7CiAgIH07CiAKICAgY2xhc3MgVHlwZU9mUmVzb2x2ZU5vZGUgOiBwdWJsaWMg
RXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgVHlwZU9mUmVzb2x2ZU5vZGUoY29uc3Qg
SWRlbnRpZmllciAmcykgS0pTX0ZBU1RfQ0FMTCAKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShT
dHJpbmdUeXBlKSwgbV9pZGVudChzKSB7fQorICAgIFR5cGVPZlJlc29sdmVOb2RlKGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KSBLSlNfRkFTVF9DQUxMIAorICAgICAgICA6IEV4cHJlc3Npb25Ob2Rl
KFN0cmluZ1R5cGUpCisgICAgICAgICwgbV9pZGVudChpZGVudCkKKyAgICB7CisgICAgfQogICAg
IAogICAgIFR5cGVPZlJlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0VHlwZSkgS0pTX0ZBU1Rf
Q0FMTCAKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKQEAgLTkw
MSw4ICs5MjcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBQcmVJbmNSZXNvbHZlTm9k
ZSA6IHB1YmxpYyBQcmVQb3N0UmVzb2x2ZU5vZGUgewogICBwdWJsaWM6Ci0gICAgUHJlSW5jUmVz
b2x2ZU5vZGUoY29uc3QgSWRlbnRpZmllciAmcykgS0pTX0ZBU1RfQ0FMTCAKLSAgICAgICAgOiBQ
cmVQb3N0UmVzb2x2ZU5vZGUocykgCisgICAgUHJlSW5jUmVzb2x2ZU5vZGUoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwgCisgICAgICAgIDogUHJlUG9zdFJlc29sdmVOb2Rl
KGlkZW50KQogICAgIHsgCiAgICAgfQogICAgIApAQCAtOTMyLDggKzk1OCw4IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAKICAgY2xhc3MgUHJlRGVjUmVzb2x2ZU5vZGUgOiBwdWJsaWMgUHJlUG9zdFJl
c29sdmVOb2RlIHsKICAgcHVibGljOgotICAgIFByZURlY1Jlc29sdmVOb2RlKGNvbnN0IElkZW50
aWZpZXIgJnMpIEtKU19GQVNUX0NBTEwgCi0gICAgICAgIDogUHJlUG9zdFJlc29sdmVOb2RlKHMp
IAorICAgIFByZURlY1Jlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBLSlNfRkFT
VF9DQUxMIAorICAgICAgICA6IFByZVBvc3RSZXNvbHZlTm9kZShpZGVudCkKICAgICB7IAogICAg
IH0KICAgICAKQEAgLTk2Myw4ICs5ODksOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgCiAgIGNsYXNz
IFByZWZpeEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgot
ICAgIFByZWZpeEJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiLCBFeHByZXNzaW9uTm9kZSog
cykgS0pTX0ZBU1RfQ0FMTCA6IG1fYmFzZShiKSwgbV9zdWJzY3JpcHQocykge30KLSAgICAKKyAg
ICBQcmVmaXhCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUq
IHN1YnNjcmlwdCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2Jhc2UoYmFzZSksIG1fc3Vic2Ny
aXB0KHN1YnNjcmlwdCkgeyB9CisKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1
cm4gUHJlY1VuYXJ5OyB9CiAgIHByb3RlY3RlZDoKQEAgLTk3NCwyMSArMTAwMSwyNCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgCiAgIGNsYXNzIFByZUluY0JyYWNrZXROb2RlIDogcHVibGljIFByZWZp
eEJyYWNrZXROb2RlIHsKICAgcHVibGljOgotICAgIFByZUluY0JyYWNrZXROb2RlKEV4cHJlc3Np
b25Ob2RlKiAgYiwgRXhwcmVzc2lvbk5vZGUqICBzKSBLSlNfRkFTVF9DQUxMIDogUHJlZml4QnJh
Y2tldE5vZGUoYiwgcykge30KKyAgICBQcmVJbmNCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9kZSog
YmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBQ
cmVmaXhCcmFja2V0Tm9kZShiYXNlLCBzdWJzY3JpcHQpIHsgfQogICAgIHZpcnR1YWwgSlNWYWx1
ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgfTsKICAgCiAg
IGNsYXNzIFByZURlY0JyYWNrZXROb2RlIDogcHVibGljIFByZWZpeEJyYWNrZXROb2RlIHsKICAg
cHVibGljOgotICAgIFByZURlY0JyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiAgYiwgRXhwcmVz
c2lvbk5vZGUqICBzKSBLSlNfRkFTVF9DQUxMIDogUHJlZml4QnJhY2tldE5vZGUoYiwgcykge30K
KyAgICBQcmVEZWNCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5v
ZGUqIHN1YnNjcmlwdCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBQcmVmaXhCcmFja2V0Tm9kZShi
YXNlLCBzdWJzY3JpcHQpIHsgfQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgfTsKIAogICBjbGFzcyBQcmVmaXhEb3ROb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIFByZWZpeERvdE5vZGUo
RXhwcmVzc2lvbk5vZGUqIGIsIGNvbnN0IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwgOiBt
X2Jhc2UoYiksIG1faWRlbnQoaSkge30KKyAgICBQcmVmaXhEb3ROb2RlKEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBt
X2Jhc2UoYmFzZSksIG1faWRlbnQoaWRlbnQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQogICBwcm90ZWN0ZWQ6CkBAIC05OTgsMjEgKzEw
MjgsMjQgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgUHJlSW5jRG90Tm9kZSA6IHB1Ymxp
YyBQcmVmaXhEb3ROb2RlIHsKICAgcHVibGljOgotICAgIFByZUluY0RvdE5vZGUoRXhwcmVzc2lv
bk5vZGUqIGIsIGNvbnN0IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwgOiBQcmVmaXhEb3RO
b2RlKGIsIGkpIHt9CisgICAgUHJlSW5jRG90Tm9kZShFeHByZXNzaW9uTm9kZSogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogUHJlZml4RG90Tm9k
ZShiYXNlLCBpZGVudCkgeyB9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICB9OwogCiAgIGNsYXNzIFByZURlY0RvdE5vZGUg
OiBwdWJsaWMgUHJlZml4RG90Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBQcmVEZWNEb3ROb2RlKEV4
cHJlc3Npb25Ob2RlKiBiLCBjb25zdCBJZGVudGlmaWVyJiBpKSBLSlNfRkFTVF9DQUxMIDogUHJl
Zml4RG90Tm9kZShiLCBpKSB7fQorICAgIFByZURlY0RvdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGJh
c2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IFByZWZp
eERvdE5vZGUoYmFzZSwgaWRlbnQpIHsgfQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgfTsKIAogICBjbGFzcyBQcmVmaXhF
cnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgUHJlZml4
RXJyb3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBPcGVyYXRvciBvKSBLSlNfRkFTVF9DQUxMIDog
bV9leHByKGUpLCBtX29wZXIobykge30KKyAgICBQcmVmaXhFcnJvck5vZGUoRXhwcmVzc2lvbk5v
ZGUqIGV4cHIsIE9wZXJhdG9yIG9wZXIpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9leHByKGV4
cHIpLCBtX29wZXIob3BlcikgeyB9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CkBAIC0xMDIzLDcgKzEwNTYsOCBA
QCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBVbmFyeVBsdXNOb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIFVuYXJ5UGx1c05vZGUoRXhwcmVzc2lvbk5vZGUq
IGUpIEtKU19GQVNUX0NBTEwgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgbV9leHByKGUp
IHt9CisgICAgVW5hcnlQbHVzTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcikgS0pTX0ZBU1RfQ0FM
TAorICAgICAgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgbV9leHByKGV4cHIpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
Ym9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTAz
OCwxOSArMTA3MiwyMSBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBOZWdhdGVOb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIE5lZ2F0ZU5vZGUoRXhwcmVz
c2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwg
ZXhwcihlKSB7fQorICAgIE5lZ2F0ZU5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIpIEtKU19GQVNU
X0NBTEwKKyAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIG1fZXhwcihleHByKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYs
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQ
cmVjVW5hcnk7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7
CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgIH07CiAKICAgY2xhc3MgQml0
d2lzZU5vdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgQml0
d2lzZU5vdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgOiBFeHByZXNzaW9u
Tm9kZShOdW1iZXJUeXBlKSwgZXhwcihlKSB7fQorICAgIEJpdHdpc2VOb3ROb2RlKEV4cHJlc3Np
b25Ob2RlKiBleHByKSBLSlNfRkFTVF9DQUxMCisgICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJl
clR5cGUpLCBtX2V4cHIoZXhwcikgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTA2MSwyNCArMTA5NywyNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNVbmFyeTsgfQogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBl
eHByOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICB9OwogCiAgIGNsYXNz
IExvZ2ljYWxOb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAg
IExvZ2ljYWxOb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVz
c2lvbk5vZGUoQm9vbGVhblR5cGUpLCBleHByKGUpIHt9CisgICAgTG9naWNhbE5vdE5vZGUoRXhw
cmVzc2lvbk5vZGUqIGV4cHIpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogRXhwcmVzc2lvbk5vZGUo
Qm9vbGVhblR5cGUpLCBtX2V4cHIoZXhwcikgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgcHJpdmF0ZToKLSAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBt
X2V4cHI7CiAgIH07CiAgIAogICBjbGFzcyBNdWx0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSB7CiAgIHB1YmxpYzoKLSAgICAgIE11bHROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVz
c2lvbk5vZGUqIHQyKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSks
IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CisgICAgICBNdWx0Tm9kZShFeHByZXNzaW9uTm9kZSog
dGVybTEsIEV4cHJlc3Npb25Ob2RlKiB0ZXJtMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCBtX3Rlcm0xKHRlcm0xKSwgbV90ZXJtMih0ZXJtMikg
eyB9CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJs
ZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAg
ICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwpAQCAtMTA4OSwxMyArMTEyNywxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY011bHRpcGxpY2l0
YXZlOyB9CiAgIHByaXZhdGU6CiAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFs
dWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwotICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0
ZXJtMTsKLSAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CisgICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fdGVybTE7CisgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1f
dGVybTI7CiAgIH07CiAgIAogICBjbGFzcyBEaXZOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
IHsKICAgcHVibGljOgotICAgICAgRGl2Tm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Np
b25Ob2RlKiB0MikgS0pTX0ZBU1RfQ0FMTCA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCB0
ZXJtMSh0MSksIHRlcm0yKHQyKSB7fQorICAgICAgRGl2Tm9kZShFeHByZXNzaW9uTm9kZSogdGVy
bTEsIEV4cHJlc3Npb25Ob2RlKiB0ZXJtMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgICA6IEV4cHJl
c3Npb25Ob2RlKE51bWJlclR5cGUpLCBtX3Rlcm0xKHRlcm0xKSwgbV90ZXJtMih0ZXJtMikgeyB9
CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYs
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
dmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwpAQCAtMTEwNSwxMyArMTE0NCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY011bHRpcGxpY2l0YXZl
OyB9CiAgIHByaXZhdGU6CiAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0
ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopOwotICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJt
MTsKLSAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CisgICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fdGVybTE7CisgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVy
bTI7CiAgIH07CiAgIAogICBjbGFzcyBNb2ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsK
ICAgcHVibGljOgotICAgICAgTW9kTm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Npb25O
b2RlKiB0MikgS0pTX0ZBU1RfQ0FMTCA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCB0ZXJt
MSh0MSksIHRlcm0yKHQyKSB7fQorICAgICAgTW9kTm9kZShFeHByZXNzaW9uTm9kZSogdGVybTEs
IEV4cHJlc3Npb25Ob2RlKiB0ZXJtMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKE51bWJlclR5cGUpLCBtX3Rlcm0xKHRlcm0xKSwgbV90ZXJtMih0ZXJtMikgeyB9CiAg
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmly
dHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwpA
QCAtMTEyMiwxMyArMTE2MiwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9
CiAgIHByaXZhdGU6CiAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRv
TnVtYmVyKEV4ZWNTdGF0ZSopOwotICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsK
LSAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTI7CisgICAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IG1fdGVybTE7CisgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7
CiAgIH07CiAKICAgY2xhc3MgQWRkTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1
YmxpYzoKLSAgICBBZGROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQy
KSBLSlNfRkFTVF9DQUxMIDogdGVybTEodDEpLCB0ZXJtMih0Mikge30KKyAgICBBZGROb2RlKEV4
cHJlc3Npb25Ob2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBLSlNfRkFTVF9DQUxM
CisgICAgICA6IG1fdGVybTEodGVybTEpLCBtX3Rlcm0yKHRlcm0yKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0xMTM3LDE2ICsxMTc4
LDE4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAgIHByb3RlY3RlZDoKLSAg
ICBBZGROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQyLCBKU1R5cGUg
ZXhwZWN0ZWRSZXR1cm4pIEtKU19GQVNUX0NBTEwgOiBFeHByZXNzaW9uTm9kZShleHBlY3RlZFJl
dHVybiksIHRlcm0xKHQxKSwgdGVybTIodDIpIHt9Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiB0ZXJtMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0yOworICAgIEFkZE5vZGUo
RXhwcmVzc2lvbk5vZGUqIHRlcm0xLCBFeHByZXNzaW9uTm9kZSogdGVybTIsIEpTVHlwZSBleHBl
Y3RlZFJldHVybikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBFeHByZXNzaW9uTm9kZShleHBlY3Rl
ZFJldHVybiksIG1fdGVybTEodGVybTEpLCBtX3Rlcm0yKHRlcm0yKSB7IH0KKyAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fdGVybTE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rl
cm0yOwogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIGlubGluZUV2YWx1YXRl
VG9OdW1iZXIoRXhlY1N0YXRlKik7CiAgIH07CiAKICAgICBjbGFzcyBBZGROdW1iZXJzTm9kZSA6
IHB1YmxpYyBBZGROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFkZE51bWJlcnNOb2RlKEV4
cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQyKSBLSlNfRkFTVF9DQUxMIDogQWRk
Tm9kZSh0MSwgdDIsIE51bWJlclR5cGUpIHt9CisgICAgICAgIEFkZE51bWJlcnNOb2RlKEV4cHJl
c3Npb25Ob2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBLSlNfRkFTVF9DQUxMCisg
ICAgICAgICAgOiBBZGROb2RlKHRlcm0xLCB0ZXJtMiwgTnVtYmVyVHlwZSkgeyB9CiAgICAgICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0xMTU3LDI1ICsxMjAwLDI5IEBAIG5hbWVzcGFjZSBLSlMg
ewogCiAgICAgY2xhc3MgQWRkU3RyaW5nTGVmdE5vZGUgOiBwdWJsaWMgQWRkTm9kZSB7CiAgICAg
cHVibGljOgotICAgICAgICBBZGRTdHJpbmdMZWZ0Tm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4
cHJlc3Npb25Ob2RlKiB0MikgS0pTX0ZBU1RfQ0FMTCA6IEFkZE5vZGUodDEsIHQyLCBTdHJpbmdU
eXBlKSB7fQorICAgICAgICBBZGRTdHJpbmdMZWZ0Tm9kZShFeHByZXNzaW9uTm9kZSogdGVybTEs
IEV4cHJlc3Npb25Ob2RlKiB0ZXJtMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgICAgIDogQWRkTm9k
ZSh0ZXJtMSwgdGVybTIsIFN0cmluZ1R5cGUpIHsgfQogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUq
IGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIAogICAgIGNsYXNz
IEFkZFN0cmluZ1JpZ2h0Tm9kZSA6IHB1YmxpYyBBZGROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEFkZFN0cmluZ1JpZ2h0Tm9kZShFeHByZXNzaW9uTm9kZSogdDEsIEV4cHJlc3Npb25Ob2Rl
KiB0MikgS0pTX0ZBU1RfQ0FMTCA6IEFkZE5vZGUodDEsIHQyLCBTdHJpbmdUeXBlKSB7fQorICAg
ICAgICBBZGRTdHJpbmdSaWdodE5vZGUoRXhwcmVzc2lvbk5vZGUqIHRlcm0xLCBFeHByZXNzaW9u
Tm9kZSogdGVybTIpIEtKU19GQVNUX0NBTEwKKyAgICAgICAgICA6IEFkZE5vZGUodGVybTEsIHRl
cm0yLCBTdHJpbmdUeXBlKSB7IH0KICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIH07CiAKICAgICBjbGFzcyBBZGRTdHJpbmdz
Tm9kZSA6IHB1YmxpYyBBZGROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFkZFN0cmluZ3NO
b2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQyKSBLSlNfRkFTVF9DQUxM
IDogQWRkTm9kZSh0MSwgdDIsIFN0cmluZ1R5cGUpIHt9CisgICAgICAgIEFkZFN0cmluZ3NOb2Rl
KEV4cHJlc3Npb25Ob2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBLSlNfRkFTVF9D
QUxMCisgICAgICAgICAgOiBBZGROb2RlKHRlcm0xLCB0ZXJtMiwgU3RyaW5nVHlwZSkgeyB9CiAg
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB9OwogCiAgIGNsYXNzIFN1Yk5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewog
ICBwdWJsaWM6Ci0gICAgICBTdWJOb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5v
ZGUqIHQyKSBLSlNfRkFTVF9DQUxMIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIHRlcm0x
KHQxKSwgdGVybTIodDIpIHt9CisgICAgICBTdWJOb2RlKEV4cHJlc3Npb25Ob2RlKiB0ZXJtMSwg
RXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBLSlNfRkFTVF9DQUxMCisgICAgICAgIDogRXhwcmVzc2lv
bk5vZGUoTnVtYmVyVHlwZSksIG1fdGVybTEodGVybTEpLCBtX3Rlcm0yKHRlcm0yKSB7IH0KICAg
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFs
IEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0
dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBA
IC0xMTg1LDE0ICsxMjMyLDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQWRkaXRpdmU7IH0KICAgcHJp
dmF0ZToKICAgICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIGlubGluZUV2YWx1YXRlVG9OdW1iZXIo
RXhlY1N0YXRlKik7Ci0gICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHRlcm0xOwotICAgICAg
UmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMjsKKyAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV90ZXJtMTsKKyAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMjsKICAgfTsK
IAogICBjbGFzcyBMZWZ0U2hpZnROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVi
bGljOgotICAgIExlZnRTaGlmdE5vZGUoRXhwcmVzc2lvbk5vZGUqIHQxLCBFeHByZXNzaW9uTm9k
ZSogdDIpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSks
IHRlcm0xKHQxKSwgdGVybTIodDIpIHt9CisgICAgTGVmdFNoaWZ0Tm9kZShFeHByZXNzaW9uTm9k
ZSogdGVybTEsIEV4cHJlc3Npb25Ob2RlKiB0ZXJtMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBF
eHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgbV90ZXJtMSh0ZXJtMSksIG1fdGVybTIodGVybTIp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxl
JiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
QEAgLTEyMDIsMTQgKzEyNDksMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjU2hpZnQ7IH0KICAgcHJpdmF0
ZToKICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNT
dGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTE7Ci0gICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiB0ZXJtMjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTE7
CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0yOwogICB9OwogCiAgIGNsYXNzIFJp
Z2h0U2hpZnROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIFJp
Z2h0U2hpZnROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQyKSBLSlNf
RkFTVF9DQUxMCi0gICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCB0ZXJtMSh0MSks
IHRlcm0yKHQyKSB7fQorICAgIFJpZ2h0U2hpZnROb2RlKEV4cHJlc3Npb25Ob2RlKiB0ZXJtMSwg
RXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBLSlNfRkFTVF9DQUxMCisgICAgICA6IEV4cHJlc3Npb25O
b2RlKE51bWJlclR5cGUpLCBtX3Rlcm0xKHRlcm0xKSwgbV90ZXJtMih0ZXJtMikgeyB9CiAgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBkb3Vi
bGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTIxOSwx
NCArMTI2NiwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNTaGlmdDsgfQogICBwcml2YXRlOgogICAgIEFM
V0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRlKik7Ci0g
ICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IHRlcm0yOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMTsKKyAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7CiAgIH07CiAKICAgY2xhc3MgVW5zaWduZWRSaWdo
dFNoaWZ0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBVbnNp
Z25lZFJpZ2h0U2hpZnROb2RlKEV4cHJlc3Npb25Ob2RlKiB0MSwgRXhwcmVzc2lvbk5vZGUqIHQy
KSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCB0ZXJt
MSh0MSksIHRlcm0yKHQyKSB7fQorICAgIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUoRXhwcmVzc2lv
bk5vZGUqIHRlcm0xLCBFeHByZXNzaW9uTm9kZSogdGVybTIpIEtKU19GQVNUX0NBTEwKKyAgICAg
IDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIG1fdGVybTEodGVybTEpLCBtX3Rlcm0yKHRl
cm0yKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xU
YWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CkBAIC0xMjM2LDE0ICsxMjgzLDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1NoaWZ0OyB9CiAgIHBy
aXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvVUludDMy
KEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gdGVybTE7Ci0gICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiB0ZXJtMjsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1f
dGVybTE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0yOwogICB9OwogCiAgIGNs
YXNzIExlc3NOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIExl
c3NOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9D
QUxMCi0gICAgICA6IEV4cHJlc3Npb25Ob2RlKEJvb2xlYW5UeXBlKSwgZXhwcjEoZTEpLCBleHBy
MihlMikge30KKyAgICBMZXNzTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25O
b2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFu
VHlwZSksIG1fZXhwcjEoZXhwcjEpLCBtX2V4cHIyKGV4cHIyKSB7fQogICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRv
Qm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTI1MiwxNCArMTI5OSwxNCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5s
aW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKik7CiAgIHByb3RlY3RlZDoKLSAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhw
cjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOworICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gbV9leHByMjsKICAgfTsKIAogICAgIGNsYXNzIExlc3NOdW1iZXJzTm9kZSA6
IHB1YmxpYyBMZXNzTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBMZXNzTnVtYmVyc05vZGUo
RXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAg
ICAgICAgICAgIDogTGVzc05vZGUoZTEsIGUyKSB7fQorICAgICAgICBMZXNzTnVtYmVyc05vZGUo
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpIEtKU19GQVNUX0NB
TEwKKyAgICAgICAgICAgIDogTGVzc05vZGUoZXhwcjEsIGV4cHIyKSB7IH0KICAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICBwcml2YXRlOgpAQCAtMTI2OCw4ICsxMzE1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAK
ICAgICBjbGFzcyBMZXNzU3RyaW5nc05vZGUgOiBwdWJsaWMgTGVzc05vZGUgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgTGVzc1N0cmluZ3NOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lv
bk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IExlc3NOb2RlKGUxLCBlMikg
e30KKyAgICAgICAgTGVzc1N0cmluZ3NOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9DQUxMCisgICAgICAgICAgICA6IExlc3NOb2RlKGV4
cHIxLCBleHByMikgeyB9CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29s
ZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgcHJpdmF0ZToKQEAgLTEyNzksNyAr
MTMyNiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBHcmVhdGVyTm9kZSA6IHB1YmxpYyBF
eHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKICAgICBHcmVhdGVyTm9kZShFeHByZXNzaW9uTm9k
ZSogZTEsIEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTCA6Ci0gICAgICBleHByMShl
MSksIGV4cHIyKGUyKSB7fQorICAgICAgbV9leHByMShlMSksIG1fZXhwcjIoZTIpIHt9CiAgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29s
IGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0xMjg3LDE0
ICsxMzM0LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KICAgcHJpdmF0ZToKICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKik7
Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IGV4cHIyOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMTsKKyAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjI7CiAgIH07CiAKICAgY2xhc3MgTGVzc0VxTm9k
ZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBMZXNzRXFOb2RlKEV4
cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMIDoKLSAg
ICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgTGVzc0VxTm9kZShFeHByZXNzaW9uTm9k
ZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBt
X2V4cHIxKGV4cHIxKSwgbV9leHByMihleHByMikgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFu
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0xMzAyLDE0ICsxMzQ5LDE0IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KICAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKik7Ci0gICAgUmVmUHRyPEV4cHJl
c3Npb25Ob2RlPiBleHByMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOworICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IG1fZXhwcjI7CiAgIH07CiAKICAgY2xhc3MgR3JlYXRlckVxTm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBHcmVhdGVyRXFOb2RlKEV4cHJlc3Npb25Ob2Rl
KiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMIDoKLSAgICAgIGV4cHIxKGUx
KSwgZXhwcjIoZTIpIHt9CisgICAgR3JlYXRlckVxTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2V4cHIxKGV4
cHIxKSwgbV9leHByMihleHByMikgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0xMzE3LDQyICsxMzY0LDQyIEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y1JlbGF0aW9uYWw7IH0KICAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5l
RXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKik7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBleHByMTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOworICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gbV9leHByMTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhw
cjI7CiAgIH07CiAKICAgICBjbGFzcyBJbnN0YW5jZU9mTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBJbnN0YW5jZU9mTm9kZShFeHByZXNzaW9uTm9kZSogZTEs
IEV4cHJlc3Npb25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKEJvb2xlYW5UeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KKyAgICBJbnN0YW5jZU9m
Tm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikgS0pTX0ZB
U1RfQ0FMTAorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKEJvb2xlYW5UeXBlKSwgbV9leHByMShl
eHByMSksIG1fZXhwcjIoZXhwcjIpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KICAgcHJpdmF0ZToKLSAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
ZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOworICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgfTsKIAogICAgIGNsYXNzIEluTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBJbk5vZGUoRXhwcmVzc2lvbk5vZGUq
IGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwgOgotICAgICAgZXhwcjEoZTEp
LCBleHByMihlMikge30KKyAgICBJbk5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNz
aW9uTm9kZSogZXhwcjIpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9leHByMShleHByMSksIG1f
ZXhwcjIoZXhwcjIpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7Cisg
ICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV9leHByMjsKICAgfTsKIAogICAgIGNsYXNzIEVxdWFsTm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBFcXVhbE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUx
LCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9u
Tm9kZShCb29sZWFuVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgRXF1YWxOb2Rl
KEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9D
QUxMCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoQm9vbGVhblR5cGUpLCBtX2V4cHIxKGV4cHIx
KSwgbV9leHByMihleHByMikgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CkBAIC0xMzYwLDE0ICsxNDA3LDE0IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Vx
dWFsaXR5OyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1
YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhw
cjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKKyAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IG1fZXhwcjE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwog
ICB9OwogCiAgICAgY2xhc3MgTm90RXF1YWxOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsK
ICAgcHVibGljOgotICAgIE5vdEVxdWFsTm9kZShFeHByZXNzaW9uTm9kZSogZTEsIEV4cHJlc3Np
b25Ob2RlKiBlMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKEJvb2xl
YW5UeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KKyAgICBOb3RFcXVhbE5vZGUoRXhwcmVz
c2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpIEtKU19GQVNUX0NBTEwKKyAg
ICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFuVHlwZSksIG1fZXhwcjEoZXhwcjEpLCBtX2V4
cHIyKGV4cHIyKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhT
eW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKQEAgLTEzNzUsMTQgKzE0MjIsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjRXF1YWxpdHk7
IH0KICAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jv
b2xlYW4oRXhlY1N0YXRlKik7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMTsKLSAg
ICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIyOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV9leHByMTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjI7CiAgIH07CiAK
ICAgICBjbGFzcyBTdHJpY3RFcXVhbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBw
dWJsaWM6Ci0gICAgU3RyaWN0RXF1YWxOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lv
bk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoQm9vbGVh
blR5cGUpLCBleHByMShlMSksIGV4cHIyKGUyKSB7fQorICAgIFN0cmljdEVxdWFsTm9kZShFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAor
ICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKEJvb2xlYW5UeXBlKSwgbV9leHByMShleHByMSksIG1f
ZXhwcjIoZXhwcjIpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwpAQCAtMTM5MCwxNCArMTQzNywxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0
eTsgfQogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRv
Qm9vbGVhbihFeGVjU3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwot
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX2V4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgfTsK
IAogICAgIGNsYXNzIE5vdFN0cmljdEVxdWFsTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CiAgIHB1YmxpYzoKLSAgICBOb3RTdHJpY3RFcXVhbE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBF
eHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9k
ZShCb29sZWFuVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgTm90U3RyaWN0RXF1
YWxOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKSBLSlNf
RkFTVF9DQUxMCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoQm9vbGVhblR5cGUpLCBtX2V4cHIx
KGV4cHIxKSwgbV9leHByMihleHByMikgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFy
aWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0xNDA1LDE0ICsxNDUyLDE0IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0VxdWFsaXR5OyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGlu
ZUV2YWx1YXRlVG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKKyAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4
cHIyOwogICB9OwogCiAgICAgY2xhc3MgQml0QW5kTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSB7CiAgIHB1YmxpYzoKLSAgICBCaXRBbmROb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVz
c2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVt
YmVyVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgQml0QW5kTm9kZShFeHByZXNz
aW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAorICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpLCBtX2V4cHIxKGV4cHIxKSwgbV9leHBy
MihleHByMikgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3lt
Ym9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwpAQCAtMTQyMywxNCArMTQ3MCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNCaXR3aXNlQW5k
OyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRl
VG9JbnQzMihFeGVjU3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwot
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX2V4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgfTsK
IAogICAgIGNsYXNzIEJpdE9yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1Ymxp
YzoKLSAgICBCaXRPck5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIp
IEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgZXhw
cjEoZTEpLCBleHByMihlMikge30KKyAgICBCaXRPck5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIx
LCBFeHByZXNzaW9uTm9kZSogZXhwcjIpIEtKU19GQVNUX0NBTEwKKyAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShOdW1iZXJUeXBlKSwgbV9leHByMShleHByMSksIG1fZXhwcjIoZXhwcjIpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVj
bGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwg
ZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKQEAgLTE0
NDEsMTQgKzE0ODgsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZU9yOyB9CiAgIHByaXZhdGU6
CiAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihFeGVjU3Rh
dGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwor
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgfTsKIAotICAgIGNsYXNzIEJp
dFhPck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICBjbGFzcyBCaXRYT3JOb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEJpdFhPck5vZGUoRXhwcmVz
c2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAg
OiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KKyAg
ICBCaXRYT3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIy
KSBLSlNfRkFTVF9DQUxMCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSksIG1f
ZXhwcjEoZXhwcjEpLCBtX2V4cHIyKGV4cHIyKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVy
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0xNDU5LDE3ICsxNTA2LDE3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0JpdHdpc2VYb3I7IH0KICAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIGlu
dDMyX3QgaW5saW5lRXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKKyAg
ICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX2V4cHIyOwogICB9OwogCiAgIC8qKgotICAgKiBleHByMSAmJiBleHByMiwgZXhwcjEg
fHwgZXhwcjIKKyAgICogbV9leHByMSAmJiBtX2V4cHIyLCBtX2V4cHIxIHx8IG1fZXhwcjIKICAg
ICovCiAgICAgY2xhc3MgTG9naWNhbEFuZE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewog
ICBwdWJsaWM6Ci0gICAgTG9naWNhbEFuZE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNz
aW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29s
ZWFuVHlwZSksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CisgICAgTG9naWNhbEFuZE5vZGUoRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpIEtKU19GQVNUX0NBTEwK
KyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFuVHlwZSksIG1fZXhwcjEoZXhwcjEpLCBt
X2V4cHIyKGV4cHIyKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKQEAgLTE0NzcsMTQgKzE1MjQsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTG9naWNh
bEFuZDsgfQogICBwcml2YXRlOgogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0
ZVRvQm9vbGVhbihFeGVjU3RhdGUqKTsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIx
OwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Np
b25Ob2RlPiBtX2V4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAg
fTsKICAgCiAgICAgY2xhc3MgTG9naWNhbE9yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CiAgIHB1YmxpYzoKLSAgICBMb2dpY2FsT3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVz
c2lvbk5vZGUqIGUyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgIDogRXhwcmVzc2lvbk5vZGUoQm9v
bGVhblR5cGUpLCBleHByMShlMSksIGV4cHIyKGUyKSB7fQorICAgIExvZ2ljYWxPck5vZGUoRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpIEtKU19GQVNUX0NBTEwK
KyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFuVHlwZSksIG1fZXhwcjEoZXhwcjEpLCBt
X2V4cHIyKGV4cHIyKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKQEAgLTE0OTIsMTcgKzE1MzksMTcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTG9naWNh
bE9yOyB9CiAgIHByaXZhdGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRl
VG9Cb29sZWFuKEV4ZWNTdGF0ZSopOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7
Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKKyAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fZXhwcjE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICB9
OwogCiAgIC8qKgotICAgKiBUaGUgdGVybmFyeSBvcGVyYXRvciwgImxvZ2ljYWwgPyBleHByMSA6
IGV4cHIyIgorICAgKiBUaGUgdGVybmFyeSBvcGVyYXRvciwgIm1fbG9naWNhbCA/IG1fZXhwcjEg
OiBtX2V4cHIyIgogICAgKi8KLSAgICBjbGFzcyBDb25kaXRpb25hbE5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgeworICBjbGFzcyBDb25kaXRpb25hbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUgewogICBwdWJsaWM6Ci0gICAgQ29uZGl0aW9uYWxOb2RlKEV4cHJlc3Npb25Ob2RlKiAg
bCwgRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwg
OgotICAgICAgbG9naWNhbChsKSwgZXhwcjEoZTEpLCBleHByMihlMikge30KKyAgICBDb25kaXRp
b25hbE5vZGUoRXhwcmVzc2lvbk5vZGUqIGxvZ2ljYWwsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1fbG9naWNhbChs
b2dpY2FsKSwgbV9leHByMShleHByMSksIG1fZXhwcjIoZXhwcjIpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFs
dWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0
ZVRvQm9vbGVhbihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTUxMiwxOSArMTU1OSwx
OSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDb25kaXRpb25hbDsgfQogICBwcml2YXRlOgotICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbG9naWNhbDsKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjI7CisgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBtX2xvZ2ljYWw7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBt
X2V4cHIxOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgfTsKIAotICAg
IGNsYXNzIFJlYWRNb2RpZnlSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7Cisg
IGNsYXNzIFJlYWRNb2RpZnlSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAg
IHB1YmxpYzoKLSAgICBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoY29uc3QgSWRlbnRpZmllciAmaWRl
bnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQpIEtKU19GQVNUX0NBTEwK
KyAgICBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE9wZXJh
dG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQpIEtKU19GQVNUX0NBTEwKICAgICAgIDog
bV9pZGVudChpZGVudCkKICAgICAgICwgbV9vcGVyKG9wZXIpCiAgICAgICAsIG1fcmlnaHQocmln
aHQpIAotICAgICAgewotICAgICAgfQorICAgIHsKKyAgICB9CiAKICAgICBSZWFkTW9kaWZ5UmVz
b2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSBLSlNfRkFTVF9DQUxMIAogICAgICAgOiBF
eHByZXNzaW9uTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKQEAgLTE1NTYsOSArMTYwMyw5IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgfTsKIAotICAgIGNsYXNzIEFzc2lnblJlc29sdmVOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgY2xhc3MgQXNzaWduUmVzb2x2ZU5vZGUgOiBwdWJsaWMg
RXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgIEFzc2lnblJlc29sdmVOb2RlKGNvbnN0
IElkZW50aWZpZXIgJmlkZW50LCBFeHByZXNzaW9uTm9kZSogIHJpZ2h0KSBLSlNfRkFTVF9DQUxM
CisgICAgIEFzc2lnblJlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNz
aW9uTm9kZSogcmlnaHQpIEtKU19GQVNUX0NBTEwKICAgICAgIDogbV9pZGVudChpZGVudCkKICAg
ICAgICwgbV9yaWdodChyaWdodCkgCiAgICAgICB7CkBAIC0xNTkzLDEwICsxNjQwLDEwIEBAIG5h
bWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgfTsKIAotICAgIGNsYXNzIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgIGNsYXNzIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBSZWFkTW9kaWZ5QnJhY2tl
dE5vZGUoRXhwcmVzc2lvbk5vZGUqICBiYXNlLCBFeHByZXNzaW9uTm9kZSogIHN1YnNjcmlwdCwg
T3BlcmF0b3Igb3BlciwgRXhwcmVzc2lvbk5vZGUqICByaWdodCkgS0pTX0ZBU1RfQ0FMTAotICAg
ICAgOiBtX2Jhc2UoYmFzZSksIG1fc3Vic2NyaXB0KHN1YnNjcmlwdCksIG1fb3BlcihvcGVyKSwg
bV9yaWdodChyaWdodCkge30KKyAgICBSZWFkTW9kaWZ5QnJhY2tldE5vZGUoRXhwcmVzc2lvbk5v
ZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIE9wZXJhdG9yIG9wZXIsIEV4cHJl
c3Npb25Ob2RlKiByaWdodCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2Jhc2UoYmFzZSksIG1f
c3Vic2NyaXB0KHN1YnNjcmlwdCksIG1fb3BlcihvcGVyKSwgbV9yaWdodChyaWdodCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0xNjA4
LDEwICsxNjU1LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV9yaWdodDsKICAgfTsKIAotICAgIGNsYXNzIEFzc2lnbkJyYWNrZXROb2RlIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlIHsKKyAgY2xhc3MgQXNzaWduQnJhY2tldE5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgQXNzaWduQnJhY2tldE5vZGUoRXhwcmVzc2lv
bk5vZGUqICBiYXNlLCBFeHByZXNzaW9uTm9kZSogIHN1YnNjcmlwdCwgRXhwcmVzc2lvbk5vZGUq
ICByaWdodCkgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBtX2Jhc2UoYmFzZSksIG1fc3Vic2NyaXB0
KHN1YnNjcmlwdCksIG1fcmlnaHQocmlnaHQpIHt9CisgICAgQXNzaWduQnJhY2tldE5vZGUoRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEV4cHJlc3Npb25O
b2RlKiByaWdodCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2Jhc2UoYmFzZSksIG1fc3Vic2Ny
aXB0KHN1YnNjcmlwdCksIG1fcmlnaHQocmlnaHQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwpAQCAtMTYyMiwxMCArMTY2OSwxMCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CiAgIH07CiAK
LSAgICBjbGFzcyBBc3NpZ25Eb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgY2xh
c3MgQXNzaWduRG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAg
ICBBc3NpZ25Eb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiAgYmFzZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogbV9i
YXNlKGJhc2UpLCBtX2lkZW50KGlkZW50KSwgbV9yaWdodChyaWdodCkge30KKyAgICBBc3NpZ25E
b3ROb2RlKEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhw
cmVzc2lvbk5vZGUqIHJpZ2h0KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1fYmFzZShiYXNlKSwg
bV9pZGVudChpZGVudCksIG1fcmlnaHQocmlnaHQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwpAQCAtMTYzNiwxMCArMTY4MywxMCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CiAgIH07CiAK
LSAgICBjbGFzcyBSZWFkTW9kaWZ5RG90Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7Cisg
IGNsYXNzIFJlYWRNb2RpZnlEb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVi
bGljOgotICAgIFJlYWRNb2RpZnlEb3ROb2RlKEV4cHJlc3Npb25Ob2RlKiAgYmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiAgcmlnaHQp
IEtKU19GQVNUX0NBTEwKLSAgICAgIDogbV9iYXNlKGJhc2UpLCBtX2lkZW50KGlkZW50KSwgbV9v
cGVyKG9wZXIpLCBtX3JpZ2h0KHJpZ2h0KSB7fQorICAgIFJlYWRNb2RpZnlEb3ROb2RlKEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgT3BlcmF0b3Igb3Blciwg
RXhwcmVzc2lvbk5vZGUqIHJpZ2h0KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1fYmFzZShiYXNl
KSwgbV9pZGVudChpZGVudCksIG1fb3BlcihvcGVyKSwgbV9yaWdodChyaWdodCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0xNjUxLDEw
ICsxNjk4LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9yaWdodDsKICAgfTsKIAotICAgIGNsYXNzIEFzc2lnbkVycm9yTm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CisgIGNsYXNzIEFzc2lnbkVycm9yTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSB7CiAgIHB1YmxpYzoKICAgICBBc3NpZ25FcnJvck5vZGUoRXhwcmVzc2lvbk5vZGUqIGxl
ZnQsIE9wZXJhdG9yIG9wZXIsIEV4cHJlc3Npb25Ob2RlKiByaWdodCkgS0pTX0ZBU1RfQ0FMTAot
ICAgICAgOiBtX2xlZnQobGVmdCksIG1fb3BlcihvcGVyKSwgbV9yaWdodChyaWdodCkge30KKyAg
ICAgIDogbV9sZWZ0KGxlZnQpLCBtX29wZXIob3BlciksIG1fcmlnaHQocmlnaHQpIHsgfQogICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNBc3NpZ25tZW50OyB9CkBAIC0xNjY0LDQ2ICsxNzExLDQ5IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9yaWdodDsKICAgfTsKIAotICAgIGNsYXNzIENv
bW1hTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgIGNsYXNzIENvbW1hTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBDb21tYU5vZGUoRXhwcmVzc2lv
bk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIpIEtKU19GQVNUX0NBTEwgOiBleHByMShlMSks
IGV4cHIyKGUyKQorICAgIENvbW1hTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Np
b25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAorICAgICAgICA6IG1fZXhwcjEoZXhwcjEpCisg
ICAgICAgICwgbV9leHByMihleHByMikKICAgICB7Ci0gICAgICAgIGUxLT5vcHRpbWl6ZUZvclVu
bmVjZXNzYXJ5UmVzdWx0KCk7CisgICAgICAgIG1fZXhwcjEtPm9wdGltaXplRm9yVW5uZWNlc3Nh
cnlSZXN1bHQoKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICBwcml2YXRlOgotICAgIFJlZlB0cjxFeHByZXNz
aW9uTm9kZT4gZXhwcjE7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKKyAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBtX2V4cHIyOwogICB9OwogCiAgIGNsYXNzIENvbnN0RGVjbE5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgewogICBwdWJsaWM6Ci0gICAgQ29uc3REZWNsTm9kZShjb25zdCBJZGVudGlmaWVy
JiBpZCwgRXhwcmVzc2lvbk5vZGUqIGluKSBLSlNfRkFTVF9DQUxMOworICAgIENvbnN0RGVjbE5v
ZGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJs
ZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgS0pTOjpKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZvaWQgZXZhbHVhdGVTaW5nbGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQotICAgIFBhc3NSZWZQdHI8Q29uc3RE
ZWNsTm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG5leHQucmVsZWFz
ZSgpOyB9CisgICAgUGFzc1JlZlB0cjxDb25zdERlY2xOb2RlPiByZWxlYXNlTmV4dCgpIEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQogCi0gICAgSWRlbnRpZmllciBp
ZGVudDsKLSAgICBMaXN0UmVmUHRyPENvbnN0RGVjbE5vZGU+IG5leHQ7Ci0gICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBpbml0OworICAgIElkZW50aWZpZXIgbV9pZGVudDsKKyAgICBMaXN0UmVm
UHRyPENvbnN0RGVjbE5vZGU+IG1fbmV4dDsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1f
aW5pdDsKICAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVNsb3dDYXNlKEV4ZWNTdGF0ZSosIGNv
bnN0IFNjb3BlQ2hhaW4mLCBKU1ZhbHVlKikgS0pTX0ZBU1RfQ0FMTCBORVZFUl9JTkxJTkU7CiAg
IH07CiAKICAgY2xhc3MgQ29uc3RTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUg
ewogICBwdWJsaWM6Ci0gICAgQ29uc3RTdGF0ZW1lbnROb2RlKENvbnN0RGVjbE5vZGUqIGwpIEtK
U19GQVNUX0NBTEwgOiBuZXh0KGwpIHsgfQorICAgIENvbnN0U3RhdGVtZW50Tm9kZShDb25zdERl
Y2xOb2RlKiBuZXh0KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1fbmV4dChuZXh0KSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xh
cmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRl
OgotICAgIFJlZlB0cjxDb25zdERlY2xOb2RlPiBuZXh0OworICAgIFJlZlB0cjxDb25zdERlY2xO
b2RlPiBtX25leHQ7CiAgIH07CiAKICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFN0YXRlbWVudE5v
ZGU+ID4gU3RhdGVtZW50VmVjdG9yOwpAQCAtMTc0MCwyOCArMTc5MCwyOSBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICBjbGFzcyBFeHByU3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2Rl
IHsKICAgcHVibGljOgotICAgIEV4cHJTdGF0ZW1lbnROb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBL
SlNfRkFTVF9DQUxMIDogZXhwcihlKSB7IH0KKyAgICBFeHByU3RhdGVtZW50Tm9kZShFeHByZXNz
aW9uTm9kZSogZXhwcikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2V4cHIoZXhwcikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0
ZToKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CisgICAgUmVmUHRyPEV4cHJlc3Np
b25Ob2RlPiBtX2V4cHI7CiAgIH07CiAKICAgY2xhc3MgVmFyU3RhdGVtZW50Tm9kZSA6IHB1Ymxp
YyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIFZhclN0YXRlbWVudE5vZGUoRXhwcmVz
c2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHsgfQorICAgIFZhclN0YXRlbWVu
dE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgOiBtX2V4cHIoZSkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNs
YXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0
ZToKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CisgICAgUmVmUHRyPEV4cHJlc3Np
b25Ob2RlPiBtX2V4cHI7CiAgIH07CiAKICAgY2xhc3MgSWZOb2RlIDogcHVibGljIFN0YXRlbWVu
dE5vZGUgewogICBwdWJsaWM6Ci0gICAgSWZOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1l
bnROb2RlICpzKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IG1fY29uZGl0aW9uKGUpLCBtX2lmQmxv
Y2socykgeyB9CisgICAgSWZOb2RlKEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIFN0YXRlbWVu
dE5vZGUqIGlmQmxvY2spIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9jb25kaXRpb24oY29uZGl0
aW9uKSwgbV9pZkJsb2NrKGlmQmxvY2spIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYp
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0xNzcyLDggKzE4MjMsOCBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICAgIGNsYXNzIElmRWxzZU5vZGUgOiBwdWJsaWMgSWZOb2RlIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIElmRWxzZU5vZGUoRXhwcmVzc2lvbk5vZGUqIGUsIFN0YXRlbWVudE5vZGUqIGlm
QmxvY2ssIFN0YXRlbWVudE5vZGUqIGVsc2VCbG9jaykgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAg
ICAgOiBJZk5vZGUoZSwgaWZCbG9jayksIG1fZWxzZUJsb2NrKGVsc2VCbG9jaykgeyB9CisgICAg
ICAgIElmRWxzZU5vZGUoRXhwcmVzc2lvbk5vZGUqIGNvbmR0aW9uLCBTdGF0ZW1lbnROb2RlKiBp
ZkJsb2NrLCBTdGF0ZW1lbnROb2RlKiBlbHNlQmxvY2spIEtKU19GQVNUX0NBTEwKKyAgICAgICAg
ICAgIDogSWZOb2RlKGNvbmR0aW9uLCBpZkJsb2NrKSwgbV9lbHNlQmxvY2soZWxzZUJsb2NrKSB7
IH0KICAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFi
bGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwpAQCAtMTc4MywxNjIgKzE4MzQsMTcxIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNs
YXNzIERvV2hpbGVOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6Ci0gICAg
RG9XaGlsZU5vZGUoU3RhdGVtZW50Tm9kZSAqcywgRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNU
X0NBTEwgOiBzdGF0ZW1lbnQocyksIGV4cHIoZSkgeyB9CisgICAgRG9XaGlsZU5vZGUoU3RhdGVt
ZW50Tm9kZSogc3RhdGVtZW50LCBFeHByZXNzaW9uTm9kZSogZXhwcikgS0pTX0ZBU1RfQ0FMTAor
ICAgICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQpLCBtX2V4cHIoZXhwcikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlv
blN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUq
IGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAg
ICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50OwotICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gZXhwcjsKKyAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gbV9zdGF0ZW1lbnQ7CisgICAg
UmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgIH07CiAKICAgY2xhc3MgV2hpbGVOb2Rl
IDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6Ci0gICAgV2hpbGVOb2RlKEV4cHJl
c3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSwg
c3RhdGVtZW50KHMpIHsgfQorICAgIFdoaWxlTm9kZShFeHByZXNzaW9uTm9kZSogZXhwciwgU3Rh
dGVtZW50Tm9kZSogc3RhdGVtZW50KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1fZXhwcihleHBy
KSwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2sm
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgotICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gZXhwcjsKLSAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50OworICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOworICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBt
X3N0YXRlbWVudDsKICAgfTsKIAogICBjbGFzcyBGb3JOb2RlIDogcHVibGljIFN0YXRlbWVudE5v
ZGUgewogICBwdWJsaWM6Ci0gICAgICBGb3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVz
c2lvbk5vZGUqIGUyLCBFeHByZXNzaW9uTm9kZSogZTMsIFN0YXRlbWVudE5vZGUqIHMsIGJvb2wg
ZTFXYXNWYXJEZWNsKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgIDogZXhwcjEoZTEgPyBlMSA6IG5l
dyBQbGFjZWhvbGRlclRydWVOb2RlKQotICAgICAgICAsIGV4cHIyKGUyID8gZTIgOiBuZXcgUGxh
Y2Vob2xkZXJUcnVlTm9kZSkKLSAgICAgICAgLCBleHByMyhlMyA/IGUzIDogbmV3IFBsYWNlaG9s
ZGVyVHJ1ZU5vZGUpCi0gICAgICAgICwgc3RhdGVtZW50KHMpCi0gICAgICAgICwgZXhwcjFXYXNW
YXJEZWNsKGUxICYmIGUxV2FzVmFyRGVjbCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChleHByMSk7
Ci0gICAgICAgIEFTU0VSVChleHByMik7Ci0gICAgICAgIEFTU0VSVChleHByMyk7CisgICAgICBG
b3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjMsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgYm9vbCBleHByMVdh
c1ZhckRlY2wpIEtKU19GQVNUX0NBTEwKKyAgICAgICAgOiBtX2V4cHIxKGV4cHIxID8gZXhwcjEg
OiBuZXcgUGxhY2Vob2xkZXJUcnVlTm9kZSkKKyAgICAgICAgLCBtX2V4cHIyKGV4cHIyID8gZXhw
cjIgOiBuZXcgUGxhY2Vob2xkZXJUcnVlTm9kZSkKKyAgICAgICAgLCBtX2V4cHIzKGV4cHIzID8g
ZXhwcjMgOiBuZXcgUGxhY2Vob2xkZXJUcnVlTm9kZSkKKyAgICAgICAgLCBtX3N0YXRlbWVudChz
dGF0ZW1lbnQpCisgICAgICAgICwgbV9leHByMVdhc1ZhckRlY2woZXhwcjEgJiYgZXhwcjFXYXNW
YXJEZWNsKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZXhwcjEpOworICAgICAgICBBU1NFUlQo
bV9leHByMik7CisgICAgICAgIEFTU0VSVChtX2V4cHIzKTsKICAgICAgICAgQVNTRVJUKHN0YXRl
bWVudCk7CiAKLSAgICAgICAgZXhwcjEtPm9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKTsK
LSAgICAgICAgZXhwcjMtPm9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKTsKKyAgICAgICAg
bV9leHByMS0+b3B0aW1pemVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgpOworICAgICAgICBtX2V4cHIz
LT5vcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0KCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IGV4cHIxOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhw
cjI7Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMzsKLSAgICBSZWZQdHI8U3RhdGVt
ZW50Tm9kZT4gc3RhdGVtZW50OwotICAgIGJvb2wgZXhwcjFXYXNWYXJEZWNsOworICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMTsKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1f
ZXhwcjI7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIzOworICAgIFJlZlB0cjxT
dGF0ZW1lbnROb2RlPiBtX3N0YXRlbWVudDsKKyAgICBib29sIG1fZXhwcjFXYXNWYXJEZWNsOwog
ICB9OwogCiAgIGNsYXNzIEZvckluTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVi
bGljOgotICAgIEZvckluTm9kZShFeHByZXNzaW9uTm9kZSogIGwsIEV4cHJlc3Npb25Ob2RlKiBl
LCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMOwotICAgIEZvckluTm9kZShjb25zdCBJ
ZGVudGlmaWVyICZpLCBFeHByZXNzaW9uTm9kZSAqaW4sIEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0
ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMOworICAgIEZvckluTm9kZShFeHByZXNzaW9uTm9k
ZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSopIEtKU19GQVNUX0NBTEw7CisgICAg
Rm9ySW5Ob2RlKGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25O
b2RlKiwgU3RhdGVtZW50Tm9kZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAgICBJZGVudGlmaWVy
IGlkZW50OwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gaW5pdDsKLSAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IGxleHByOwotICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKLSAg
ICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50OwotICAgIGJvb2wgaWRlbnRJc1ZhckRl
Y2w7CisgICAgSWRlbnRpZmllciBtX2lkZW50OworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9pbml0OworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9sZXhwcjsKKyAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKKyAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gbV9zdGF0
ZW1lbnQ7CisgICAgYm9vbCBtX2lkZW50SXNWYXJEZWNsOwogICB9OwogCiAgIGNsYXNzIENvbnRp
bnVlTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgogICAgIENvbnRpbnVl
Tm9kZSgpIEtKU19GQVNUX0NBTEwgeyB9Ci0gICAgQ29udGludWVOb2RlKGNvbnN0IElkZW50aWZp
ZXIgJmkpIEtKU19GQVNUX0NBTEwgOiBpZGVudChpKSB7IH0KKyAgICBDb250aW51ZU5vZGUoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9pZGVudChpZGVu
dCkgeyB9CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7CiAgIHByaXZhdGU6Ci0gICAgSWRlbnRpZmllciBpZGVudDsKKyAgICBJZGVu
dGlmaWVyIG1faWRlbnQ7CiAgIH07CiAKICAgY2xhc3MgQnJlYWtOb2RlIDogcHVibGljIFN0YXRl
bWVudE5vZGUgewogICBwdWJsaWM6CiAgICAgQnJlYWtOb2RlKCkgS0pTX0ZBU1RfQ0FMTCB7IH0K
LSAgICBCcmVha05vZGUoY29uc3QgSWRlbnRpZmllciAmaSkgS0pTX0ZBU1RfQ0FMTCA6IGlkZW50
KGkpIHsgfQorICAgIEJyZWFrTm9kZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgS0pTX0ZBU1Rf
Q0FMTAorICAgICAgOiBtX2lkZW50KGlkZW50KSB7IH0KICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4
ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAgICBJ
ZGVudGlmaWVyIGlkZW50OworICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgfTsKIAogICBjbGFz
cyBSZXR1cm5Ob2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6Ci0gICAgUmV0
dXJuTm9kZShFeHByZXNzaW9uTm9kZSogdikgS0pTX0ZBU1RfQ0FMTCA6IHZhbHVlKHYpIHt9Cisg
ICAgUmV0dXJuTm9kZShFeHByZXNzaW9uTm9kZSogdmFsdWUpIEtKU19GQVNUX0NBTEwKKyAgICAg
IDogbV92YWx1ZSh2YWx1ZSkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHZh
bHVlOworICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV92YWx1ZTsKICAgfTsKIAogICBjbGFz
cyBXaXRoTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIFdpdGhO
b2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2RlKiBzKSBLSlNfRkFTVF9DQUxMIDog
ZXhwcihlKSwgc3RhdGVtZW50KHMpIHsgfQorICAgIFdpdGhOb2RlKEV4cHJlc3Npb25Ob2RlKiBl
eHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9l
eHByKGV4cHIpLCBtX3N0YXRlbWVudChzdGF0ZW1lbnQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBleHByOwotICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7
CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CisgICAgUmVmUHRyPFN0YXRlbWVu
dE5vZGU+IG1fc3RhdGVtZW50OwogICB9OwogCiAgIGNsYXNzIExhYmVsTm9kZSA6IHB1YmxpYyBT
dGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIExhYmVsTm9kZShjb25zdCBJZGVudGlmaWVy
ICZsLCBTdGF0ZW1lbnROb2RlICpzKSBLSlNfRkFTVF9DQUxMIDogbGFiZWwobCksIHN0YXRlbWVu
dChzKSB7IH0KKyAgICBMYWJlbE5vZGUoY29uc3QgSWRlbnRpZmllciYgbGFiZWwsIFN0YXRlbWVu
dE5vZGUqIHN0YXRlbWVudCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX2xhYmVsKGxhYmVsKSwg
bV9zdGF0ZW1lbnQoc3RhdGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgotICAgIElkZW50aWZpZXIgbGFiZWw7Ci0g
ICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IHN0YXRlbWVudDsKKyAgICBJZGVudGlmaWVyIG1fbGFi
ZWw7CisgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IG1fc3RhdGVtZW50OwogICB9OwogCiAgIGNs
YXNzIFRocm93Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIFRo
cm93Tm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkge30KKyAg
ICBUaHJvd05vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIpIEtKU19GQVNUX0NBTEwKKyAgICAgIDog
bV9leHByKGV4cHIpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwor
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICB9OwogCiAgIGNsYXNzIFRyeU5v
ZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBUcnlOb2RlKFN0YXRl
bWVudE5vZGUgKmIsIGNvbnN0IElkZW50aWZpZXIgJmUsIFN0YXRlbWVudE5vZGUgKmMsIFN0YXRl
bWVudE5vZGUgKmYpIEtKU19GQVNUX0NBTEwKLSAgICAgIDogdHJ5QmxvY2soYiksIGV4Y2VwdGlv
bklkZW50KGUpLCBjYXRjaEJsb2NrKGMpLCBmaW5hbGx5QmxvY2soZikgeyB9CisgICAgVHJ5Tm9k
ZShTdGF0ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgZXhjZXB0aW9uSWRl
bnQsIFN0YXRlbWVudE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9j
aykgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBtX3RyeUJsb2NrKHRyeUJsb2NrKSwgbV9leGNlcHRp
b25JZGVudChleGNlcHRpb25JZGVudCksIG1fY2F0Y2hCbG9jayhjYXRjaEJsb2NrKSwgbV9maW5h
bGx5QmxvY2soZmluYWxseUJsb2NrKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgotICAgIFJlZlB0cjxTdGF0ZW1lbnROb2Rl
PiB0cnlCbG9jazsKLSAgICBJZGVudGlmaWVyIGV4Y2VwdGlvbklkZW50OwotICAgIFJlZlB0cjxT
dGF0ZW1lbnROb2RlPiBjYXRjaEJsb2NrOwotICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBmaW5h
bGx5QmxvY2s7CisgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IG1fdHJ5QmxvY2s7CisgICAgSWRl
bnRpZmllciBtX2V4Y2VwdGlvbklkZW50OworICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBtX2Nh
dGNoQmxvY2s7CisgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IG1fZmluYWxseUJsb2NrOwogICB9
OwogCi0gICAgY2xhc3MgUGFyYW1ldGVyTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgUGFy
YW1ldGVyTm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAgIFBhcmFtZXRlck5vZGUo
Y29uc3QgSWRlbnRpZmllciYgaSkgS0pTX0ZBU1RfQ0FMTCA6IGlkKGkpIHsgfQotICAgIFBhcmFt
ZXRlck5vZGUoUGFyYW1ldGVyTm9kZSogbCwgY29uc3QgSWRlbnRpZmllciYgaSkgS0pTX0ZBU1Rf
Q0FMTAotICAgICAgOiBpZChpKSB7IGwtPm5leHQgPSB0aGlzOyB9Ci0gICAgSWRlbnRpZmllciBp
ZGVudCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gaWQ7IH0KLSAgICBQYXJhbWV0ZXJOb2RlICpu
ZXh0UGFyYW0oKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG5leHQuZ2V0KCk7IH0KKyAgICBQYXJh
bWV0ZXJOb2RlKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBLSlNfRkFTVF9DQUxMCisgICAgICA6
IG1faWRlbnQoaWRlbnQpIHsgfQorICAgIFBhcmFtZXRlck5vZGUoUGFyYW1ldGVyTm9kZSogbCwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwKKyAgICAgIDogbV9pZGVudChp
ZGVudCkgeyBsLT5tX25leHQgPSB0aGlzOyB9CisgICAgSWRlbnRpZmllciBpZGVudCgpIEtKU19G
QVNUX0NBTEwgeyByZXR1cm4gbV9pZGVudDsgfQorICAgIFBhcmFtZXRlck5vZGUgKm5leHRQYXJh
bSgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgUGFz
c1JlZlB0cjxQYXJhbWV0ZXJOb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1
cm4gbmV4dC5yZWxlYXNlKCk7IH0KKyAgICBQYXNzUmVmUHRyPFBhcmFtZXRlck5vZGU+IHJlbGVh
c2VOZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgRnVuY0RlY2xOb2RlOwogICAgIGZyaWVuZCBjbGFzcyBGdW5jRXhwck5vZGU7Ci0gICAgSWRl
bnRpZmllciBpZDsKLSAgICBMaXN0UmVmUHRyPFBhcmFtZXRlck5vZGU+IG5leHQ7CisgICAgSWRl
bnRpZmllciBtX2lkZW50OworICAgIExpc3RSZWZQdHI8UGFyYW1ldGVyTm9kZT4gbV9uZXh0Owog
ICB9OwogCiAgIGNsYXNzIFNjb3BlTm9kZSA6IHB1YmxpYyBCbG9ja05vZGUgewpAQCAtMjAwOSw4
ICsyMDY5LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgRnVuY0V4cHJOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKICAgcHVibGljOgotICAgIEZ1bmNFeHByTm9kZShjb25zdCBJ
ZGVudGlmaWVyJiBpLCBGdW5jdGlvbkJvZHlOb2RlKiBiLCBQYXJhbWV0ZXJOb2RlKiBwID0gMCkg
S0pTX0ZBU1RfQ0FMTCAKLSAgICAgIDogaWRlbnQoaSksIHBhcmFtKHApLCBib2R5KGIpIHsgYWRk
UGFyYW1zKCk7IH0KKyAgICBGdW5jRXhwck5vZGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEZ1
bmN0aW9uQm9keU5vZGUqIGJvZHksIFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9IDApIEtKU19G
QVNUX0NBTEwgCisgICAgICA6IG1faWRlbnQoaWRlbnQpLCBtX3BhcmFtZXRlcihwYXJhbWV0ZXIp
LCBtX2JvZHkoYm9keSkgeyBhZGRQYXJhbXMoKTsgfQogICAgIHZpcnR1YWwgSlNWYWx1ZSAqZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNZW1iZXI7IH0KQEAgLTIwMTks
MzIgKzIwNzksMzMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBhZGRQYXJhbXMoKSBLSlNf
RkFTVF9DQUxMOwogICAgIC8vIFVzZWQgZm9yIHN0cmVhbVRvCiAgICAgZnJpZW5kIGNsYXNzIFBy
b3BlcnR5Tm9kZTsKLSAgICBJZGVudGlmaWVyIGlkZW50OwotICAgIFJlZlB0cjxQYXJhbWV0ZXJO
b2RlPiBwYXJhbTsKLSAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keTsKKyAgICBJZGVu
dGlmaWVyIG1faWRlbnQ7CisgICAgUmVmUHRyPFBhcmFtZXRlck5vZGU+IG1fcGFyYW1ldGVyOwor
ICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBtX2JvZHk7CiAgIH07CiAKICAgY2xhc3MgRnVu
Y0RlY2xOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6Ci0gICAgRnVuY0Rl
Y2xOb2RlKGNvbnN0IElkZW50aWZpZXImIGksIEZ1bmN0aW9uQm9keU5vZGUqIGIpIEtKU19GQVNU
X0NBTEwKLSAgICAgIDogaWRlbnQoaSksIGJvZHkoYikgeyBhZGRQYXJhbXMoKTsgfQotICAgIEZ1
bmNEZWNsTm9kZShjb25zdCBJZGVudGlmaWVyJiBpLCBQYXJhbWV0ZXJOb2RlKiBwLCBGdW5jdGlv
bkJvZHlOb2RlKiBiKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IGlkZW50KGkpLCBwYXJhbShwKSwg
Ym9keShiKSB7IGFkZFBhcmFtcygpOyB9CisgICAgRnVuY0RlY2xOb2RlKGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5KSBLSlNfRkFTVF9DQUxMCisgICAgICA6
IG1faWRlbnQoaWRlbnQpLCBtX2JvZHkoYm9keSkgeyBhZGRQYXJhbXMoKTsgfQorICAgIEZ1bmNE
ZWNsTm9kZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgUGFyYW1ldGVyTm9kZSogcGFyYW1ldGVy
LCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5KSBLSlNfRkFTVF9DQUxMCisgICAgICA6IG1faWRlbnQo
aWRlbnQpLCBtX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBtX2JvZHkoYm9keSkgeyBhZGRQYXJhbXMo
KTsgfQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogICAgIEFMV0FZU19JTkxJTkUgRnVuY3Rpb25JbXAqIG1ha2VGdW5jdGlvbihF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIElkZW50aWZpZXIgaWRlbnQ7CisgICAgSWRl
bnRpZmllciBtX2lkZW50OwogICBwcml2YXRlOgogICAgIHZvaWQgYWRkUGFyYW1zKCkgS0pTX0ZB
U1RfQ0FMTDsKLSAgICBSZWZQdHI8UGFyYW1ldGVyTm9kZT4gcGFyYW07Ci0gICAgUmVmUHRyPEZ1
bmN0aW9uQm9keU5vZGU+IGJvZHk7CisgICAgUmVmUHRyPFBhcmFtZXRlck5vZGU+IG1fcGFyYW1l
dGVyOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBtX2JvZHk7CiAgIH07CiAKLSAgICBj
bGFzcyBDYXNlQ2xhdXNlTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgQ2FzZUNsYXVzZU5v
ZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKLSAgICAgIENhc2VDbGF1c2VOb2RlKEV4cHJl
c3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7IH0KKyAgICAgIENhc2VDbGF1
c2VOb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMCisgICAgICAgIDogbV9leHBy
KGUpIHsgfQogICAgICAgQ2FzZUNsYXVzZU5vZGUoRXhwcmVzc2lvbk5vZGUqIGUsIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbikgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBleHByKGUpIHsgaWYgKGNo
aWxkcmVuKSBjaGlsZHJlbi0+cmVsZWFzZUNvbnRlbnRzSW50b1ZlY3RvcihtX2NoaWxkcmVuKTsg
fQorICAgICAgICA6IG1fZXhwcihlKSB7IGlmIChjaGlsZHJlbikgY2hpbGRyZW4tPnJlbGVhc2VD
b250ZW50c0ludG9WZWN0b3IobV9jaGlsZHJlbik7IH0KICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHBy
ZXNzaW9uOyB9CkBAIC0yMDUzLDQ5ICsyMTE0LDUxIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
SlNWYWx1ZSogZXhlY3V0ZVN0YXRlbWVudHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKIAog
ICBwcml2YXRlOgotICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOworICAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgICAgICBTdGF0ZW1lbnRWZWN0b3IgbV9jaGls
ZHJlbjsKICAgfTsKICAgCi0gICAgY2xhc3MgQ2xhdXNlTGlzdE5vZGUgOiBwdWJsaWMgTm9kZSB7
CisgIGNsYXNzIENsYXVzZUxpc3ROb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6Ci0gICAg
ICBDbGF1c2VMaXN0Tm9kZShDYXNlQ2xhdXNlTm9kZSogYykgS0pTX0ZBU1RfQ0FMTCA6IGNsYXVz
ZShjKSB7IH0KLSAgICAgIENsYXVzZUxpc3ROb2RlKENsYXVzZUxpc3ROb2RlKiBuLCBDYXNlQ2xh
dXNlTm9kZSogYykgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBjbGF1c2UoYykgeyBuLT5uZXh0ID0g
dGhpczsgfQorICAgICAgQ2xhdXNlTGlzdE5vZGUoQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgS0pT
X0ZBU1RfQ0FMTAorICAgICAgICA6IG1fY2xhdXNlKGNsYXVzZSkgeyB9CisgICAgICBDbGF1c2VM
aXN0Tm9kZShDbGF1c2VMaXN0Tm9kZSogY2xhdXNlTGlzdCwgQ2FzZUNsYXVzZU5vZGUqIGNsYXVz
ZSkgS0pTX0ZBU1RfQ0FMTAorICAgICAgICA6IG1fY2xhdXNlKGNsYXVzZSkgeyBjbGF1c2VMaXN0
LT5tX25leHQgPSB0aGlzOyB9CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgQ2FzZUNsYXVzZU5vZGUqIGdldENsYXVzZSgpIGNvbnN0IEtKU19GQVNU
X0NBTEwgeyByZXR1cm4gY2xhdXNlLmdldCgpOyB9Ci0gICAgICBDbGF1c2VMaXN0Tm9kZSogZ2V0
TmV4dCgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbmV4dC5nZXQoKTsgfQorICAgICAg
Q2FzZUNsYXVzZU5vZGUqIGdldENsYXVzZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4g
bV9jbGF1c2UuZ2V0KCk7IH0KKyAgICAgIENsYXVzZUxpc3ROb2RlKiBnZXROZXh0KCkgY29uc3Qg
S0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgUGFz
c1JlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIG5leHQucmVsZWFzZSgpOyB9CisgICAgICBQYXNzUmVmUHRyPENsYXVzZUxpc3ROb2RlPiBy
ZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQog
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KICAgcHJpdmF0ZToKICAgICAgIGZy
aWVuZCBjbGFzcyBDYXNlQmxvY2tOb2RlOwotICAgICAgUmVmUHRyPENhc2VDbGF1c2VOb2RlPiBj
bGF1c2U7Ci0gICAgICBMaXN0UmVmUHRyPENsYXVzZUxpc3ROb2RlPiBuZXh0OworICAgICAgUmVm
UHRyPENhc2VDbGF1c2VOb2RlPiBtX2NsYXVzZTsKKyAgICAgIExpc3RSZWZQdHI8Q2xhdXNlTGlz
dE5vZGU+IG1fbmV4dDsKICAgfTsKICAgCi0gICAgY2xhc3MgQ2FzZUJsb2NrTm9kZSA6IHB1Ymxp
YyBOb2RlIHsKKyAgY2xhc3MgQ2FzZUJsb2NrTm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGlj
OgotICAgICAgQ2FzZUJsb2NrTm9kZShDbGF1c2VMaXN0Tm9kZSogbDEsIENhc2VDbGF1c2VOb2Rl
KiBkLCBDbGF1c2VMaXN0Tm9kZSogbDIpIEtKU19GQVNUX0NBTEw7CisgICAgICBDYXNlQmxvY2tO
b2RlKENsYXVzZUxpc3ROb2RlKiBsaXN0MSwgQ2FzZUNsYXVzZU5vZGUqIGRlZmF1bHRDbGF1c2Us
IENsYXVzZUxpc3ROb2RlKiBsaXN0MikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICBKU1ZhbHVlKiBleGVjdXRlQmxvY2so
RXhlY1N0YXRlKiwgSlNWYWx1ZSAqaW5wdXQpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAgIHByaXZhdGU6Ci0gICAgICBSZWZQdHI8
Q2xhdXNlTGlzdE5vZGU+IGxpc3QxOwotICAgICAgUmVmUHRyPENhc2VDbGF1c2VOb2RlPiBkZWY7
Ci0gICAgICBSZWZQdHI8Q2xhdXNlTGlzdE5vZGU+IGxpc3QyOworICAgICAgUmVmUHRyPENsYXVz
ZUxpc3ROb2RlPiBtX2xpc3QxOworICAgICAgUmVmUHRyPENhc2VDbGF1c2VOb2RlPiBtX2RlZmF1
bHRDbGF1c2U7CisgICAgICBSZWZQdHI8Q2xhdXNlTGlzdE5vZGU+IG1fbGlzdDI7CiAgIH07CiAg
IAogICBjbGFzcyBTd2l0Y2hOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6
Ci0gICAgICBTd2l0Y2hOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBDYXNlQmxvY2tOb2RlICpiKSBL
SlNfRkFTVF9DQUxMIDogZXhwcihlKSwgYmxvY2soYikgeyB9CisgICAgICBTd2l0Y2hOb2RlKEV4
cHJlc3Npb25Ob2RlKiBleHByLCBDYXNlQmxvY2tOb2RlKiBibG9jaykgS0pTX0ZBU1RfQ0FMTAor
ICAgICAgICA6IG1fZXhwcihleHByKSwgbV9ibG9jayhibG9jaykgeyB9CiAgICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
eGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAg
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKLSAgICAgIFJlZlB0cjxDYXNlQmxvY2tO
b2RlPiBibG9jazsKKyAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOworICAgICAg
UmVmUHRyPENhc2VCbG9ja05vZGU+IG1fYmxvY2s7CiAgIH07CiAKICAgICBjbGFzcyBCcmVha3Bv
aW50Q2hlY2tTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CkBAIC0yMTM4LDYgKzIy
MDEsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIENsYXVzZUxpc3ROb2RlKiB0YWlsOwogICB9
OwogCi19IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgS0pTCiAKLSNlbmRpZgorI2VuZGlm
IC8vIE5PREVTX0hfCg==
</data>
<flag name="review"
          id="8175"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>