<?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>116763</bug_id>
          
          <creation_ts>2013-05-25 11:32:40 -0700</creation_ts>
          <short_desc>It should be possible to record and replay heap operations (both FastMalloc and JSC GC)</short_desc>
          <delta_ts>2013-05-27 17:04:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>116848</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>893623</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-25 11:32:40 -0700</bug_when>
    <thetext>The point here is that if we do GC tests in jsc command-line, we&apos;re missing out on the base heap size that is experienced when you run in-browser.  One way to get correct measurements is to just run in browser or in DRT/WTR.  But another way would be to record the mallocs, frees, GC allocations, and GC marks that happened when running in browser (or in DRT or whatever) and then optionally replay them in jsc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893624</commentid>
    <comment_count>1</comment_count>
      <attachid>202890</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-25 11:33:14 -0700</bug_when>
    <thetext>Created attachment 202890
work in progress

This patch does the recording.  But I still need to write the replaying.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202890</attachid>
            <date>2013-05-25 11:33:14 -0700</date>
            <delta_ts>2013-05-25 11:33:14 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55787</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1ZS5tbQkocmV2
aXNpb24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRWYWx1
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDEyIEBACiAKICNpbXBvcnQgIkFQSUNh
c3QuaCIKICNpbXBvcnQgIkhlYXAuaCIKLSNpbXBvcnQgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAj
aW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgi
CiAjaW1wb3J0ICJXZWFrLmgiCiAjaW1wb3J0ICJXZWFrSGFuZGxlT3duZXIuaCIKICNpbXBvcnQg
Ik9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0ICJPcGVyYXRpb25zLmgiCiAKIGNsYXNzIEpT
TWFuYWdlZFZhbHVlSGFuZGxlT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewog
cHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU3LDcgKzE0NTcsNyBAQCBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KAotICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIGluaXRp
YWxPdXRPZkxpbmVDYXBhY2l0eSwgZmFsc2UsIDApKTsKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkKHZtLCAwLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHksIGZhbHNl
LCAwKSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbmV3U2l6ZSkKQEAgLTE0NjYsNyArMTQ2
Niw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm8KICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oCi0gICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh2bSwgMCwgbmV3U2l6ZSwgZmFsc2UsIDApKTsKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVV
bmluaXRpYWxpemVkKHZtLCAwLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOwogfQogCiBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0
b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVj
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTA1Njkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjk2LDYgKzY5NiwxMCBAQCBzdGF0aWMgZG91YmxlIG1pbnV0ZSA9IDYwLjA7CiAKIHZvaWQg
SGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2dsZSkKIHsKKyNpZiBFTkFCTEUoQUxM
T0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJKU0MgR0Mgc3RhcnRpbmcgY29sbGVjdGlv
bi5cbiIpOworI2VuZGlmCisgICAgCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkdhcmJhZ2UgQ29sbGVjdGlvbiIpOwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVy
cmFsRGVwdGgpOwpAQCAtODA4LDYgKzgxMiwxMCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBU
b2dnbGUgc3dlZXBUb2dnCiAKICAgICBpZiAoT3B0aW9uczo6c2hvd09iamVjdFN0YXRpc3RpY3Mo
KSkKICAgICAgICAgSGVhcFN0YXRpc3RpY3M6OnNob3dPYmplY3RTdGF0aXN0aWNzKHRoaXMpOwor
CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIGZp
bmlzaGluZyBjb2xsZWN0aW9uLlxuIik7CisjZW5kaWYKIH0KIAogYm9vbCBIZWFwOjpjb2xsZWN0
SWZOZWNlc3NhcnlPckRlZmVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJl
dmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE5LDggKzExOSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBN
YXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdFdpdGhOb3JtYWxEZXN0cnVjdG9yKHNp
emVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5ub3JtYWxEZXN0cnVjdG9yQWxsb2Nh
dG9yRm9yKGJ5dGVzKTsgfQogICAgICAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvckZvck9i
amVjdFdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVy
biBtX29iamVjdFNwYWNlLmltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvckFsbG9jYXRvckZvcihi
eXRlcyk7IH0KICAgICAgICAgQ29waWVkQWxsb2NhdG9yJiBzdG9yYWdlQWxsb2NhdG9yKCkgeyBy
ZXR1cm4gbV9zdG9yYWdlU3BhY2UuYWxsb2NhdG9yKCk7IH0KLSAgICAgICAgQ2hlY2tlZEJvb2xl
YW4gdHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVfdCwgdm9pZCoqKTsKLSAgICAgICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5UmVhbGxvY2F0ZVN0b3JhZ2Uodm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CisgICAg
ICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3du
ZXIsIHNpemVfdCwgdm9pZCoqKTsKKyAgICAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0
ZVN0b3JhZ2UoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsK
KyAgICAgICAgdm9pZCBhc2NyaWJlT3duZXIoSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB2b2lkKik7
CiAKICAgICAgICAgdHlwZWRlZiB2b2lkICgqRmluYWxpemVyKShKU0NlbGwqKTsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6ZXIoSlNDZWxsKiwgRmluYWxpemVyKTsK
QEAgLTM4MiwzMCArMzgzLDY0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIHZvaWQq
IEhlYXA6OmFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKQogICAgIHsK
KyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgICAgICBkYXRhTG9nRigiSlNDIEdD
IGFsbG9jYXRpbmcgJWx1IGJ5dGVzIHdpdGggbm9ybWFsIGRlc3RydWN0b3IuXG4iLCBieXRlcyk7
CisjZW5kaWYKICAgICAgICAgQVNTRVJUKGlzVmFsaWRBbGxvY2F0aW9uKGJ5dGVzKSk7CiAgICAg
ICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0b3IoYnl0
ZXMpOwogICAgIH0KICAgICAKICAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoSW1t
b3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKICAgICB7CisjaWYgRU5BQkxF
KEFMTE9DQVRJT05fTE9HR0lORykKKyAgICAgICAgZGF0YUxvZ0YoIkpTQyBHQyBhbGxvY2F0aW5n
ICVsdSBieXRlcyB3aXRoIGltbW9ydGFsIHN0cnVjdHVyZSBkZXN0cnVjdG9yLlxuIiwgYnl0ZXMp
OworI2VuZGlmCiAgICAgICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOwogICAg
ICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhJbW1vcnRhbFN0cnVjdHVyZURl
c3RydWN0b3IoYnl0ZXMpOwogICAgIH0KICAgICAKICAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxs
b2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCiAgICAgeworI2lmIEVOQUJMRShB
TExPQ0FUSU9OX0xPR0dJTkcpCisgICAgICAgIGRhdGFMb2dGKCJKU0MgR0MgYWxsb2NhdGluZyAl
bHUgYnl0ZXMgd2l0aG91dCBkZXN0cnVjdG9yLlxuIiwgYnl0ZXMpOworI2VuZGlmCiAgICAgICAg
IEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOwogICAgICAgICByZXR1cm4gbV9vYmpl
Y3RTcGFjZS5hbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKGJ5dGVzKTsKICAgICB9CiAgICAKLSAg
ICBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVfdCBi
eXRlcywgdm9pZCoqIG91dFB0cikKKyAgICBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gSGVhcDo6dHJ5
QWxsb2NhdGVTdG9yYWdlKEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IGJ5dGVzLCB2b2lk
Kiogb3V0UHRyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RvcmFnZVNwYWNlLnRyeUFsbG9j
YXRlKGJ5dGVzLCBvdXRQdHIpOworICAgICAgICBDaGVja2VkQm9vbGVhbiByZXN1bHQgPSBtX3N0
b3JhZ2VTcGFjZS50cnlBbGxvY2F0ZShieXRlcywgb3V0UHRyKTsKKyNpZiBFTkFCTEUoQUxMT0NB
VElPTl9MT0dHSU5HKQorICAgICAgICBkYXRhTG9nRigiSlNDIEdDIGFsbG9jYXRpbmcgJWx1IGJ5
dGVzIG9mIHN0b3JhZ2UgZm9yICVwOiAlcC5cbiIsIGJ5dGVzLCBpbnRlbmRlZE93bmVyLCAqb3V0
UHRyKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShpbnRlbmRlZE93bmVyKTsKKyNlbmRp
ZgorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gSGVhcDo6dHJ5UmVhbGxvY2F0ZVN0b3JhZ2Uodm9pZCoqIHB0ciwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXdTaXplKQorICAgIGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0
cnlSZWFsbG9jYXRlU3RvcmFnZShKU0NlbGwqIGludGVuZGVkT3duZXIsIHZvaWQqKiBwdHIsIHNp
emVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0
b3JhZ2VTcGFjZS50cnlSZWFsbG9jYXRlKHB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisjaWYgRU5B
QkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICAgICAgdm9pZCogb2xkUHRyID0gKnB0cjsKKyNl
bmRpZgorICAgICAgICBDaGVja2VkQm9vbGVhbiByZXN1bHQgPSBtX3N0b3JhZ2VTcGFjZS50cnlS
ZWFsbG9jYXRlKHB0ciwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05f
TE9HR0lORykKKyAgICAgICAgZGF0YUxvZ0YoIkpTQyBHQyByZWFsbG9jYXRpbmcgJWx1IC0+ICVs
dSBieXRlcyBvZiBzdG9yYWdlIGZvciAlcDogJXAgLT4gJXAuXG4iLCBvbGRTaXplLCBuZXdTaXpl
LCBpbnRlbmRlZE93bmVyLCBvbGRQdHIsICpwdHIpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGludGVuZGVkT3duZXIpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgaW5saW5lIHZvaWQgSGVhcDo6YXNjcmliZU93bmVyKEpTQ2VsbCogaW50ZW5kZWRP
d25lciwgdm9pZCogc3RvcmFnZSkKKyAgICB7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lO
RykKKyAgICAgICAgZGF0YUxvZ0YoIkpTQyBHQyBhc2NyaWJpbmcgJXAgYXMgb3duZXIgb2Ygc3Rv
cmFnZSAlcC5cbiIsIGludGVuZGVkT3duZXIsIHN0b3JhZ2UpOworI2Vsc2UKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGludGVuZGVkT3duZXIpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RvcmFnZSk7
CisjZW5kaWYKICAgICB9CiAKICAgICBpbmxpbmUgQmxvY2tBbGxvY2F0b3ImIEhlYXA6OmJsb2Nr
QWxsb2NhdG9yKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5jcHAJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vCiAgICAgSlNDZWxsKiogcm9vdHMgPSBjb25z
ZXJ2YXRpdmVSb290cy5yb290cygpOwogICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0aXZlUm9v
dHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAg
ICBpbnRlcm5hbEFwcGVuZChyb290c1tpXSk7CisgICAgICAgIGludGVybmFsQXBwZW5kKDAsIHJv
b3RzW2ldKTsKIH0KIAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBKU0NlbGwqIGNlbGwpCkBAIC0yNzksNyArMjc5LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjpzaG91bGRUcnlIYQogICAgIHJldHVybiAo
KGxlbmd0aCgpID4gMSkgJiYgIWlzUm9wZSgpICYmICFpc0hhc2hDb25zU2luZ2xldG9uKCkpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFs
dWUqIHNsb3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5k
KHZvaWQqIGZyb20sIEpTVmFsdWUqIHNsb3QpCiB7CiAgICAgLy8gVGhpcyBpbnRlcm5hbEFwcGVu
ZCBpcyBvbmx5IGludGVuZGVkIGZvciB2aXNpdHMgdG8gb2JqZWN0IGFuZCBhcnJheSBiYWNraW5n
IHN0b3Jlcy4KICAgICAvLyBhcyBpdCBjYW4gY2hhbmdlIHRoZSBKU1ZhbHVlIHBvaW50ZWQgdG8g
YmUgdGhlIGFyZ3VtZW50IHdoZW4gdGhlIG9yaWdpbmFsIEpTVmFsdWUKQEAgLTMxNiw3ICszMTYs
NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpbnRlcm5hbEFwcGVuZChjZWxsKTsKKyAgICBpbnRlcm5hbEFwcGVuZChm
cm9tLCBjZWxsKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6aGFydmVzdFdlYWtSZWZlcmVuY2Vz
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNp
b24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDEwICsxMDUsMTAgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGFwcGVuZChKU1ZhbHVlKik7CiAgICAgdm9pZCBhcHBlbmQoSlNWYWx1ZSosIHNpemVf
dCBjb3VudCk7CiAgICAgdm9pZCBhcHBlbmQoSlNDZWxsKiopOwotCi0gICAgdm9pZCBpbnRlcm5h
bEFwcGVuZChKU0NlbGwqKTsKLSAgICB2b2lkIGludGVybmFsQXBwZW5kKEpTVmFsdWUpOwotICAg
IHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSopOworICAgIAorICAgIHZvaWQgaW50ZXJuYWxB
cHBlbmQodm9pZCogZnJvbSwgSlNDZWxsKik7CisgICAgdm9pZCBpbnRlcm5hbEFwcGVuZCh2b2lk
KiBmcm9tLCBKU1ZhbHVlKTsKKyAgICB2b2lkIGludGVybmFsQXBwZW5kKHZvaWQqIGZyb20sIEpT
VmFsdWUqKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVlUm9v
dHMoKTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6YXBwZW5kKEoKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSBzbG90W2ldOwotICAgICAgICBpbnRl
cm5hbEFwcGVuZCh2YWx1ZSk7CisgICAgICAgIGludGVybmFsQXBwZW5kKCZ2YWx1ZSwgdmFsdWUp
OwogICAgIH0KIH0KIApAQCAtNDcsMjUgKzQ3LDI1IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXIKIHsKICAgICBBU1NFUlQoc2xvdCk7CiAgICAgSlNDZWxsKiBjZWxs
ID0gKnNsb3Q7Ci0gICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7CisgICAgaW50ZXJuYWxBcHBlbmQo
c2xvdCwgY2VsbCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
KEpTVmFsdWUqIHNsb3QpCiB7CiAgICAgQVNTRVJUKHNsb3QpOwotICAgIGludGVybmFsQXBwZW5k
KCpzbG90KTsKKyAgICBpbnRlcm5hbEFwcGVuZChzbG90LCAqc2xvdCk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZShKU1ZhbHVlKiBz
bG90KQogewogICAgIEFTU0VSVChzbG90KTsKLSAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdCk7Cisg
ICAgaW50ZXJuYWxBcHBlbmQoc2xvdCwgKnNsb3QpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZChKU0NlbGwqKiBzbG90KQogewogICAgIEFTU0VSVChzbG90KTsK
LSAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdCk7CisgICAgaW50ZXJuYWxBcHBlbmQoc2xvdCwgKnNs
b3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtNzMsMTQgKzczLDUwIEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW4KIHsKICAgICBBU1NFUlQod2Vhayk7
CiAgICAgaWYgKHdlYWstPmdldCgpKQotICAgICAgICBpbnRlcm5hbEFwcGVuZCh3ZWFrLT5nZXQo
KSk7CisgICAgICAgIGludGVybmFsQXBwZW5kKDAsIHdlYWstPmdldCgpKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlIHZhbHVlKQor
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCh2b2lkKiBmcm9t
LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaW50ZXJuYWxBcHBlbmQodmFsdWUuYXNDZWxsKCkpOworICAg
IGludGVybmFsQXBwZW5kKGZyb20sIHZhbHVlLmFzQ2VsbCgpKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCh2b2lkKiBmcm9tLCBKU0NlbGwqIGNl
bGwpCit7CisgICAgQVNTRVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7
CisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKEFMTE9DQVRJT05f
TE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIG5vdGljaW5nIHJlZmVyZW5jZSBmcm9tICVw
IHRvICVwLlxuIiwgZnJvbSwgY2VsbCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShmcm9tKTsK
KyNlbmRpZgorI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQorICAgIHZhbGlkYXRlKGNlbGwpOwor
I2VuZGlmCisgICAgaWYgKEhlYXA6OnRlc3RBbmRTZXRNYXJrZWQoY2VsbCkgfHwgIWNlbGwtPnN0
cnVjdHVyZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Zpc2l0Q291bnQrKzsKKyAgICAg
ICAgCisgICAgTUFSS19MT0dfQ0hJTEQoKnRoaXMsIGNlbGwpOworCisgICAgLy8gU2hvdWxkIG5l
dmVyIGF0dGVtcHQgdG8gbWFyayBzb21ldGhpbmcgdGhhdCBpcyB6YXBwZWQuCisgICAgQVNTRVJU
KCFjZWxsLT5pc1phcHBlZCgpKTsKKyAgICAgICAgCisgICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmQoV3JpdGVCYXJyaWVyQmFzZTxUPiogc2xvdCkKK3sKKyAgICBpbnRlcm5hbEFwcGVuZChzbG90
LCAqc2xvdC0+c2xvdCgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRWYWx1ZXMoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBj
b3VudCkKK3sKKyAgICBhcHBlbmQoYmFycmllcnMtPnNsb3QoKSwgY291bnQpOwogfQogCiBpbmxp
bmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJl
bmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCShyZXZpc2lvbiAxNTA1NjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpJVFdyaXRlQmFycmllcjxUPiogc2xvdCkKIHsK
LSAgICBpbnRlcm5hbEFwcGVuZChzbG90LT5nZXQoKSk7CisgICAgaW50ZXJuYWxBcHBlbmQoMCwg
c2xvdC0+Z2V0KCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRDb21tb24uaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDcgKzM0LDExIEBACiAKIC8v
IERpc2FibGUgaW5saW5lIGFsbG9jYXRpb24gaW4gdGhlIGludGVycHJldGVyLiBUaGlzIGlzIGdy
ZWF0IGlmIHlvdSdyZSBjaGFuZ2luZwogLy8gaG93IHRoZSBHQyBhbGxvY2F0ZXMuCisjaWYgRU5B
QkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyNkZWZpbmUgTExJTlRfQUxXQVlTX0FMTE9DQVRFX1NM
T1cgMQorI2Vsc2UKICNkZWZpbmUgTExJTlRfQUxXQVlTX0FMTE9DQVRFX1NMT1cgMAorI2VuZGlm
CiAKIC8vIERpc2FibGUgaW5saW5lIGNhY2hpbmcgb2YgZ2V0X2J5X2lkIGFuZCBwdXRfYnlfaWQu
CiAjZGVmaW5lIExMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAwCkBAIC00Miw3ICs0Niw3IEBACiAv
LyBFbmFibGUgT1NSIGludG8gdGhlIEpJVC4gRGlzYWJsaW5nIHRoaXMgd2hpbGUgdGhlIExMSW50
IGlzIGVuYWJsZWQgZWZmZWN0aXZlbHkKIC8vIHR1cm5zIG9mZiBhbGwgSklUJ2luZywgc2luY2Ug
aW4gTExJbnQncyBwYXJsYW5jZSwgT1NSIHN1YnN1bWVzIGFueSBmb3JtIG9mIEpJVAogLy8gaW52
b2NhdGlvbi4KLSNpZiBFTkFCTEUoSklUKQorI2lmIEVOQUJMRShKSVQpICYmICFFTkFCTEUoQUxM
T0NBVElPTl9MT0dHSU5HKQogI2RlZmluZSBMTElOVF9PU1JfVE9fSklUIDEKICNlbHNlCiAjZGVm
aW5lIExMSU5UX09TUl9UT19KSVQgMApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTAgKzEwNCwxMCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsg
cmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVy
OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9CiAgICAgCi0gICAgc3RhdGljIEJ1dHRlcmZseSog
Y3JlYXRlVW5pbml0aWFsaXplZChWTSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXpl
ZChWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKIAotICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShWTSYs
IHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKLSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoVk0mLCBKU0NlbGwqIGludGVuZGVk
T3duZXIsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoVk0mLCBK
U0NlbGwqIGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBCdXR0ZXJmbHkq
IGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICAKICAgICBJbmRl
eGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQpAQCAtMTQ3LDIwICsxNDcsMjMgQEAgcHVibGljOgogICAgIHZvaWQqIGJhc2Uo
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KICAgICB2
b2lkKiBiYXNlKFN0cnVjdHVyZSopOwogCi0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlT3JH
cm93QXJyYXlSaWdodChCdXR0ZXJmbHkqLCBWTSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOyAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVPckdyb3dBcnJheVJpZ2h0
KAorICAgICAgICBCdXR0ZXJmbHkqLCBWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsCisgICAgICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhZEluZGV4aW5nSGVhZGVyLAorICAgICAgICBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IAogCiAgICAg
Ly8gVGhlIGJ1dHRlcmZseSByZWFsbG9jYXRpb24gbWV0aG9kcyBwZXJmb3JtIHRoZSByZWFsbG9j
YXRpb24gaXRzZWxmIGJ1dCBkbyBub3QgY2hhbmdlIGFueQogICAgIC8vIG9mIHRoZSBtZXRhLWRh
dGEgdG8gcmVmbGVjdCB0aGF0IHRoZSByZWFsbG9jYXRpb24gb2NjdXJyZWQuIE5vdGUgdGhhdCB0
aGlzIHNldCBvZgogICAgIC8vIG1ldGhvZHMgaXMgbm90IGV4aGF1c3RpdmUgYW5kIGlzIG5vdCBp
bnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBhbGwgcG9zc2libGUgYWxsb2NhdGlvbgogICAgIC8vIG1v
ZGVzIG9mIGJ1dHRlcmZsaWVzIC0gdGhlcmUgYXJlIGNvZGUgcGF0aHMgdGhhdCBhbGxvY2F0ZSBi
dXR0ZXJmbGllcyBieSBjYWxsaW5nCiAgICAgLy8gZGlyZWN0bHkgaW50byBIZWFwOjp0cnlBbGxv
Y2F0ZVN0b3JhZ2UuCi0gICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKFZNJiwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3
UHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKFZN
JiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBz
aXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlT
dG9yYWdlKFZNJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNh
cGFjaXR5KTsKLSAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KFZNJiwgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVh
ZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6
ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgotICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQo
Vk0mLCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwot
ICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoVk0mLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIs
IHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgQnV0dGVyZmx5KiBy
ZXNpemVBcnJheShWTSYsIFN0cnVjdHVyZSosIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHlvdSdyZSBu
b3QgY2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhlIG9iamVjdCBoYXMgYW4gaW5kZXhpbmcgaGVh
ZGVyLgorICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShWTSYsIEpTQ2VsbCogaW50
ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJv
cGVydHlTdG9yYWdlKFZNJiwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNh
cGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mLCBKU0NlbGwq
IGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVy
dHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChWTSYsIEpTQ2VsbCog
aW50ZW5kZWRPd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFz
c3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgorICAg
IEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoVk0mLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIFN0
cnVjdHVyZSosIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0
dGVyZmx5KiByZXNpemVBcnJheShWTSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hh
c0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwor
ICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoVk0mLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIFN0
cnVjdHVyZSosIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHlvdSdyZSBub3QgY2hhbmdpbmcgd2hldGhl
ciBvciBub3QgdGhlIG9iamVjdCBoYXMgYW4gaW5kZXhpbmcgaGVhZGVyLgogICAgIEJ1dHRlcmZs
eSogdW5zaGlmdChTdHJ1Y3R1cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CiAgICAgQnV0dGVy
Zmx5KiBzaGlmdChTdHJ1Y3R1cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAko
cmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyNyArMzUsMzAgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFs
aXplZChWTSYgdm0sIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYg
dm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKQogewogICAgIHZvaWQqIHRlbXA7CiAgICAgc2l6ZV90IHNpemUgPSB0
b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZSwgJnRlbXApKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2
bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbnRlbmRlZE93bmVyLCBzaXplLCAmdGVtcCkpOwog
ICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Y3JlYXRlKFZNJiB2bSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFk
ZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogaW50ZW5k
ZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgQnV0dGVyZmx5KiBy
ZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAotICAgICAgICB2bSwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7CisgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsCisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCiAgICAgICAgICpyZXN1bHQtPmlu
ZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoVk0mIHZtLCBK
U0NlbGwqIGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIHJldHVy
biBjcmVhdGUodm0sIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhp
bmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDAp
OworICAgIHJldHVybiBjcmVhdGUoCisgICAgICAgIHZtLCBpbnRlbmRlZE93bmVyLCAwLCBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKIH0KIAogaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVj
dGlvbihDb3B5VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKQpAQCAtNzIsMTEgKzc1LDE0IEBAIGlubGluZSB2b2lkKiBCdXR0ZXJm
bHk6OmJhc2UoU3RydWN0dXJlKiAKICAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwog
fQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0m
IHZtLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNp
emVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpn
cm93UHJvcGVydHlTdG9yYWdlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6
ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3UHJvcGVy
dHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKLSAgICAgICAgdm0sIHByZUNhcGFjaXR5LCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5
Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLAorICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CiAgICAgbWVtY3B5KAogICAgICAgICByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgp
IC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKICAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LApAQCAtODQsNTEgKzkwLDcyIEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd1Byb3BlcnQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0
eUNhcGFjaXR5KQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9y
YWdlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgc2l6ZV90IG5ld1Byb3BlcnR5
Q2FwYWNpdHkpCiB7CiAgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgIHZt
LCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNh
cGFjaXR5LAorICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgaW5kZXhpbmdIZWFkZXIoKS0+cHJl
Q2FwYWNpdHkoc3RydWN0dXJlKSwgb2xkUHJvcGVydHlDYXBhY2l0eSwKICAgICAgICAgaGFzSW5k
ZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCiAgICAgICAgIGluZGV4aW5n
SGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3Bl
cnR5Q2FwYWNpdHkpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1By
b3BlcnR5Q2FwYWNpdHkpCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0
eVN0b3JhZ2UoCisgICAgVk0mIHZtLCBKU0NlbGwqIGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKIHsKICAgICByZXR1cm4g
Z3Jvd1Byb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgdm0sIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAgICAg
dm0sIGludGVuZGVkT3duZXIsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLAorICAgICAgICBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKIH0KIAotaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KEJ1dHRlcmZseSogb2xk
QnV0dGVyZmx5LCBWTSYgdm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCi17
Ci0gICAgaWYgKCFvbGRCdXR0ZXJmbHkpCi0gICAgICAgIHJldHVybiBjcmVhdGUodm0sIDAsIHBy
b3BlcnR5Q2FwYWNpdHksIHRydWUsIEluZGV4aW5nSGVhZGVyKCksIG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKLSAgICByZXR1cm4gb2xkQnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCh2
bSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xk
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKLX0KLQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChWTSYg
dm0sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgQnV0dGVyZmx5KiBvbGRC
dXR0ZXJmbHksIFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hl
YWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLAorICAgIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBpZiAoIW9sZEJ1dHRlcmZseSkg
eworICAgICAgICByZXR1cm4gY3JlYXRlKAorICAgICAgICAgICAgdm0sIGludGVuZGVkT3duZXIs
IDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEluZGV4aW5nSGVhZGVyKCksCisgICAgICAgICAg
ICBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgfQorICAgIHJldHVybiBvbGRC
dXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgb2xk
U3RydWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwKKyAgICAgICAg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCgK
KyAgICBWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LAorICAgIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIs
IHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywKKyAgICBzaXplX3QgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1
cmUsICFpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShvbGRTdHJ1Y3R1cmUpKTsKICAgICBB
U1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgaGFkSW5kZXhpbmdIZWFkZXIgPT0gaGFzSW5kZXhp
bmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIHZvaWQqIHRoZUJh
c2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwot
ICAgIGlmICghdm0uaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgmdGhlQmFzZSwgb2xkU2l6ZSwg
bmV3U2l6ZSkpCisgICAgaWYgKCF2bS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKGludGVuZGVk
T3duZXIsICZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogfQogCi1p
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KFZNJiB2bSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoCisgICAgVk0mIHZt
LCBKU0NlbGwqIGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAgIHNp
emVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICByZXR1cm4gZ3Jvd0Fy
cmF5UmlnaHQoCi0gICAgICAgIHZtLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIG9sZFN0cnVjdHVyZSwg
b2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAogICAgICAgICBoYXNJbmRleGluZ0hl
YWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKICAgICAgICAgaW5kZXhpbmdIZWFk
ZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMob2xkU3RydWN0dXJlKSwgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OnJlc2l6ZUFycmF5KFZNJiB2bSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFz
SW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6
ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OnJlc2l6ZUFycmF5KAorICAgIFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwKKyAgICBzaXplX3Qg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9v
bCBuZXdIYXNJbmRleGluZ0hlYWRlciwKKyAgICBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpCiB7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVk
KAotICAgICAgICB2bSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5ld0hhc0lu
ZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIHZt
LCBpbnRlbmRlZE93bmVyLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFz
SW5kZXhpbmdIZWFkZXIsCisgICAgICAgIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
ICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG11Y2ggbW9yZSBlZmZpY2llbnQgaWYg
d2UgdXNlZCB0aGUgcHJvcGVydHkgc2l6ZSwKICAgICAvLyBub3QgdGhlIGNhcGFjaXR5LgogICAg
IHZvaWQqIHRvID0gcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHk7
CkBAIC0xNDAsMTEgKzE2NywxMyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6
ZUFycmF5CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpyZXNpemVBcnJheShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3
UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK2lubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoCisgICAgVk0mIHZtLCBKU0NlbGwq
IGludGVuZGVkT3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNp
dHksCisgICAgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpOwogICAgIHJldHVybiByZXNpemVBcnJheSgKLSAgICAgICAgdm0sIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIsCisgICAgICAg
IHZtLCBpbnRlbmRlZE93bmVyLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0lu
ZGV4aW5nSGVhZGVyLAogICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcmVDYXBhY2l0eSwKICAgICAgICAgaGFzSW5kZXhp
bmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxNTA1NjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTAgKzQ4LDExIEBAIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQXJy
YXkpOwogCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU05v
bkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheSl9
OwogCi1CdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKFZNJiB2bSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKK0J1dHRlcmZseSogY3JlYXRlQXJy
YXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoCisgICAgVk0mIHZtLCBKU0NlbGwq
IGludGVuZGVkT3duZXIsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7CiAgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKLSAgICAgICAgdm0sIDAsIDAsIHRydWUs
IEluZGV4aW5nSGVhZGVyKCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgICAgIHZt
LCBpbnRlbmRlZE93bmVyLCAwLCAwLCB0cnVlLCBJbmRleGluZ0hlYWRlcigpLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IoMCkpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CiAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluaXRpYWxMZW5ndGgpOwog
ICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCgwKTsKQEAgLTI4Niw3ICsyODcsNyBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgICAgIG5ld1N0b3JhZ2VD
YXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUs
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgaWYgKCF2
bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAg
ICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBuZXdTaXplLCAmbmV3QWxs
b2NCYXNlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNh
cGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDIxICsxNzQs
MjIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBhY3RGb3JTb3J0aW5nKHVuc2lnbmVkJiBudW1E
ZWZpbmVkLCB1bnNpZ25lZCYgbmV3UmVsZXZhbnRMZW5ndGgpOwogfTsKIAotaW5saW5lIEJ1dHRl
cmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KFZNJiB2bSwgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCYgdmVjdG9yTGVuZ3RoKQoraW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29u
dGlndW91c0FycmF5QnV0dGVyZmx5KFZNJiB2bSwgSlNDZWxsKiBpbnRlbmRlZE93bmVyLCB1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkJiB2ZWN0b3JMZW5ndGgpCiB7CiAgICAgSW5kZXhpbmdIZWFk
ZXIgaGVhZGVyOwogICAgIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNU
T1JfTEVOKTsKICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAg
aGVhZGVyLnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
QnV0dGVyZmx5OjpjcmVhdGUoCi0gICAgICAgIHZtLCAwLCAwLCB0cnVlLCBoZWFkZXIsIHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICB2bSwgaW50ZW5kZWRP
d25lciwgMCwgMCwgdHJ1ZSwgaGVhZGVyLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBjcmVh
dGVBcnJheUJ1dHRlcmZseShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCitpbmxpbmUg
QnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShWTSYgdm0sIEpTQ2VsbCogaW50ZW5kZWRP
d25lciwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAotICAgICAgICB2bSwgMCwgMCwgdHJ1ZSwgYmFzZUluZGV4
aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihC
QVNFX1ZFQ1RPUl9MRU4pKTsKKyAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIDAsIDAsIHRydWUs
IGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgpLAorICAgICAgICBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IoQkFTRV9WRUNUT1JfTEVOKSk7CiAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBzdG9yYWdlLT5tX2luZGV4
QmlhcyA9IDA7CiAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKQEAgLTE5Niw3ICsx
OTcsOCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShWCiAgICAgcmV0
dXJuIGJ1dHRlcmZseTsKIH0KIAotQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShWTSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOworQnV0dGVy
Zmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSgKKyAgICBW
TSYsIEpTQ2VsbCogaW50ZW5kZWRPd25lciwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CiAKIGlu
bGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKIHsKQEAgLTIwOCw3ICsyMTAsNyBAQCBpbmxpbmUg
SlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKFZNJiB2bSwgCiAgICAgICAgICAgICB8fCBoYXNEb3Vi
bGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3Vv
dXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGg7Ci0gICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZs
eSh2bSwgaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgYnV0dGVyZmx5ID0g
Y3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KHZtLCAwLCBpbml0aWFsTGVuZ3RoLCB2ZWN0
b3JMZW5ndGgpOwogICAgICAgICBBU1NFUlQoaW5pdGlhbExlbmd0aCA8IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgpOwogICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3Ro
OyArK2kpCkBAIC0yMTgsNyArMjIwLDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0
ZShWTSYgdm0sIAogICAgICAgICBBU1NFUlQoCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICAgICAgICAgICAgIHx8
IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKLSAg
ICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkodm0sIGluaXRpYWxMZW5ndGgp
OworICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseSh2bSwgMCwgaW5pdGlh
bExlbmd0aCk7CiAgICAgfQogICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNBcnJheT4odm0uaGVhcCkpIEpTQXJyYXkodm0sIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5KTsKICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMjQwLDcgKzI0Miw3IEBA
IGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXQKICAgICAgICAgICAgIHx8
IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogCiAgICAgICAgIHZv
aWQqIHRlbXA7Ci0gICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksICZ0ZW1wKSkKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFn
ZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CiAgICAgICAg
IGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CkBAIC0yNTEsNyArMjUz
LDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdAogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKICAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYgKCF2bS5oZWFw
LnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAgICAgaWYgKCF2
bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNl
KHRlbXAsIDAsIDApOwogICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5k
ZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTUw
NTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NDMsNyArNTQzLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50
ZXJEaWN0aW9uYXJ5SQogICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnZh
bHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAotICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFycmF5KHZtLCBzdHJ1Y3R1cmUo
KSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0
dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bmV3QnV0dGVyZmx5KTsKICAgICAKICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKQEAg
LTU5NSw4ICs1OTUsOCBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhl
CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CiAgICAg
QVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOwogICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKLSAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodChtX2J1dHRl
cmZseSwgCi0gICAgICAgIHZtLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIGZhbHNlLCAwLAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICBtX2J1dHRlcmZseSwgdm0sIHRo
aXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2Us
IDAsCiAgICAgICAgIGVsZW1lbnRTaXplICogdmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJm
bHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9y
TGVuZ3RoKHZlY3Rvckxlbmd0aCk7CkBAIC02NDEsOCArNjQxLDggQEAgQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogewogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0g
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOwogICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwg
IWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodChtX2J1dHRlcmZseSwgCi0g
ICAgICAgIHZtLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCks
IGZhbHNlLCAwLAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVh
dGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICBtX2J1dHRlcmZseSwgdm0sIHRoaXMsIHN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCiAgICAg
ICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKICAgICBSRUxFQVNFX0FT
U0VSVChuZXdCdXR0ZXJmbHkpOwogCkBAIC02OTQsNyArNjk0LDcgQEAgQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29uc3RydWN0Q29udmVydAogICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7CiAgICAgCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCi0gICAgICAgIHZtLCAwLCBw
cm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3Ro
KSk7CisgICAgICAgIHZtLCB0aGlzLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CiAgICAgCiAgICAgbWVtY3B5KAogICAgICAg
ICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLApAQCAtMjMw
MCw3ICsyMzAwLDkgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAog
CiAgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNh
c2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KICAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMpKSB7
Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCkt
Pmdyb3dBcnJheVJpZ2h0KHZtLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KAorICAg
ICAgICAgICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgdHJ1ZSwKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgICAg
IGlmICghbmV3QnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBt
X2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKQEAgLTIzMTEsNyArMjMxMyw3IEBAIGJvb2wgSlNP
YmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAvLyBSZW1vdmUgc29tZSwgYnV0
IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5v
dCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCiAgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gc3Rk
OjptaW4oaW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0
b3JMZW5ndGgpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVy
Zmx5KCktPnJlc2l6ZUFycmF5KAotICAgICAgICB2bSwKKyAgICAgICAgdm0sIHRoaXMsCiAgICAg
ICAgIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwKICAgICAgICAgbmV3SW5kZXhCaWFzLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CiAgICAgaWYgKCFuZXdCdXR0ZXJm
bHkpCkBAIC0yMzM0LDcgKzIzMzYsNyBAQCB2b2lkIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93
KFZNJiB2bSwgCiAgICAgICAgIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIHVuc2ln
bmVkIG9sZFZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICBt
X2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKLSAgICAgICAgdm0sIHN0
cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAg
ICAgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgdHJ1ZSwKICAgICAgICAgb2xkVmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSwKICAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAg
ICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSB7CkBAIC0yMzUx
LDcgKzIzNTMsNyBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnCiAg
ICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVj
dHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5CiAgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0
IGhhdmUgYWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCiAgICAgCi0gICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKSwg
b2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlT
dG9yYWdlKHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIGJv
b2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzksNyArMzksNiBA
QAogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNT
dHJpbmcuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTcGFy
c2VBcnJheVZhbHVlTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0x
MTM2LDYgKzExMzUsNyBAQCBpbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KFZNJiB2bSwgU3RydWN0
CiAgICAgOiBKU0NlbGwodm0sIHN0cnVjdHVyZSkKICAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZs
eSkKIHsKKyAgICB2bS5oZWFwLmFzY3JpYmVPd25lcih0aGlzLCBidXR0ZXJmbHkpOwogfQogCiBp
bmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6cHJvdG90eXBlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1MDU2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNQcm94eS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlND
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNyBAQCBSZWdFeHBNYXRjaGVzQXJyYXkqIFJlZ0V4cE1hdGNoZXNBcnJheTo6CiB7CiAg
ICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KHZtLCByZWdFeHAtPm51bVN1YnBh
dHRlcm5zKCkgKyAxKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0
dGVyZmx5KHZtLCAwLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKICAgICBSZWdFeHBN
YXRjaGVzQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwTWF0
Y2hlc0FycmF5Pih2bS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCBidXR0ZXJmbHksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKICAgICBh
cnJheS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBhcnJheTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlz
aW9uIDE1MDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDI3ICsxMDksNiBAQCBpbmxpbmUgYm9vbCBT
dHJ1Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRlCiAgICAgcmV0dXJuIHR5cGVJbmZvKCkubWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCgpICYmIGdsb2JhbE9iamVjdCgpID09IGxleGljYWxHbG9iYWxPYmpl
Y3Q7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQo
SlNDZWxsKiBjZWxsKQotewotICAgIEFTU0VSVCghbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb24pOwotICAgIGlmICghY2VsbCkKLSAgICAgICAgcmV0dXJuOwotI2lmIEVOQUJMRShH
Q19WQUxJREFUSU9OKQotICAgIHZhbGlkYXRlKGNlbGwpOwotI2VuZGlmCi0gICAgaWYgKEhlYXA6
OnRlc3RBbmRTZXRNYXJrZWQoY2VsbCkgfHwgIWNlbGwtPnN0cnVjdHVyZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICAgICAgCi0gICAgTUFSS19MT0dfQ0hJ
TEQoKnRoaXMsIGNlbGwpOwotCi0gICAgLy8gU2hvdWxkIG5ldmVyIGF0dGVtcHQgdG8gbWFyayBz
b21ldGhpbmcgdGhhdCBpcyB6YXBwZWQuCi0gICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsK
LSAgICAgICAgCi0gICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7Ci19Ci0KIGlubGluZSBib29sIFN0
cnVjdHVyZTo6dHJhbnNpdGl2ZWx5VHJhbnNpdGlvbmVkRnJvbShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZVRvRmluZCkKIHsKICAgICBmb3IgKFN0cnVjdHVyZSogY3VycmVudCA9IHRoaXM7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5wcmV2aW91c0lEKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCShyZXZpc2lvbiAxNTA1NjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjI3LDE4ICsyMjcsNiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gaW5s
aW5lCiAgICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHMuZ2V0KCk7CiB9CiAKLS8vIFNsb3RWaXNp
dG9yIGZ1bmN0aW9ucwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kKFdyaXRlQmFycmllckJhc2U8VD4qIHNsb3QpCi17Ci0gICAgaW50ZXJuYWxB
cHBlbmQoKnNsb3QtPnNsb3QoKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kVmFsdWVzKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXpl
X3QgY291bnQpCi17Ci0gICAgYXBwZW5kKGJhcnJpZXJzLT5zbG90KCksIGNvdW50KTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBXcml0ZUJhcnJpZXJfaApJbmRleDogU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTA1NjkpCisr
KyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxNSArMjMsMTYgQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJ
CTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBO
b0xvY2suaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxMDU5
MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07Ci0JCTBGOEYyQjlDMTcyRjI1
OTYwMDdEQkRBNSAvKiBDb252ZXJzaW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOUIxNzJGMjU5NDAwN0RCREE1IC8qIENvbnZlcnNp
b25Nb2RlLmggKi87IH07CiAJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21waWxhdGlv
blRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi87IH07CiAJ
CTBGOEYyQjkyMTcyRTAxMDMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI4RjE3MkUwMEYw
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovOyB9OworCQkwRjhGMkI5QzE3MkYy
NTk2MDA3REJEQTUgLyogQ29udmVyc2lvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjlCMTcyRjI1OTQwMDdEQkRBNSAvKiBDb252ZXJz
aW9uTW9kZS5oICovOyB9OwogCQkwRjlEMzM2MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50
U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9Owog
CQkwRjlEMzM2MTE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1QzE2NURCQTczMDA1
QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi87IH07CiAJCTBGOUQzMzYyMTY1REJBNzMwMDVB
RDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3Bw
ICovOyB9OwogCQkwRjlEMzM2MzE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVFMTY1REJB
NzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5oICovOyB9OwogCQkwRkM0RURFNjE2OTYxNDk2MDBG
NjUwNDEgLyogQ29tbWFQcmludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmgg
Ki87IH07CiAJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDNDE1NEZC
MjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKCk7IH07IH07CisJCTBGREE4Q0JCMTc0RUM1NjAwMEYzMDVFQiAvKiBDb25kaXRpb25hbExv
Y2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
QThDQkExNzRFQzU1ODAwRjMwNUVCIC8qIENvbmRpdGlvbmFsTG9ja2VyLmggKi87IH07CiAJCTBG
RERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBD
NTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkREQkZBODE2NjZERkEz
MDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQ
cmludFN0cmVhbS5oICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNG
NjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CkBAIC0zMzcsMTUgKzMz
OCwxNiBAQAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIz
MTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBS
YXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhd1BvaW50ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY4RjJCOUIxNzJGMjU5NDAwN0RCREE1
IC8qIENvbnZlcnNpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnZlcnNpb25Nb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBD
b21waWxhdGlvblRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxhdGlvblRocmVh
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjkwMTcyRTAwRjAwMDdE
QkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21waWxhdGlvblRo
cmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjhGMkI5QjE3MkYyNTk0MDA3
REJEQTUgLyogQ29udmVyc2lvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udmVyc2lvbk1vZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3
IC8qIEZpbGVQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGaWxlUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcgLyog
UHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRTdHJl
YW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1
MDQxIC8qIENvbW1hUHJpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b21tYVByaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBQzQxNTRG
QjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmFzdEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkRBOENCQTE3NEVDNTU4MDBGMzA1RUIgLyogQ29uZGl0aW9uYWxMb2NrZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29uZGl0aW9uYWxMb2NrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0
cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmlu
Z1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcx
QjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5M
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzYsNiArNzM4LDcgQEAKIAkJ
CQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywKIAkJ
CQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQlBOEE0NzI3
MTE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGxleC5oICovLAorCQkJCTBGREE4Q0JBMTc0RUM1NTgw
MEYzMDVFQiAvKiBDb25kaXRpb25hbExvY2tlci5oICovLAogCQkJCUE4QTQ3MjczMTUxQTgyNUEw
MDQxMjNGRiAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgKi8sCiAJCQkJQThB
NDcyNzQxNTFBODI1QTAwNDEyM0ZGIC8qIENyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmgg
Ki8sCiAJCQkJQThBNDcyNzUxNTFBODI1QTAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1lLmNwcCAqLywK
QEAgLTExODgsNiArMTE5MSw3IEBACiAJCQkJRjMyMkNDRTExNjU2OUExMDAwNDg1MkREIC8qIE1l
bW9yeU9iamVjdEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEQ4NUI0MTcyMzRDQzEwMDMz
ODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VCMTUxQTgyNUIwMDQx
MjNGRiAvKiBNZXNzYWdlUXVldWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREE4Q0JCMTc0RUM1
NjAwMEYzMDVFQiAvKiBDb25kaXRpb25hbExvY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczRUQxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3M0VFMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzNFRjE1MUE4MjVCMDA0MTIzRkYgLyogTm9uY29weWFibGUu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ29uZGl0aW9uYWxMb2NrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb25hbExvY2tlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQ29uZGl0aW9uYWxMb2NrZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbmRpdGlvbmFsTG9ja2VyX2gKKyNkZWZp
bmUgQ29uZGl0aW9uYWxMb2NrZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgQ29uZGl0aW9u
YWxMb2NrZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmRpdGlvbmFsTG9ja2VyKTsK
K3B1YmxpYzoKKyAgICBDb25kaXRpb25hbExvY2tlcihUKiBsb2NrYWJsZSkgOiBtX2xvY2thYmxl
KGxvY2thYmxlKQorICAgIHsKKyAgICAgICAgaWYgKG1fbG9ja2FibGUpCisgICAgICAgICAgICBt
X2xvY2thYmxlLT5sb2NrKCk7CisgICAgfQorICAgIH5Db25kaXRpb25hbExvY2tlcigpCisgICAg
eworICAgICAgICBpZiAobV9sb2NrYWJsZSkKKyAgICAgICAgICAgIG1fbG9ja2FibGUtPnVubG9j
aygpOworICAgIH0KK3ByaXZhdGU6CisgICAgVCogbV9sb2NrYWJsZTsKK307CisKK30KKwordXNp
bmcgV1RGOjpDb25kaXRpb25hbExvY2tlcjsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9EYXRhTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmNwcAko
cmV2aXNpb24gMTUwNTY5KQorKysgU291cmNlL1dURi93dGYvRGF0YUxvZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDYgKzU2LDggQEAgc3RhdGljIHB0aHJlYWRfb25jZV90IGluaXRpYWxpemVM
b2dGaWxlTwogCiBzdGF0aWMgRmlsZVByaW50U3RyZWFtKiBmaWxlOwogCitzdGF0aWMgdWludDY0
X3QgZmlsZURhdGFbKHNpemVvZihGaWxlUHJpbnRTdHJlYW0pICsgNykgLyA4XTsKKwogc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKCkKIHsKICNpZiBEQVRBX0xPR19UT19GSUxFCkBA
IC03OCw4ICs4MCwxMSBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplTG9nRmlsZU9uY2UoKQogICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBDb3VsZCBub3Qgb3BlbiBsb2cgZmls
ZSAlcyBmb3Igd3JpdGluZy5cbiIsIGFjdHVhbEZpbGVuYW1lKTsKICAgICB9CiAjZW5kaWYgLy8g
REFUQV9MT0dfVE9fRklMRQotICAgIGlmICghZmlsZSkKLSAgICAgICAgZmlsZSA9IG5ldyBGaWxl
UHJpbnRTdHJlYW0oc3RkZXJyLCBGaWxlUHJpbnRTdHJlYW06OkJvcnJvdyk7CisgICAgaWYgKCFm
aWxlKSB7CisgICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3OyB0aGlzIG1ha2VzIGl0IGVhc2ll
ciB0byB1c2UgZGF0YUxvZygpIHRvIGRlYnVnCisgICAgICAgIC8vIGZhc3RNYWxsb2MuCisgICAg
ICAgIGZpbGUgPSBuZXcgKGZpbGVEYXRhKSBGaWxlUHJpbnRTdHJlYW0oc3RkZXJyLCBGaWxlUHJp
bnRTdHJlYW06OkJvcnJvdyk7CisgICAgfQogICAgIAogICAgIHNldHZidWYoZmlsZS0+ZmlsZSgp
LCAwLCBfSU9OQkYsIDApOyAvLyBQcmVmZXIgdW5idWZmZXJlZCBvdXRwdXQsIHNvIHRoYXQgd2Ug
Z2V0IGEgZnVsbCBsb2cgdXBvbiBjcmFzaCBvciBkZWFkbG9jay4KIH0KSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RN
YWxsb2MuY3BwCShyZXZpc2lvbiAxNTA1NjkpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9j
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQAogI2luY2x1ZGUgPHB0aHJlYWQu
aD4KICNlbmRpZgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgogCkBAIC00MTYzLDEyICs0MTY0LDIyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCogbWFsbG9j
KHNpemVfdCk7CiAKIHZvaWQqIGZhc3RNYWxsb2Moc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJu
IG1hbGxvYzx0cnVlPihzaXplKTsKKyAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2M8dHJ1ZT4oc2l6
ZSk7CisjaWYgRU5BQkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiZmFzdE1h
bGxvYyBhbGxvY2F0aW5nICVsdSBieXRlcyAoZmFzdE1hbGxvYyk6ICVwLlxuIiwgc2l6ZSwgcmVz
dWx0KTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFRyeU1hbGxvY1JldHVyblZh
bHVlIHRyeUZhc3RNYWxsb2Moc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIG1hbGxvYzxmYWxz
ZT4oc2l6ZSk7CisgICAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgcmVzdWx0ID0gbWFsbG9jPGZhbHNl
PihzaXplKTsKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIHZvaWQqIHBvaW50
ZXI7CisgICAgKHZvaWQpcmVzdWx0LmdldFZhbHVlKHBvaW50ZXIpOworICAgIGRhdGFMb2dGKCJm
YXN0TWFsbG9jIGFsbG9jYXRpbmcgJWx1IGJ5dGVzICh0cnlGYXN0TWFsbG9jKTogJXAuXG4iLCBz
aXplLCBwb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHRlbXBsYXRl
IDxib29sIGNyYXNoT25GYWlsdXJlPgpAQCAtNDIwMyw2ICs0MjE0LDEwIEBAIHZvaWQqIG1hbGxv
YyhzaXplX3Qgc2l6ZSkgewogZXh0ZXJuICJDIiAKICNlbmRpZgogdm9pZCBmcmVlKHZvaWQqIHB0
cikgeworI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCisgICAgZGF0YUxvZ0YoImZhc3RG
cmVlIGZyZWVpbmcgJXAuXG4iLCBwdHIpOworI2VuZGlmCisgICAgCiAjaWZuZGVmIFdURl9DSEFO
R0VTCiAgIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2socHRyKTsKICNlbmRpZgpAQCAtNDIz
Miw2ICs0MjQ3LDkgQEAgdm9pZCogZmFzdENhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fcwog
I2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRl
KHJlc3VsdCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRh
dGFMb2dGKCJmYXN0TWFsbG9jIGNvbnRpZ3VvdXNseSBhbGxvY2F0aW5nICVsdSAqICVsdSBieXRl
cyAoZmFzdENhbGxvYyk6ICVwLlxuIiwgbiwgZWxlbV9zaXplLCByZXN1bHQpOworI2VuZGlmCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDI0MSw2ICs0MjU5LDkgQEAgVHJ5TWFsbG9jUmV0
dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplXwogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElE
QVRJT04pCiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3VsdCk7CiAjZW5kaWYKKyNpZiBFTkFC
TEUoQUxMT0NBVElPTl9MT0dHSU5HKQorICAgIGRhdGFMb2dGKCJmYXN0TWFsbG9jIGNvbnRpZ3Vv
dXNseSBhbGxvY2F0aW5nICVsdSAqICVsdSBieXRlcyAodHJ5RmFzdENhbGxvYyk6ICVwLlxuIiwg
biwgZWxlbV9zaXplLCByZXN1bHQpOworI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNDMwMiw2ICs0MzIzLDkgQEAgdm9pZCogZmFzdFJlYWxsb2Modm9pZCogb2xkX3B0ciwgc2l6
ZV90IAogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCiAgICAgZmFzdE1hbGxvY1Zh
bGlkYXRlKHJlc3VsdCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQor
ICAgIGRhdGFMb2dGKCJmYXN0TWFsbG9jIHJlYWxsb2NhdGluZyAlbHUgYnl0ZXMgKGZhc3RSZWFs
bG9jKTogJXAgLT4gJXAuXG4iLCBuZXdfc2l6ZSwgb2xkX3B0ciwgcmVzdWx0KTsKKyNlbmRpZgog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQzMTQsNiArNDMzOCw5IEBAIFRyeU1hbGxvY1Jl
dHVyblZhbHVlIHRyeUZhc3RSZWFsbG9jKHZvaWQKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJ
REFUSU9OKQogICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogI2VuZGlmCisjaWYgRU5B
QkxFKEFMTE9DQVRJT05fTE9HR0lORykKKyAgICBkYXRhTG9nRigiZmFzdE1hbGxvYyByZWFsbG9j
YXRpbmcgJWx1IGJ5dGVzICh0cnlGYXN0UmVhbGxvYyk6ICVwIC0+ICVwLlxuIiwgbmV3X3NpemUs
IG9sZF9wdHIsIHJlc3VsdCk7CisjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgJKHJldmlzaW9uIDE1MDU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1OCw2ICs4NTgsMTYgQEAKICNkZWZpbmUgRU5BQkxFX1dS
SVRFX0JBUlJJRVJfUFJPRklMSU5HIDAKICNlbmRpZgogCisvKiBMb2dzIGFsbCBhbGxvY2F0aW9u
LXJlbGF0ZWQgYWN0aXZpdHkgdGhhdCBnb2VzIHRocm91Z2ggZmFzdE1hbGxvYyBvciB0aGUKKyAg
IEpTQyBHQyAoYm90aCBjZWxscyBhbmQgYnV0dGVyZmxpZXMpLiBBbHNvIGxvZ3MgbWFya2luZy4g
Tm90ZSB0aGF0IHRoaXMKKyAgIGlzbid0IGEgY29tcGxldGVseSBhY2N1cmF0ZSB2aWV3IG9mIHRo
ZSBoZWFwIHNpbmNlIGl0IGRvZXNuJ3QgaW5jbHVkZSBhbGwKKyAgIGJ1dHRlcmZseSByZXNpemUg
b3BlcmF0aW9ucywgZG9lc24ndCB0ZWxsIHlvdSB3aGF0IGlzIGdvaW5nIG9uIHdpdGggd2Vhawor
ICAgcmVmZXJlbmNlcyAob3RoZXIgdGhhbiB0byB0ZWxsIHlvdSB3aGVuIHRoZXkncmUgbWFya2Vk
KSwgYW5kIGRvZXNuJ3QKKyAgIHRyYWNrIGRpcmVjdCBtbWFwKCkgYWxsb2NhdGlvbnMgb3IgdGhp
bmdzIGxpa2UgSklUIGFsbG9jYXRpb24uICovCisjaWYgIWRlZmluZWQoRU5BQkxFX0FMTE9DQVRJ
T05fTE9HR0lORykKKyNkZWZpbmUgRU5BQkxFX0FMTE9DQVRJT05fTE9HR0lORyAwCisjZW5kaWYK
KwogLyogRW5hYmxlIHZlcmlmaWNhdGlvbiB0aGF0IHRoYXQgcmVnaXN0ZXIgYWxsb2NhdGlvbnMg
YXJlIG5vdCBtYWRlIHdpdGhpbiBnZW5lcmF0ZWQgY29udHJvbCBmbG93LgogICAgVHVybmVkIG9u
IGZvciBkZWJ1ZyBidWlsZHMuICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX0RGR19SRUdJU1RFUl9B
TExPQ0FUSU9OX1ZBTElEQVRJT04pICYmIEVOQUJMRShERkdfSklUKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>