<?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>9064</bug_id>
          
          <creation_ts>2006-05-23 10:43:57 -0700</creation_ts>
          <short_desc>Split dom2_traversalimpl.* into separate files (one class per file).</short_desc>
          <delta_ts>2006-06-01 23:25:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>43283</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-05-23 10:43:57 -0700</bug_when>
    <thetext>Just a couple more of these left now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43293</commentid>
    <comment_count>1</comment_count>
      <attachid>8486</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-05-23 11:49:34 -0700</bug_when>
    <thetext>Created attachment 8486
patch

patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43674</commentid>
    <comment_count>2</comment_count>
      <attachid>8486</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2006-05-26 13:42:28 -0700</bug_when>
    <thetext>Comment on attachment 8486
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44350</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-01 23:25:57 -0700</bug_when>
    <thetext>Committed revision 14680.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8486</attachid>
            <date>2006-05-23 11:49:34 -0700</date>
            <delta_ts>2006-05-26 13:42:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>dom2_traversalSplit.diff</filename>
            <type>text/plain</type>
            <size>126613</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2
aXNpb24gMTQ1MzcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsMTAgKzE1Myw2IEBAIHN1YiBBZGRJbmNsdWRlc0Zv
clR5cGUKICAgICAgICAgICAgJHR5cGUgZXEgIlVJRXZlbnQiIG9yCiAgICAgICAgICAgICR0eXBl
IGVxICJXaGVlbEV2ZW50IikgewogICAgICRpbXBsSW5jbHVkZXN7ImRvbTJfZXZlbnRzaW1wbC5o
In0gPSAxOwotICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUl0ZXJhdG9yIiBvcgotICAgICAgICAg
ICAkdHlwZSBlcSAiTm9kZUZpbHRlciIgb3IKLQkgICAkdHlwZSBlcSAiVHJlZVdhbGtlciIpIHsK
LSAgICAkaW1wbEluY2x1ZGVzeyJkb20yX3RyYXZlcnNhbGltcGwuaCJ9ID0gMTsKICAgfSBlbHNp
ZiAoJHR5cGUgZXEgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIpIHsKICAgICAkaW1wbEluY2x1
ZGVzeyJDYW52YXNHcmFkaWVudC5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7IkNhbnZhc1Bh
dHRlcm4uaCJ9ID0gMTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3RyYXZlcnNhbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3RyYXZlcnNhbC5oCShyZXZp
c2lvbiAxNDUzNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3RyYXZlcnNhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw3ICsyMSwxMCBAQAogI2lmbmRlZiBLSlNfVFJBVkVSU0FMX0hfCiAj
ZGVmaW5lIEtKU19UUkFWRVJTQUxfSF8KIAotI2luY2x1ZGUgImRvbTJfdHJhdmVyc2FsaW1wbC5o
IgorI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJOb2RlRmlsdGVyQ29uZGl0aW9u
LmgiCisjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVHJlZVdhbGtlci5oIgog
I2luY2x1ZGUgImtqc19kb20uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NLm1tCShyZXZpc2lvbiAxNDUzNykKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00u
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDI4ICsyNywzMiBAQAogI2ltcG9ydCAiRE9NLmgiCiAK
ICNpbXBvcnQgIkNEQVRBU2VjdGlvbi5oIgotI2ltcG9ydCAiQ29tbWVudC5oIgogI2ltcG9ydCAi
Q1NTU3R5bGVTaGVldC5oIgorI2ltcG9ydCAiQ29tbWVudC5oIgogI2ltcG9ydCAiRE9NRXZlbnRz
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUltcGxlbWVudGF0aW9uRnJvbnQuaCIKICNpbXBvcnQg
IkRPTUludGVybmFsLmgiCiAjaW1wb3J0ICJET01Qcml2YXRlLmgiCi0jaW1wb3J0ICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiRG9jdW1lbnRGcmFn
bWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRUeXBlLmgiCiAjaW1wb3J0ICJFbnRpdHkuaCIKICNp
bXBvcnQgIkVudGl0eVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiRXZlbnRMaXN0ZW5lci5oIgogI2lt
cG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiRnJhbWVNYWMuaCIKKyNpbXBvcnQg
IkhUTUxOYW1lcy5oIgorI2ltcG9ydCAiTm9kZUZpbHRlci5oIgorI2ltcG9ydCAiTm9kZUZpbHRl
ckNvbmRpdGlvbi5oIgorI2ltcG9ydCAiTm9kZUl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJOb2RlTGlz
dC5oIgogI2ltcG9ydCAiTm90YXRpb24uaCIKICNpbXBvcnQgIlByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5oIgotI2ltcG9ydCAiY3NzaGVscGVyLmgiCi0jaW1wb3J0ICJSYW5nZS5oIgotI2ltcG9ydCAi
SFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJRdWFsaWZpZWROYW1lLmgiCisjaW1wb3J0ICJSYW5nZS5o
IgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKKyNpbXBvcnQgIlRyZWVXYWxrZXIuaCIKKyNpbXBv
cnQgImNzc2hlbHBlci5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvV2ViU2NyaXB0T2JqZWN0
UHJpdmF0ZS5oPgogI2ltcG9ydCA8b2JqYy9vYmpjLWNsYXNzLmg+CiAKSW5kZXg6IFdlYkNvcmUv
ZG9tL05vZGVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZUl0ZXJh
dG9yLmNwcAkocmV2aXNpb24gMTQ1MjgpCisrKyBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDExIEBACiAvKioKICAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0gKiAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAo
ZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCi0gKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAqIENv
cHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMCw2MiArMjEsMTkgQEAKICAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCiAgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgImRvbTJfdHJhdmVyc2FsaW1wbC5oIgorI2luY2x1ZGUgIk5vZGVJdGVyYXRvci5o
IgogCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShOb2Rl
KikgY29uc3QKLXsKLSAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotTm9kZUZpbHRlcjo6Tm9kZUZpbHRlcihOb2RlRmlsdGVyQ29uZGl0aW9uICpj
b25kaXRpb24pCi0gICAgOiBtX2NvbmRpdGlvbihjb25kaXRpb24pCi17Ci19Ci0KLXNob3J0IE5v
ZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSAqbm9kZSkgY29uc3QKLXsKLSAgICAvLyBjYXN0IHRv
IHNob3J0IHNpbGVuY2VzICJlbnVtZXJhbCBhbmQgbm9uLWVudW1lcmFsIHR5cGVzIGluIHJldHVy
biIgd2FybmluZwotICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHRO
b2RlKG5vZGUpIDogc3RhdGljX2Nhc3Q8c2hvcnQ+KEZJTFRFUl9BQ0NFUFQpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1UcmF2ZXJzYWw6OlRyYXZlcnNhbChOb2RlKiByb290Tm9kZSwgdW5zaWduZWQgd2hh
dFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiBub2RlRmlsdGVyLCBib29sIGV4cGFuZEVu
dGl0eVJlZmVyZW5jZXMpCi0gICAgOiBtX3Jvb3Qocm9vdE5vZGUpCi0gICAgLCBtX3doYXRUb1No
b3cod2hhdFRvU2hvdykKLSAgICAsIG1fZmlsdGVyKG5vZGVGaWx0ZXIpCi0gICAgLCBtX2V4cGFu
ZEVudGl0eVJlZmVyZW5jZXMoZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKLXsKLX0KLQotVHJhdmVy
c2FsOjp+VHJhdmVyc2FsKCkKLXsKLX0KLQotc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKE5v
ZGUgKm5vZGUpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IElmIFhNTCBpcyBpbXBsZW1lbnRlZCB3
ZSBoYXZlIHRvIGNoZWNrIGV4cGFuZEVudGl0eVJlcmVmZW5jZXMgaW4gdGhpcyBmdW5jdGlvbi4K
LSAgICAvLyBUaGUgYmlkIHR3aWRkbGluZyBoZXJlIGlzIGRvbmUgdG8gbWFwIERPTSBub2RlIHR5
cGVzLCB3aGljaCBhcmUgZ2l2ZW4gYXMgaW50ZWdlcnMgZnJvbQotICAgIC8vIDEgdGhyb3VnaCAx
MiwgdG8gd2hhdFRvU2hvdyBiaXQgbWFza3MuCi0gICAgaWYgKG5vZGUgJiYgKCgxIDw8IChub2Rl
LT5ub2RlVHlwZSgpLTEpKSAmIG1fd2hhdFRvU2hvdykgIT0gMCkKLSAgICAgICAgLy8gY2FzdCB0
byBzaG9ydCBzaWxlbmNlcyAiZW51bWVyYWwgYW5kIG5vbi1lbnVtZXJhbCB0eXBlcyBpbiByZXR1
cm4iIHdhcm5pbmcKLSAgICAgICAgcmV0dXJuIG1fZmlsdGVyID8gbV9maWx0ZXItPmFjY2VwdE5v
ZGUobm9kZSkgOiBzdGF0aWNfY2FzdDxzaG9ydD4oTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCk7
Ci0gICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9TS0lQOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1O
b2RlSXRlcmF0b3I6Ok5vZGVJdGVyYXRvcihOb2RlICpyb290Tm9kZSwgdW5zaWduZWQgd2hhdFRv
U2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiBmaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVm
ZXJlbmNlcykKK05vZGVJdGVyYXRvcjo6Tm9kZUl0ZXJhdG9yKE5vZGUqIHJvb3ROb2RlLCB1bnNp
Z25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IGZpbHRlciwgYm9vbCBleHBh
bmRFbnRpdHlSZWZlcmVuY2VzKQogICAgIDogVHJhdmVyc2FsKHJvb3ROb2RlLCB3aGF0VG9TaG93
LCBmaWx0ZXIsIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCiAgICAgLCBtX2JlZm9yZVJlZmVyZW5j
ZU5vZGUodHJ1ZSkKICAgICAsIG1fZGV0YWNoZWQoZmFsc2UpCkBAIC05MSw3ICs0OSw3IEBAIE5v
ZGVJdGVyYXRvcjo6fk5vZGVJdGVyYXRvcigpCiAgICAgICAgIGRvY3VtZW50KCktPmRldGFjaE5v
ZGVJdGVyYXRvcih0aGlzKTsKIH0KIAotTm9kZSAqTm9kZUl0ZXJhdG9yOjpmaW5kTmV4dE5vZGUo
Tm9kZSAqbm9kZSkgY29uc3QKK05vZGUqIE5vZGVJdGVyYXRvcjo6ZmluZE5leHROb2RlKE5vZGUq
IG5vZGUpIGNvbnN0CiB7CiAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSkgewogICAgICAgICAvLyBOb2RlSXRlcmF0b3JzIHRyZWF0IHRoZSBET00gdHJlZSBhcyBh
IGZsYXQgbGlzdCBvZiBub2Rlcy4KQEAgLTEwMywxNCArNjEsMTQgQEAgTm9kZSAqTm9kZUl0ZXJh
dG9yOjpmaW5kTmV4dE5vZGUoTm9kZSAqbgogICAgIHJldHVybiBub2RlOwogfQogCi1Ob2RlICpO
b2RlSXRlcmF0b3I6Om5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKQorTm9kZSogTm9kZUl0ZXJh
dG9yOjpuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoZGV0YWNoZWQoKSkg
ewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICBOb2RlICpub2RlID0gcmVmZXJlbmNlTm9kZSgpID8gcmVmZXJlbmNlTm9kZSgp
IDogcm9vdCgpOworICAgIE5vZGUqIG5vZGUgPSByZWZlcmVuY2VOb2RlKCkgPyByZWZlcmVuY2VO
b2RlKCkgOiByb290KCk7CiAgICAgaWYgKCFwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIHx8
IGFjY2VwdE5vZGUobm9kZSkgIT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAg
bm9kZSA9IGZpbmROZXh0Tm9kZShub2RlKTsKICAgICBpZiAobm9kZSkKQEAgLTExOSw3ICs3Nyw3
IEBAIE5vZGUgKk5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhjZXB0aW9uQ28KICAgICByZXR1cm4g
bm9kZTsKIH0KIAotTm9kZSAqTm9kZUl0ZXJhdG9yOjpmaW5kUHJldmlvdXNOb2RlKE5vZGUgKm5v
ZGUpIGNvbnN0CitOb2RlKiBOb2RlSXRlcmF0b3I6OmZpbmRQcmV2aW91c05vZGUoTm9kZSogbm9k
ZSkgY29uc3QKIHsKICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZSgpKSkgewogICAgICAgICAvLyBOb2RlSXRlcmF0b3JzIHRyZWF0IHRoZSBET00gdHJlZSBhcyBh
IGZsYXQgbGlzdCBvZiBub2Rlcy4KQEAgLTEzMSw5ICs4OSw5IEBAIE5vZGUgKk5vZGVJdGVyYXRv
cjo6ZmluZFByZXZpb3VzTm9kZShOb2QKICAgICByZXR1cm4gbm9kZTsKIH0KIAotTm9kZSAqTm9k
ZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYpCitOb2RlKiBOb2RlSXRlcmF0
b3I6OnByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJikKIHsKLSAgICBOb2RlICpub2RlID0gcmVm
ZXJlbmNlTm9kZSgpID8gcmVmZXJlbmNlTm9kZSgpIDogcm9vdCgpOworICAgIE5vZGUqIG5vZGUg
PSByZWZlcmVuY2VOb2RlKCkgPyByZWZlcmVuY2VOb2RlKCkgOiByb290KCk7CiAgICAgaWYgKHBv
aW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKCkgfHwgYWNjZXB0Tm9kZShub2RlKSAhPSBOb2RlRmls
dGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICBub2RlID0gZmluZFByZXZpb3VzTm9kZShub2Rl
KTsKICAgICBpZiAobm9kZSkKQEAgLTE0OSwxMiArMTA3LDEyIEBAIHZvaWQgTm9kZUl0ZXJhdG9y
OjpkZXRhY2goRXhjZXB0aW9uQ29kZSYKICAgICBzZXREZXRhY2hlZCgpOwogfQogCi12b2lkIE5v
ZGVJdGVyYXRvcjo6c2V0UmVmZXJlbmNlTm9kZShOb2RlICpub2RlKQordm9pZCBOb2RlSXRlcmF0
b3I6OnNldFJlZmVyZW5jZU5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBtX3JlZmVyZW5jZU5vZGUg
PSBub2RlOwogfQogCi12b2lkIE5vZGVJdGVyYXRvcjo6bm90aWZ5QmVmb3JlTm9kZVJlbW92YWwo
Tm9kZSAqcmVtb3ZlZE5vZGUpCit2b2lkIE5vZGVJdGVyYXRvcjo6bm90aWZ5QmVmb3JlTm9kZVJl
bW92YWwoTm9kZSogcmVtb3ZlZE5vZGUpCiB7CiAgICAgLy8gSXRlcmF0b3IgaXMgbm90IGFmZmVj
dGVkIGlmIHRoZSByZW1vdmVkIG5vZGUgaXMgdGhlIHJlZmVyZW5jZSBub2RlIGFuZCBpcyB0aGUg
cm9vdC4KICAgICAvLyBvciBpZiByZW1vdmVkIG5vZGUgaXMgbm90IHRoZSByZWZlcmVuY2Ugbm9k
ZSwgb3IgdGhlIGFuY2VzdG9yIG9mIHRoZSByZWZlcmVuY2Ugbm9kZS4KQEAgLTE2Niw3ICsxMjQs
NyBAQCB2b2lkIE5vZGVJdGVyYXRvcjo6bm90aWZ5QmVmb3JlTm9kZVJlbW92CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpKSB7Ci0gICAgICAg
IE5vZGUgKm5vZGUgPSBmaW5kTmV4dE5vZGUocmVtb3ZlZE5vZGUpOworICAgICAgICBOb2RlKiBu
b2RlID0gZmluZE5leHROb2RlKHJlbW92ZWROb2RlKTsKICAgICAgICAgaWYgKG5vZGUpIHsKICAg
ICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBp
ZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKICAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0
aGUgbm9kZSBiZWluZyByZW1vdmVkLgpAQCAtMTc2LDggKzEzNCw3IEBAIHZvaWQgTm9kZUl0ZXJh
dG9yOjpub3RpZnlCZWZvcmVOb2RlUmVtb3YKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChub2RlKQogICAgICAgICAgICAgICAgIHNldFJlZmVyZW5jZU5vZGUobm9kZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBub2RlID0g
ZmluZFByZXZpb3VzTm9kZShyZW1vdmVkTm9kZSk7CiAgICAgICAgICAgICBpZiAobm9kZSkgewog
ICAgICAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVt
b3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKQEAgLTE5NSw5ICsxNTIsOCBAQCB2b2lkIE5v
ZGVJdGVyYXRvcjo6bm90aWZ5QmVmb3JlTm9kZVJlbW92CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBOb2RlICpu
b2RlID0gZmluZFByZXZpb3VzTm9kZShyZW1vdmVkTm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgTm9kZSogbm9kZSA9IGZpbmRQcmV2aW91c05vZGUocmVtb3ZlZE5vZGUpOwogICAgICAgICBp
ZiAobm9kZSkgewogICAgICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBi
ZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVuY2Ugbm9kZSBpcwogICAgICAgICAgICAgLy8gYSBk
ZXNjZW5kYW50IG9mIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQuCkBAIC0yMDcsMTQzICsxNjMsMTgg
QEAgdm9pZCBOb2RlSXRlcmF0b3I6Om5vdGlmeUJlZm9yZU5vZGVSZW1vdgogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAgICAgICAgc2V0UmVmZXJlbmNlTm9k
ZShub2RlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIG5vZGUgPSBmaW5kTmV4dE5vZGUocmVtb3ZlZE5vZGUpOwotICAgICAgICAgICAg
ICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUg
cmVmZXJlbmNlIG5vZGUgaXMKLSAgICAgICAgICAgICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhl
IG5vZGUgYmVpbmcgcmVtb3ZlZC4KLSAgICAgICAgICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVy
ZW5jZU5vZGVBbmNlc3RvcikgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBu
b2RlLT5pc0FuY2VzdG9yKHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUgPSBmaW5kUHJldmlvdXNOb2RlKG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAobm9kZSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVmZXJlbmNlTm9kZShu
b2RlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVHJlZVdhbGtlcjo6VHJl
ZVdhbGtlcihOb2RlICpyb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxO
b2RlRmlsdGVyPiBmaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKLSAgICA6IFRy
YXZlcnNhbChyb290Tm9kZSwgd2hhdFRvU2hvdywgZmlsdGVyLCBleHBhbmRFbnRpdHlSZWZlcmVu
Y2VzKQotICAgICwgbV9jdXJyZW50KHJvb3ROb2RlKQotewotfQotCi12b2lkIFRyZWVXYWxrZXI6
OnNldEN1cnJlbnROb2RlKE5vZGUgKm5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlm
ICghbm9kZSkgewotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9jdXJyZW50ID0gbm9kZTsKLX0KLQotdm9pZCBUcmVlV2Fsa2Vy
OjpzZXRDdXJyZW50Tm9kZShOb2RlICpub2RlKQotewotICAgIGFzc2VydChub2RlKTsKLSAgICBp
bnQgZHVtbXk7Ci0gICAgc2V0Q3VycmVudE5vZGUobm9kZSwgZHVtbXkpOwotfQotCi1Ob2RlICpU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZv
ciAoTm9kZSAqbm9kZSA9IGN1cnJlbnROb2RlKCktPnBhcmVudE5vZGUoKTsgbm9kZSAmJiBub2Rl
ICE9IHJvb3QoKTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoYWNj
ZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7Ci0gICAgICAgICAg
ICBzZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1Ob2RlICpUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAw
OwotICAgIGZvciAoTm9kZSAqbm9kZSA9IGN1cnJlbnROb2RlKCktPmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUo
bm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkgewotICAgICAgICAgICAgc2V0Q3Vy
cmVudE5vZGUobm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAq
VHJlZVdhbGtlcjo6bGFzdENoaWxkKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZv
ciAoTm9kZSAqbm9kZSA9IGN1cnJlbnROb2RlKCktPmxhc3RDaGlsZCgpOyBub2RlOyBub2RlID0g
bm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkg
PT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkgewotICAgICAgICAgICAgc2V0Q3VycmVudE5v
ZGUobm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAqVHJlZVdh
bGtlcjo6cHJldmlvdXNTaWJsaW5nKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZv
ciAoTm9kZSAqbm9kZSA9IGN1cnJlbnROb2RlKCktPnByZXZpb3VzU2libGluZygpOyBub2RlOyBu
b2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUo
bm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkgewotICAgICAgICAgICAgc2V0Q3Vy
cmVudE5vZGUobm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAq
VHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoKQotewotICAgIE5vZGUgKnJlc3VsdCA9IDA7Ci0gICAg
Zm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+bmV4dFNpYmxpbmcoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkg
PT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkgewotICAgICAgICAgICAgc2V0Q3VycmVudE5v
ZGUobm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAqVHJlZVdh
bGtlcjo6cHJldmlvdXNOb2RlKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZvciAo
Tm9kZSAqbm9kZSA9IGN1cnJlbnROb2RlKCktPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKSB7Ci0gICAgICAgIGlmIChhY2Nl
cHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQgJiYgIWFuY2VzdG9yUmVq
ZWN0ZWQobm9kZSkpIHsKLSAgICAgICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAg
ICAgICAgcmVzdWx0ID0gbm9kZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5vZGUgKlRyZWVXYWxrZXI6Om5leHROb2RlKCkK
LXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZvciAoTm9kZSAqbm9kZSA9IGN1cnJlbnRO
b2RlKCktPnRyYXZlcnNlTmV4dE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoKSkgewotICAgICAgICBpZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpG
SUxURVJfQUNDRVBUICYmICFhbmNlc3RvclJlamVjdGVkKG5vZGUpKSB7Ci0gICAgICAgICAgICBz
ZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUg
YmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKKyAgICAgICAgICAgIC8vIGEg
ZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgorICAgICAgICAgICAgaWYgKHdp
bGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
bm9kZSAmJiBub2RlLT5pc0FuY2VzdG9yKHJlbW92ZWROb2RlKSkKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZSA9IGZpbmRQcmV2aW91c05vZGUobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAobm9kZSkKKyAgICAgICAgICAgICAgICBzZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwog
ICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgVHJlZVdhbGtl
cjo6YW5jZXN0b3JSZWplY3RlZChjb25zdCBOb2RlICpub2RlKSBjb25zdAotewotICAgIGZvciAo
Tm9kZSAqYSA9IG5vZGUtPnBhcmVudE5vZGUoKTsgYSAmJiBhICE9IHJvb3QoKTsgYSA9IGEtPnBh
cmVudE5vZGUoKSkKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUoYSkgPT0gTm9kZUZpbHRlcjo6RklM
VEVSX1JFSkVDVCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vVHJhdmVyc2Fs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCShyZXZpc2lvbiAx
NDUyOCkKKysrIFdlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTAgKzEsMTEgQEAKIC8qKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1l
bnRhdGlvbiBmb3IgS0RFLgogICoKLSAqIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gKiAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xsamVuQGhpZy5u
bykKLSAqIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMCBGcmVkZXJpayBI
b2xsamVuIChmcmVkZXJpay5ob2xsamVuQGhpZy5ubykKKyAqIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxl
IENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDM2ICsyMSwxNCBAQAog
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICoKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZG9tMl90cmF2ZXJz
YWxpbXBsLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKyNpbmNsdWRlICJUcmF2ZXJzYWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
aG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKE5vZGUqKSBjb25zdAotewotICAg
IHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ob2Rl
RmlsdGVyOjpOb2RlRmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRpb24gKmNvbmRpdGlvbikKLSAgICA6
IG1fY29uZGl0aW9uKGNvbmRpdGlvbikKLXsKLX0KLQotc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0
Tm9kZShOb2RlICpub2RlKSBjb25zdAotewotICAgIC8vIGNhc3QgdG8gc2hvcnQgc2lsZW5jZXMg
ImVudW1lcmFsIGFuZCBub24tZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJuaW5nCi0gICAg
cmV0dXJuIG1fY29uZGl0aW9uID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUobm9kZSkgOiBzdGF0
aWNfY2FzdDxzaG9ydD4oRklMVEVSX0FDQ0VQVCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFRyYXZlcnNh
bDo6VHJhdmVyc2FsKE5vZGUqIHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVm
UHRyPE5vZGVGaWx0ZXI+IG5vZGVGaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykK
ICAgICA6IG1fcm9vdChyb290Tm9kZSkKICAgICAsIG1fd2hhdFRvU2hvdyh3aGF0VG9TaG93KQpA
QCAtNjIsMjg4ICs0MSwxNSBAQCBUcmF2ZXJzYWw6On5UcmF2ZXJzYWwoKQogewogfQogCi1zaG9y
dCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoTm9kZSAqbm9kZSkgY29uc3QKK3Nob3J0IFRyYXZlcnNh
bDo6YWNjZXB0Tm9kZShOb2RlKiBub2RlKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJZiBYTUwg
aXMgaW1wbGVtZW50ZWQgd2UgaGF2ZSB0byBjaGVjayBleHBhbmRFbnRpdHlSZXJlZmVuY2VzIGlu
IHRoaXMgZnVuY3Rpb24uCiAgICAgLy8gVGhlIGJpZCB0d2lkZGxpbmcgaGVyZSBpcyBkb25lIHRv
IG1hcCBET00gbm9kZSB0eXBlcywgd2hpY2ggYXJlIGdpdmVuIGFzIGludGVnZXJzIGZyb20KICAg
ICAvLyAxIHRocm91Z2ggMTIsIHRvIHdoYXRUb1Nob3cgYml0IG1hc2tzLgotICAgIGlmIChub2Rl
ICYmICgoMSA8PCAobm9kZS0+bm9kZVR5cGUoKS0xKSkgJiBtX3doYXRUb1Nob3cpICE9IDApCisg
ICAgaWYgKG5vZGUgJiYgKCgxIDw8IChub2RlLT5ub2RlVHlwZSgpLTEpKSAmIG1fd2hhdFRvU2hv
dykpCiAgICAgICAgIC8vIGNhc3QgdG8gc2hvcnQgc2lsZW5jZXMgImVudW1lcmFsIGFuZCBub24t
ZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJuaW5nCiAgICAgICAgIHJldHVybiBtX2ZpbHRl
ciA/IG1fZmlsdGVyLT5hY2NlcHROb2RlKG5vZGUpIDogc3RhdGljX2Nhc3Q8c2hvcnQ+KE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQpOwogICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfU0tJ
UDsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotTm9kZUl0ZXJhdG9yOjpOb2RlSXRlcmF0b3IoTm9kZSAqcm9v
dE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gZmlsdGVy
LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCi0gICAgOiBUcmF2ZXJzYWwocm9vdE5vZGUs
IHdoYXRUb1Nob3csIGZpbHRlciwgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKLSAgICAsIG1fYmVm
b3JlUmVmZXJlbmNlTm9kZSh0cnVlKQotICAgICwgbV9kZXRhY2hlZChmYWxzZSkKLSAgICAsIG1f
ZG9jKHJvb3ROb2RlID8gcm9vdE5vZGUtPmRvY3VtZW50KCkgOiAwKQotewotICAgIGlmIChkb2N1
bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLT5hdHRhY2hOb2RlSXRlcmF0b3IodGhpcyk7Ci19
Ci0KLU5vZGVJdGVyYXRvcjo6fk5vZGVJdGVyYXRvcigpCi17Ci0gICAgaWYgKGRvY3VtZW50KCkp
Ci0gICAgICAgIGRvY3VtZW50KCktPmRldGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKLX0KLQotTm9k
ZSAqTm9kZUl0ZXJhdG9yOjpmaW5kTmV4dE5vZGUoTm9kZSAqbm9kZSkgY29uc3QKLXsKLSAgICB3
aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpKSB7Ci0gICAgICAgIC8vIE5v
ZGVJdGVyYXRvcnMgdHJlYXQgdGhlIERPTSB0cmVlIGFzIGEgZmxhdCBsaXN0IG9mIG5vZGVzLgot
ICAgICAgICAvLyBJbiBvdGhlciB3b3JkcywgRklMVEVSX1JFSkVDVCBkb2VzIG5vdCBwYXNzIG92
ZXIgZGVzY2VuZGFudHMKLSAgICAgICAgLy8gb2YgdGhlIHJlamVjdGVkIG5vZGUuIEhlbmNlLCBG
SUxURVJfUkVKRUNUIGlzIHRoZSBzYW1lIGFzIEZJTFRFUl9TS0lQLgotICAgICAgICBpZiAoYWNj
ZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBub2RlOwotfQotCi1Ob2RlICpOb2RlSXRlcmF0b3I6
Om5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChkZXRhY2hlZCgpKSB7Ci0g
ICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIE5vZGUgKm5vZGUgPSByZWZlcmVuY2VOb2RlKCkgPyByZWZlcmVuY2VOb2RlKCkgOiBy
b290KCk7Ci0gICAgaWYgKCFwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIHx8IGFjY2VwdE5v
ZGUobm9kZSkgIT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKLSAgICAgICAgbm9kZSA9IGZp
bmROZXh0Tm9kZShub2RlKTsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgc2V0UmVmZXJlbmNlTm9k
ZShub2RlKTsKLSAgICBzZXRQb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZShmYWxzZSk7Ci0gICAg
cmV0dXJuIG5vZGU7Ci19Ci0KLU5vZGUgKk5vZGVJdGVyYXRvcjo6ZmluZFByZXZpb3VzTm9kZShO
b2RlICpub2RlKSBjb25zdAotewotICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlUHJl
dmlvdXNOb2RlKCkpKSB7Ci0gICAgICAgIC8vIE5vZGVJdGVyYXRvcnMgdHJlYXQgdGhlIERPTSB0
cmVlIGFzIGEgZmxhdCBsaXN0IG9mIG5vZGVzLgotICAgICAgICAvLyBJbiBvdGhlciB3b3Jkcywg
RklMVEVSX1JFSkVDVCBkb2VzIG5vdCBwYXNzIG92ZXIgZGVzY2VuZGFudHMKLSAgICAgICAgLy8g
b2YgdGhlIHJlamVjdGVkIG5vZGUuIEhlbmNlLCBGSUxURVJfUkVKRUNUIGlzIHRoZSBzYW1lIGFz
IEZJTFRFUl9TS0lQLgotICAgICAgICBpZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVy
OjpGSUxURVJfQUNDRVBUKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBu
b2RlOwotfQotCi1Ob2RlICpOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGNlcHRpb25Db2Rl
JikKLXsKLSAgICBOb2RlICpub2RlID0gcmVmZXJlbmNlTm9kZSgpID8gcmVmZXJlbmNlTm9kZSgp
IDogcm9vdCgpOwotICAgIGlmIChwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIHx8IGFjY2Vw
dE5vZGUobm9kZSkgIT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKLSAgICAgICAgbm9kZSA9
IGZpbmRQcmV2aW91c05vZGUobm9kZSk7Ci0gICAgaWYgKG5vZGUpCi0gICAgICAgIHNldFJlZmVy
ZW5jZU5vZGUobm9kZSk7Ci0gICAgc2V0UG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKTsKLSAg
ICByZXR1cm4gbm9kZTsKLX0KLQotdm9pZCBOb2RlSXRlcmF0b3I6OmRldGFjaChFeGNlcHRpb25D
b2RlJikKLXsKLSAgICBpZiAoIWRldGFjaGVkKCkgJiYgZG9jdW1lbnQoKSkKLSAgICAgICAgZG9j
dW1lbnQoKS0+ZGV0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOwotICAgIHNldERldGFjaGVkKCk7Ci19
Ci0KLXZvaWQgTm9kZUl0ZXJhdG9yOjpzZXRSZWZlcmVuY2VOb2RlKE5vZGUgKm5vZGUpCi17Ci0g
ICAgbV9yZWZlcmVuY2VOb2RlID0gbm9kZTsKLX0KLQotdm9pZCBOb2RlSXRlcmF0b3I6Om5vdGlm
eUJlZm9yZU5vZGVSZW1vdmFsKE5vZGUgKnJlbW92ZWROb2RlKQotewotICAgIC8vIEl0ZXJhdG9y
IGlzIG5vdCBhZmZlY3RlZCBpZiB0aGUgcmVtb3ZlZCBub2RlIGlzIHRoZSByZWZlcmVuY2Ugbm9k
ZSBhbmQgaXMgdGhlIHJvb3QuCi0gICAgLy8gb3IgaWYgcmVtb3ZlZCBub2RlIGlzIG5vdCB0aGUg
cmVmZXJlbmNlIG5vZGUsIG9yIHRoZSBhbmNlc3RvciBvZiB0aGUgcmVmZXJlbmNlIG5vZGUuCi0g
ICAgaWYgKCFyZW1vdmVkTm9kZSB8fCByZW1vdmVkTm9kZSA9PSByb290KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBib29sIHdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlID0gcmVtb3ZlZE5vZGUgPT0g
cmVmZXJlbmNlTm9kZSgpOwotICAgIGJvb2wgd2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3Rv
ciA9IHJlZmVyZW5jZU5vZGUoKSAmJiByZWZlcmVuY2VOb2RlKCktPmlzQW5jZXN0b3IocmVtb3Zl
ZE5vZGUpOwotICAgIGlmICghd2lsbFJlbW92ZVJlZmVyZW5jZU5vZGUgJiYgIXdpbGxSZW1vdmVS
ZWZlcmVuY2VOb2RlQW5jZXN0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwb2ludGVy
QmVmb3JlUmVmZXJlbmNlTm9kZSgpKSB7Ci0gICAgICAgIE5vZGUgKm5vZGUgPSBmaW5kTmV4dE5v
ZGUocmVtb3ZlZE5vZGUpOwotICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgLy8gTW92
ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVuY2Ug
bm9kZSBpcwotICAgICAgICAgICAgLy8gYSBkZXNjZW5kYW50IG9mIHRoZSBub2RlIGJlaW5nIHJl
bW92ZWQuCi0gICAgICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3Rvcikg
ewotICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzQW5jZXN0b3IocmVtb3Zl
ZE5vZGUpKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gZmluZE5leHROb2RlKG5vZGUpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICAgICAgc2V0
UmVmZXJlbmNlTm9kZShub2RlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIG5vZGUgPSBmaW5kUHJldmlvdXNOb2RlKHJlbW92ZWROb2RlKTsKLSAgICAgICAgICAgIGlm
IChub2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9k
ZSBiZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVuY2Ugbm9kZSBpcwotICAgICAgICAgICAgICAg
IC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgotICAgICAgICAgICAg
ICAgIGlmICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzQW5jZXN0b3IocmVtb3ZlZE5vZGUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGZpbmRQcmV2aW91c05vZGUobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFJlbW92aW5nIGxhc3Qgbm9kZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gTmVl
ZCB0byBtb3ZlIHRoZSBwb2ludGVyIGFmdGVyIHRoZSBub2RlIHByZWNlZGluZyB0aGUgCi0gICAg
ICAgICAgICAgICAgICAgIC8vIG5ldyByZWZlcmVuY2Ugbm9kZS4KLSAgICAgICAgICAgICAgICAg
ICAgc2V0UmVmZXJlbmNlTm9kZShub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0UG9pbnRl
ckJlZm9yZVJlZmVyZW5jZU5vZGUoZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgTm9kZSAqbm9kZSA9
IGZpbmRQcmV2aW91c05vZGUocmVtb3ZlZE5vZGUpOwotICAgICAgICBpZiAobm9kZSkgewotICAg
ICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlm
IHRoZSByZWZlcmVuY2Ugbm9kZSBpcwotICAgICAgICAgICAgLy8gYSBkZXNjZW5kYW50IG9mIHRo
ZSBub2RlIGJlaW5nIHJlbW92ZWQuCi0gICAgICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5j
ZU5vZGVBbmNlc3RvcikgewotICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlz
QW5jZXN0b3IocmVtb3ZlZE5vZGUpKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gZmluZFBy
ZXZpb3VzTm9kZShub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlKQot
ICAgICAgICAgICAgICAgIHNldFJlZmVyZW5jZU5vZGUobm9kZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBub2RlID0gZmluZE5leHROb2RlKHJlbW92ZWROb2RlKTsK
LSAgICAgICAgICAgICAgICAvLyBNb3ZlIG91dCBmcm9tIHVuZGVyIHRoZSBub2RlIGJlaW5nIHJl
bW92ZWQgaWYgdGhlIHJlZmVyZW5jZSBub2RlIGlzCi0gICAgICAgICAgICAgICAgLy8gYSBkZXNj
ZW5kYW50IG9mIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQuCi0gICAgICAgICAgICAgICAgaWYgKHdp
bGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKG5vZGUgJiYgbm9kZS0+aXNBbmNlc3RvcihyZW1vdmVkTm9kZSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBub2RlID0gZmluZFByZXZpb3VzTm9kZShub2RlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICAgICAgICAgIHNldFJl
ZmVyZW5jZU5vZGUobm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRy
ZWVXYWxrZXI6OlRyZWVXYWxrZXIoTm9kZSAqcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3cs
IFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gZmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5j
ZXMpCi0gICAgOiBUcmF2ZXJzYWwocm9vdE5vZGUsIHdoYXRUb1Nob3csIGZpbHRlciwgZXhwYW5k
RW50aXR5UmVmZXJlbmNlcykKLSAgICAsIG1fY3VycmVudChyb290Tm9kZSkKLXsKLX0KLQotdm9p
ZCBUcmVlV2Fsa2VyOjpzZXRDdXJyZW50Tm9kZShOb2RlICpub2RlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY3VycmVudCA9IG5vZGU7Ci19Ci0KLXZv
aWQgVHJlZVdhbGtlcjo6c2V0Q3VycmVudE5vZGUoTm9kZSAqbm9kZSkKLXsKLSAgICBhc3NlcnQo
bm9kZSk7Ci0gICAgaW50IGR1bW15OwotICAgIHNldEN1cnJlbnROb2RlKG5vZGUsIGR1bW15KTsK
LX0KLQotTm9kZSAqVHJlZVdhbGtlcjo6cGFyZW50Tm9kZSgpCi17Ci0gICAgTm9kZSAqcmVzdWx0
ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJyZW50Tm9kZSgpLT5wYXJlbnROb2RlKCk7
IG5vZGUgJiYgbm9kZSAhPSByb290KCk7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAg
ICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkg
ewotICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUobm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQg
PSBub2RlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotTm9kZSAqVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZCgpCi17Ci0gICAgTm9k
ZSAqcmVzdWx0ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJyZW50Tm9kZSgpLT5maXJz
dENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlm
IChhY2NlcHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpIHsKLSAgICAg
ICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAgICAgICAgcmVzdWx0ID0gbm9kZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLU5vZGUgKlRyZWVXYWxrZXI6Omxhc3RDaGlsZCgpCi17Ci0gICAgTm9kZSAqcmVzdWx0
ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJyZW50Tm9kZSgpLT5sYXN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChhY2Nl
cHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpIHsKLSAgICAgICAgICAg
IHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAgICAgICAgcmVzdWx0ID0gbm9kZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LU5vZGUgKlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZygpCi17Ci0gICAgTm9kZSAqcmVzdWx0
ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJyZW50Tm9kZSgpLT5wcmV2aW91c1NpYmxp
bmcoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlm
IChhY2NlcHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpIHsKLSAgICAg
ICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAgICAgICAgcmVzdWx0ID0gbm9kZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLU5vZGUgKlRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKCkKLXsKLSAgICBOb2RlICpyZXN1
bHQgPSAwOwotICAgIGZvciAoTm9kZSAqbm9kZSA9IGN1cnJlbnROb2RlKCktPm5leHRTaWJsaW5n
KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChhY2Nl
cHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpIHsKLSAgICAgICAgICAg
IHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAgICAgICAgcmVzdWx0ID0gbm9kZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LU5vZGUgKlRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSgpCi17Ci0gICAgTm9kZSAqcmVzdWx0ID0g
MDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJyZW50Tm9kZSgpLT50cmF2ZXJzZVByZXZpb3Vz
Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkgewotICAg
ICAgICBpZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUICYm
ICFhbmNlc3RvclJlamVjdGVkKG5vZGUpKSB7Ci0gICAgICAgICAgICBzZXRDdXJyZW50Tm9kZShu
b2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1Ob2RlICpUcmVlV2Fsa2Vy
OjpuZXh0Tm9kZSgpCi17Ci0gICAgTm9kZSAqcmVzdWx0ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5v
ZGUgPSBjdXJyZW50Tm9kZSgpLT50cmF2ZXJzZU5leHROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0g
Tm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCAmJiAhYW5jZXN0b3JSZWplY3RlZChub2RlKSkgewot
ICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUobm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBu
b2RlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotYm9vbCBUcmVlV2Fsa2VyOjphbmNlc3RvclJlamVjdGVkKGNvbnN0IE5vZGUg
Km5vZGUpIGNvbnN0Ci17Ci0gICAgZm9yIChOb2RlICphID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBh
ICYmIGEgIT0gcm9vdCgpOyBhID0gYS0+cGFyZW50Tm9kZSgpKQotICAgICAgICBpZiAoYWNjZXB0
Tm9kZShhKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2RvbS9kb20yX3RyYXZlcnNhbGltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAJKHJldmlzaW9uIDE0NTM3KQorKysgV2Vi
Q29yZS9kb20vZG9tMl90cmF2ZXJzYWxpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNDkg
KzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0
aW9uIGZvciBLREUuCi0gKgotICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
LSAqIChDKSAyMDAwIEZyZWRlcmlrIEhvbGxqZW4gKGZyZWRlcmlrLmhvbGxqZW5AaGlnLm5vKQot
ICogKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZG9t
Ml90cmF2ZXJzYWxpbXBsLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zaG9ydCBOb2RlRmlsdGVy
Q29uZGl0aW9uOjphY2NlcHROb2RlKE5vZGUqKSBjb25zdAotewotICAgIHJldHVybiBOb2RlRmls
dGVyOjpGSUxURVJfQUNDRVBUOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ob2RlRmlsdGVyOjpOb2RlRmls
dGVyKE5vZGVGaWx0ZXJDb25kaXRpb24gKmNvbmRpdGlvbikKLSAgICA6IG1fY29uZGl0aW9uKGNv
bmRpdGlvbikKLXsKLX0KLQotc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShOb2RlICpub2Rl
KSBjb25zdAotewotICAgIC8vIGNhc3QgdG8gc2hvcnQgc2lsZW5jZXMgImVudW1lcmFsIGFuZCBu
b24tZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJuaW5nCi0gICAgcmV0dXJuIG1fY29uZGl0
aW9uID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUobm9kZSkgOiBzdGF0aWNfY2FzdDxzaG9ydD4o
RklMVEVSX0FDQ0VQVCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRyYXZlcnNhbDo6VHJhdmVyc2FsKE5v
ZGUqIHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+
IG5vZGVGaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKLSAgICA6IG1fcm9vdChy
b290Tm9kZSkKLSAgICAsIG1fd2hhdFRvU2hvdyh3aGF0VG9TaG93KQotICAgICwgbV9maWx0ZXIo
bm9kZUZpbHRlcikKLSAgICAsIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlcyhleHBhbmRFbnRpdHlS
ZWZlcmVuY2VzKQotewotfQotCi1UcmF2ZXJzYWw6On5UcmF2ZXJzYWwoKQotewotfQotCi1zaG9y
dCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoTm9kZSAqbm9kZSkgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogSWYgWE1MIGlzIGltcGxlbWVudGVkIHdlIGhhdmUgdG8gY2hlY2sgZXhwYW5kRW50aXR5UmVy
ZWZlbmNlcyBpbiB0aGlzIGZ1bmN0aW9uLgotICAgIC8vIFRoZSBiaWQgdHdpZGRsaW5nIGhlcmUg
aXMgZG9uZSB0byBtYXAgRE9NIG5vZGUgdHlwZXMsIHdoaWNoIGFyZSBnaXZlbiBhcyBpbnRlZ2Vy
cyBmcm9tCi0gICAgLy8gMSB0aHJvdWdoIDEyLCB0byB3aGF0VG9TaG93IGJpdCBtYXNrcy4KLSAg
ICBpZiAobm9kZSAmJiAoKDEgPDwgKG5vZGUtPm5vZGVUeXBlKCktMSkpICYgbV93aGF0VG9TaG93
KSAhPSAwKQotICAgICAgICAvLyBjYXN0IHRvIHNob3J0IHNpbGVuY2VzICJlbnVtZXJhbCBhbmQg
bm9uLWVudW1lcmFsIHR5cGVzIGluIHJldHVybiIgd2FybmluZwotICAgICAgICByZXR1cm4gbV9m
aWx0ZXIgPyBtX2ZpbHRlci0+YWNjZXB0Tm9kZShub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0PihO
b2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKTsKLSAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVS
X1NLSVA7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5vZGVJdGVyYXRvcjo6Tm9kZUl0ZXJhdG9yKE5vZGUg
KnJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IGZp
bHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQotICAgIDogVHJhdmVyc2FsKHJvb3RO
b2RlLCB3aGF0VG9TaG93LCBmaWx0ZXIsIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCi0gICAgLCBt
X2JlZm9yZVJlZmVyZW5jZU5vZGUodHJ1ZSkKLSAgICAsIG1fZGV0YWNoZWQoZmFsc2UpCi0gICAg
LCBtX2RvYyhyb290Tm9kZSA/IHJvb3ROb2RlLT5kb2N1bWVudCgpIDogMCkKLXsKLSAgICBpZiAo
ZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+YXR0YWNoTm9kZUl0ZXJhdG9yKHRoaXMp
OwotfQotCi1Ob2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQotewotICAgIGlmIChkb2N1bWVu
dCgpKQotICAgICAgICBkb2N1bWVudCgpLT5kZXRhY2hOb2RlSXRlcmF0b3IodGhpcyk7Ci19Ci0K
LU5vZGUgKk5vZGVJdGVyYXRvcjo6ZmluZE5leHROb2RlKE5vZGUgKm5vZGUpIGNvbnN0Ci17Ci0g
ICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSkgewotICAgICAgICAv
LyBOb2RlSXRlcmF0b3JzIHRyZWF0IHRoZSBET00gdHJlZSBhcyBhIGZsYXQgbGlzdCBvZiBub2Rl
cy4KLSAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBub3QgcGFz
cyBvdmVyIGRlc2NlbmRhbnRzCi0gICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBub2RlLiBIZW5j
ZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KLSAgICAgICAgaWYg
KGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotTm9kZSAqTm9kZUl0ZXJh
dG9yOjpuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoZGV0YWNoZWQoKSkg
ewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBOb2RlICpub2RlID0gcmVmZXJlbmNlTm9kZSgpID8gcmVmZXJlbmNlTm9kZSgp
IDogcm9vdCgpOwotICAgIGlmICghcG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSB8fCBhY2Nl
cHROb2RlKG5vZGUpICE9IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCi0gICAgICAgIG5vZGUg
PSBmaW5kTmV4dE5vZGUobm9kZSk7Ci0gICAgaWYgKG5vZGUpCi0gICAgICAgIHNldFJlZmVyZW5j
ZU5vZGUobm9kZSk7Ci0gICAgc2V0UG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoZmFsc2UpOwot
ICAgIHJldHVybiBub2RlOwotfQotCi1Ob2RlICpOb2RlSXRlcmF0b3I6OmZpbmRQcmV2aW91c05v
ZGUoTm9kZSAqbm9kZSkgY29uc3QKLXsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJz
ZVByZXZpb3VzTm9kZSgpKSkgewotICAgICAgICAvLyBOb2RlSXRlcmF0b3JzIHRyZWF0IHRoZSBE
T00gdHJlZSBhcyBhIGZsYXQgbGlzdCBvZiBub2Rlcy4KLSAgICAgICAgLy8gSW4gb3RoZXIgd29y
ZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBub3QgcGFzcyBvdmVyIGRlc2NlbmRhbnRzCi0gICAgICAg
IC8vIG9mIHRoZSByZWplY3RlZCBub2RlLiBIZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2Ft
ZSBhcyBGSUxURVJfU0tJUC4KLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZp
bHRlcjo6RklMVEVSX0FDQ0VQVCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1
cm4gbm9kZTsKLX0KLQotTm9kZSAqTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhjZXB0aW9u
Q29kZSYpCi17Ci0gICAgTm9kZSAqbm9kZSA9IHJlZmVyZW5jZU5vZGUoKSA/IHJlZmVyZW5jZU5v
ZGUoKSA6IHJvb3QoKTsKLSAgICBpZiAocG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSB8fCBh
Y2NlcHROb2RlKG5vZGUpICE9IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCi0gICAgICAgIG5v
ZGUgPSBmaW5kUHJldmlvdXNOb2RlKG5vZGUpOwotICAgIGlmIChub2RlKQotICAgICAgICBzZXRS
ZWZlcmVuY2VOb2RlKG5vZGUpOwotICAgIHNldFBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKCk7
Ci0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLXZvaWQgTm9kZUl0ZXJhdG9yOjpkZXRhY2goRXhjZXB0
aW9uQ29kZSYpCi17Ci0gICAgaWYgKCFkZXRhY2hlZCgpICYmIGRvY3VtZW50KCkpCi0gICAgICAg
IGRvY3VtZW50KCktPmRldGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKLSAgICBzZXREZXRhY2hlZCgp
OwotfQotCi12b2lkIE5vZGVJdGVyYXRvcjo6c2V0UmVmZXJlbmNlTm9kZShOb2RlICpub2RlKQot
ewotICAgIG1fcmVmZXJlbmNlTm9kZSA9IG5vZGU7Ci19Ci0KLXZvaWQgTm9kZUl0ZXJhdG9yOjpu
b3RpZnlCZWZvcmVOb2RlUmVtb3ZhbChOb2RlICpyZW1vdmVkTm9kZSkKLXsKLSAgICAvLyBJdGVy
YXRvciBpcyBub3QgYWZmZWN0ZWQgaWYgdGhlIHJlbW92ZWQgbm9kZSBpcyB0aGUgcmVmZXJlbmNl
IG5vZGUgYW5kIGlzIHRoZSByb290LgotICAgIC8vIG9yIGlmIHJlbW92ZWQgbm9kZSBpcyBub3Qg
dGhlIHJlZmVyZW5jZSBub2RlLCBvciB0aGUgYW5jZXN0b3Igb2YgdGhlIHJlZmVyZW5jZSBub2Rl
LgotICAgIGlmICghcmVtb3ZlZE5vZGUgfHwgcmVtb3ZlZE5vZGUgPT0gcm9vdCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgYm9vbCB3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZSA9IHJlbW92ZWROb2Rl
ID09IHJlZmVyZW5jZU5vZGUoKTsKLSAgICBib29sIHdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5j
ZXN0b3IgPSByZWZlcmVuY2VOb2RlKCkgJiYgcmVmZXJlbmNlTm9kZSgpLT5pc0FuY2VzdG9yKHJl
bW92ZWROb2RlKTsKLSAgICBpZiAoIXdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlICYmICF3aWxsUmVt
b3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocG9p
bnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSkgewotICAgICAgICBOb2RlICpub2RlID0gZmluZE5l
eHROb2RlKHJlbW92ZWROb2RlKTsKLSAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIC8v
IE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJl
bmNlIG5vZGUgaXMKLSAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWlu
ZyByZW1vdmVkLgotICAgICAgICAgICAgaWYgKHdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0
b3IpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0FuY2VzdG9yKHJl
bW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGZpbmROZXh0Tm9kZShub2Rl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgICAg
IHNldFJlZmVyZW5jZU5vZGUobm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBub2RlID0gZmluZFByZXZpb3VzTm9kZShyZW1vdmVkTm9kZSk7Ci0gICAgICAgICAg
ICBpZiAobm9kZSkgewotICAgICAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhl
IG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKLSAgICAgICAgICAg
ICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZC4KLSAgICAgICAg
ICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3RvcikgewotICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0FuY2VzdG9yKHJlbW92ZWROb2RlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBmaW5kUHJldmlvdXNOb2RlKG5vZGUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBSZW1vdmluZyBsYXN0IG5vZGUuCi0gICAgICAgICAgICAgICAgICAgIC8v
IE5lZWQgdG8gbW92ZSB0aGUgcG9pbnRlciBhZnRlciB0aGUgbm9kZSBwcmVjZWRpbmcgdGhlIAot
ICAgICAgICAgICAgICAgICAgICAvLyBuZXcgcmVmZXJlbmNlIG5vZGUuCi0gICAgICAgICAgICAg
ICAgICAgIHNldFJlZmVyZW5jZU5vZGUobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldFBv
aW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIE5vZGUgKm5v
ZGUgPSBmaW5kUHJldmlvdXNOb2RlKHJlbW92ZWROb2RlKTsKLSAgICAgICAgaWYgKG5vZGUpIHsK
LSAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3Zl
ZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKLSAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFudCBv
ZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgotICAgICAgICAgICAgaWYgKHdpbGxSZW1vdmVSZWZl
cmVuY2VOb2RlQW5jZXN0b3IpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2Rl
LT5pc0FuY2VzdG9yKHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGZp
bmRQcmV2aW91c05vZGUobm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobm9k
ZSkKLSAgICAgICAgICAgICAgICBzZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgbm9kZSA9IGZpbmROZXh0Tm9kZShyZW1vdmVkTm9k
ZSk7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBiZWlu
ZyByZW1vdmVkIGlmIHRoZSByZWZlcmVuY2Ugbm9kZSBpcwotICAgICAgICAgICAgICAgIC8vIGEg
ZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgotICAgICAgICAgICAgICAgIGlm
ICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHdoaWxlIChub2RlICYmIG5vZGUtPmlzQW5jZXN0b3IocmVtb3ZlZE5vZGUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IGZpbmRQcmV2aW91c05vZGUobm9kZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgICAgICAgICBz
ZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1UcmVlV2Fsa2VyOjpUcmVlV2Fsa2VyKE5vZGUgKnJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9T
aG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IGZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZl
cmVuY2VzKQotICAgIDogVHJhdmVyc2FsKHJvb3ROb2RlLCB3aGF0VG9TaG93LCBmaWx0ZXIsIGV4
cGFuZEVudGl0eVJlZmVyZW5jZXMpCi0gICAgLCBtX2N1cnJlbnQocm9vdE5vZGUpCi17Ci19Ci0K
LXZvaWQgVHJlZVdhbGtlcjo6c2V0Q3VycmVudE5vZGUoTm9kZSAqbm9kZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnQgPSBub2RlOwotfQot
Ci12b2lkIFRyZWVXYWxrZXI6OnNldEN1cnJlbnROb2RlKE5vZGUgKm5vZGUpCi17Ci0gICAgYXNz
ZXJ0KG5vZGUpOwotICAgIGludCBkdW1teTsKLSAgICBzZXRDdXJyZW50Tm9kZShub2RlLCBkdW1t
eSk7Ci19Ci0KLU5vZGUgKlRyZWVXYWxrZXI6OnBhcmVudE5vZGUoKQotewotICAgIE5vZGUgKnJl
c3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+cGFyZW50Tm9k
ZSgpOyBub2RlICYmIG5vZGUgIT0gcm9vdCgpOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7
Ci0gICAgICAgIGlmIChhY2NlcHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NF
UFQpIHsKLSAgICAgICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAgICAgICAgcmVz
dWx0ID0gbm9kZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLU5vZGUgKlRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoKQotewotICAg
IE5vZGUgKnJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICBpZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7Ci0g
ICAgICAgICAgICBzZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5v
ZGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1Ob2RlICpUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoKQotewotICAgIE5vZGUgKnJl
c3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+bGFzdENoaWxk
KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAo
YWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7Ci0gICAgICAg
ICAgICBzZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1Ob2RlICpUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoKQotewotICAgIE5vZGUgKnJl
c3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+cHJldmlvdXNT
aWJsaW5nKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAg
ICBpZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7Ci0g
ICAgICAgICAgICBzZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5v
ZGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1Ob2RlICpUcmVlV2Fsa2VyOjpuZXh0U2libGluZygpCi17Ci0gICAgTm9kZSAq
cmVzdWx0ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJyZW50Tm9kZSgpLT5uZXh0U2li
bGluZygpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAo
YWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7Ci0gICAgICAg
ICAgICBzZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1Ob2RlICpUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoKQotewotICAgIE5vZGUgKnJlc3Vs
dCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+dHJhdmVyc2VQcmV2
aW91c05vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpIHsK
LSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQ
VCAmJiAhYW5jZXN0b3JSZWplY3RlZChub2RlKSkgewotICAgICAgICAgICAgc2V0Q3VycmVudE5v
ZGUobm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAqVHJlZVdh
bGtlcjo6bmV4dE5vZGUoKQotewotICAgIE5vZGUgKnJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2Rl
ICpub2RlID0gY3VycmVudE5vZGUoKS0+dHJhdmVyc2VOZXh0Tm9kZSgpOyBub2RlOyBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChhY2NlcHROb2RlKG5vZGUp
ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQgJiYgIWFuY2VzdG9yUmVqZWN0ZWQobm9kZSkp
IHsKLSAgICAgICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAgICAgICAgcmVzdWx0
ID0gbm9kZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWJvb2wgVHJlZVdhbGtlcjo6YW5jZXN0b3JSZWplY3RlZChjb25zdCBO
b2RlICpub2RlKSBjb25zdAotewotICAgIGZvciAoTm9kZSAqYSA9IG5vZGUtPnBhcmVudE5vZGUo
KTsgYSAmJiBhICE9IHJvb3QoKTsgYSA9IGEtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgaWYgKGFj
Y2VwdE5vZGUoYSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVCkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL05vZGVGaWx0ZXIuaAkocmV2aXNpb24gMTQ1MjgpCisrKyBXZWJDb3JlL2RvbS9Ob2RlRmls
dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSwxMCBAQAogLyoKICAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0gKiAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGpl
biAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCi0gKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9s
bGplbkBoaWcubm8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdt
YWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTIzLDkgKzI0LDEwIEBACiAgKgogICovCiAKLSNpZm5kZWYgZG9tMl90cmF2
ZXJzYWxfaAotI2RlZmluZSBkb20yX3RyYXZlcnNhbF9oCisjaWZuZGVmIE5vZGVGaWx0ZXJfaAor
I2RlZmluZSBOb2RlRmlsdGVyX2gKIAorI2luY2x1ZGUgIk5vZGVGaWx0ZXJDb25kaXRpb24uaCIK
ICNpbmNsdWRlICJTaGFyZWQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtMzMsMTQxICszNSw1MiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIE5vZGU7Ci1jbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBOb2RlOwog
Ci10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CiAKLWNsYXNzIE5vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgU2hhcmVkPE5vZGVGaWx0
ZXJDb25kaXRpb24+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5Ob2RlRmlsdGVyQ29uZGl0aW9u
KCkgeyB9Ci0gICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKE5vZGUqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpIHsgfQotfTsKLQotY2xhc3MgTm9kZUZpbHRlciA6IHB1YmxpYyBT
aGFyZWQ8Tm9kZUZpbHRlcj4sIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICAvKioKLSAgICAg
KiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmV0dXJuZWQgYnkgdGhlIGFjY2VwdE5vZGUo
KQotICAgICAqIG1ldGhvZDoKLSAgICAgKi8KLSAgICBlbnVtIHsKLSAgICAgICAgRklMVEVSX0FD
Q0VQVCA9IDEsCi0gICAgICAgIEZJTFRFUl9SRUpFQ1QgPSAyLAotICAgICAgICBGSUxURVJfU0tJ
UCAgID0gMwotICAgIH07CisgICAgY2xhc3MgTm9kZUZpbHRlciA6IHB1YmxpYyBTaGFyZWQ8Tm9k
ZUZpbHRlcj4sIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmV0dXJuZWQgYnkgdGhlIGFjY2VwdE5v
ZGUoKQorICAgICAgICAgKiBtZXRob2Q6CisgICAgICAgICAqLworICAgICAgICBlbnVtIHsKKyAg
ICAgICAgICAgIEZJTFRFUl9BQ0NFUFQgPSAxLAorICAgICAgICAgICAgRklMVEVSX1JFSkVDVCA9
IDIsCisgICAgICAgICAgICBGSUxURVJfU0tJUCAgID0gMworICAgICAgICB9OworCisgICAgICAg
IC8qKgorICAgICAgICAgKiBUaGVzZSBhcmUgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgZm9yIHRoZSB3
aGF0VG9TaG93IHBhcmFtZXRlci4KKyAgICAgICAgICogVGhleSBhcmUgdGhlIHNhbWUgYXMgdGhl
IHNldCBvZiBwb3NzaWJsZSB0eXBlcyBmb3IgTm9kZSwgYW5kCisgICAgICAgICAqIHRoZWlyIHZh
bHVlcyBhcmUgZGVyaXZlZCBieSB1c2luZyBhIGJpdCBwb3NpdGlvbiBjb3JyZXNwb25kaW5nCisg
ICAgICAgICAqIHRvIHRoZSB2YWx1ZSBvZiBOb2RlVHlwZSBmb3IgdGhlIGVxdWl2YWxlbnQgbm9k
ZSB0eXBlLgorICAgICAgICAgKi8KKyAgICAgICAgZW51bSB7CisgICAgICAgICAgICBTSE9XX0FM
TCAgICAgICAgICAgICAgICAgICAgICAgPSAweEZGRkZGRkZGLAorICAgICAgICAgICAgU0hPV19F
TEVNRU5UICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwMSwKKyAgICAgICAgICAgIFNIT1df
QVRUUklCVVRFICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDIsCisgICAgICAgICAgICBTSE9X
X1RFWFQgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDA0LAorICAgICAgICAgICAgU0hP
V19DREFUQV9TRUNUSU9OICAgICAgICAgICAgID0gMHgwMDAwMDAwOCwKKyAgICAgICAgICAgIFNI
T1dfRU5USVRZX1JFRkVSRU5DRSAgICAgICAgICA9IDB4MDAwMDAwMTAsCisgICAgICAgICAgICBT
SE9XX0VOVElUWSAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDIwLAorICAgICAgICAgICAg
U0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OICAgID0gMHgwMDAwMDA0MCwKKyAgICAgICAgICAg
IFNIT1dfQ09NTUVOVCAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwODAsCisgICAgICAgICAg
ICBTSE9XX0RPQ1VNRU5UICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMTAwLAorICAgICAgICAg
ICAgU0hPV19ET0NVTUVOVF9UWVBFICAgICAgICAgICAgID0gMHgwMDAwMDIwMCwKKyAgICAgICAg
ICAgIFNIT1dfRE9DVU1FTlRfRlJBR01FTlQgICAgICAgICA9IDB4MDAwMDA0MDAsCisgICAgICAg
ICAgICBTSE9XX05PVEFUSU9OICAgICAgICAgICAgICAgICAgPSAweDAwMDAwODAwCisgICAgICAg
IH07CisKKyAgICAgICAgTm9kZUZpbHRlcihOb2RlRmlsdGVyQ29uZGl0aW9uKik7CisgICAgICAg
IHNob3J0IGFjY2VwdE5vZGUoTm9kZSopIGNvbnN0OworICAgICAgICB2b2lkIG1hcmsoKSB7IG1f
Y29uZGl0aW9uLT5tYXJrKCk7IH07CiAKLSAgICAvKioKLSAgICAgKiBUaGVzZSBhcmUgdGhlIGF2
YWlsYWJsZSB2YWx1ZXMgZm9yIHRoZSB3aGF0VG9TaG93IHBhcmFtZXRlci4KLSAgICAgKiBUaGV5
IGFyZSB0aGUgc2FtZSBhcyB0aGUgc2V0IG9mIHBvc3NpYmxlIHR5cGVzIGZvciBOb2RlLCBhbmQK
LSAgICAgKiB0aGVpciB2YWx1ZXMgYXJlIGRlcml2ZWQgYnkgdXNpbmcgYSBiaXQgcG9zaXRpb24g
Y29ycmVzcG9uZGluZwotICAgICAqIHRvIHRoZSB2YWx1ZSBvZiBOb2RlVHlwZSBmb3IgdGhlIGVx
dWl2YWxlbnQgbm9kZSB0eXBlLgotICAgICAqLwotICAgIGVudW0gewotICAgICAgICBTSE9XX0FM
TCAgICAgICAgICAgICAgICAgICAgICAgPSAweEZGRkZGRkZGLAotICAgICAgICBTSE9XX0VMRU1F
TlQgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAxLAotICAgICAgICBTSE9XX0FUVFJJQlVU
RSAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAyLAotICAgICAgICBTSE9XX1RFWFQgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAwMDAwMDA0LAotICAgICAgICBTSE9XX0NEQVRBX1NFQ1RJT04g
ICAgICAgICAgICAgPSAweDAwMDAwMDA4LAotICAgICAgICBTSE9XX0VOVElUWV9SRUZFUkVOQ0Ug
ICAgICAgICAgPSAweDAwMDAwMDEwLAotICAgICAgICBTSE9XX0VOVElUWSAgICAgICAgICAgICAg
ICAgICAgPSAweDAwMDAwMDIwLAotICAgICAgICBTSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04g
ICAgPSAweDAwMDAwMDQwLAotICAgICAgICBTSE9XX0NPTU1FTlQgICAgICAgICAgICAgICAgICAg
PSAweDAwMDAwMDgwLAotICAgICAgICBTSE9XX0RPQ1VNRU5UICAgICAgICAgICAgICAgICAgPSAw
eDAwMDAwMTAwLAotICAgICAgICBTSE9XX0RPQ1VNRU5UX1RZUEUgICAgICAgICAgICAgPSAweDAw
MDAwMjAwLAotICAgICAgICBTSE9XX0RPQ1VNRU5UX0ZSQUdNRU5UICAgICAgICAgPSAweDAwMDAw
NDAwLAotICAgICAgICBTSE9XX05PVEFUSU9OICAgICAgICAgICAgICAgICAgPSAweDAwMDAwODAw
CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+IG1fY29u
ZGl0aW9uOwogICAgIH07CiAKLSAgICBOb2RlRmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRpb24qKTsK
LSAgICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqKSBjb25zdDsKLSAgICB2b2lkIG1hcmsoKSB7IG1f
Y29uZGl0aW9uLT5tYXJrKCk7IH07Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGVGaWx0ZXJD
b25kaXRpb24+IG1fY29uZGl0aW9uOwotfTsKLQotY2xhc3MgVHJhdmVyc2FsIDogcHVibGljIFNo
YXJlZDxUcmF2ZXJzYWw+Ci17Ci1wdWJsaWM6Ci0gICAgVHJhdmVyc2FsKE5vZGUqLCB1bnNpZ25l
ZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJl
ZmVyZW5jZXMpOwotICAgIHZpcnR1YWwgflRyYXZlcnNhbCgpOwotCi0gICAgTm9kZSogcm9vdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcm9vdC5nZXQoKTsgfQotICAgIHVuc2lnbmVkIHdoYXRUb1Nob3co
KSBjb25zdCB7IHJldHVybiBtX3doYXRUb1Nob3c7IH0KLSAgICBOb2RlRmlsdGVyKiBmaWx0ZXIo
KSBjb25zdCB7IHJldHVybiBtX2ZpbHRlci5nZXQoKTsgfQotICAgIGJvb2wgZXhwYW5kRW50aXR5
UmVmZXJlbmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlczsgfQot
Ci0gICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgVHJh
dmVyc2FsKGNvbnN0IFRyYXZlcnNhbCAmKTsKLSAgICBUcmF2ZXJzYWwgJm9wZXJhdG9yPShjb25z
dCBUcmF2ZXJzYWwgJik7Ci0gICAgCi0gICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsKLSAgICB1bnNp
Z25lZCBtX3doYXRUb1Nob3c7Ci0gICAgUmVmUHRyPE5vZGVGaWx0ZXI+IG1fZmlsdGVyOwotICAg
IGJvb2wgbV9leHBhbmRFbnRpdHlSZWZlcmVuY2VzOwotfTsKLQotY2xhc3MgTm9kZUl0ZXJhdG9y
IDogcHVibGljIFRyYXZlcnNhbAotewotcHVibGljOgotICAgIE5vZGVJdGVyYXRvcihOb2RlKiwg
dW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRF
bnRpdHlSZWZlcmVuY2VzKTsKLSAgICB+Tm9kZUl0ZXJhdG9yKCk7Ci0KLSAgICBOb2RlKiBuZXh0
Tm9kZShFeGNlcHRpb25Db2RlJik7Ci0gICAgTm9kZSogcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIGRldGFjaChFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBOb2RlKiByZWZl
cmVuY2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VOb2RlLmdldCgpOyB9Ci0gICAg
Ym9vbCBwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmVmb3Jl
UmVmZXJlbmNlTm9kZTsgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBmdW5jdGlvbiBoYXMgdG8g
YmUgY2FsbGVkIGlmIHlvdSBkZWxldGUgYSBub2RlIGZyb20gdGhlCi0gICAgICogZG9jdW1lbnQg
dHJlZSBhbmQgeW91IHdhbnQgdGhlIEl0ZXJhdG9yIHRvIHJlYWN0IGlmIHRoZXJlCi0gICAgICog
YXJlIGFueSBjaGFuZ2VzIGNvbmNlcm5pbmcgaXQuCi0gICAgICovCi0gICAgdm9pZCBub3RpZnlC
ZWZvcmVOb2RlUmVtb3ZhbChOb2RlKiByZW1vdmVkKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNl
dFJlZmVyZW5jZU5vZGUoTm9kZSopOwotICAgIHZvaWQgc2V0UG9pbnRlckJlZm9yZVJlZmVyZW5j
ZU5vZGUoYm9vbCBmbGFnID0gdHJ1ZSkgeyBtX2JlZm9yZVJlZmVyZW5jZU5vZGUgPSBmbGFnOyB9
Ci0gICAgYm9vbCBkZXRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWNoZWQ7IH0KLSAgICB2
b2lkIHNldERldGFjaGVkKGJvb2wgZmxhZyA9IHRydWUpIHsgbV9kZXRhY2hlZCA9IGZsYWc7IH0K
LSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvYy5nZXQoKTsgfQot
ICAgIE5vZGUqIGZpbmROZXh0Tm9kZShOb2RlKikgY29uc3Q7Ci0gICAgTm9kZSogZmluZFByZXZp
b3VzTm9kZShOb2RlKikgY29uc3Q7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbV9yZWZlcmVuY2VOb2Rl
OwotICAgIGJvb2wgbV9iZWZvcmVSZWZlcmVuY2VOb2RlOwotICAgIGJvb2wgbV9kZXRhY2hlZDsK
LSAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOwotfTsKLQotY2xhc3MgVHJlZVdhbGtlciA6IHB1
YmxpYyBUcmF2ZXJzYWwgewotcHVibGljOgotICAgIFRyZWVXYWxrZXIoTm9kZSosIHVuc2lnbmVk
IHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVm
ZXJlbmNlcyk7Ci0KLSAgICBOb2RlKiBjdXJyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudC5nZXQoKTsgfQotICAgIHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotICAgIE5vZGUqIHBhcmVudE5vZGUoKTsKLSAgICBOb2RlKiBmaXJzdENoaWxkKCk7
Ci0gICAgTm9kZSogbGFzdENoaWxkKCk7Ci0gICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCk7Ci0g
ICAgTm9kZSogbmV4dFNpYmxpbmcoKTsKLSAgICBOb2RlKiBwcmV2aW91c05vZGUoKTsKLSAgICBO
b2RlKiBuZXh0Tm9kZSgpOwotCi1wcml2YXRlOgotICAgIC8vIGNvbnZlbmllbmNlIGZvciB3aGVu
IGl0IGlzIGtub3duIHRoZXJlIHdpbGwgYmUgbm8gZXhjZXB0aW9uCi0gICAgdm9pZCBzZXRDdXJy
ZW50Tm9kZShOb2RlKik7Ci0gICAgYm9vbCBhbmNlc3RvclJlamVjdGVkKGNvbnN0IE5vZGUqKSBj
b25zdDsKLQotICAgIFJlZlB0cjxOb2RlPiBtX2N1cnJlbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBOb2RlRmlsdGVy
X2gKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiAxNDUyOCkK
KysrIFdlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwICsxLDExIEBACiAvKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0gKiAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQotICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBo
aWcubm8pCi0gKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZGVy
aWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11
ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNCBB
cHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMyArMjEsMTMg
QEAKICAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KKyAqCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImRvbTJfdHJh
dmVyc2FsaW1wbC5oIgorI2luY2x1ZGUgIk5vZGVGaWx0ZXJDb25kaXRpb24uaCIKIAotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk5v
ZGVGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNSwzMTUgKzM2LDQgQEAg
c2hvcnQgTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShObwogICAgIHJldHVybiBOb2Rl
RmlsdGVyOjpGSUxURVJfQUNDRVBUOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ob2RlRmlsdGVyOjpOb2Rl
RmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRpb24gKmNvbmRpdGlvbikKLSAgICA6IG1fY29uZGl0aW9u
KGNvbmRpdGlvbikKLXsKLX0KLQotc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShOb2RlICpu
b2RlKSBjb25zdAotewotICAgIC8vIGNhc3QgdG8gc2hvcnQgc2lsZW5jZXMgImVudW1lcmFsIGFu
ZCBub24tZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJuaW5nCi0gICAgcmV0dXJuIG1fY29u
ZGl0aW9uID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUobm9kZSkgOiBzdGF0aWNfY2FzdDxzaG9y
dD4oRklMVEVSX0FDQ0VQVCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRyYXZlcnNhbDo6VHJhdmVyc2Fs
KE5vZGUqIHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0
ZXI+IG5vZGVGaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKLSAgICA6IG1fcm9v
dChyb290Tm9kZSkKLSAgICAsIG1fd2hhdFRvU2hvdyh3aGF0VG9TaG93KQotICAgICwgbV9maWx0
ZXIobm9kZUZpbHRlcikKLSAgICAsIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlcyhleHBhbmRFbnRp
dHlSZWZlcmVuY2VzKQotewotfQotCi1UcmF2ZXJzYWw6On5UcmF2ZXJzYWwoKQotewotfQotCi1z
aG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoTm9kZSAqbm9kZSkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogSWYgWE1MIGlzIGltcGxlbWVudGVkIHdlIGhhdmUgdG8gY2hlY2sgZXhwYW5kRW50aXR5
UmVyZWZlbmNlcyBpbiB0aGlzIGZ1bmN0aW9uLgotICAgIC8vIFRoZSBiaWQgdHdpZGRsaW5nIGhl
cmUgaXMgZG9uZSB0byBtYXAgRE9NIG5vZGUgdHlwZXMsIHdoaWNoIGFyZSBnaXZlbiBhcyBpbnRl
Z2VycyBmcm9tCi0gICAgLy8gMSB0aHJvdWdoIDEyLCB0byB3aGF0VG9TaG93IGJpdCBtYXNrcy4K
LSAgICBpZiAobm9kZSAmJiAoKDEgPDwgKG5vZGUtPm5vZGVUeXBlKCktMSkpICYgbV93aGF0VG9T
aG93KSAhPSAwKQotICAgICAgICAvLyBjYXN0IHRvIHNob3J0IHNpbGVuY2VzICJlbnVtZXJhbCBh
bmQgbm9uLWVudW1lcmFsIHR5cGVzIGluIHJldHVybiIgd2FybmluZwotICAgICAgICByZXR1cm4g
bV9maWx0ZXIgPyBtX2ZpbHRlci0+YWNjZXB0Tm9kZShub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0
PihOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKTsKLSAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklM
VEVSX1NLSVA7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5vZGVJdGVyYXRvcjo6Tm9kZUl0ZXJhdG9yKE5v
ZGUgKnJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+
IGZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQotICAgIDogVHJhdmVyc2FsKHJv
b3ROb2RlLCB3aGF0VG9TaG93LCBmaWx0ZXIsIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCi0gICAg
LCBtX2JlZm9yZVJlZmVyZW5jZU5vZGUodHJ1ZSkKLSAgICAsIG1fZGV0YWNoZWQoZmFsc2UpCi0g
ICAgLCBtX2RvYyhyb290Tm9kZSA/IHJvb3ROb2RlLT5kb2N1bWVudCgpIDogMCkKLXsKLSAgICBp
ZiAoZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+YXR0YWNoTm9kZUl0ZXJhdG9yKHRo
aXMpOwotfQotCi1Ob2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQotewotICAgIGlmIChkb2N1
bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLT5kZXRhY2hOb2RlSXRlcmF0b3IodGhpcyk7Ci19
Ci0KLU5vZGUgKk5vZGVJdGVyYXRvcjo6ZmluZE5leHROb2RlKE5vZGUgKm5vZGUpIGNvbnN0Ci17
Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSkgewotICAgICAg
ICAvLyBOb2RlSXRlcmF0b3JzIHRyZWF0IHRoZSBET00gdHJlZSBhcyBhIGZsYXQgbGlzdCBvZiBu
b2Rlcy4KLSAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBub3Qg
cGFzcyBvdmVyIGRlc2NlbmRhbnRzCi0gICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBub2RlLiBI
ZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KLSAgICAgICAg
aWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotTm9kZSAqTm9kZUl0
ZXJhdG9yOjpuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoZGV0YWNoZWQo
KSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBOb2RlICpub2RlID0gcmVmZXJlbmNlTm9kZSgpID8gcmVmZXJlbmNlTm9k
ZSgpIDogcm9vdCgpOwotICAgIGlmICghcG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSB8fCBh
Y2NlcHROb2RlKG5vZGUpICE9IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCi0gICAgICAgIG5v
ZGUgPSBmaW5kTmV4dE5vZGUobm9kZSk7Ci0gICAgaWYgKG5vZGUpCi0gICAgICAgIHNldFJlZmVy
ZW5jZU5vZGUobm9kZSk7Ci0gICAgc2V0UG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoZmFsc2Up
OwotICAgIHJldHVybiBub2RlOwotfQotCi1Ob2RlICpOb2RlSXRlcmF0b3I6OmZpbmRQcmV2aW91
c05vZGUoTm9kZSAqbm9kZSkgY29uc3QKLXsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2
ZXJzZVByZXZpb3VzTm9kZSgpKSkgewotICAgICAgICAvLyBOb2RlSXRlcmF0b3JzIHRyZWF0IHRo
ZSBET00gdHJlZSBhcyBhIGZsYXQgbGlzdCBvZiBub2Rlcy4KLSAgICAgICAgLy8gSW4gb3RoZXIg
d29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBub3QgcGFzcyBvdmVyIGRlc2NlbmRhbnRzCi0gICAg
ICAgIC8vIG9mIHRoZSByZWplY3RlZCBub2RlLiBIZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUg
c2FtZSBhcyBGSUxURVJfU0tJUC4KLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9k
ZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBy
ZXR1cm4gbm9kZTsKLX0KLQotTm9kZSAqTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhjZXB0
aW9uQ29kZSYpCi17Ci0gICAgTm9kZSAqbm9kZSA9IHJlZmVyZW5jZU5vZGUoKSA/IHJlZmVyZW5j
ZU5vZGUoKSA6IHJvb3QoKTsKLSAgICBpZiAocG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSB8
fCBhY2NlcHROb2RlKG5vZGUpICE9IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCi0gICAgICAg
IG5vZGUgPSBmaW5kUHJldmlvdXNOb2RlKG5vZGUpOwotICAgIGlmIChub2RlKQotICAgICAgICBz
ZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwotICAgIHNldFBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2Rl
KCk7Ci0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLXZvaWQgTm9kZUl0ZXJhdG9yOjpkZXRhY2goRXhj
ZXB0aW9uQ29kZSYpCi17Ci0gICAgaWYgKCFkZXRhY2hlZCgpICYmIGRvY3VtZW50KCkpCi0gICAg
ICAgIGRvY3VtZW50KCktPmRldGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKLSAgICBzZXREZXRhY2hl
ZCgpOwotfQotCi12b2lkIE5vZGVJdGVyYXRvcjo6c2V0UmVmZXJlbmNlTm9kZShOb2RlICpub2Rl
KQotewotICAgIG1fcmVmZXJlbmNlTm9kZSA9IG5vZGU7Ci19Ci0KLXZvaWQgTm9kZUl0ZXJhdG9y
Ojpub3RpZnlCZWZvcmVOb2RlUmVtb3ZhbChOb2RlICpyZW1vdmVkTm9kZSkKLXsKLSAgICAvLyBJ
dGVyYXRvciBpcyBub3QgYWZmZWN0ZWQgaWYgdGhlIHJlbW92ZWQgbm9kZSBpcyB0aGUgcmVmZXJl
bmNlIG5vZGUgYW5kIGlzIHRoZSByb290LgotICAgIC8vIG9yIGlmIHJlbW92ZWQgbm9kZSBpcyBu
b3QgdGhlIHJlZmVyZW5jZSBub2RlLCBvciB0aGUgYW5jZXN0b3Igb2YgdGhlIHJlZmVyZW5jZSBu
b2RlLgotICAgIGlmICghcmVtb3ZlZE5vZGUgfHwgcmVtb3ZlZE5vZGUgPT0gcm9vdCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgYm9vbCB3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZSA9IHJlbW92ZWRO
b2RlID09IHJlZmVyZW5jZU5vZGUoKTsKLSAgICBib29sIHdpbGxSZW1vdmVSZWZlcmVuY2VOb2Rl
QW5jZXN0b3IgPSByZWZlcmVuY2VOb2RlKCkgJiYgcmVmZXJlbmNlTm9kZSgpLT5pc0FuY2VzdG9y
KHJlbW92ZWROb2RlKTsKLSAgICBpZiAoIXdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlICYmICF3aWxs
UmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
cG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSkgewotICAgICAgICBOb2RlICpub2RlID0gZmlu
ZE5leHROb2RlKHJlbW92ZWROb2RlKTsKLSAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAg
IC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVm
ZXJlbmNlIG5vZGUgaXMKLSAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBi
ZWluZyByZW1vdmVkLgotICAgICAgICAgICAgaWYgKHdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5j
ZXN0b3IpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0FuY2VzdG9y
KHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGZpbmROZXh0Tm9kZShu
b2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAg
ICAgIHNldFJlZmVyZW5jZU5vZGUobm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBub2RlID0gZmluZFByZXZpb3VzTm9kZShyZW1vdmVkTm9kZSk7Ci0gICAgICAg
ICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIg
dGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKLSAgICAgICAg
ICAgICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZC4KLSAgICAg
ICAgICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3RvcikgewotICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0FuY2VzdG9yKHJlbW92ZWROb2Rl
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBmaW5kUHJldmlvdXNOb2RlKG5vZGUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobm9kZSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBSZW1vdmluZyBsYXN0IG5vZGUuCi0gICAgICAgICAgICAgICAgICAg
IC8vIE5lZWQgdG8gbW92ZSB0aGUgcG9pbnRlciBhZnRlciB0aGUgbm9kZSBwcmVjZWRpbmcgdGhl
IAotICAgICAgICAgICAgICAgICAgICAvLyBuZXcgcmVmZXJlbmNlIG5vZGUuCi0gICAgICAgICAg
ICAgICAgICAgIHNldFJlZmVyZW5jZU5vZGUobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNl
dFBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIE5vZGUg
Km5vZGUgPSBmaW5kUHJldmlvdXNOb2RlKHJlbW92ZWROb2RlKTsKLSAgICAgICAgaWYgKG5vZGUp
IHsKLSAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVt
b3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKLSAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFu
dCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgotICAgICAgICAgICAgaWYgKHdpbGxSZW1vdmVS
ZWZlcmVuY2VOb2RlQW5jZXN0b3IpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBu
b2RlLT5pc0FuY2VzdG9yKHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IGZpbmRQcmV2aW91c05vZGUobm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
bm9kZSkKLSAgICAgICAgICAgICAgICBzZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbm9kZSA9IGZpbmROZXh0Tm9kZShyZW1vdmVk
Tm9kZSk7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBi
ZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVuY2Ugbm9kZSBpcwotICAgICAgICAgICAgICAgIC8v
IGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgotICAgICAgICAgICAgICAg
IGlmICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzQW5jZXN0b3IocmVtb3ZlZE5vZGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IGZpbmRQcmV2aW91c05vZGUobm9kZSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgICAgICAg
ICBzZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1UcmVlV2Fsa2VyOjpUcmVlV2Fsa2VyKE5vZGUgKnJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0
VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IGZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlS
ZWZlcmVuY2VzKQotICAgIDogVHJhdmVyc2FsKHJvb3ROb2RlLCB3aGF0VG9TaG93LCBmaWx0ZXIs
IGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCi0gICAgLCBtX2N1cnJlbnQocm9vdE5vZGUpCi17Ci19
Ci0KLXZvaWQgVHJlZVdhbGtlcjo6c2V0Q3VycmVudE5vZGUoTm9kZSAqbm9kZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRF
RF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnQgPSBub2RlOwot
fQotCi12b2lkIFRyZWVXYWxrZXI6OnNldEN1cnJlbnROb2RlKE5vZGUgKm5vZGUpCi17Ci0gICAg
YXNzZXJ0KG5vZGUpOwotICAgIGludCBkdW1teTsKLSAgICBzZXRDdXJyZW50Tm9kZShub2RlLCBk
dW1teSk7Ci19Ci0KLU5vZGUgKlRyZWVXYWxrZXI6OnBhcmVudE5vZGUoKQotewotICAgIE5vZGUg
KnJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+cGFyZW50
Tm9kZSgpOyBub2RlICYmIG5vZGUgIT0gcm9vdCgpOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
KSB7Ci0gICAgICAgIGlmIChhY2NlcHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9B
Q0NFUFQpIHsKLSAgICAgICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAgICAgICAg
cmVzdWx0ID0gbm9kZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLU5vZGUgKlRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoKQotewot
ICAgIE5vZGUgKnJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUo
KS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICBpZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7
Ci0gICAgICAgICAgICBzZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9
IG5vZGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1Ob2RlICpUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoKQotewotICAgIE5vZGUg
KnJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+bGFzdENo
aWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBp
ZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7Ci0gICAg
ICAgICAgICBzZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1Ob2RlICpUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoKQotewotICAgIE5vZGUg
KnJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+cHJldmlv
dXNTaWJsaW5nKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAg
ICAgICBpZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7
Ci0gICAgICAgICAgICBzZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9
IG5vZGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1Ob2RlICpUcmVlV2Fsa2VyOjpuZXh0U2libGluZygpCi17Ci0gICAgTm9k
ZSAqcmVzdWx0ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJyZW50Tm9kZSgpLT5uZXh0
U2libGluZygpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBp
ZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7Ci0gICAg
ICAgICAgICBzZXRDdXJyZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1Ob2RlICpUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoKQotewotICAgIE5vZGUgKnJl
c3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+dHJhdmVyc2VQ
cmV2aW91c05vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkp
IHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FD
Q0VQVCAmJiAhYW5jZXN0b3JSZWplY3RlZChub2RlKSkgewotICAgICAgICAgICAgc2V0Q3VycmVu
dE5vZGUobm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAqVHJl
ZVdhbGtlcjo6bmV4dE5vZGUoKQotewotICAgIE5vZGUgKnJlc3VsdCA9IDA7Ci0gICAgZm9yIChO
b2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+dHJhdmVyc2VOZXh0Tm9kZSgpOyBub2RlOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChhY2NlcHROb2RlKG5v
ZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQgJiYgIWFuY2VzdG9yUmVqZWN0ZWQobm9k
ZSkpIHsKLSAgICAgICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAgICAgICAgcmVz
dWx0ID0gbm9kZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgVHJlZVdhbGtlcjo6YW5jZXN0b3JSZWplY3RlZChjb25z
dCBOb2RlICpub2RlKSBjb25zdAotewotICAgIGZvciAoTm9kZSAqYSA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsgYSAmJiBhICE9IHJvb3QoKTsgYSA9IGEtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgaWYg
KGFjY2VwdE5vZGUoYSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVCkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1RyZWVXYWxrZXIuaAkocmV2aXNpb24gMTQ1MjgpCisrKyBXZWJDb3JlL2RvbS9UcmVl
V2Fsa2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSwxMCBAQAogLyoKICAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0gKiAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogKEMpIDIwMDAgRnJlZGVyaWsgSG9s
bGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCi0gKiAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsu
aG9sbGplbkBoaWcubm8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vpbmln
QGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTIzLDE1MSArMjQsNDMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBkb20y
X3RyYXZlcnNhbF9oCi0jZGVmaW5lIGRvbTJfdHJhdmVyc2FsX2gKKyNpZm5kZWYgVHJlZVdhbGtl
cl9oCisjZGVmaW5lIFRyZWVXYWxrZXJfaAogCiAjaW5jbHVkZSAiU2hhcmVkLmgiCisjaW5jbHVk
ZSAiVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgTm9kZTsKLWNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIE5vZGU7CiAK
LXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKIAotY2xhc3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBTaGFyZWQ8Tm9kZUZpbHRl
ckNvbmRpdGlvbj4gewotcHVibGljOgotICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRpb24o
KSB7IH0KLSAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoTm9kZSopIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBtYXJrKCkgeyB9Ci19OwotCi1jbGFzcyBOb2RlRmlsdGVyIDogcHVibGljIFNo
YXJlZDxOb2RlRmlsdGVyPiwgTm9uY29weWFibGUgewotcHVibGljOgotICAgIC8qKgotICAgICAq
IFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZXR1cm5lZCBieSB0aGUgYWNjZXB0Tm9kZSgp
Ci0gICAgICogbWV0aG9kOgotICAgICAqLwotICAgIGVudW0gewotICAgICAgICBGSUxURVJfQUND
RVBUID0gMSwKLSAgICAgICAgRklMVEVSX1JFSkVDVCA9IDIsCi0gICAgICAgIEZJTFRFUl9TS0lQ
ICAgPSAzCi0gICAgfTsKKyAgICBjbGFzcyBUcmVlV2Fsa2VyIDogcHVibGljIFRyYXZlcnNhbCB7
CisgICAgcHVibGljOgorICAgICAgICBUcmVlV2Fsa2VyKE5vZGUqLCB1bnNpZ25lZCB3aGF0VG9T
aG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMp
OworCisgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
LmdldCgpOyB9CisgICAgICAgIHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgICAgICBOb2RlKiBwYXJlbnROb2RlKCk7CisgICAgICAgIE5vZGUqIGZpcnN0
Q2hpbGQoKTsKKyAgICAgICAgTm9kZSogbGFzdENoaWxkKCk7CisgICAgICAgIE5vZGUqIHByZXZp
b3VzU2libGluZygpOworICAgICAgICBOb2RlKiBuZXh0U2libGluZygpOworICAgICAgICBOb2Rl
KiBwcmV2aW91c05vZGUoKTsKKyAgICAgICAgTm9kZSogbmV4dE5vZGUoKTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIC8vIGNvbnZlbmllbmNlIGZvciB3aGVuIGl0IGlzIGtub3duIHRoZXJlIHdp
bGwgYmUgbm8gZXhjZXB0aW9uCisgICAgICAgIHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZSopOwor
ICAgICAgICBib29sIGFuY2VzdG9yUmVqZWN0ZWQoY29uc3QgTm9kZSopIGNvbnN0OwogCi0gICAg
LyoqCi0gICAgICogVGhlc2UgYXJlIHRoZSBhdmFpbGFibGUgdmFsdWVzIGZvciB0aGUgd2hhdFRv
U2hvdyBwYXJhbWV0ZXIuCi0gICAgICogVGhleSBhcmUgdGhlIHNhbWUgYXMgdGhlIHNldCBvZiBw
b3NzaWJsZSB0eXBlcyBmb3IgTm9kZSwgYW5kCi0gICAgICogdGhlaXIgdmFsdWVzIGFyZSBkZXJp
dmVkIGJ5IHVzaW5nIGEgYml0IHBvc2l0aW9uIGNvcnJlc3BvbmRpbmcKLSAgICAgKiB0byB0aGUg
dmFsdWUgb2YgTm9kZVR5cGUgZm9yIHRoZSBlcXVpdmFsZW50IG5vZGUgdHlwZS4KLSAgICAgKi8K
LSAgICBlbnVtIHsKLSAgICAgICAgU0hPV19BTEwgICAgICAgICAgICAgICAgICAgICAgID0gMHhG
RkZGRkZGRiwKLSAgICAgICAgU0hPV19FTEVNRU5UICAgICAgICAgICAgICAgICAgID0gMHgwMDAw
MDAwMSwKLSAgICAgICAgU0hPV19BVFRSSUJVVEUgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAw
MiwKLSAgICAgICAgU0hPV19URVhUICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwNCwK
LSAgICAgICAgU0hPV19DREFUQV9TRUNUSU9OICAgICAgICAgICAgID0gMHgwMDAwMDAwOCwKLSAg
ICAgICAgU0hPV19FTlRJVFlfUkVGRVJFTkNFICAgICAgICAgID0gMHgwMDAwMDAxMCwKLSAgICAg
ICAgU0hPV19FTlRJVFkgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAyMCwKLSAgICAgICAg
U0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OICAgID0gMHgwMDAwMDA0MCwKLSAgICAgICAgU0hP
V19DT01NRU5UICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDA4MCwKLSAgICAgICAgU0hPV19E
T0NVTUVOVCAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDEwMCwKLSAgICAgICAgU0hPV19ET0NV
TUVOVF9UWVBFICAgICAgICAgICAgID0gMHgwMDAwMDIwMCwKLSAgICAgICAgU0hPV19ET0NVTUVO
VF9GUkFHTUVOVCAgICAgICAgID0gMHgwMDAwMDQwMCwKLSAgICAgICAgU0hPV19OT1RBVElPTiAg
ICAgICAgICAgICAgICAgID0gMHgwMDAwMDgwMAorICAgICAgICBSZWZQdHI8Tm9kZT4gbV9jdXJy
ZW50OwogICAgIH07CiAKLSAgICBOb2RlRmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRpb24qKTsKLSAg
ICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqKSBjb25zdDsKLSAgICB2b2lkIG1hcmsoKSB7IG1fY29u
ZGl0aW9uLT5tYXJrKCk7IH07Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGVGaWx0ZXJDb25k
aXRpb24+IG1fY29uZGl0aW9uOwotfTsKLQotY2xhc3MgVHJhdmVyc2FsIDogcHVibGljIFNoYXJl
ZDxUcmF2ZXJzYWw+Ci17Ci1wdWJsaWM6Ci0gICAgVHJhdmVyc2FsKE5vZGUqLCB1bnNpZ25lZCB3
aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVy
ZW5jZXMpOwotICAgIHZpcnR1YWwgflRyYXZlcnNhbCgpOwotCi0gICAgTm9kZSogcm9vdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdC5nZXQoKTsgfQotICAgIHVuc2lnbmVkIHdoYXRUb1Nob3coKSBj
b25zdCB7IHJldHVybiBtX3doYXRUb1Nob3c7IH0KLSAgICBOb2RlRmlsdGVyKiBmaWx0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlci5nZXQoKTsgfQotICAgIGJvb2wgZXhwYW5kRW50aXR5UmVm
ZXJlbmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlczsgfQotCi0g
ICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgVHJhdmVy
c2FsKGNvbnN0IFRyYXZlcnNhbCAmKTsKLSAgICBUcmF2ZXJzYWwgJm9wZXJhdG9yPShjb25zdCBU
cmF2ZXJzYWwgJik7Ci0gICAgCi0gICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsKLSAgICB1bnNpZ25l
ZCBtX3doYXRUb1Nob3c7Ci0gICAgUmVmUHRyPE5vZGVGaWx0ZXI+IG1fZmlsdGVyOwotICAgIGJv
b2wgbV9leHBhbmRFbnRpdHlSZWZlcmVuY2VzOwotfTsKLQotY2xhc3MgTm9kZUl0ZXJhdG9yIDog
cHVibGljIFRyYXZlcnNhbAotewotcHVibGljOgotICAgIE5vZGVJdGVyYXRvcihOb2RlKiwgdW5z
aWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRp
dHlSZWZlcmVuY2VzKTsKLSAgICB+Tm9kZUl0ZXJhdG9yKCk7Ci0KLSAgICBOb2RlKiBuZXh0Tm9k
ZShFeGNlcHRpb25Db2RlJik7Ci0gICAgTm9kZSogcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIGRldGFjaChFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBOb2RlKiByZWZlcmVu
Y2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VOb2RlLmdldCgpOyB9Ci0gICAgYm9v
bCBwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmVmb3JlUmVm
ZXJlbmNlTm9kZTsgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUg
Y2FsbGVkIGlmIHlvdSBkZWxldGUgYSBub2RlIGZyb20gdGhlCi0gICAgICogZG9jdW1lbnQgdHJl
ZSBhbmQgeW91IHdhbnQgdGhlIEl0ZXJhdG9yIHRvIHJlYWN0IGlmIHRoZXJlCi0gICAgICogYXJl
IGFueSBjaGFuZ2VzIGNvbmNlcm5pbmcgaXQuCi0gICAgICovCi0gICAgdm9pZCBub3RpZnlCZWZv
cmVOb2RlUmVtb3ZhbChOb2RlKiByZW1vdmVkKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNldFJl
ZmVyZW5jZU5vZGUoTm9kZSopOwotICAgIHZvaWQgc2V0UG9pbnRlckJlZm9yZVJlZmVyZW5jZU5v
ZGUoYm9vbCBmbGFnID0gdHJ1ZSkgeyBtX2JlZm9yZVJlZmVyZW5jZU5vZGUgPSBmbGFnOyB9Ci0g
ICAgYm9vbCBkZXRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWNoZWQ7IH0KLSAgICB2b2lk
IHNldERldGFjaGVkKGJvb2wgZmxhZyA9IHRydWUpIHsgbV9kZXRhY2hlZCA9IGZsYWc7IH0KLSAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvYy5nZXQoKTsgfQotICAg
IE5vZGUqIGZpbmROZXh0Tm9kZShOb2RlKikgY29uc3Q7Ci0gICAgTm9kZSogZmluZFByZXZpb3Vz
Tm9kZShOb2RlKikgY29uc3Q7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbV9yZWZlcmVuY2VOb2RlOwot
ICAgIGJvb2wgbV9iZWZvcmVSZWZlcmVuY2VOb2RlOwotICAgIGJvb2wgbV9kZXRhY2hlZDsKLSAg
ICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOwotfTsKLQotY2xhc3MgVHJlZVdhbGtlciA6IHB1Ymxp
YyBUcmF2ZXJzYWwgewotcHVibGljOgotICAgIFRyZWVXYWxrZXIoTm9kZSosIHVuc2lnbmVkIHdo
YXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJl
bmNlcyk7Ci0KLSAgICBOb2RlKiBjdXJyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dC5nZXQoKTsgfQotICAgIHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZSosIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIE5vZGUqIHBhcmVudE5vZGUoKTsKLSAgICBOb2RlKiBmaXJzdENoaWxkKCk7Ci0g
ICAgTm9kZSogbGFzdENoaWxkKCk7Ci0gICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCk7Ci0gICAg
Tm9kZSogbmV4dFNpYmxpbmcoKTsKLSAgICBOb2RlKiBwcmV2aW91c05vZGUoKTsKLSAgICBOb2Rl
KiBuZXh0Tm9kZSgpOwotCi1wcml2YXRlOgotICAgIC8vIGNvbnZlbmllbmNlIGZvciB3aGVuIGl0
IGlzIGtub3duIHRoZXJlIHdpbGwgYmUgbm8gZXhjZXB0aW9uCi0gICAgdm9pZCBzZXRDdXJyZW50
Tm9kZShOb2RlKik7Ci0gICAgYm9vbCBhbmNlc3RvclJlamVjdGVkKGNvbnN0IE5vZGUqKSBjb25z
dDsKLQotICAgIFJlZlB0cjxOb2RlPiBtX2N1cnJlbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZQor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBUcmVlV2Fsa2VyX2gK
SW5kZXg6IFdlYkNvcmUvZG9tL2RvbTJfdHJhdmVyc2FsaW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL2RvbTJfdHJhdmVyc2FsaW1wbC5oCShyZXZpc2lvbiAxNDUzNykKKysrIFdlYkNv
cmUvZG9tL2RvbTJfdHJhdmVyc2FsaW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MyArMCww
IEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBm
b3IgS0RFLgotICoKLSAqIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAo
QykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xsamVuQGhpZy5ubykKLSAqIChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBkb20yX3RyYXZlcnNhbF9oCi0jZGVmaW5lIGRv
bTJfdHJhdmVyc2FsX2gKLQotI2luY2x1ZGUgIlNoYXJlZC5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE5vZGU7Ci1jbGFzcyBEb2N1bWVu
dDsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgTm9kZUZpbHRlckNvbmRp
dGlvbiA6IHB1YmxpYyBTaGFyZWQ8Tm9kZUZpbHRlckNvbmRpdGlvbj4gewotcHVibGljOgotICAg
IHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRpb24oKSB7IH0KLSAgICB2aXJ0dWFsIHNob3J0IGFj
Y2VwdE5vZGUoTm9kZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCkgeyB9Ci19Owot
Ci1jbGFzcyBOb2RlRmlsdGVyIDogcHVibGljIFNoYXJlZDxOb2RlRmlsdGVyPiwgTm9uY29weWFi
bGUgewotcHVibGljOgotICAgIC8qKgotICAgICAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFy
ZSByZXR1cm5lZCBieSB0aGUgYWNjZXB0Tm9kZSgpCi0gICAgICogbWV0aG9kOgotICAgICAqLwot
ICAgIGVudW0gewotICAgICAgICBGSUxURVJfQUNDRVBUID0gMSwKLSAgICAgICAgRklMVEVSX1JF
SkVDVCA9IDIsCi0gICAgICAgIEZJTFRFUl9TS0lQICAgPSAzCi0gICAgfTsKLQotICAgIC8qKgot
ICAgICAqIFRoZXNlIGFyZSB0aGUgYXZhaWxhYmxlIHZhbHVlcyBmb3IgdGhlIHdoYXRUb1Nob3cg
cGFyYW1ldGVyLgotICAgICAqIFRoZXkgYXJlIHRoZSBzYW1lIGFzIHRoZSBzZXQgb2YgcG9zc2li
bGUgdHlwZXMgZm9yIE5vZGUsIGFuZAotICAgICAqIHRoZWlyIHZhbHVlcyBhcmUgZGVyaXZlZCBi
eSB1c2luZyBhIGJpdCBwb3NpdGlvbiBjb3JyZXNwb25kaW5nCi0gICAgICogdG8gdGhlIHZhbHVl
IG9mIE5vZGVUeXBlIGZvciB0aGUgZXF1aXZhbGVudCBub2RlIHR5cGUuCi0gICAgICovCi0gICAg
ZW51bSB7Ci0gICAgICAgIFNIT1dfQUxMICAgICAgICAgICAgICAgICAgICAgICA9IDB4RkZGRkZG
RkYsCi0gICAgICAgIFNIT1dfRUxFTUVOVCAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDEs
Ci0gICAgICAgIFNIT1dfQVRUUklCVVRFICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDIsCi0g
ICAgICAgIFNIT1dfVEVYVCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQsCi0gICAg
ICAgIFNIT1dfQ0RBVEFfU0VDVElPTiAgICAgICAgICAgICA9IDB4MDAwMDAwMDgsCi0gICAgICAg
IFNIT1dfRU5USVRZX1JFRkVSRU5DRSAgICAgICAgICA9IDB4MDAwMDAwMTAsCi0gICAgICAgIFNI
T1dfRU5USVRZICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMjAsCi0gICAgICAgIFNIT1df
UFJPQ0VTU0lOR19JTlNUUlVDVElPTiAgICA9IDB4MDAwMDAwNDAsCi0gICAgICAgIFNIT1dfQ09N
TUVOVCAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwODAsCi0gICAgICAgIFNIT1dfRE9DVU1F
TlQgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAxMDAsCi0gICAgICAgIFNIT1dfRE9DVU1FTlRf
VFlQRSAgICAgICAgICAgICA9IDB4MDAwMDAyMDAsCi0gICAgICAgIFNIT1dfRE9DVU1FTlRfRlJB
R01FTlQgICAgICAgICA9IDB4MDAwMDA0MDAsCi0gICAgICAgIFNIT1dfTk9UQVRJT04gICAgICAg
ICAgICAgICAgICA9IDB4MDAwMDA4MDAKLSAgICB9OwotCi0gICAgTm9kZUZpbHRlcihOb2RlRmls
dGVyQ29uZGl0aW9uKik7Ci0gICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKikgY29uc3Q7Ci0gICAg
dm9pZCBtYXJrKCkgeyBtX2NvbmRpdGlvbi0+bWFyaygpOyB9OwotCi1wcml2YXRlOgotICAgIFJl
ZlB0cjxOb2RlRmlsdGVyQ29uZGl0aW9uPiBtX2NvbmRpdGlvbjsKLX07Ci0KLWNsYXNzIFRyYXZl
cnNhbCA6IHB1YmxpYyBTaGFyZWQ8VHJhdmVyc2FsPgotewotcHVibGljOgotICAgIFRyYXZlcnNh
bChOb2RlKiwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9v
bCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSAgICB2aXJ0dWFsIH5UcmF2ZXJzYWwoKTsKLQot
ICAgIE5vZGUqIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX3Jvb3QuZ2V0KCk7IH0KLSAgICB1bnNp
Z25lZCB3aGF0VG9TaG93KCkgY29uc3QgeyByZXR1cm4gbV93aGF0VG9TaG93OyB9Ci0gICAgTm9k
ZUZpbHRlciogZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXIuZ2V0KCk7IH0KLSAgICBi
b29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuZEVudGl0
eVJlZmVyZW5jZXM7IH0KLQotICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSopIGNvbnN0OwotCi1w
cml2YXRlOgotICAgIFRyYXZlcnNhbChjb25zdCBUcmF2ZXJzYWwgJik7Ci0gICAgVHJhdmVyc2Fs
ICZvcGVyYXRvcj0oY29uc3QgVHJhdmVyc2FsICYpOwotICAgIAotICAgIFJlZlB0cjxOb2RlPiBt
X3Jvb3Q7Ci0gICAgdW5zaWduZWQgbV93aGF0VG9TaG93OwotICAgIFJlZlB0cjxOb2RlRmlsdGVy
PiBtX2ZpbHRlcjsKLSAgICBib29sIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlczsKLX07Ci0KLWNs
YXNzIE5vZGVJdGVyYXRvciA6IHB1YmxpYyBUcmF2ZXJzYWwKLXsKLXB1YmxpYzoKLSAgICBOb2Rl
SXRlcmF0b3IoTm9kZSosIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRl
cj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Ci0gICAgfk5vZGVJdGVyYXRvcigpOwot
Ci0gICAgTm9kZSogbmV4dE5vZGUoRXhjZXB0aW9uQ29kZSYpOwotICAgIE5vZGUqIHByZXZpb3Vz
Tm9kZShFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkZXRhY2goRXhjZXB0aW9uQ29kZSYpOwot
Ci0gICAgTm9kZSogcmVmZXJlbmNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlTm9k
ZS5nZXQoKTsgfQotICAgIGJvb2wgcG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSBjb25zdCB7
IHJldHVybiBtX2JlZm9yZVJlZmVyZW5jZU5vZGU7IH0KLQotICAgIC8qKgotICAgICAqIFRoaXMg
ZnVuY3Rpb24gaGFzIHRvIGJlIGNhbGxlZCBpZiB5b3UgZGVsZXRlIGEgbm9kZSBmcm9tIHRoZQot
ICAgICAqIGRvY3VtZW50IHRyZWUgYW5kIHlvdSB3YW50IHRoZSBJdGVyYXRvciB0byByZWFjdCBp
ZiB0aGVyZQotICAgICAqIGFyZSBhbnkgY2hhbmdlcyBjb25jZXJuaW5nIGl0LgotICAgICAqLwot
ICAgIHZvaWQgbm90aWZ5QmVmb3JlTm9kZVJlbW92YWwoTm9kZSogcmVtb3ZlZCk7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCBzZXRSZWZlcmVuY2VOb2RlKE5vZGUqKTsKLSAgICB2b2lkIHNldFBvaW50
ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKGJvb2wgZmxhZyA9IHRydWUpIHsgbV9iZWZvcmVSZWZlcmVu
Y2VOb2RlID0gZmxhZzsgfQotICAgIGJvb2wgZGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2Rl
dGFjaGVkOyB9Ci0gICAgdm9pZCBzZXREZXRhY2hlZChib29sIGZsYWcgPSB0cnVlKSB7IG1fZGV0
YWNoZWQgPSBmbGFnOyB9Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9kb2MuZ2V0KCk7IH0KLSAgICBOb2RlKiBmaW5kTmV4dE5vZGUoTm9kZSopIGNvbnN0OwotICAg
IE5vZGUqIGZpbmRQcmV2aW91c05vZGUoTm9kZSopIGNvbnN0OwotCi0gICAgUmVmUHRyPE5vZGU+
IG1fcmVmZXJlbmNlTm9kZTsKLSAgICBib29sIG1fYmVmb3JlUmVmZXJlbmNlTm9kZTsKLSAgICBi
b29sIG1fZGV0YWNoZWQ7Ci0gICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsKLX07Ci0KLWNsYXNz
IFRyZWVXYWxrZXIgOiBwdWJsaWMgVHJhdmVyc2FsIHsKLXB1YmxpYzoKLSAgICBUcmVlV2Fsa2Vy
KE5vZGUqLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29s
IGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwotCi0gICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEN1cnJlbnROb2RlKE5v
ZGUqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBOb2RlKiBwYXJlbnROb2RlKCk7Ci0gICAgTm9k
ZSogZmlyc3RDaGlsZCgpOwotICAgIE5vZGUqIGxhc3RDaGlsZCgpOwotICAgIE5vZGUqIHByZXZp
b3VzU2libGluZygpOwotICAgIE5vZGUqIG5leHRTaWJsaW5nKCk7Ci0gICAgTm9kZSogcHJldmlv
dXNOb2RlKCk7Ci0gICAgTm9kZSogbmV4dE5vZGUoKTsKLQotcHJpdmF0ZToKLSAgICAvLyBjb252
ZW5pZW5jZSBmb3Igd2hlbiBpdCBpcyBrbm93biB0aGVyZSB3aWxsIGJlIG5vIGV4Y2VwdGlvbgot
ICAgIHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZSopOwotICAgIGJvb2wgYW5jZXN0b3JSZWplY3Rl
ZChjb25zdCBOb2RlKikgY29uc3Q7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbV9jdXJyZW50OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNDUz
NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiAr
NTUsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzLmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9k
ZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVk
ZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24u
aCIKQEAgLTY3LDYgKzY4LDcgQEAKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1
ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJU
cmVlV2Fsa2VyLmgiCiAjaW5jbHVkZSAiY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAiY3Nzc3R5bGVz
ZWxlY3Rvci5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgpAQCAtNzQsMTAgKzc2LDEz
IEBACiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAieG1sX3Rva2VuaXplci5oIgog
I2luY2x1ZGUgInhtbGh0dHByZXF1ZXN0LmgiCisKKyNpZiBYUEFUSF9TVVBQT1JUCiAjaW5jbHVk
ZSAiWFBhdGhFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb24uaCIKICNpbmNs
dWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJYUGF0aFJlc3VsdC5oIgorI2VuZGlm
CiAKICNpZmRlZiBLSFRNTF9YU0xUCiAjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgpJbmRleDog
V2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9k
ZUZpbHRlci5jcHAJKHJldmlzaW9uIDE0NTI4KQorKysgV2ViQ29yZS9kb20vTm9kZUZpbHRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTEgQEAKIC8qKgogICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgogICoKLSAqIChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVu
IChmcmVkZXJpay5ob2xsamVuQGhpZy5ubykKLSAqIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHly
aWdodCAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xsamVuQGhpZy5ubykK
KyAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICog
Q29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIwLDMzMCArMjEsMjMgQEAKICAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCiAgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgImRvbTJfdHJhdmVyc2FsaW1wbC5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXNob3J0IE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2Vw
dE5vZGUoTm9kZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NF
UFQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5vZGVGaWx0ZXI6Ok5vZGVGaWx0ZXIoTm9kZUZpbHRlckNv
bmRpdGlvbiAqY29uZGl0aW9uKQorTm9kZUZpbHRlcjo6Tm9kZUZpbHRlcihOb2RlRmlsdGVyQ29u
ZGl0aW9uKiBjb25kaXRpb24pCiAgICAgOiBtX2NvbmRpdGlvbihjb25kaXRpb24pCiB7CiB9CiAK
LXNob3J0IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSAqbm9kZSkgY29uc3QKK3Nob3J0IE5v
ZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBjYXN0IHRv
IHNob3J0IHNpbGVuY2VzICJlbnVtZXJhbCBhbmQgbm9uLWVudW1lcmFsIHR5cGVzIGluIHJldHVy
biIgd2FybmluZwogICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHRO
b2RlKG5vZGUpIDogc3RhdGljX2Nhc3Q8c2hvcnQ+KEZJTFRFUl9BQ0NFUFQpOwogfQogCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1UcmF2ZXJzYWw6OlRyYXZlcnNhbChOb2RlKiByb290Tm9kZSwgdW5zaWduZWQgd2hh
dFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiBub2RlRmlsdGVyLCBib29sIGV4cGFuZEVu
dGl0eVJlZmVyZW5jZXMpCi0gICAgOiBtX3Jvb3Qocm9vdE5vZGUpCi0gICAgLCBtX3doYXRUb1No
b3cod2hhdFRvU2hvdykKLSAgICAsIG1fZmlsdGVyKG5vZGVGaWx0ZXIpCi0gICAgLCBtX2V4cGFu
ZEVudGl0eVJlZmVyZW5jZXMoZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKLXsKLX0KLQotVHJhdmVy
c2FsOjp+VHJhdmVyc2FsKCkKLXsKLX0KLQotc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKE5v
ZGUgKm5vZGUpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IElmIFhNTCBpcyBpbXBsZW1lbnRlZCB3
ZSBoYXZlIHRvIGNoZWNrIGV4cGFuZEVudGl0eVJlcmVmZW5jZXMgaW4gdGhpcyBmdW5jdGlvbi4K
LSAgICAvLyBUaGUgYmlkIHR3aWRkbGluZyBoZXJlIGlzIGRvbmUgdG8gbWFwIERPTSBub2RlIHR5
cGVzLCB3aGljaCBhcmUgZ2l2ZW4gYXMgaW50ZWdlcnMgZnJvbQotICAgIC8vIDEgdGhyb3VnaCAx
MiwgdG8gd2hhdFRvU2hvdyBiaXQgbWFza3MuCi0gICAgaWYgKG5vZGUgJiYgKCgxIDw8IChub2Rl
LT5ub2RlVHlwZSgpLTEpKSAmIG1fd2hhdFRvU2hvdykgIT0gMCkKLSAgICAgICAgLy8gY2FzdCB0
byBzaG9ydCBzaWxlbmNlcyAiZW51bWVyYWwgYW5kIG5vbi1lbnVtZXJhbCB0eXBlcyBpbiByZXR1
cm4iIHdhcm5pbmcKLSAgICAgICAgcmV0dXJuIG1fZmlsdGVyID8gbV9maWx0ZXItPmFjY2VwdE5v
ZGUobm9kZSkgOiBzdGF0aWNfY2FzdDxzaG9ydD4oTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCk7
Ci0gICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9TS0lQOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1O
b2RlSXRlcmF0b3I6Ok5vZGVJdGVyYXRvcihOb2RlICpyb290Tm9kZSwgdW5zaWduZWQgd2hhdFRv
U2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiBmaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVm
ZXJlbmNlcykKLSAgICA6IFRyYXZlcnNhbChyb290Tm9kZSwgd2hhdFRvU2hvdywgZmlsdGVyLCBl
eHBhbmRFbnRpdHlSZWZlcmVuY2VzKQotICAgICwgbV9iZWZvcmVSZWZlcmVuY2VOb2RlKHRydWUp
Ci0gICAgLCBtX2RldGFjaGVkKGZhbHNlKQotICAgICwgbV9kb2Mocm9vdE5vZGUgPyByb290Tm9k
ZS0+ZG9jdW1lbnQoKSA6IDApCi17Ci0gICAgaWYgKGRvY3VtZW50KCkpCi0gICAgICAgIGRvY3Vt
ZW50KCktPmF0dGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKLX0KLQotTm9kZUl0ZXJhdG9yOjp+Tm9k
ZUl0ZXJhdG9yKCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+
ZGV0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOwotfQotCi1Ob2RlICpOb2RlSXRlcmF0b3I6OmZpbmRO
ZXh0Tm9kZShOb2RlICpub2RlKSBjb25zdAotewotICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKSkpIHsKLSAgICAgICAgLy8gTm9kZUl0ZXJhdG9ycyB0cmVhdCB0aGUg
RE9NIHRyZWUgYXMgYSBmbGF0IGxpc3Qgb2Ygbm9kZXMuCi0gICAgICAgIC8vIEluIG90aGVyIHdv
cmRzLCBGSUxURVJfUkVKRUNUIGRvZXMgbm90IHBhc3Mgb3ZlciBkZXNjZW5kYW50cwotICAgICAg
ICAvLyBvZiB0aGUgcmVqZWN0ZWQgbm9kZS4gSGVuY2UsIEZJTFRFUl9SRUpFQ1QgaXMgdGhlIHNh
bWUgYXMgRklMVEVSX1NLSVAuCi0gICAgICAgIGlmIChhY2NlcHROb2RlKG5vZGUpID09IE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIG5vZGU7Ci19Ci0KLU5vZGUgKk5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKGRldGFjaGVkKCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgTm9kZSAqbm9kZSA9IHJl
ZmVyZW5jZU5vZGUoKSA/IHJlZmVyZW5jZU5vZGUoKSA6IHJvb3QoKTsKLSAgICBpZiAoIXBvaW50
ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKCkgfHwgYWNjZXB0Tm9kZShub2RlKSAhPSBOb2RlRmlsdGVy
OjpGSUxURVJfQUNDRVBUKQotICAgICAgICBub2RlID0gZmluZE5leHROb2RlKG5vZGUpOwotICAg
IGlmIChub2RlKQotICAgICAgICBzZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwotICAgIHNldFBvaW50
ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKGZhbHNlKTsKLSAgICByZXR1cm4gbm9kZTsKLX0KLQotTm9k
ZSAqTm9kZUl0ZXJhdG9yOjpmaW5kUHJldmlvdXNOb2RlKE5vZGUgKm5vZGUpIGNvbnN0Ci17Ci0g
ICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkpIHsKLSAgICAg
ICAgLy8gTm9kZUl0ZXJhdG9ycyB0cmVhdCB0aGUgRE9NIHRyZWUgYXMgYSBmbGF0IGxpc3Qgb2Yg
bm9kZXMuCi0gICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCBGSUxURVJfUkVKRUNUIGRvZXMgbm90
IHBhc3Mgb3ZlciBkZXNjZW5kYW50cwotICAgICAgICAvLyBvZiB0aGUgcmVqZWN0ZWQgbm9kZS4g
SGVuY2UsIEZJTFRFUl9SRUpFQ1QgaXMgdGhlIHNhbWUgYXMgRklMVEVSX1NLSVAuCi0gICAgICAg
IGlmIChhY2NlcHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLU5vZGUgKk5vZGVJ
dGVyYXRvcjo6cHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmKQotewotICAgIE5vZGUgKm5vZGUg
PSByZWZlcmVuY2VOb2RlKCkgPyByZWZlcmVuY2VOb2RlKCkgOiByb290KCk7Ci0gICAgaWYgKHBv
aW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKCkgfHwgYWNjZXB0Tm9kZShub2RlKSAhPSBOb2RlRmls
dGVyOjpGSUxURVJfQUNDRVBUKQotICAgICAgICBub2RlID0gZmluZFByZXZpb3VzTm9kZShub2Rl
KTsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgc2V0UmVmZXJlbmNlTm9kZShub2RlKTsKLSAgICBz
ZXRQb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpOwotICAgIHJldHVybiBub2RlOwotfQotCi12
b2lkIE5vZGVJdGVyYXRvcjo6ZGV0YWNoKEV4Y2VwdGlvbkNvZGUmKQotewotICAgIGlmICghZGV0
YWNoZWQoKSAmJiBkb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLT5kZXRhY2hOb2RlSXRl
cmF0b3IodGhpcyk7Ci0gICAgc2V0RGV0YWNoZWQoKTsKLX0KLQotdm9pZCBOb2RlSXRlcmF0b3I6
OnNldFJlZmVyZW5jZU5vZGUoTm9kZSAqbm9kZSkKLXsKLSAgICBtX3JlZmVyZW5jZU5vZGUgPSBu
b2RlOwotfQotCi12b2lkIE5vZGVJdGVyYXRvcjo6bm90aWZ5QmVmb3JlTm9kZVJlbW92YWwoTm9k
ZSAqcmVtb3ZlZE5vZGUpCi17Ci0gICAgLy8gSXRlcmF0b3IgaXMgbm90IGFmZmVjdGVkIGlmIHRo
ZSByZW1vdmVkIG5vZGUgaXMgdGhlIHJlZmVyZW5jZSBub2RlIGFuZCBpcyB0aGUgcm9vdC4KLSAg
ICAvLyBvciBpZiByZW1vdmVkIG5vZGUgaXMgbm90IHRoZSByZWZlcmVuY2Ugbm9kZSwgb3IgdGhl
IGFuY2VzdG9yIG9mIHRoZSByZWZlcmVuY2Ugbm9kZS4KLSAgICBpZiAoIXJlbW92ZWROb2RlIHx8
IHJlbW92ZWROb2RlID09IHJvb3QoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgd2lsbFJl
bW92ZVJlZmVyZW5jZU5vZGUgPSByZW1vdmVkTm9kZSA9PSByZWZlcmVuY2VOb2RlKCk7Ci0gICAg
Ym9vbCB3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yID0gcmVmZXJlbmNlTm9kZSgpICYm
IHJlZmVyZW5jZU5vZGUoKS0+aXNBbmNlc3RvcihyZW1vdmVkTm9kZSk7Ci0gICAgaWYgKCF3aWxs
UmVtb3ZlUmVmZXJlbmNlTm9kZSAmJiAhd2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3RvcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKCkp
IHsKLSAgICAgICAgTm9kZSAqbm9kZSA9IGZpbmROZXh0Tm9kZShyZW1vdmVkTm9kZSk7Ci0gICAg
ICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICAvLyBNb3ZlIG91dCBmcm9tIHVuZGVyIHRoZSBu
b2RlIGJlaW5nIHJlbW92ZWQgaWYgdGhlIHJlZmVyZW5jZSBub2RlIGlzCi0gICAgICAgICAgICAv
LyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZC4KLSAgICAgICAgICAgIGlm
ICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKSB7Ci0gICAgICAgICAgICAgICAgd2hp
bGUgKG5vZGUgJiYgbm9kZS0+aXNBbmNlc3RvcihyZW1vdmVkTm9kZSkpCi0gICAgICAgICAgICAg
ICAgICAgIG5vZGUgPSBmaW5kTmV4dE5vZGUobm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAobm9kZSkKLSAgICAgICAgICAgICAgICBzZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbm9kZSA9IGZpbmRQcmV2aW91
c05vZGUocmVtb3ZlZE5vZGUpOwotICAgICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAg
ICAgICAvLyBNb3ZlIG91dCBmcm9tIHVuZGVyIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQgaWYgdGhl
IHJlZmVyZW5jZSBub2RlIGlzCi0gICAgICAgICAgICAgICAgLy8gYSBkZXNjZW5kYW50IG9mIHRo
ZSBub2RlIGJlaW5nIHJlbW92ZWQuCi0gICAgICAgICAgICAgICAgaWYgKHdpbGxSZW1vdmVSZWZl
cmVuY2VOb2RlQW5jZXN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYg
bm9kZS0+aXNBbmNlc3RvcihyZW1vdmVkTm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b2RlID0gZmluZFByZXZpb3VzTm9kZShub2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZpbmcgbGFz
dCBub2RlLgotICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIHBvaW50ZXIg
YWZ0ZXIgdGhlIG5vZGUgcHJlY2VkaW5nIHRoZSAKLSAgICAgICAgICAgICAgICAgICAgLy8gbmV3
IHJlZmVyZW5jZSBub2RlLgotICAgICAgICAgICAgICAgICAgICBzZXRSZWZlcmVuY2VOb2RlKG5v
ZGUpOwotICAgICAgICAgICAgICAgICAgICBzZXRQb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZShm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UgewotICAgICAgICBOb2RlICpub2RlID0gZmluZFByZXZpb3VzTm9kZShyZW1v
dmVkTm9kZSk7Ci0gICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICAvLyBNb3ZlIG91dCBm
cm9tIHVuZGVyIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQgaWYgdGhlIHJlZmVyZW5jZSBub2RlIGlz
Ci0gICAgICAgICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZC4K
LSAgICAgICAgICAgIGlmICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKSB7Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNBbmNlc3RvcihyZW1vdmVkTm9kZSkp
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBmaW5kUHJldmlvdXNOb2RlKG5vZGUpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICAgICAgc2V0UmVm
ZXJlbmNlTm9kZShub2RlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IG5vZGUgPSBmaW5kTmV4dE5vZGUocmVtb3ZlZE5vZGUpOwotICAgICAgICAgICAgICAgIC8vIE1v
dmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNl
IG5vZGUgaXMKLSAgICAgICAgICAgICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUgYmVp
bmcgcmVtb3ZlZC4KLSAgICAgICAgICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVB
bmNlc3RvcikgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0Fu
Y2VzdG9yKHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBmaW5k
UHJldmlvdXNOb2RlKG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAobm9kZSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVmZXJlbmNlTm9kZShub2RlKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVHJlZVdhbGtlcjo6VHJlZVdhbGtlcihO
b2RlICpyb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVy
PiBmaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKLSAgICA6IFRyYXZlcnNhbChy
b290Tm9kZSwgd2hhdFRvU2hvdywgZmlsdGVyLCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQotICAg
ICwgbV9jdXJyZW50KHJvb3ROb2RlKQotewotfQotCi12b2lkIFRyZWVXYWxrZXI6OnNldEN1cnJl
bnROb2RlKE5vZGUgKm5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghbm9kZSkg
ewotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9jdXJyZW50ID0gbm9kZTsKLX0KLQotdm9pZCBUcmVlV2Fsa2VyOjpzZXRDdXJy
ZW50Tm9kZShOb2RlICpub2RlKQotewotICAgIGFzc2VydChub2RlKTsKLSAgICBpbnQgZHVtbXk7
Ci0gICAgc2V0Q3VycmVudE5vZGUobm9kZSwgZHVtbXkpOwotfQotCi1Ob2RlICpUcmVlV2Fsa2Vy
OjpwYXJlbnROb2RlKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZvciAoTm9kZSAq
bm9kZSA9IGN1cnJlbnROb2RlKCktPnBhcmVudE5vZGUoKTsgbm9kZSAmJiBub2RlICE9IHJvb3Qo
KTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoYWNjZXB0Tm9kZShu
b2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7Ci0gICAgICAgICAgICBzZXRDdXJy
ZW50Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1Ob2RlICpU
cmVlV2Fsa2VyOjpmaXJzdENoaWxkKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZv
ciAoTm9kZSAqbm9kZSA9IGN1cnJlbnROb2RlKCktPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9
IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0g
Tm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkgewotICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUo
bm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAqVHJlZVdhbGtl
cjo6bGFzdENoaWxkKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZvciAoTm9kZSAq
bm9kZSA9IGN1cnJlbnROb2RlKCktPmxhc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZp
bHRlcjo6RklMVEVSX0FDQ0VQVCkgewotICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUobm9kZSk7
Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAqVHJlZVdhbGtlcjo6cHJl
dmlvdXNTaWJsaW5nKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZvciAoTm9kZSAq
bm9kZSA9IGN1cnJlbnROb2RlKCktPnByZXZpb3VzU2libGluZygpOyBub2RlOyBub2RlID0gbm9k
ZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0g
Tm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkgewotICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUo
bm9kZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAqVHJlZVdhbGtl
cjo6bmV4dFNpYmxpbmcoKQotewotICAgIE5vZGUgKnJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2Rl
ICpub2RlID0gY3VycmVudE5vZGUoKS0+bmV4dFNpYmxpbmcoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
Pm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZp
bHRlcjo6RklMVEVSX0FDQ0VQVCkgewotICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUobm9kZSk7
Ci0gICAgICAgICAgICByZXN1bHQgPSBub2RlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSAqVHJlZVdhbGtlcjo6cHJl
dmlvdXNOb2RlKCkKLXsKLSAgICBOb2RlICpyZXN1bHQgPSAwOwotICAgIGZvciAoTm9kZSAqbm9k
ZSA9IGN1cnJlbnROb2RlKCktPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7IG5vZGU7IG5vZGUgPSBu
b2RlLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKSB7Ci0gICAgICAgIGlmIChhY2NlcHROb2RlKG5v
ZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQgJiYgIWFuY2VzdG9yUmVqZWN0ZWQobm9k
ZSkpIHsKLSAgICAgICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwotICAgICAgICAgICAgcmVz
dWx0ID0gbm9kZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLU5vZGUgKlRyZWVXYWxrZXI6Om5leHROb2RlKCkKLXsKLSAgICBO
b2RlICpyZXN1bHQgPSAwOwotICAgIGZvciAoTm9kZSAqbm9kZSA9IGN1cnJlbnROb2RlKCktPnRy
YXZlcnNlTmV4dE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkg
ewotICAgICAgICBpZiAoYWNjZXB0Tm9kZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUND
RVBUICYmICFhbmNlc3RvclJlamVjdGVkKG5vZGUpKSB7Ci0gICAgICAgICAgICBzZXRDdXJyZW50
Tm9kZShub2RlKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFRyZWVX
YWxrZXI6OmFuY2VzdG9yUmVqZWN0ZWQoY29uc3QgTm9kZSAqbm9kZSkgY29uc3QKLXsKLSAgICBm
b3IgKE5vZGUgKmEgPSBub2RlLT5wYXJlbnROb2RlKCk7IGEgJiYgYSAhPSByb290KCk7IGEgPSBh
LT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGlmIChhY2NlcHROb2RlKGEpID09IE5vZGVGaWx0ZXI6
OkZJTFRFUl9SRUpFQ1QpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1RyZWVX
YWxrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCShyZXZp
c2lvbiAxNDUyOCkKKysrIFdlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEwICsxLDExIEBACiAvKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00g
aW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0gKiAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQotICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGpl
bkBoaWcubm8pCi0gKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRnJl
ZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAw
NCBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwyMzcgKzIx
LDQyIEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJkb20y
X3RyYXZlcnNhbGltcGwuaCIKKyNpbmNsdWRlICJUcmVlV2Fsa2VyLmgiCiAKLSNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zaG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKE5vZGUqKSBjb25z
dAotewotICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1Ob2RlRmlsdGVyOjpOb2RlRmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRpb24gKmNvbmRpdGlv
bikKLSAgICA6IG1fY29uZGl0aW9uKGNvbmRpdGlvbikKLXsKLX0KLQotc2hvcnQgTm9kZUZpbHRl
cjo6YWNjZXB0Tm9kZShOb2RlICpub2RlKSBjb25zdAotewotICAgIC8vIGNhc3QgdG8gc2hvcnQg
c2lsZW5jZXMgImVudW1lcmFsIGFuZCBub24tZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJu
aW5nCi0gICAgcmV0dXJuIG1fY29uZGl0aW9uID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUobm9k
ZSkgOiBzdGF0aWNfY2FzdDxzaG9ydD4oRklMVEVSX0FDQ0VQVCk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LVRyYXZlcnNhbDo6VHJhdmVyc2FsKE5vZGUqIHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93
LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IG5vZGVGaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVm
ZXJlbmNlcykKLSAgICA6IG1fcm9vdChyb290Tm9kZSkKLSAgICAsIG1fd2hhdFRvU2hvdyh3aGF0
VG9TaG93KQotICAgICwgbV9maWx0ZXIobm9kZUZpbHRlcikKLSAgICAsIG1fZXhwYW5kRW50aXR5
UmVmZXJlbmNlcyhleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQotewotfQotCi1UcmF2ZXJzYWw6On5U
cmF2ZXJzYWwoKQotewotfQotCi1zaG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoTm9kZSAqbm9k
ZSkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSWYgWE1MIGlzIGltcGxlbWVudGVkIHdlIGhhdmUg
dG8gY2hlY2sgZXhwYW5kRW50aXR5UmVyZWZlbmNlcyBpbiB0aGlzIGZ1bmN0aW9uLgotICAgIC8v
IFRoZSBiaWQgdHdpZGRsaW5nIGhlcmUgaXMgZG9uZSB0byBtYXAgRE9NIG5vZGUgdHlwZXMsIHdo
aWNoIGFyZSBnaXZlbiBhcyBpbnRlZ2VycyBmcm9tCi0gICAgLy8gMSB0aHJvdWdoIDEyLCB0byB3
aGF0VG9TaG93IGJpdCBtYXNrcy4KLSAgICBpZiAobm9kZSAmJiAoKDEgPDwgKG5vZGUtPm5vZGVU
eXBlKCktMSkpICYgbV93aGF0VG9TaG93KSAhPSAwKQotICAgICAgICAvLyBjYXN0IHRvIHNob3J0
IHNpbGVuY2VzICJlbnVtZXJhbCBhbmQgbm9uLWVudW1lcmFsIHR5cGVzIGluIHJldHVybiIgd2Fy
bmluZwotICAgICAgICByZXR1cm4gbV9maWx0ZXIgPyBtX2ZpbHRlci0+YWNjZXB0Tm9kZShub2Rl
KSA6IHN0YXRpY19jYXN0PHNob3J0PihOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKTsKLSAgICBy
ZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1NLSVA7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU5vZGVJdGVy
YXRvcjo6Tm9kZUl0ZXJhdG9yKE5vZGUgKnJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQ
YXNzUmVmUHRyPE5vZGVGaWx0ZXI+IGZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2Vz
KQotICAgIDogVHJhdmVyc2FsKHJvb3ROb2RlLCB3aGF0VG9TaG93LCBmaWx0ZXIsIGV4cGFuZEVu
dGl0eVJlZmVyZW5jZXMpCi0gICAgLCBtX2JlZm9yZVJlZmVyZW5jZU5vZGUodHJ1ZSkKLSAgICAs
IG1fZGV0YWNoZWQoZmFsc2UpCi0gICAgLCBtX2RvYyhyb290Tm9kZSA/IHJvb3ROb2RlLT5kb2N1
bWVudCgpIDogMCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+
YXR0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOwotfQotCi1Ob2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0
b3IoKQotewotICAgIGlmIChkb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLT5kZXRhY2hO
b2RlSXRlcmF0b3IodGhpcyk7Ci19Ci0KLU5vZGUgKk5vZGVJdGVyYXRvcjo6ZmluZE5leHROb2Rl
KE5vZGUgKm5vZGUpIGNvbnN0Ci17Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSkgewotICAgICAgICAvLyBOb2RlSXRlcmF0b3JzIHRyZWF0IHRoZSBET00gdHJl
ZSBhcyBhIGZsYXQgbGlzdCBvZiBub2Rlcy4KLSAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJ
TFRFUl9SRUpFQ1QgZG9lcyBub3QgcGFzcyBvdmVyIGRlc2NlbmRhbnRzCi0gICAgICAgIC8vIG9m
IHRoZSByZWplY3RlZCBub2RlLiBIZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBG
SUxURVJfU0tJUC4KLSAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6
RklMVEVSX0FDQ0VQVCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gbm9k
ZTsKLX0KLQotTm9kZSAqTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAoZGV0YWNoZWQoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBOb2RlICpub2RlID0gcmVmZXJlbmNl
Tm9kZSgpID8gcmVmZXJlbmNlTm9kZSgpIDogcm9vdCgpOwotICAgIGlmICghcG9pbnRlckJlZm9y
ZVJlZmVyZW5jZU5vZGUoKSB8fCBhY2NlcHROb2RlKG5vZGUpICE9IE5vZGVGaWx0ZXI6OkZJTFRF
Ul9BQ0NFUFQpCi0gICAgICAgIG5vZGUgPSBmaW5kTmV4dE5vZGUobm9kZSk7Ci0gICAgaWYgKG5v
ZGUpCi0gICAgICAgIHNldFJlZmVyZW5jZU5vZGUobm9kZSk7Ci0gICAgc2V0UG9pbnRlckJlZm9y
ZVJlZmVyZW5jZU5vZGUoZmFsc2UpOwotICAgIHJldHVybiBub2RlOwotfQotCi1Ob2RlICpOb2Rl
SXRlcmF0b3I6OmZpbmRQcmV2aW91c05vZGUoTm9kZSAqbm9kZSkgY29uc3QKLXsKLSAgICB3aGls
ZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKSkgewotICAgICAgICAvLyBO
b2RlSXRlcmF0b3JzIHRyZWF0IHRoZSBET00gdHJlZSBhcyBhIGZsYXQgbGlzdCBvZiBub2Rlcy4K
LSAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBub3QgcGFzcyBv
dmVyIGRlc2NlbmRhbnRzCi0gICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBub2RlLiBIZW5jZSwg
RklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KLSAgICAgICAgaWYgKGFj
Y2VwdE5vZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotTm9kZSAqTm9kZUl0ZXJhdG9y
OjpwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgTm9kZSAqbm9kZSA9IHJlZmVy
ZW5jZU5vZGUoKSA/IHJlZmVyZW5jZU5vZGUoKSA6IHJvb3QoKTsKLSAgICBpZiAocG9pbnRlckJl
Zm9yZVJlZmVyZW5jZU5vZGUoKSB8fCBhY2NlcHROb2RlKG5vZGUpICE9IE5vZGVGaWx0ZXI6OkZJ
TFRFUl9BQ0NFUFQpCi0gICAgICAgIG5vZGUgPSBmaW5kUHJldmlvdXNOb2RlKG5vZGUpOwotICAg
IGlmIChub2RlKQotICAgICAgICBzZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwotICAgIHNldFBvaW50
ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKCk7Ci0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLXZvaWQgTm9k
ZUl0ZXJhdG9yOjpkZXRhY2goRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgaWYgKCFkZXRhY2hlZCgp
ICYmIGRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCktPmRldGFjaE5vZGVJdGVyYXRvcih0
aGlzKTsKLSAgICBzZXREZXRhY2hlZCgpOwotfQotCi12b2lkIE5vZGVJdGVyYXRvcjo6c2V0UmVm
ZXJlbmNlTm9kZShOb2RlICpub2RlKQotewotICAgIG1fcmVmZXJlbmNlTm9kZSA9IG5vZGU7Ci19
Ci0KLXZvaWQgTm9kZUl0ZXJhdG9yOjpub3RpZnlCZWZvcmVOb2RlUmVtb3ZhbChOb2RlICpyZW1v
dmVkTm9kZSkKLXsKLSAgICAvLyBJdGVyYXRvciBpcyBub3QgYWZmZWN0ZWQgaWYgdGhlIHJlbW92
ZWQgbm9kZSBpcyB0aGUgcmVmZXJlbmNlIG5vZGUgYW5kIGlzIHRoZSByb290LgotICAgIC8vIG9y
IGlmIHJlbW92ZWQgbm9kZSBpcyBub3QgdGhlIHJlZmVyZW5jZSBub2RlLCBvciB0aGUgYW5jZXN0
b3Igb2YgdGhlIHJlZmVyZW5jZSBub2RlLgotICAgIGlmICghcmVtb3ZlZE5vZGUgfHwgcmVtb3Zl
ZE5vZGUgPT0gcm9vdCgpKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCB3aWxsUmVtb3ZlUmVm
ZXJlbmNlTm9kZSA9IHJlbW92ZWROb2RlID09IHJlZmVyZW5jZU5vZGUoKTsKLSAgICBib29sIHdp
bGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0b3IgPSByZWZlcmVuY2VOb2RlKCkgJiYgcmVmZXJl
bmNlTm9kZSgpLT5pc0FuY2VzdG9yKHJlbW92ZWROb2RlKTsKLSAgICBpZiAoIXdpbGxSZW1vdmVS
ZWZlcmVuY2VOb2RlICYmICF3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAocG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSkgewotICAg
ICAgICBOb2RlICpub2RlID0gZmluZE5leHROb2RlKHJlbW92ZWROb2RlKTsKLSAgICAgICAgaWYg
KG5vZGUpIHsKLSAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVp
bmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKLSAgICAgICAgICAgIC8vIGEgZGVz
Y2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgotICAgICAgICAgICAgaWYgKHdpbGxS
ZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0b3IpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAobm9k
ZSAmJiBub2RlLT5pc0FuY2VzdG9yKHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IGZpbmROZXh0Tm9kZShub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChub2RlKQotICAgICAgICAgICAgICAgIHNldFJlZmVyZW5jZU5vZGUobm9kZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2RlID0gZmluZFByZXZpb3VzTm9kZShy
ZW1vdmVkTm9kZSk7Ci0gICAgICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgICAgIC8v
IE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJl
bmNlIG5vZGUgaXMKLSAgICAgICAgICAgICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUg
YmVpbmcgcmVtb3ZlZC4KLSAgICAgICAgICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5jZU5v
ZGVBbmNlc3RvcikgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5p
c0FuY2VzdG9yKHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBm
aW5kUHJldmlvdXNOb2RlKG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAobm9kZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyBsYXN0IG5vZGUu
Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgcG9pbnRlciBhZnRlciB0
aGUgbm9kZSBwcmVjZWRpbmcgdGhlIAotICAgICAgICAgICAgICAgICAgICAvLyBuZXcgcmVmZXJl
bmNlIG5vZGUuCi0gICAgICAgICAgICAgICAgICAgIHNldFJlZmVyZW5jZU5vZGUobm9kZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHNldFBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKGZhbHNlKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIE5vZGUgKm5vZGUgPSBmaW5kUHJldmlvdXNOb2RlKHJlbW92ZWROb2Rl
KTsKLSAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5k
ZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKLSAgICAg
ICAgICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgotICAgICAg
ICAgICAgaWYgKHdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0b3IpIHsKLSAgICAgICAgICAg
ICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0FuY2VzdG9yKHJlbW92ZWROb2RlKSkKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IGZpbmRQcmV2aW91c05vZGUobm9kZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAobm9kZSkKLSAgICAgICAgICAgICAgICBzZXRSZWZlcmVuY2VO
b2RlKG5vZGUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbm9kZSA9
IGZpbmROZXh0Tm9kZShyZW1vdmVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBvdXQg
ZnJvbSB1bmRlciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVuY2Ugbm9kZSBp
cwotICAgICAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1v
dmVkLgotICAgICAgICAgICAgICAgIGlmICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9y
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzQW5jZXN0b3Io
cmVtb3ZlZE5vZGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGZpbmRQcmV2aW91
c05vZGUobm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChub2Rl
KQotICAgICAgICAgICAgICAgICAgICBzZXRSZWZlcmVuY2VOb2RlKG5vZGUpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UcmVlV2Fsa2VyOjpUcmVlV2Fsa2VyKE5vZGUgKnJv
b3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IGZpbHRl
ciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQorVHJlZVdhbGtlcjo6VHJlZVdhbGtlcihO
b2RlKiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVy
PiBmaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKICAgICA6IFRyYXZlcnNhbChy
b290Tm9kZSwgd2hhdFRvU2hvdywgZmlsdGVyLCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQogICAg
ICwgbV9jdXJyZW50KHJvb3ROb2RlKQogewogfQogCi12b2lkIFRyZWVXYWxrZXI6OnNldEN1cnJl
bnROb2RlKE5vZGUgKm5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBUcmVlV2Fsa2VyOjpz
ZXRDdXJyZW50Tm9kZShOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
IW5vZGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLQogICAgIG1fY3VycmVudCA9IG5vZGU7CiB9CiAKLXZvaWQgVHJlZVdhbGtlcjo6
c2V0Q3VycmVudE5vZGUoTm9kZSAqbm9kZSkKK3ZvaWQgVHJlZVdhbGtlcjo6c2V0Q3VycmVudE5v
ZGUoTm9kZSogbm9kZSkKIHsKLSAgICBhc3NlcnQobm9kZSk7CisgICAgQVNTRVJUKG5vZGUpOwog
ICAgIGludCBkdW1teTsKICAgICBzZXRDdXJyZW50Tm9kZShub2RlLCBkdW1teSk7CiB9CiAKLU5v
ZGUgKlRyZWVXYWxrZXI6OnBhcmVudE5vZGUoKQorTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9k
ZSgpCiB7Ci0gICAgTm9kZSAqcmVzdWx0ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJy
ZW50Tm9kZSgpLT5wYXJlbnROb2RlKCk7IG5vZGUgJiYgbm9kZSAhPSByb290KCk7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBOb2RlKiByZXN1bHQgPSAwOworICAgIGZvciAoTm9k
ZSogbm9kZSA9IGN1cnJlbnROb2RlKCktPnBhcmVudE5vZGUoKTsgbm9kZSAmJiBub2RlICE9IHJv
b3QoKTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoYWNjZXB0Tm9k
ZShub2RlKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKSB7CiAgICAgICAgICAgICBzZXRD
dXJyZW50Tm9kZShub2RlKTsKICAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7CkBAIC0yNjAsMTAg
KzY2LDEwIEBAIE5vZGUgKlRyZWVXYWxrZXI6OnBhcmVudE5vZGUoKQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLU5vZGUgKlRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoKQorTm9kZSogVHJlZVdhbGtl
cjo6Zmlyc3RDaGlsZCgpCiB7Ci0gICAgTm9kZSAqcmVzdWx0ID0gMDsKLSAgICBmb3IgKE5vZGUg
Km5vZGUgPSBjdXJyZW50Tm9kZSgpLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5u
ZXh0U2libGluZygpKSB7CisgICAgTm9kZSogcmVzdWx0ID0gMDsKKyAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBjdXJyZW50Tm9kZSgpLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGlmIChhY2NlcHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6
OkZJTFRFUl9BQ0NFUFQpIHsKICAgICAgICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwogICAg
ICAgICAgICAgcmVzdWx0ID0gbm9kZTsKQEAgLTI3MywxMCArNzksMTAgQEAgTm9kZSAqVHJlZVdh
bGtlcjo6Zmlyc3RDaGlsZCgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTm9kZSAqVHJlZVdh
bGtlcjo6bGFzdENoaWxkKCkKK05vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZCgpCiB7Ci0gICAg
Tm9kZSAqcmVzdWx0ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJyZW50Tm9kZSgpLT5s
YXN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CisgICAg
Tm9kZSogcmVzdWx0ID0gMDsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBjdXJyZW50Tm9kZSgpLT5s
YXN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAg
ICAgIGlmIChhY2NlcHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpIHsK
ICAgICAgICAgICAgIHNldEN1cnJlbnROb2RlKG5vZGUpOwogICAgICAgICAgICAgcmVzdWx0ID0g
bm9kZTsKQEAgLTI4NiwxMCArOTIsMTAgQEAgTm9kZSAqVHJlZVdhbGtlcjo6bGFzdENoaWxkKCkK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Ob2RlICpUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxp
bmcoKQorTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKCkKIHsKLSAgICBOb2RlICpy
ZXN1bHQgPSAwOwotICAgIGZvciAoTm9kZSAqbm9kZSA9IGN1cnJlbnROb2RlKCktPnByZXZpb3Vz
U2libGluZygpOyBub2RlOyBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICBO
b2RlKiByZXN1bHQgPSAwOworICAgIGZvciAoTm9kZSogbm9kZSA9IGN1cnJlbnROb2RlKCktPnBy
ZXZpb3VzU2libGluZygpOyBub2RlOyBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsK
ICAgICAgICAgaWYgKGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQ
VCkgewogICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUobm9kZSk7CiAgICAgICAgICAgICByZXN1
bHQgPSBub2RlOwpAQCAtMjk5LDEwICsxMDUsMTAgQEAgTm9kZSAqVHJlZVdhbGtlcjo6cHJldmlv
dXNTaWJsaW5nKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Ob2RlICpUcmVlV2Fsa2VyOjpu
ZXh0U2libGluZygpCitOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZygpCiB7Ci0gICAgTm9k
ZSAqcmVzdWx0ID0gMDsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBjdXJyZW50Tm9kZSgpLT5uZXh0
U2libGluZygpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAgIE5vZGUq
IHJlc3VsdCA9IDA7CisgICAgZm9yIChOb2RlKiBub2RlID0gY3VycmVudE5vZGUoKS0+bmV4dFNp
YmxpbmcoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KGFjY2VwdE5vZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkgewogICAgICAg
ICAgICAgc2V0Q3VycmVudE5vZGUobm9kZSk7CiAgICAgICAgICAgICByZXN1bHQgPSBub2RlOwpA
QCAtMzEyLDEwICsxMTgsMTAgQEAgTm9kZSAqVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoKQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLU5vZGUgKlRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSgpCitO
b2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoKQogewotICAgIE5vZGUgKnJlc3VsdCA9IDA7
Ci0gICAgZm9yIChOb2RlICpub2RlID0gY3VycmVudE5vZGUoKS0+dHJhdmVyc2VQcmV2aW91c05v
ZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpIHsKKyAgICBO
b2RlKiByZXN1bHQgPSAwOworICAgIGZvciAoTm9kZSogbm9kZSA9IGN1cnJlbnROb2RlKCktPnRy
YXZlcnNlUHJldmlvdXNOb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZVByZXZpb3Vz
Tm9kZSgpKSB7CiAgICAgICAgIGlmIChhY2NlcHROb2RlKG5vZGUpID09IE5vZGVGaWx0ZXI6OkZJ
TFRFUl9BQ0NFUFQgJiYgIWFuY2VzdG9yUmVqZWN0ZWQobm9kZSkpIHsKICAgICAgICAgICAgIHNl
dEN1cnJlbnROb2RlKG5vZGUpOwogICAgICAgICAgICAgcmVzdWx0ID0gbm9kZTsKQEAgLTMyNSwx
MCArMTMxLDEwIEBAIE5vZGUgKlRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSgpCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotTm9kZSAqVHJlZVdhbGtlcjo6bmV4dE5vZGUoKQorTm9kZSogVHJlZVdh
bGtlcjo6bmV4dE5vZGUoKQogewotICAgIE5vZGUgKnJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2Rl
ICpub2RlID0gY3VycmVudE5vZGUoKS0+dHJhdmVyc2VOZXh0Tm9kZSgpOyBub2RlOyBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgTm9kZSogcmVzdWx0ID0gMDsKKyAgICBm
b3IgKE5vZGUqIG5vZGUgPSBjdXJyZW50Tm9kZSgpLT50cmF2ZXJzZU5leHROb2RlKCk7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgaWYgKGFjY2VwdE5v
ZGUobm9kZSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCAmJiAhYW5jZXN0b3JSZWplY3Rl
ZChub2RlKSkgewogICAgICAgICAgICAgc2V0Q3VycmVudE5vZGUobm9kZSk7CiAgICAgICAgICAg
ICByZXN1bHQgPSBub2RlOwpAQCAtMzM4LDExICsxNDQsMTIgQEAgTm9kZSAqVHJlZVdhbGtlcjo6
bmV4dE5vZGUoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgVHJlZVdhbGtlcjo6YW5j
ZXN0b3JSZWplY3RlZChjb25zdCBOb2RlICpub2RlKSBjb25zdAorYm9vbCBUcmVlV2Fsa2VyOjph
bmNlc3RvclJlamVjdGVkKGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0CiB7Ci0gICAgZm9yIChOb2Rl
ICphID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBhICYmIGEgIT0gcm9vdCgpOyBhID0gYS0+cGFyZW50
Tm9kZSgpKQorICAgIGZvciAoTm9kZSogYSA9IG5vZGUtPnBhcmVudE5vZGUoKTsgYSAmJiBhICE9
IHJvb3QoKTsgYSA9IGEtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoYWNjZXB0Tm9kZShh
KSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25k
aXRpb24uaAkocmV2aXNpb24gMTQ1MjgpCisrKyBXZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSwxMCBAQAogLyoKICAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0gKiAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGpl
biAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCi0gKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9s
bGplbkBoaWcubm8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdt
YWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTIzLDE1MSArMjQsMjIgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBkb20yX3Ry
YXZlcnNhbF9oCi0jZGVmaW5lIGRvbTJfdHJhdmVyc2FsX2gKKyNpZm5kZWYgTm9kZUZpbHRlckNv
bmRpdGlvbl9oCisjZGVmaW5lIE5vZGVGaWx0ZXJDb25kaXRpb25faAogCiAjaW5jbHVkZSAiU2hh
cmVkLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgTm9kZTsKLWNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIE5vZGU7CiAKLXR5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIE5vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMg
U2hhcmVkPE5vZGVGaWx0ZXJDb25kaXRpb24+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5Ob2Rl
RmlsdGVyQ29uZGl0aW9uKCkgeyB9Ci0gICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKE5vZGUq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygpIHsgfQotfTsKLQotY2xhc3MgTm9kZUZp
bHRlciA6IHB1YmxpYyBTaGFyZWQ8Tm9kZUZpbHRlcj4sIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoK
LSAgICAvKioKLSAgICAgKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmV0dXJuZWQgYnkg
dGhlIGFjY2VwdE5vZGUoKQotICAgICAqIG1ldGhvZDoKLSAgICAgKi8KLSAgICBlbnVtIHsKLSAg
ICAgICAgRklMVEVSX0FDQ0VQVCA9IDEsCi0gICAgICAgIEZJTFRFUl9SRUpFQ1QgPSAyLAotICAg
ICAgICBGSUxURVJfU0tJUCAgID0gMwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBUaGVzZSBh
cmUgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgZm9yIHRoZSB3aGF0VG9TaG93IHBhcmFtZXRlci4KLSAg
ICAgKiBUaGV5IGFyZSB0aGUgc2FtZSBhcyB0aGUgc2V0IG9mIHBvc3NpYmxlIHR5cGVzIGZvciBO
b2RlLCBhbmQKLSAgICAgKiB0aGVpciB2YWx1ZXMgYXJlIGRlcml2ZWQgYnkgdXNpbmcgYSBiaXQg
cG9zaXRpb24gY29ycmVzcG9uZGluZwotICAgICAqIHRvIHRoZSB2YWx1ZSBvZiBOb2RlVHlwZSBm
b3IgdGhlIGVxdWl2YWxlbnQgbm9kZSB0eXBlLgotICAgICAqLwotICAgIGVudW0gewotICAgICAg
ICBTSE9XX0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAweEZGRkZGRkZGLAotICAgICAgICBT
SE9XX0VMRU1FTlQgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAxLAotICAgICAgICBTSE9X
X0FUVFJJQlVURSAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAyLAotICAgICAgICBTSE9XX1RF
WFQgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDA0LAotICAgICAgICBTSE9XX0NEQVRB
X1NFQ1RJT04gICAgICAgICAgICAgPSAweDAwMDAwMDA4LAotICAgICAgICBTSE9XX0VOVElUWV9S
RUZFUkVOQ0UgICAgICAgICAgPSAweDAwMDAwMDEwLAotICAgICAgICBTSE9XX0VOVElUWSAgICAg
ICAgICAgICAgICAgICAgPSAweDAwMDAwMDIwLAotICAgICAgICBTSE9XX1BST0NFU1NJTkdfSU5T
VFJVQ1RJT04gICAgPSAweDAwMDAwMDQwLAotICAgICAgICBTSE9XX0NPTU1FTlQgICAgICAgICAg
ICAgICAgICAgPSAweDAwMDAwMDgwLAotICAgICAgICBTSE9XX0RPQ1VNRU5UICAgICAgICAgICAg
ICAgICAgPSAweDAwMDAwMTAwLAotICAgICAgICBTSE9XX0RPQ1VNRU5UX1RZUEUgICAgICAgICAg
ICAgPSAweDAwMDAwMjAwLAotICAgICAgICBTSE9XX0RPQ1VNRU5UX0ZSQUdNRU5UICAgICAgICAg
PSAweDAwMDAwNDAwLAotICAgICAgICBTSE9XX05PVEFUSU9OICAgICAgICAgICAgICAgICAgPSAw
eDAwMDAwODAwCisgICAgY2xhc3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBTaGFyZWQ8
Tm9kZUZpbHRlckNvbmRpdGlvbj4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Tm9k
ZUZpbHRlckNvbmRpdGlvbigpIHsgfQorICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUo
Tm9kZSopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpIHsgfQogICAgIH07CiAK
LSAgICBOb2RlRmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRpb24qKTsKLSAgICBzaG9ydCBhY2NlcHRO
b2RlKE5vZGUqKSBjb25zdDsKLSAgICB2b2lkIG1hcmsoKSB7IG1fY29uZGl0aW9uLT5tYXJrKCk7
IH07Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+IG1fY29uZGl0
aW9uOwotfTsKLQotY2xhc3MgVHJhdmVyc2FsIDogcHVibGljIFNoYXJlZDxUcmF2ZXJzYWw+Ci17
Ci1wdWJsaWM6Ci0gICAgVHJhdmVyc2FsKE5vZGUqLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNz
UmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwotICAgIHZp
cnR1YWwgflRyYXZlcnNhbCgpOwotCi0gICAgTm9kZSogcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdC5nZXQoKTsgfQotICAgIHVuc2lnbmVkIHdoYXRUb1Nob3coKSBjb25zdCB7IHJldHVybiBt
X3doYXRUb1Nob3c7IH0KLSAgICBOb2RlRmlsdGVyKiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBt
X2ZpbHRlci5nZXQoKTsgfQotICAgIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlczsgfQotCi0gICAgc2hvcnQgYWNjZXB0
Tm9kZShOb2RlKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgVHJhdmVyc2FsKGNvbnN0IFRyYXZl
cnNhbCAmKTsKLSAgICBUcmF2ZXJzYWwgJm9wZXJhdG9yPShjb25zdCBUcmF2ZXJzYWwgJik7Ci0g
ICAgCi0gICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsKLSAgICB1bnNpZ25lZCBtX3doYXRUb1Nob3c7
Ci0gICAgUmVmUHRyPE5vZGVGaWx0ZXI+IG1fZmlsdGVyOwotICAgIGJvb2wgbV9leHBhbmRFbnRp
dHlSZWZlcmVuY2VzOwotfTsKLQotY2xhc3MgTm9kZUl0ZXJhdG9yIDogcHVibGljIFRyYXZlcnNh
bAotewotcHVibGljOgotICAgIE5vZGVJdGVyYXRvcihOb2RlKiwgdW5zaWduZWQgd2hhdFRvU2hv
dywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsK
LSAgICB+Tm9kZUl0ZXJhdG9yKCk7Ci0KLSAgICBOb2RlKiBuZXh0Tm9kZShFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgTm9kZSogcHJldmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRl
dGFjaChFeGNlcHRpb25Db2RlJik7Ci0KLSAgICBOb2RlKiByZWZlcmVuY2VOb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWZlcmVuY2VOb2RlLmdldCgpOyB9Ci0gICAgYm9vbCBwb2ludGVyQmVmb3Jl
UmVmZXJlbmNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmVmb3JlUmVmZXJlbmNlTm9kZTsgfQot
Ci0gICAgLyoqCi0gICAgICogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkIGlmIHlvdSBk
ZWxldGUgYSBub2RlIGZyb20gdGhlCi0gICAgICogZG9jdW1lbnQgdHJlZSBhbmQgeW91IHdhbnQg
dGhlIEl0ZXJhdG9yIHRvIHJlYWN0IGlmIHRoZXJlCi0gICAgICogYXJlIGFueSBjaGFuZ2VzIGNv
bmNlcm5pbmcgaXQuCi0gICAgICovCi0gICAgdm9pZCBub3RpZnlCZWZvcmVOb2RlUmVtb3ZhbChO
b2RlKiByZW1vdmVkKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNldFJlZmVyZW5jZU5vZGUoTm9k
ZSopOwotICAgIHZvaWQgc2V0UG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoYm9vbCBmbGFnID0g
dHJ1ZSkgeyBtX2JlZm9yZVJlZmVyZW5jZU5vZGUgPSBmbGFnOyB9Ci0gICAgYm9vbCBkZXRhY2hl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWNoZWQ7IH0KLSAgICB2b2lkIHNldERldGFjaGVkKGJv
b2wgZmxhZyA9IHRydWUpIHsgbV9kZXRhY2hlZCA9IGZsYWc7IH0KLSAgICBEb2N1bWVudCogZG9j
dW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvYy5nZXQoKTsgfQotICAgIE5vZGUqIGZpbmROZXh0
Tm9kZShOb2RlKikgY29uc3Q7Ci0gICAgTm9kZSogZmluZFByZXZpb3VzTm9kZShOb2RlKikgY29u
c3Q7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbV9yZWZlcmVuY2VOb2RlOwotICAgIGJvb2wgbV9iZWZv
cmVSZWZlcmVuY2VOb2RlOwotICAgIGJvb2wgbV9kZXRhY2hlZDsKLSAgICBSZWZQdHI8RG9jdW1l
bnQ+IG1fZG9jOwotfTsKLQotY2xhc3MgVHJlZVdhbGtlciA6IHB1YmxpYyBUcmF2ZXJzYWwgewot
cHVibGljOgotICAgIFRyZWVXYWxrZXIoTm9kZSosIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NS
ZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Ci0KLSAgICBO
b2RlKiBjdXJyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudC5nZXQoKTsgfQotICAg
IHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIE5vZGUq
IHBhcmVudE5vZGUoKTsKLSAgICBOb2RlKiBmaXJzdENoaWxkKCk7Ci0gICAgTm9kZSogbGFzdENo
aWxkKCk7Ci0gICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgTm9kZSogbmV4dFNpYmxp
bmcoKTsKLSAgICBOb2RlKiBwcmV2aW91c05vZGUoKTsKLSAgICBOb2RlKiBuZXh0Tm9kZSgpOwot
Ci1wcml2YXRlOgotICAgIC8vIGNvbnZlbmllbmNlIGZvciB3aGVuIGl0IGlzIGtub3duIHRoZXJl
IHdpbGwgYmUgbm8gZXhjZXB0aW9uCi0gICAgdm9pZCBzZXRDdXJyZW50Tm9kZShOb2RlKik7Ci0g
ICAgYm9vbCBhbmNlc3RvclJlamVjdGVkKGNvbnN0IE5vZGUqKSBjb25zdDsKLQotICAgIFJlZlB0
cjxOb2RlPiBtX2N1cnJlbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBOb2RlRmlsdGVyQ29uZGl0aW9uX2gKSW5kZXg6
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkocmV2aXNpb24gMTQ1MzcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwxNSArMjgsMTUgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRl
ICJDb2xvci5oIgorI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkUHRy
TGlzdC5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm9kZUZpbHRlci5o
IgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUg
IkRlY29kZXIuaCIKLSNpbmNsdWRlICJkb20yX3RyYXZlcnNhbGltcGwuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgogCiBj
bGFzcyBSZW5kZXJBcmVuYTsKIApJbmRleDogV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDE0NTI4KQor
KysgV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSwx
MCBAQAogLyoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24g
Zm9yIEtERS4KICAqCi0gKiAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICog
KEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCi0gKiAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZGVy
aWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11
ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNCBB
cHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIzLDE1MSArMjQsNTYgQEAKICAq
CiAgKi8KIAotI2lmbmRlZiBkb20yX3RyYXZlcnNhbF9oCi0jZGVmaW5lIGRvbTJfdHJhdmVyc2Fs
X2gKKyNpZm5kZWYgTm9kZUl0ZXJhdG9yX2gKKyNkZWZpbmUgTm9kZUl0ZXJhdG9yX2gKIAotI2lu
Y2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJUcmF2
ZXJzYWwuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBOb2RlOwotY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFz
cyBEb2N1bWVudDsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKyAgICB0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBOb2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIFNo
YXJlZDxOb2RlRmlsdGVyQ29uZGl0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Tm9kZUZp
bHRlckNvbmRpdGlvbigpIHsgfQotICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKikg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmsoKSB7IH0KLX07Ci0KLWNsYXNzIE5vZGVGaWx0
ZXIgOiBwdWJsaWMgU2hhcmVkPE5vZGVGaWx0ZXI+LCBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0g
ICAgLyoqCi0gICAgICogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJldHVybmVkIGJ5IHRo
ZSBhY2NlcHROb2RlKCkKLSAgICAgKiBtZXRob2Q6Ci0gICAgICovCi0gICAgZW51bSB7Ci0gICAg
ICAgIEZJTFRFUl9BQ0NFUFQgPSAxLAotICAgICAgICBGSUxURVJfUkVKRUNUID0gMiwKLSAgICAg
ICAgRklMVEVSX1NLSVAgICA9IDMKKyAgICBjbGFzcyBOb2RlSXRlcmF0b3IgOiBwdWJsaWMgVHJh
dmVyc2FsIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5vZGVJdGVyYXRvcihOb2RlKiwgdW5zaWdu
ZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlS
ZWZlcmVuY2VzKTsKKyAgICAgICAgfk5vZGVJdGVyYXRvcigpOworCisgICAgICAgIE5vZGUqIG5l
eHROb2RlKEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBkZXRhY2goRXhjZXB0aW9uQ29kZSYpOworCisgICAg
ICAgIE5vZGUqIHJlZmVyZW5jZU5vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlZmVyZW5jZU5vZGUu
Z2V0KCk7IH0KKyAgICAgICAgYm9vbCBwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmVmb3JlUmVmZXJlbmNlTm9kZTsgfQorCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgaWYgeW91IGRlbGV0ZSBhIG5vZGUg
ZnJvbSB0aGUKKyAgICAgICAgICogZG9jdW1lbnQgdHJlZSBhbmQgeW91IHdhbnQgdGhlIEl0ZXJh
dG9yIHRvIHJlYWN0IGlmIHRoZXJlCisgICAgICAgICAqIGFyZSBhbnkgY2hhbmdlcyBjb25jZXJu
aW5nIGl0LgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBub3RpZnlCZWZvcmVOb2RlUmVtb3Zh
bChOb2RlKiByZW1vdmVkKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0UmVmZXJl
bmNlTm9kZShOb2RlKik7CisgICAgICAgIHZvaWQgc2V0UG9pbnRlckJlZm9yZVJlZmVyZW5jZU5v
ZGUoYm9vbCBmbGFnID0gdHJ1ZSkgeyBtX2JlZm9yZVJlZmVyZW5jZU5vZGUgPSBmbGFnOyB9Cisg
ICAgICAgIGJvb2wgZGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2RldGFjaGVkOyB9CisgICAg
ICAgIHZvaWQgc2V0RGV0YWNoZWQoYm9vbCBmbGFnID0gdHJ1ZSkgeyBtX2RldGFjaGVkID0gZmxh
ZzsgfQorICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvYy5n
ZXQoKTsgfQorICAgICAgICBOb2RlKiBmaW5kTmV4dE5vZGUoTm9kZSopIGNvbnN0OworICAgICAg
ICBOb2RlKiBmaW5kUHJldmlvdXNOb2RlKE5vZGUqKSBjb25zdDsKKworICAgICAgICBSZWZQdHI8
Tm9kZT4gbV9yZWZlcmVuY2VOb2RlOworICAgICAgICBib29sIG1fYmVmb3JlUmVmZXJlbmNlTm9k
ZTsKKyAgICAgICAgYm9vbCBtX2RldGFjaGVkOworICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1f
ZG9jOwogICAgIH07CiAKLSAgICAvKioKLSAgICAgKiBUaGVzZSBhcmUgdGhlIGF2YWlsYWJsZSB2
YWx1ZXMgZm9yIHRoZSB3aGF0VG9TaG93IHBhcmFtZXRlci4KLSAgICAgKiBUaGV5IGFyZSB0aGUg
c2FtZSBhcyB0aGUgc2V0IG9mIHBvc3NpYmxlIHR5cGVzIGZvciBOb2RlLCBhbmQKLSAgICAgKiB0
aGVpciB2YWx1ZXMgYXJlIGRlcml2ZWQgYnkgdXNpbmcgYSBiaXQgcG9zaXRpb24gY29ycmVzcG9u
ZGluZwotICAgICAqIHRvIHRoZSB2YWx1ZSBvZiBOb2RlVHlwZSBmb3IgdGhlIGVxdWl2YWxlbnQg
bm9kZSB0eXBlLgotICAgICAqLwotICAgIGVudW0gewotICAgICAgICBTSE9XX0FMTCAgICAgICAg
ICAgICAgICAgICAgICAgPSAweEZGRkZGRkZGLAotICAgICAgICBTSE9XX0VMRU1FTlQgICAgICAg
ICAgICAgICAgICAgPSAweDAwMDAwMDAxLAotICAgICAgICBTSE9XX0FUVFJJQlVURSAgICAgICAg
ICAgICAgICAgPSAweDAwMDAwMDAyLAotICAgICAgICBTSE9XX1RFWFQgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAwMDAwMDA0LAotICAgICAgICBTSE9XX0NEQVRBX1NFQ1RJT04gICAgICAgICAg
ICAgPSAweDAwMDAwMDA4LAotICAgICAgICBTSE9XX0VOVElUWV9SRUZFUkVOQ0UgICAgICAgICAg
PSAweDAwMDAwMDEwLAotICAgICAgICBTSE9XX0VOVElUWSAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDAwMDIwLAotICAgICAgICBTSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04gICAgPSAweDAw
MDAwMDQwLAotICAgICAgICBTSE9XX0NPTU1FTlQgICAgICAgICAgICAgICAgICAgPSAweDAwMDAw
MDgwLAotICAgICAgICBTSE9XX0RPQ1VNRU5UICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMTAw
LAotICAgICAgICBTSE9XX0RPQ1VNRU5UX1RZUEUgICAgICAgICAgICAgPSAweDAwMDAwMjAwLAot
ICAgICAgICBTSE9XX0RPQ1VNRU5UX0ZSQUdNRU5UICAgICAgICAgPSAweDAwMDAwNDAwLAotICAg
ICAgICBTSE9XX05PVEFUSU9OICAgICAgICAgICAgICAgICAgPSAweDAwMDAwODAwCi0gICAgfTsK
LQotICAgIE5vZGVGaWx0ZXIoTm9kZUZpbHRlckNvbmRpdGlvbiopOwotICAgIHNob3J0IGFjY2Vw
dE5vZGUoTm9kZSopIGNvbnN0OwotICAgIHZvaWQgbWFyaygpIHsgbV9jb25kaXRpb24tPm1hcmso
KTsgfTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZUZpbHRlckNvbmRpdGlvbj4gbV9jb25k
aXRpb247Ci19OwotCi1jbGFzcyBUcmF2ZXJzYWwgOiBwdWJsaWMgU2hhcmVkPFRyYXZlcnNhbD4K
LXsKLXB1YmxpYzoKLSAgICBUcmF2ZXJzYWwoTm9kZSosIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBh
c3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Ci0gICAg
dmlydHVhbCB+VHJhdmVyc2FsKCk7Ci0KLSAgICBOb2RlKiByb290KCkgY29uc3QgeyByZXR1cm4g
bV9yb290LmdldCgpOyB9Ci0gICAgdW5zaWduZWQgd2hhdFRvU2hvdygpIGNvbnN0IHsgcmV0dXJu
IG1fd2hhdFRvU2hvdzsgfQotICAgIE5vZGVGaWx0ZXIqIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsdGVyLmdldCgpOyB9Ci0gICAgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKCkgY29u
c3QgeyByZXR1cm4gbV9leHBhbmRFbnRpdHlSZWZlcmVuY2VzOyB9Ci0KLSAgICBzaG9ydCBhY2Nl
cHROb2RlKE5vZGUqKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBUcmF2ZXJzYWwoY29uc3QgVHJh
dmVyc2FsICYpOwotICAgIFRyYXZlcnNhbCAmb3BlcmF0b3I9KGNvbnN0IFRyYXZlcnNhbCAmKTsK
LSAgICAKLSAgICBSZWZQdHI8Tm9kZT4gbV9yb290OwotICAgIHVuc2lnbmVkIG1fd2hhdFRvU2hv
dzsKLSAgICBSZWZQdHI8Tm9kZUZpbHRlcj4gbV9maWx0ZXI7Ci0gICAgYm9vbCBtX2V4cGFuZEVu
dGl0eVJlZmVyZW5jZXM7Ci19OwotCi1jbGFzcyBOb2RlSXRlcmF0b3IgOiBwdWJsaWMgVHJhdmVy
c2FsCi17Ci1wdWJsaWM6Ci0gICAgTm9kZUl0ZXJhdG9yKE5vZGUqLCB1bnNpZ25lZCB3aGF0VG9T
aG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMp
OwotICAgIH5Ob2RlSXRlcmF0b3IoKTsKLQotICAgIE5vZGUqIG5leHROb2RlKEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBOb2RlKiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
ZGV0YWNoKEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIE5vZGUqIHJlZmVyZW5jZU5vZGUoKSBjb25z
dCB7IHJldHVybiBtX3JlZmVyZW5jZU5vZGUuZ2V0KCk7IH0KLSAgICBib29sIHBvaW50ZXJCZWZv
cmVSZWZlcmVuY2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iZWZvcmVSZWZlcmVuY2VOb2RlOyB9
Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgaWYgeW91
IGRlbGV0ZSBhIG5vZGUgZnJvbSB0aGUKLSAgICAgKiBkb2N1bWVudCB0cmVlIGFuZCB5b3Ugd2Fu
dCB0aGUgSXRlcmF0b3IgdG8gcmVhY3QgaWYgdGhlcmUKLSAgICAgKiBhcmUgYW55IGNoYW5nZXMg
Y29uY2VybmluZyBpdC4KLSAgICAgKi8KLSAgICB2b2lkIG5vdGlmeUJlZm9yZU5vZGVSZW1vdmFs
KE5vZGUqIHJlbW92ZWQpOwotCi1wcml2YXRlOgotICAgIHZvaWQgc2V0UmVmZXJlbmNlTm9kZShO
b2RlKik7Ci0gICAgdm9pZCBzZXRQb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZShib29sIGZsYWcg
PSB0cnVlKSB7IG1fYmVmb3JlUmVmZXJlbmNlTm9kZSA9IGZsYWc7IH0KLSAgICBib29sIGRldGFj
aGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhY2hlZDsgfQotICAgIHZvaWQgc2V0RGV0YWNoZWQo
Ym9vbCBmbGFnID0gdHJ1ZSkgeyBtX2RldGFjaGVkID0gZmxhZzsgfQotICAgIERvY3VtZW50KiBk
b2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jLmdldCgpOyB9Ci0gICAgTm9kZSogZmluZE5l
eHROb2RlKE5vZGUqKSBjb25zdDsKLSAgICBOb2RlKiBmaW5kUHJldmlvdXNOb2RlKE5vZGUqKSBj
b25zdDsKLQotICAgIFJlZlB0cjxOb2RlPiBtX3JlZmVyZW5jZU5vZGU7Ci0gICAgYm9vbCBtX2Jl
Zm9yZVJlZmVyZW5jZU5vZGU7Ci0gICAgYm9vbCBtX2RldGFjaGVkOwotICAgIFJlZlB0cjxEb2N1
bWVudD4gbV9kb2M7Ci19OwotCi1jbGFzcyBUcmVlV2Fsa2VyIDogcHVibGljIFRyYXZlcnNhbCB7
Ci1wdWJsaWM6Ci0gICAgVHJlZVdhbGtlcihOb2RlKiwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFz
c1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLQotICAg
IE5vZGUqIGN1cnJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50LmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRDdXJyZW50Tm9kZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgTm9k
ZSogcGFyZW50Tm9kZSgpOwotICAgIE5vZGUqIGZpcnN0Q2hpbGQoKTsKLSAgICBOb2RlKiBsYXN0
Q2hpbGQoKTsKLSAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKTsKLSAgICBOb2RlKiBuZXh0U2li
bGluZygpOwotICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpOwotICAgIE5vZGUqIG5leHROb2RlKCk7
Ci0KLXByaXZhdGU6Ci0gICAgLy8gY29udmVuaWVuY2UgZm9yIHdoZW4gaXQgaXMga25vd24gdGhl
cmUgd2lsbCBiZSBubyBleGNlcHRpb24KLSAgICB2b2lkIHNldEN1cnJlbnROb2RlKE5vZGUqKTsK
LSAgICBib29sIGFuY2VzdG9yUmVqZWN0ZWQoY29uc3QgTm9kZSopIGNvbnN0OwotCi0gICAgUmVm
UHRyPE5vZGU+IG1fY3VycmVudDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIE5vZGVJdGVyYXRvcl9oCkluZGV4OiBXZWJD
b3JlL2RvbS9UcmF2ZXJzYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UcmF2ZXJzYWwu
aAkocmV2aXNpb24gMTQ1MjgpCisrKyBXZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw5ICsxLDEwIEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERP
TSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgogICoKLSAqIChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCi0gKiAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xs
amVuQGhpZy5ubykKLSAqIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCisgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xsamVuQGhpZy5ubykKKyAq
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29weXJp
Z2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICogQ29w
eXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjMs
MTUxICsyNCw0MSBAQAogICoKICAqLwogCi0jaWZuZGVmIGRvbTJfdHJhdmVyc2FsX2gKLSNkZWZp
bmUgZG9tMl90cmF2ZXJzYWxfaAorI2lmbmRlZiBUcmF2ZXJzYWxfaAorI2RlZmluZSBUcmF2ZXJz
YWxfaAogCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNs
dWRlICJTaGFyZWQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBOb2RlOwotY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgTm9kZTsKIAot
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6
IHB1YmxpYyBTaGFyZWQ8Tm9kZUZpbHRlckNvbmRpdGlvbj4gewotcHVibGljOgotICAgIHZpcnR1
YWwgfk5vZGVGaWx0ZXJDb25kaXRpb24oKSB7IH0KLSAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5v
ZGUoTm9kZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCkgeyB9Ci19OwotCi1jbGFz
cyBOb2RlRmlsdGVyIDogcHVibGljIFNoYXJlZDxOb2RlRmlsdGVyPiwgTm9uY29weWFibGUgewot
cHVibGljOgotICAgIC8qKgotICAgICAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZXR1
cm5lZCBieSB0aGUgYWNjZXB0Tm9kZSgpCi0gICAgICogbWV0aG9kOgotICAgICAqLwotICAgIGVu
dW0gewotICAgICAgICBGSUxURVJfQUNDRVBUID0gMSwKLSAgICAgICAgRklMVEVSX1JFSkVDVCA9
IDIsCi0gICAgICAgIEZJTFRFUl9TS0lQICAgPSAzCi0gICAgfTsKLQotICAgIC8qKgotICAgICAq
IFRoZXNlIGFyZSB0aGUgYXZhaWxhYmxlIHZhbHVlcyBmb3IgdGhlIHdoYXRUb1Nob3cgcGFyYW1l
dGVyLgotICAgICAqIFRoZXkgYXJlIHRoZSBzYW1lIGFzIHRoZSBzZXQgb2YgcG9zc2libGUgdHlw
ZXMgZm9yIE5vZGUsIGFuZAotICAgICAqIHRoZWlyIHZhbHVlcyBhcmUgZGVyaXZlZCBieSB1c2lu
ZyBhIGJpdCBwb3NpdGlvbiBjb3JyZXNwb25kaW5nCi0gICAgICogdG8gdGhlIHZhbHVlIG9mIE5v
ZGVUeXBlIGZvciB0aGUgZXF1aXZhbGVudCBub2RlIHR5cGUuCi0gICAgICovCi0gICAgZW51bSB7
Ci0gICAgICAgIFNIT1dfQUxMICAgICAgICAgICAgICAgICAgICAgICA9IDB4RkZGRkZGRkYsCi0g
ICAgICAgIFNIT1dfRUxFTUVOVCAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDEsCi0gICAg
ICAgIFNIT1dfQVRUUklCVVRFICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDIsCi0gICAgICAg
IFNIT1dfVEVYVCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQsCi0gICAgICAgIFNI
T1dfQ0RBVEFfU0VDVElPTiAgICAgICAgICAgICA9IDB4MDAwMDAwMDgsCi0gICAgICAgIFNIT1df
RU5USVRZX1JFRkVSRU5DRSAgICAgICAgICA9IDB4MDAwMDAwMTAsCi0gICAgICAgIFNIT1dfRU5U
SVRZICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMjAsCi0gICAgICAgIFNIT1dfUFJPQ0VT
U0lOR19JTlNUUlVDVElPTiAgICA9IDB4MDAwMDAwNDAsCi0gICAgICAgIFNIT1dfQ09NTUVOVCAg
ICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwODAsCi0gICAgICAgIFNIT1dfRE9DVU1FTlQgICAg
ICAgICAgICAgICAgICA9IDB4MDAwMDAxMDAsCi0gICAgICAgIFNIT1dfRE9DVU1FTlRfVFlQRSAg
ICAgICAgICAgICA9IDB4MDAwMDAyMDAsCi0gICAgICAgIFNIT1dfRE9DVU1FTlRfRlJBR01FTlQg
ICAgICAgICA9IDB4MDAwMDA0MDAsCi0gICAgICAgIFNIT1dfTk9UQVRJT04gICAgICAgICAgICAg
ICAgICA9IDB4MDAwMDA4MDAKKyAgICBjbGFzcyBUcmF2ZXJzYWwgOiBwdWJsaWMgU2hhcmVkPFRy
YXZlcnNhbD4geworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhdmVyc2FsKE5vZGUqLCB1bnNpZ25l
ZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJl
ZmVyZW5jZXMpOworICAgICAgICB2aXJ0dWFsIH5UcmF2ZXJzYWwoKTsKKworICAgICAgICBOb2Rl
KiByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290LmdldCgpOyB9CisgICAgICAgIHVuc2lnbmVk
IHdoYXRUb1Nob3coKSBjb25zdCB7IHJldHVybiBtX3doYXRUb1Nob3c7IH0KKyAgICAgICAgTm9k
ZUZpbHRlciogZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXIuZ2V0KCk7IH0KKyAgICAg
ICAgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKCkgY29uc3QgeyByZXR1cm4gbV9leHBhbmRF
bnRpdHlSZWZlcmVuY2VzOyB9CisKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKikgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBUcmF2ZXJzYWwoY29uc3QgVHJhdmVyc2FsJik7
CisgICAgICAgIFRyYXZlcnNhbCYgb3BlcmF0b3I9KGNvbnN0IFRyYXZlcnNhbCYpOworICAgICAg
ICAKKyAgICAgICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsKKyAgICAgICAgdW5zaWduZWQgbV93aGF0
VG9TaG93OworICAgICAgICBSZWZQdHI8Tm9kZUZpbHRlcj4gbV9maWx0ZXI7CisgICAgICAgIGJv
b2wgbV9leHBhbmRFbnRpdHlSZWZlcmVuY2VzOwogICAgIH07CiAKLSAgICBOb2RlRmlsdGVyKE5v
ZGVGaWx0ZXJDb25kaXRpb24qKTsKLSAgICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqKSBjb25zdDsK
LSAgICB2b2lkIG1hcmsoKSB7IG1fY29uZGl0aW9uLT5tYXJrKCk7IH07Ci0KLXByaXZhdGU6Ci0g
ICAgUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+IG1fY29uZGl0aW9uOwotfTsKLQotY2xhc3Mg
VHJhdmVyc2FsIDogcHVibGljIFNoYXJlZDxUcmF2ZXJzYWw+Ci17Ci1wdWJsaWM6Ci0gICAgVHJh
dmVyc2FsKE5vZGUqLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+
LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwotICAgIHZpcnR1YWwgflRyYXZlcnNhbCgp
OwotCi0gICAgTm9kZSogcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdC5nZXQoKTsgfQotICAg
IHVuc2lnbmVkIHdoYXRUb1Nob3coKSBjb25zdCB7IHJldHVybiBtX3doYXRUb1Nob3c7IH0KLSAg
ICBOb2RlRmlsdGVyKiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlci5nZXQoKTsgfQot
ICAgIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5k
RW50aXR5UmVmZXJlbmNlczsgfQotCi0gICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKikgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgVHJhdmVyc2FsKGNvbnN0IFRyYXZlcnNhbCAmKTsKLSAgICBUcmF2
ZXJzYWwgJm9wZXJhdG9yPShjb25zdCBUcmF2ZXJzYWwgJik7Ci0gICAgCi0gICAgUmVmUHRyPE5v
ZGU+IG1fcm9vdDsKLSAgICB1bnNpZ25lZCBtX3doYXRUb1Nob3c7Ci0gICAgUmVmUHRyPE5vZGVG
aWx0ZXI+IG1fZmlsdGVyOwotICAgIGJvb2wgbV9leHBhbmRFbnRpdHlSZWZlcmVuY2VzOwotfTsK
LQotY2xhc3MgTm9kZUl0ZXJhdG9yIDogcHVibGljIFRyYXZlcnNhbAotewotcHVibGljOgotICAg
IE5vZGVJdGVyYXRvcihOb2RlKiwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2Rl
RmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSAgICB+Tm9kZUl0ZXJhdG9y
KCk7Ci0KLSAgICBOb2RlKiBuZXh0Tm9kZShFeGNlcHRpb25Db2RlJik7Ci0gICAgTm9kZSogcHJl
dmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRldGFjaChFeGNlcHRpb25Db2Rl
Jik7Ci0KLSAgICBOb2RlKiByZWZlcmVuY2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVu
Y2VOb2RlLmdldCgpOyB9Ci0gICAgYm9vbCBwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmVmb3JlUmVmZXJlbmNlTm9kZTsgfQotCi0gICAgLyoqCi0gICAgICog
VGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkIGlmIHlvdSBkZWxldGUgYSBub2RlIGZyb20g
dGhlCi0gICAgICogZG9jdW1lbnQgdHJlZSBhbmQgeW91IHdhbnQgdGhlIEl0ZXJhdG9yIHRvIHJl
YWN0IGlmIHRoZXJlCi0gICAgICogYXJlIGFueSBjaGFuZ2VzIGNvbmNlcm5pbmcgaXQuCi0gICAg
ICovCi0gICAgdm9pZCBub3RpZnlCZWZvcmVOb2RlUmVtb3ZhbChOb2RlKiByZW1vdmVkKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIHNldFJlZmVyZW5jZU5vZGUoTm9kZSopOwotICAgIHZvaWQgc2V0
UG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoYm9vbCBmbGFnID0gdHJ1ZSkgeyBtX2JlZm9yZVJl
ZmVyZW5jZU5vZGUgPSBmbGFnOyB9Ci0gICAgYm9vbCBkZXRhY2hlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGV0YWNoZWQ7IH0KLSAgICB2b2lkIHNldERldGFjaGVkKGJvb2wgZmxhZyA9IHRydWUpIHsg
bV9kZXRhY2hlZCA9IGZsYWc7IH0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RvYy5nZXQoKTsgfQotICAgIE5vZGUqIGZpbmROZXh0Tm9kZShOb2RlKikgY29uc3Q7
Ci0gICAgTm9kZSogZmluZFByZXZpb3VzTm9kZShOb2RlKikgY29uc3Q7Ci0KLSAgICBSZWZQdHI8
Tm9kZT4gbV9yZWZlcmVuY2VOb2RlOwotICAgIGJvb2wgbV9iZWZvcmVSZWZlcmVuY2VOb2RlOwot
ICAgIGJvb2wgbV9kZXRhY2hlZDsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOwotfTsKLQot
Y2xhc3MgVHJlZVdhbGtlciA6IHB1YmxpYyBUcmF2ZXJzYWwgewotcHVibGljOgotICAgIFRyZWVX
YWxrZXIoTm9kZSosIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4s
IGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Ci0KLSAgICBOb2RlKiBjdXJyZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudC5nZXQoKTsgfQotICAgIHZvaWQgc2V0Q3VycmVudE5v
ZGUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIE5vZGUqIHBhcmVudE5vZGUoKTsKLSAg
ICBOb2RlKiBmaXJzdENoaWxkKCk7Ci0gICAgTm9kZSogbGFzdENoaWxkKCk7Ci0gICAgTm9kZSog
cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgTm9kZSogbmV4dFNpYmxpbmcoKTsKLSAgICBOb2RlKiBw
cmV2aW91c05vZGUoKTsKLSAgICBOb2RlKiBuZXh0Tm9kZSgpOwotCi1wcml2YXRlOgotICAgIC8v
IGNvbnZlbmllbmNlIGZvciB3aGVuIGl0IGlzIGtub3duIHRoZXJlIHdpbGwgYmUgbm8gZXhjZXB0
aW9uCi0gICAgdm9pZCBzZXRDdXJyZW50Tm9kZShOb2RlKik7Ci0gICAgYm9vbCBhbmNlc3RvclJl
amVjdGVkKGNvbnN0IE5vZGUqKSBjb25zdDsKLQotICAgIFJlZlB0cjxOb2RlPiBtX2N1cnJlbnQ7
Ci19OwotCi19IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYK
KyNlbmRpZiAvLyBUcmF2ZXJzYWxfaApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0NTM3KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsMTYgQEAK
IAkJN0U2RkVFRDkwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNkZFRUQ3MDg5
ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIubW0gKi87IH07CiAJCTgxMTY4
OTVGMDlGMkE0QTAwMDc3MkNBMCAvKiBTVkdUUmVmRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MTE2ODk1RDA5RjJBNEEwMDA3NzJDQTAg
LyogU1ZHVFJlZkVsZW1lbnQuY3BwICovOyB9OwogCQk4MTE2ODk2MDA5RjJBNEEwMDA3NzJDQTAg
LyogU1ZHVFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDgxMTY4OTVFMDlGMkE0QTAwMDc3MkNBMCAvKiBTVkdUUmVmRWxlbWVudC5oICov
OyB9OworCQk4NTRGRTczMDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTRGRTcyNjBBMjI5N0JF
MDA1OEQ3QUQgLyogTm9kZUZpbHRlci5jcHAgKi87IH07CisJCTg1NEZFNzMxMEEyMjk3QkUwMDU4
RDdBRCAvKiBOb2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NTRGRTcyNzBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlci5oICovOyB9
OworCQk4NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTRGRTcyODBB
MjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgKi87IH07CisJCTg1NEZF
NzMzMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTRGRTcyOTBBMjI5N0JFMDA1OEQ3
QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5oICovOyB9OworCQk4NTRGRTczNDBBMjI5N0JFMDA1
OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg1NEZFNzJBMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlSXRlcmF0b3Iu
Y3BwICovOyB9OworCQk4NTRGRTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTRGRTcyQjBB
MjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggKi87IH07CisJCTg1NEZFNzM2MEEyMjk3
QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODU0RkU3MkMwQTIyOTdCRTAwNThEN0FEIC8qIFRyYXZlcnNhbC5j
cHAgKi87IH07CisJCTg1NEZFNzM3MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1NEZFNzJEMEEyMjk3
QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuaCAqLzsgfTsKKwkJODU0RkU3MzgwQTIyOTdCRTAwNThE
N0FEIC8qIFRyZWVXYWxrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODU0RkU3MkUwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuY3BwICov
OyB9OworCQk4NTRGRTczOTBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODU0RkU3MkYwQTIyOTdCRTAw
NThEN0FEIC8qIFRyZWVXYWxrZXIuaCAqLzsgfTsKIAkJOTMwMzJDQzgwOUFFQzM0MzAwRjgyQTE4
IC8qIFBhdGhDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzAzMkNDNzA5QUVDMzQzMDBGODJBMTggLyogUGF0aENHLmNwcCAqLzsgfTsKIAkJOTMw
MzJDQ0EwOUFFQzM0QjAwRjgyQTE4IC8qIFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDMyQ0M5MDlBRUMzNEIwMEY4MkExOCAvKiBQYXRoLmgg
Ki87IH07CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4
ODU1IC8qIFRpbWVyLmggKi87IH07CkBAIC01MTUsNyArNTI1LDYgQEAKIAkJOTNGMTk4RjYwODI0
NUU1OTAwMUU5QUJDIC8qIERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc5MDJERTQzRDcwMTg2MzVDQSAvKiBEZWNvZGVyLmggKi87
IH07CiAJCTkzRjE5OTE3MDgyNDVFNTkwMDFFOUFCQyAvKiBkb20yX2V2ZW50c2ltcGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAyMDJERTQ0
NzYwMTg2MzVDQSAvKiBkb20yX2V2ZW50c2ltcGwuaCAqLzsgfTsKIAkJOTNGMTk5MTgwODI0NUU1
OTAwMUU5QUJDIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTIzRDMwNDAyREU0NDc2MDE4NjM1Q0EgLyogUmFuZ2UuaCAqLzsgfTsKLQkJ
OTNGMTk5MTkwODI0NUU1OTAwMUU5QUJDIC8qIGRvbTJfdHJhdmVyc2FsaW1wbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDYwMkRFNDQ3NjAx
ODYzNUNBIC8qIGRvbTJfdHJhdmVyc2FsaW1wbC5oICovOyB9OwogCQk5M0YxOTkyMTA4MjQ1RTU5
MDAxRTlBQkMgLyogeG1sX3Rva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNBIC8qIHhtbF90b2tlbml6
ZXIuaCAqLzsgfTsKIAkJOTNGMTk5MjkwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUNTdHJpbmcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NjgzMDJE
RTNCODYwMUVBNDEyMiAvKiBLV1FDU3RyaW5nLmggKi87IH07CiAJCTkzRjE5OTJFMDgyNDVFNTkw
MDFFOUFCQyAvKiBLV1FDb21ib0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjU4Nzg2ODIwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUNvbWJvQm94Lmgg
Ki87IH07CkBAIC02MDMsNyArNjEyLDYgQEAKIAkJOTNGMTlBOUQwODI0NUU1OTAwMUU5QUJDIC8q
IERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjUyM0QyNzgwMkRFNDNENzAxODYzNUNBIC8qIERlY29kZXIuY3BwICovOyB9OwogCQk5M0Yx
OUFCODA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tMl9ldmVudHNpbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAxMDJERTQ0NzYwMTg2MzVD
QSAvKiBkb20yX2V2ZW50c2ltcGwuY3BwICovOyB9OwogCQk5M0YxOUFCOTA4MjQ1RTU5MDAxRTlB
QkMgLyogUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjUyM0QzMDMwMkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLzsgfTsKLQkJOTNG
MTlBQkEwODI0NUU1OTAwMUU5QUJDIC8qIGRvbTJfdHJhdmVyc2FsaW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwNTAyREU0NDc2MDE4
NjM1Q0EgLyogZG9tMl90cmF2ZXJzYWxpbXBsLmNwcCAqLzsgfTsKIAkJOTNGMTlBQkMwODI0NUU1
OTAwMUU5QUJDIC8qIHhtbF90b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIHhtbF90b2tl
bml6ZXIuY3BwICovOyB9OwogCQk5M0YxOUFCRTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUNh
Y2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVC
MkE0RkQwMkUyMjIwRjAxODYzNUNCIC8qIFdlYkNvcmVDYWNoZS5tbSAqLzsgfTsKIAkJOTNGMTlB
QkYwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVKYXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVCMkE1MkMwMkUyMjU3MzAxODYzNUNC
IC8qIFdlYkNvcmVKYXZhU2NyaXB0Lm1tICovOyB9OwpAQCAtMTkyMyw2ICsxOTMxLDE2IEBACiAJ
CTg0QzBGQTJDMDUyQjk2NkQwMDA0NDBBMSAvKiBzb3V0aFdlc3RSZXNpemVDdXJzb3IudGlmZiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnRp
ZmY7IHBhdGggPSBzb3V0aFdlc3RSZXNpemVDdXJzb3IudGlmZjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODRDMEZBMkQwNTJCOTY2RDAwMDQ0MEExIC8qIHdhaXRDdXJzb3IudGlmZiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnRp
ZmY7IHBhdGggPSB3YWl0Q3Vyc29yLnRpZmY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg0QzBGQTJFMDUyQjk2NkQwMDA0NDBBMSAvKiB3ZXN0UmVzaXplQ3Vyc29yLnRpZmYgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS50aWZmOyBw
YXRoID0gd2VzdFJlc2l6ZUN1cnNvci50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NTRGRTcyNjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZUZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg1NEZFNzI3MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1NEZFNzI4MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmls
dGVyQ29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODU0
RkU3MjkwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJDb25kaXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVGaWx0ZXJDb25kaXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODU0RkU3MkEwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVy
YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZUl0ZXJh
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODU0RkU3MkIwQTIyOTdCRTAw
NThEN0FEIC8qIE5vZGVJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTm9kZUl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1NEZFNzJD
MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRyYXZlcnNhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg1NEZFNzJEMEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYXZlcnNhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4NTRGRTcyRTBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJlZVdhbGtlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1NEZFNzJGMEEyMjk3QkUwMDU4RDdBRCAvKiBUcmVlV2Fs
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmVlV2Fsa2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDMyQ0M3MDlBRUMzNDMwMEY4MkExOCAvKiBQ
YXRoQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGF0aENHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMzJDQzkwOUFFQzM0QjAwRjgyQTE4
IC8qIFBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGF0aC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGlt
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyMDcsOCArMzIyNSw2IEBACiAJCUY1MjNEMzAyMDJERTQ0
NzYwMTg2MzVDQSAvKiBkb20yX2V2ZW50c2ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZG9tMl9ldmVudHNpbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDMwMzAy
REU0NDc2MDE4NjM1Q0EgLyogUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QzMDQwMkRFNDQ3NjAx
ODYzNUNBIC8qIFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTIzRDMwNTAyREU0NDc2MDE4NjM1Q0EgLyogZG9tMl90
cmF2ZXJzYWxpbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IGRvbTJfdHJhdmVyc2FsaW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTIzRDMwNjAyREU0NDc2
MDE4NjM1Q0EgLyogZG9tMl90cmF2ZXJzYWxpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRvbTJfdHJhdmVyc2FsaW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0Qz
MDkwMkRFNDQ3NjAxODYzNUNBIC8qIHhtbF90b2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0geG1sX3Rva2VuaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlGNTIzRDMwQTAyREU0NDc2MDE4NjM1Q0EgLyogeG1sX3Rva2VuaXplci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB4bWxfdG9rZW5pemVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlGNTUxN0RDMjAzMUFCNTYzMDFBODAxODAgLyogV2ViQ29yZUhpc3RvcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVIaXN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01MjI0LDggKzUyNDAsNiBAQAogCQkJCTkzRUVDMUU4MDlDMjg3Nzcw
MEM1MTVEMSAvKiBEb2N1bWVudFR5cGUuaWRsICovLAogCQkJCUY1MjNEMzAxMDJERTQ0NzYwMTg2
MzVDQSAvKiBkb20yX2V2ZW50c2ltcGwuY3BwICovLAogCQkJCUY1MjNEMzAyMDJERTQ0NzYwMTg2
MzVDQSAvKiBkb20yX2V2ZW50c2ltcGwuaCAqLywKLQkJCQlGNTIzRDMwNTAyREU0NDc2MDE4NjM1
Q0EgLyogZG9tMl90cmF2ZXJzYWxpbXBsLmNwcCAqLywKLQkJCQlGNTIzRDMwNjAyREU0NDc2MDE4
NjM1Q0EgLyogZG9tMl90cmF2ZXJzYWxpbXBsLmggKi8sCiAJCQkJQTgxODVGMzYwOTc2NTc2NTAw
NTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODE4NUYzMzA5NzY1NzY1
MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCAqLywKIAkJCQk5M0VFQzFFOTA5QzI4Nzc3
MDBDNTE1RDEgLyogRE9NSW1wbGVtZW50YXRpb24uaWRsICovLApAQCAtNTI2Miw3ICs1Mjc2LDEz
IEBACiAJCQkJQThDNEE3RUUwOUQ1NjMyNzAwMDNBQzhEIC8qIE5vZGUuY3BwICovLAogCQkJCTE0
MTE1QjUxMDlGODRCNzEwMENBNEZDMSAvKiBOb2RlLmggKi8sCiAJCQkJMTREQzBEMEIwOUZFQ0ZB
NDAwN0IwMjM1IC8qIE5vZGUuaWRsICovLAorCQkJCTg1NEZFNzI2MEEyMjk3QkUwMDU4RDdBRCAv
KiBOb2RlRmlsdGVyLmNwcCAqLywKKwkJCQk4NTRGRTcyNzBBMjI5N0JFMDA1OEQ3QUQgLyogTm9k
ZUZpbHRlci5oICovLAogCQkJCTE0MTE1QUY5MDlGODQ3RDYwMENBNEZDMSAvKiBOb2RlRmlsdGVy
LmlkbCAqLywKKwkJCQk4NTRGRTcyODBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRp
dGlvbi5jcHAgKi8sCisJCQkJODU0RkU3MjkwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJD
b25kaXRpb24uaCAqLywKKwkJCQk4NTRGRTcyQTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJh
dG9yLmNwcCAqLywKKwkJCQk4NTRGRTcyQjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9y
LmggKi8sCiAJCQkJQTgxODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLywK
IAkJCQlBODE4NzIxMDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQlBOEVB
N0VCNzBBMTk0NUQwMDBBOEVGNUYgLyogTm90YXRpb24uY3BwICovLApAQCAtNTI4Myw2ICs1MzAz
LDEwIEBACiAJCQkJNjU1MEI2OUIwOTlERjAyNzAwOTBENzgxIC8qIFRleHQuY3BwICovLAogCQkJ
CTY1NTBCNjlDMDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0LmggKi8sCiAJCQkJOTNFRUMxRjYwOUMy
ODc3NzAwQzUxNUQxIC8qIFRleHQuaWRsICovLAorCQkJCTg1NEZFNzJDMEEyMjk3QkUwMDU4RDdB
RCAvKiBUcmF2ZXJzYWwuY3BwICovLAorCQkJCTg1NEZFNzJEMEEyMjk3QkUwMDU4RDdBRCAvKiBU
cmF2ZXJzYWwuaCAqLywKKwkJCQk4NTRGRTcyRTBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtl
ci5jcHAgKi8sCisJCQkJODU0RkU3MkYwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuaCAq
LywKIAkJCQkxNDFCOTRFRTA5RUM0MjVBMDAwRTk0MTMgLyogVUlFdmVudC5pZGwgKi8sCiAJCQkJ
OTNFRUMxRjcwOUMyODc3NzAwQzUxNUQxIC8qIFdoZWVsRXZlbnQuaWRsICovLAogCQkJCUY1MjNE
MzA5MDJERTQ0NzYwMTg2MzVDQSAvKiB4bWxfdG9rZW5pemVyLmNwcCAqLywKQEAgLTUzNTksNyAr
NTM4Myw2IEBACiAJCQkJOTNGMTk4RjYwODI0NUU1OTAwMUU5QUJDIC8qIERlY29kZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRjE5OTE3MDgyNDVFNTkwMDFFOUFCQyAvKiBkb20yX2V2ZW50c2lt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5n
ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTNGMTk5MTkwODI0NUU1OTAwMUU5QUJDIC8qIGRvbTJf
dHJhdmVyc2FsaW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MjEwODI0NUU1OTAwMUU5
QUJDIC8qIHhtbF90b2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTI5MDgyNDVF
NTkwMDFFOUFCQyAvKiBLV1FDU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTkyRTA4
MjQ1RTU5MDAxRTlBQkMgLyogS1dRQ29tYm9Cb3guaCBpbiBIZWFkZXJzICovLApAQCAtNjA5NCw2
ICs2MTE3LDExIEBACiAJCQkJMUFFMkFFNUMwQTFEMjZGMjAwQjQyQjI1IC8qIEpTSFRNTE1lbnVF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUVDODBBMUQyOTdCMDBCNDJCMjUgLyog
SlNIVE1MUXVvdGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUVFNzBBMUQyQTc1
MDBCNDJCMjUgLyogSlNIVE1MQmxvY2txdW90ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTg1NEZFNzMxMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk4NTRGRTczMzBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODU0RkU3MzcwQTIyOTdCRTAwNThEN0FEIC8qIFRyYXZl
cnNhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODU0RkU3MzkwQTIyOTdCRTAwNThEN0FEIC8qIFRy
ZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNjMwMCw3ICs2MzI4LDYgQEAKIAkJCQk5M0Yx
OUE5RDA4MjQ1RTU5MDAxRTlBQkMgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
M0YxOUFCODA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tMl9ldmVudHNpbXBsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzRjE5QUI5MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk5M0YxOUFCQTA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tMl90cmF2ZXJzYWxpbXBs
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUJDMDgyNDVFNTkwMDFFOUFCQyAvKiB4bWxf
dG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUJFMDgyNDVFNTkwMDFFOUFC
QyAvKiBXZWJDb3JlQ2FjaGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFCRjA4MjQ1RTU5
MDAxRTlBQkMgLyogV2ViQ29yZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLywKQEAgLTY5NjAs
NiArNjk4NywxMSBAQAogCQkJCTFBRTJBRTVCMEExRDI2RjIwMEI0MkIyNSAvKiBKU0hUTUxNZW51
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUVDNzBBMUQyOTdCMDBCNDJCMjUg
LyogSlNIVE1MUXVvdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBRUU2MEEx
RDJBNzUwMEI0MkIyNSAvKiBKU0hUTUxCbG9ja3F1b3RlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk4NTRGRTczMDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk4NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRp
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3QUQgLyog
Tm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg1NEZFNzM2MEEyMjk3QkUwMDU4
RDdBRCAvKiBUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODU0RkU3MzgwQTIyOTdC
RTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ1
MzcpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDA2LTA1LTIzICBTYW0gV2VpbmlnICA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVT
VCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX3RyYXZlcnNhbC5oOgor
ICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL05vZGVGaWx0ZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVGaWx0ZXI6Ok5vZGVGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUZpbHRlcjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogZG9tL05vZGVGaWx0
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyOjopOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUZpbHRlcjo6bWFyayk6CisgICAgICAgICogZG9tL05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVGaWx0ZXJDb25kaXRpb246On5Ob2RlRmlsdGVy
Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVGaWx0ZXJDb25kaXRpb246Om1hcmsp
OgorICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGVJdGVyYXRvcjo6Tm9kZUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJ
dGVyYXRvcjo6ZmluZE5leHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJdGVyYXRvcjo6
bmV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpmaW5kUHJldmlvdXNO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVJdGVyYXRvcjo6c2V0UmVmZXJlbmNlTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6Om5vdGlmeUJlZm9yZU5vZGVSZW1vdmFsKToKKyAgICAg
ICAgKiBkb20vTm9kZUl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0
ZXJhdG9yOjpyZWZlcmVuY2VOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJdGVyYXRvcjo6
cG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJh
dG9yOjpzZXRQb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlSXRlcmF0b3I6OmRldGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJdGVyYXRvcjo6
c2V0RGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpkb2N1bWVudCk6
CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
VHJhdmVyc2FsOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vVHJhdmVyc2FsLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VHJhdmVyc2FsOjpyb290KToKKyAgICAgICAgKFdlYkNvcmU6
OlRyYXZlcnNhbDo6d2hhdFRvU2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpUcmF2ZXJzYWw6OmZp
bHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmF2ZXJzYWw6OmV4cGFuZEVudGl0eVJlZmVyZW5j
ZXMpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpUcmVlV2Fsa2VyOjpUcmVlV2Fsa2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxr
ZXI6OnNldEN1cnJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnBhcmVu
dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6Zmlyc3RDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxr
ZXI6Om5leHRTaWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3Vz
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0Tm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlV2Fsa2VyOjphbmNlc3RvclJlamVjdGVkKToKKyAgICAgICAgKiBkb20v
VHJlZVdhbGtlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OmN1cnJl
bnROb2RlKToKKyAgICAgICAgKiBkb20vZG9tMl90cmF2ZXJzYWxpbXBsLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBkb20vZG9tMl90cmF2ZXJzYWxpbXBsLmg6IFJlbW92ZWQuCisKIDIwMDYtMDUt
MjMgIExldmkgV2VpbnRyYXViICA8bHdlaW50cmF1YkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgSHlhdHQuCg==
</data>
<flag name="review"
          id="2413"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>