<?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>4437</bug_id>
          
          <creation_ts>2005-08-14 22:50:00 -0700</creation_ts>
          <short_desc>clean up error creation with new throwError function</short_desc>
          <delta_ts>2005-08-15 17:46:21 -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>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>16691</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-14 22:50:00 -0700</bug_when>
    <thetext>There are a lot of calls to Error::create followed by calls to exec-&gt;setException. I&apos;d like to simplify that 
idiom with a new throwError function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16692</commentid>
    <comment_count>1</comment_count>
      <attachid>3393</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-14 22:50:52 -0700</bug_when>
    <thetext>Created attachment 3393
adds new throwError function, uses it in every suitable place, other cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16693</commentid>
    <comment_count>2</comment_count>
      <attachid>3394</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-14 22:53:42 -0700</bug_when>
    <thetext>Created attachment 3394
adds new throwError function, uses it, other cleanup (merged with TOT)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16742</commentid>
    <comment_count>3</comment_count>
      <attachid>3394</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-08-15 15:21:51 -0700</bug_when>
    <thetext>Comment on attachment 3394
adds new throwError function, uses it, other cleanup (merged with TOT)

r=me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3393</attachid>
            <date>2005-08-14 22:50:52 -0700</date>
            <delta_ts>2005-08-14 22:53:42 -0700</delta_ts>
            <desc>adds new throwError function, uses it in every suitable place, other cleanup</desc>
            <filename>ThrowErrorAndCleanupPatch.txt</filename>
            <type>text/plain</type>
            <size>144448</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNvYmplY3Qu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXAgLXUgLXIxLjIwIEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL05QX2pzb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvTlBfanNvYmplY3QuY3BwCTggQXVnIDIwMDUgMDQ6MDc6MjIgLTAwMDAJMS4yMAorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNvYmplY3QuY3BwCTggQXVnIDIwMDUgMTU6NDM6MzUg
LTAwMDAKQEAgLTM5NywxNCArMzk3LDEzIEBAIGJvb2wgX05QTl9IYXNNZXRob2QoTlBQIG5wcCwg
TlBPYmplY3QgKm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgX05QTl9TZXRFeGNlcHRp
b24gKE5QT2JqZWN0ICpvLCBjb25zdCBOUFVURjggKm1lc3NhZ2UpCit2b2lkIF9OUE5fU2V0RXhj
ZXB0aW9uKE5QT2JqZWN0ICpvLCBjb25zdCBOUFVURjggKm1lc3NhZ2UpCiB7CiAgICAgaWYgKG8t
Pl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgICAgIEphdmFTY3JpcHRPYmpl
Y3QgKm9iaiA9IChKYXZhU2NyaXB0T2JqZWN0ICopbzsgCiAgICAgICAgIEV4ZWNTdGF0ZSAqZXhl
YyA9IG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwog
ICAgICAgICBJbnRlcnByZXRlcjo6bG9jaygpOwotICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBtZXNzYWdlKTsKLSAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uIChlcnIpOworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJv
ciwgbWVzc2FnZSk7CiAgICAgICAgIEludGVycHJldGVyOjp1bmxvY2soKTsKICAgICB9CiB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWUuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zMApkaWZmIC1wIC11IC1yMS4zMCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9ydW50aW1lLmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWUuaAk4IEF1ZyAy
MDA1IDA0OjA3OjIyIC0wMDAwCTEuMzAKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWUuaAk4IEF1ZyAyMDA1IDE1OjQzOjM1IC0wMDAwCkBAIC0yOSwxMSArMjksOCBAQAogI2luY2x1
ZGUgIm9iamVjdC5oIgogI2luY2x1ZGUgInZhbHVlLmgiCiAKLW5hbWVzcGFjZSBLSlMgCi17Ci0K
LW5hbWVzcGFjZSBCaW5kaW5ncwoteworbmFtZXNwYWNlIEtKUyAgeworbmFtZXNwYWNlIEJpbmRp
bmdzIHsKIAogY2xhc3MgSW5zdGFuY2U7CiBjbGFzcyBNZXRob2Q7CkBAIC00Nyw3ICs0NCw3IEBA
IGNsYXNzIFBhcmFtZXRlcgogewogcHVibGljOgogICAgIHZpcnR1YWwgUnVudGltZVR5cGUgdHlw
ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIH5QYXJhbWV0ZXIoKSB7fTsKKyAgICB2aXJ0dWFs
IH5QYXJhbWV0ZXIoKSB7fQogfTsKIAogLy8gRklYTUU6ICBDb25zdHJ1Y3RvciBzaG91bGQgYmUg
cmVtb3ZlZCBmcm9tIGFic3RyYWN0IHJ1bnRpbWUgY2xhc3NlcwpAQCAtMTAyLDcgKzk5LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBsb25nIG51bVBhcmFtZXRlcnMoKSBjb25zdCA9IDA7CiAg
ICAgICAgIAotICAgIHZpcnR1YWwgfk1ldGhvZCgpIHt9OworICAgIHZpcnR1YWwgfk1ldGhvZCgp
IHt9CiB9OwogCiBjbGFzcyBDbGFzcwpAQCAtMTQwLDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCAqY3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlKEV4ZWNTdGF0ZSAqZXhl
YywgQmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCBPYmplY3RJbXAgKnZhbHVlLCBjb25zdCBSb290
T2JqZWN0ICpvcmlnaW4sIGNvbnN0IFJvb3RPYmplY3QgKmN1cnJlbnQpOwogICAgIHN0YXRpYyBP
YmplY3RJbXAgKmNyZWF0ZVJ1bnRpbWVPYmplY3QoQmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCB2
b2lkICpuYXRpdmVJbnN0YW5jZSwgY29uc3QgUm9vdE9iamVjdCAqciA9IDApOwogCi0gICAgSW5z
dGFuY2UoKSA6IF9leGVjdXRpb25Db250ZXh0KDApIHt9OworICAgIEluc3RhbmNlKCkgOiBfZXhl
Y3V0aW9uQ29udGV4dCgwKSB7fQogICAgIAogICAgIEluc3RhbmNlKGNvbnN0IEluc3RhbmNlICZv
dGhlcik7CiAKQEAgLTE0OSwyMyArMTQ2LDIzIEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIGNhbGxlZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBtYWluIGVudHJ5IHBvaW50cyBp
bnRvCiAgICAgLy8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMuICBUaGV5IGNhbiBiZSB1c2Vk
IHRvIGVzdGFibGlzaCBhbmQgY2xlYW51cAogICAgIC8vIGFueSBuZWVkZWQgc3RhdGUuCi0gICAg
dmlydHVhbCB2b2lkIGJlZ2luKCkge307Ci0gICAgdmlydHVhbCB2b2lkIGVuZCgpIHt9OworICAg
IHZpcnR1YWwgdm9pZCBiZWdpbigpIHt9CisgICAgdmlydHVhbCB2b2lkIGVuZCgpIHt9CiAgICAg
CiAgICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25zdCA9IDA7CiAgICAgCiAgICAgdmly
dHVhbCBWYWx1ZUltcCAqZ2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgRmll
bGQgKmFGaWVsZCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZUltcCAqZ2V0VmFsdWVPZlVuZGVm
aW5lZEZpZWxkKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHksIFR5
cGUgaGludCkgY29uc3QgeyByZXR1cm4gVW5kZWZpbmVkKCk7IH07CisgICAgdmlydHVhbCBWYWx1
ZUltcCAqZ2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHksIFR5cGUgaGludCkgY29uc3QgeyByZXR1cm4gVW5kZWZpbmVkKCk7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgRmllbGQgKmFGaWVsZCwgVmFsdWVJbXAgKmFWYWx1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzU2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKCkgeyByZXR1cm4gZmFsc2U7IH07
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5LCBWYWx1ZUltcCAqYVZhbHVlKSB7fTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoKSB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwgVmFsdWVJbXAgKmFWYWx1
ZSkge30KICAgICAKICAgICB2aXJ0dWFsIFZhbHVlSW1wICppbnZva2VNZXRob2QoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2QsIGNvbnN0IExpc3QgJmFyZ3MpID0gMDsK
ICAgICB2aXJ0dWFsIFZhbHVlSW1wICppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgTGlzdCAmYXJncykgPSAwOwogICAgIAogICAgIHZpcnR1YWwgVmFsdWVJbXAgKmRl
ZmF1bHRWYWx1ZShUeXBlIGhpbnQpIGNvbnN0ID0gMDsKICAgICAKLSAgICB2aXJ0dWFsIFZhbHVl
SW1wICp2YWx1ZU9mKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKGdldENsYXNzKCktPm5hbWUoKSk7
IH07CisgICAgdmlydHVhbCBWYWx1ZUltcCAqdmFsdWVPZigpIGNvbnN0IHsgcmV0dXJuIFN0cmlu
ZyhnZXRDbGFzcygpLT5uYW1lKCkpOyB9CiAgICAgCiAgICAgdm9pZCBzZXRFeGVjdXRpb25Db250
ZXh0KGNvbnN0IFJvb3RPYmplY3QgKnIpIHsgX2V4ZWN1dGlvbkNvbnRleHQgPSByOyB9CiAgICAg
Y29uc3QgUm9vdE9iamVjdCAqZXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIF9leGVj
dXRpb25Db250ZXh0OyB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX2Fy
cmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3MvcnVudGltZV9hcnJheS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAt
cCAtdSAtcjEuMTAgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAKLS0t
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwCTggQXVnIDIwMDUgMDQ6
MDc6MjIgLTAwMDAJMS4xMAorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJh
eS5jcHAJOCBBdWcgMjAwNSAxNTo0MzozNiAtMDAwMApAQCAtODcsOCArODcsNyBAQCBib29sIFJ1
bnRpbWVBcnJheUltcDo6Z2V0T3duUHJvcGVydHlTbG90CiB2b2lkIFJ1bnRpbWVBcnJheUltcDo6
cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1
ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gbGVuZ3Ro
UHJvcGVydHlOYW1lKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShl
eGVjLFJhbmdlRXJyb3IpOwotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAgICAg
ICAgdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKQEAgLTEwNSw4ICsxMDQsNyBAQCB2b2lkIFJ1bnRpbWVBcnJheUltcDo6cHV0KEV4ZWNT
dGF0ZSAqZXhlCiB2b2lkIFJ1bnRpbWVBcnJheUltcDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgdW5z
aWduZWQgaW5kZXgsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAgICAgaWYgKGluZGV4
ID49IGdldExlbmd0aCgpKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFJhbmdlRXJyb3IpOwotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1
bnRpbWVfb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtcCAtdSAtcjEu
MTYgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9vYmplY3QuaAotLS0gSmF2YVNjcmlw
dENvcmUvYmluZGluZ3MvcnVudGltZV9vYmplY3QuaAk4IEF1ZyAyMDA1IDA0OjA3OjIyIC0wMDAw
CTEuMTYKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmgJOCBBdWcg
MjAwNSAxNTo0MzozNiAtMDAwMApAQCAtMjIsMTkgKzIyLDE3IEBACiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCi0jaWZuZGVmIF9SVU5USU1FX09CSkVDVF9IXwotI2RlZmlu
ZSBfUlVOVElNRV9PQkpFQ1RfSF8KIAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3J1bnRpbWUu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9vYmplY3QuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9wcm90ZWN0Lmg+CisjaWZuZGVmIEtKU19SVU5USU1FX09CSkVDVF9ICisjZGVmaW5l
IEtKU19SVU5USU1FX09CSkVDVF9ICisKKyNpbmNsdWRlICJydW50aW1lLmgiCiAKIG5hbWVzcGFj
ZSBLSlMgewogCiBjbGFzcyBSdW50aW1lT2JqZWN0SW1wIDogcHVibGljIE9iamVjdEltcCB7CiBw
dWJsaWM6CiAgICAgUnVudGltZU9iamVjdEltcChPYmplY3RJbXAgKnByb3RvKTsKLSAgICAKICAg
ICB+UnVudGltZU9iamVjdEltcCgpOwogICAgIAogICAgIFJ1bnRpbWVPYmplY3RJbXAoQmluZGlu
Z3M6Okluc3RhbmNlICppLCBib29sIG93bnNJbnN0YW5jZSA9IHRydWUpOwpAQCAtNDIsMjMgKzQw
LDE2IEBAIHB1YmxpYzoKICAgICBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lLAotICAgICAgICAgICAgICAgICAgICAgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5v
bmUpOwotCiAgICAgdmlydHVhbCBib29sIGNhblB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOwotCisgICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSk7CiAg
ICAgdmlydHVhbCBWYWx1ZUltcCAqZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBo
aW50KSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW50ZXJuYWxJbnN0YW5jZSAoQmluZGluZ3M6Oklu
c3RhbmNlICppKSB7IGluc3RhbmNlID0gaTsgfQotICAgIEJpbmRpbmdzOjpJbnN0YW5jZSAqZ2V0
SW50ZXJuYWxJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RhbmNlOyB9Ci0KICAgICB2aXJ0
dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlSW1wICpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncyk7CiAgICAgCisgICAgdm9pZCBzZXRJbnRlcm5hbEluc3RhbmNlKEJpbmRpbmdz
OjpJbnN0YW5jZSAqaSkgeyBpbnN0YW5jZSA9IGk7IH0KKyAgICBCaW5kaW5nczo6SW5zdGFuY2Ug
KmdldEludGVybmFsSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpbnN0YW5jZTsgfQorCiAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCiBwcml2YXRlOgpAQCAtNzAsNiArNjEsNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgb3duc0luc3RhbmNlOwogfTsKICAgICAKLX07IC8vIG5hbWVz
cGFjZQorfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9qbmkvam5pX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
SmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjYKZGlmZiAtcCAtdSAtcjEuMjYgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
am5pL2puaV9pbnN0YW5jZS5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlf
aW5zdGFuY2UuY3BwCTggQXVnIDIwMDUgMDQ6MDc6MjQgLTAwMDAJMS4yNgorKysgSmF2YVNjcmlw
dENvcmUvYmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5jcHAJOCBBdWcgMjAwNSAxNTo0MzozNiAt
MDAwMApAQCAtMTU5LDkgKzE1OSw3IEBAIFZhbHVlSW1wICpKYXZhSW5zdGFuY2U6Omludm9rZU1l
dGhvZCAoRXgKICAgICAgICAgY29uc3QgY2hhciAqY2FsbGluZ1VSTCA9IDA7ICAvLyBGSVhNRSwg
bmVlZCB0byBwcm9wYWdhdGUgY2FsbGluZyBVUkwgdG8gSmF2YQogICAgICAgICBoYW5kbGVkID0g
ZGlzcGF0Y2hKTklDYWxsIChleGVjQ29udGV4dC0+bmF0aXZlSGFuZGxlKCksIG9iaiwgak1ldGhv
ZC0+aXNTdGF0aWMoKSwgak1ldGhvZC0+Sk5JUmV0dXJuVHlwZSgpLCBqTWV0aG9kLT5tZXRob2RJ
RChvYmopLCBqQXJncywgcmVzdWx0LCBjYWxsaW5nVVJMLCBleGNlcHRpb25EZXNjcmlwdGlvbik7
CiAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikgewotICAgICAgICAgICAgT2JqZWN0
SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBleGNlcHRpb25E
ZXNjcmlwdGlvbi0+dG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygpLmNfc3RyKCkpOwotICAgICAg
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKLSAgICAgICAgICAgIAorICAgICAgICAg
ICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLT50
b1N0cmluZyhleGVjKSk7CiAgICAgICAgICAgICBmcmVlIChqQXJncyk7CiAgICAgICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL2puaS9qbmlfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0ph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfcnVudGltZS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjYKZGlmZiAtcCAtdSAtcjEuMjYgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5p
L2puaV9ydW50aW1lLmNwcAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9ydW50
aW1lLmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjI0IC0wMDAwCTEuMjYKKysrIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL2puaS9qbmlfcnVudGltZS5jcHAJOCBBdWcgMjAwNSAxNTo0MzozNiAtMDAwMApA
QCAtOTAsMTUgKzkwLDEzIEBAIGp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5z
dGEKIAl7CiAJICAgIGNvbnN0IFJvb3RPYmplY3QgKmV4ZWNDb250ZXh0ID0gaW5zdGFuY2UtPmV4
ZWN1dGlvbkNvbnRleHQoKTsKIAkgICAgaWYgKGV4ZWNDb250ZXh0ICYmIGV4ZWNDb250ZXh0LT5u
YXRpdmVIYW5kbGUoKSkgewotCQlWYWx1ZUltcCAqZXhjZXB0aW9uRGVzY3JpcHRpb247CisJCVZh
bHVlSW1wICpleGNlcHRpb25EZXNjcmlwdGlvbiA9IE5VTEw7CiAJCWp2YWx1ZSBhcmdzWzFdOwog
CQkKIAkJYXJnc1swXS5sID0gamluc3RhbmNlOwogCQlkaXNwYXRjaEpOSUNhbGwgKGV4ZWNDb250
ZXh0LT5uYXRpdmVIYW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCByZXR1cm5UeXBlLCBt
aWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwotCQlpZiAoZXhjZXB0
aW9uRGVzY3JpcHRpb24pIHsKLQkJICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24tPnRvU3RyaW5nKGV4ZWMp
LlVURjhTdHJpbmcoKS5jX3N0cigpKTsKLQkJICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7
Ci0JCX0KKwkJaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQorCQkgICAgdGhyb3dFcnJvcihleGVj
LCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLT50b1N0cmluZyhleGVjKSk7CiAJ
ICAgIH0KIAl9CiAgICAgfQpAQCAtMTc2LDE3ICsxNzQsMTUgQEAgdm9pZCBKYXZhRmllbGQ6OmRp
c3BhdGNoU2V0VmFsdWVUb0luc3RhbgogCXsKIAkgICAgY29uc3QgUm9vdE9iamVjdCAqZXhlY0Nv
bnRleHQgPSBpbnN0YW5jZS0+ZXhlY3V0aW9uQ29udGV4dCgpOwogCSAgICBpZiAoZXhlY0NvbnRl
eHQgJiYgZXhlY0NvbnRleHQtPm5hdGl2ZUhhbmRsZSgpKSB7Ci0JCVZhbHVlSW1wICpleGNlcHRp
b25EZXNjcmlwdGlvbjsKKwkJVmFsdWVJbXAgKmV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gTlVMTDsK
IAkJanZhbHVlIGFyZ3NbMl07CiAJCWp2YWx1ZSByZXN1bHQ7CiAJCQogCQlhcmdzWzBdLmwgPSBq
aW5zdGFuY2U7CiAJCWFyZ3NbMV0gPSBqYXZhVmFsdWU7CiAJCWRpc3BhdGNoSk5JQ2FsbCAoZXhl
Y0NvbnRleHQtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHZvaWRfdHlw
ZSwgbWlkLCBhcmdzLCByZXN1bHQsIDAsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKLQkJaWYgKGV4
Y2VwdGlvbkRlc2NyaXB0aW9uKSB7Ci0JCSAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6OmNy
ZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLT50b1N0cmluZyhl
eGVjKS5VVEY4U3RyaW5nKCkuY19zdHIoKSk7Ci0JCSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJy
b3IpOwotCQl9CisJCWlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKKwkJICAgIHRocm93RXJyb3Io
ZXhlYywgR2VuZXJhbEVycm9yLCBleGNlcHRpb25EZXNjcmlwdGlvbi0+dG9TdHJpbmcoZXhlYykp
OwogCSAgICB9CiAJfQogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMv
V2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yMQpkaWZmIC1wIC11IC1yMS4yMSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW0JOCBBdWcgMjAwNSAwNDowNzoyNiAtMDAwMAkxLjIxCisrKyBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQk4IEF1ZyAyMDA1IDE1OjQz
OjM3IC0wMDAwCkBAIC0yMywxOCArMjMsMTggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL1dlYlNjcmlwdE9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQg
IldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKIAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL2lu
dGVybmFsLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvbGlzdC5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL3ZhbHVlLmg+Ci0KLSNpbmNsdWRlIDxvYmpjX2pzb2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8b2JqY19pbnN0YW5jZS5oPgotI2luY2x1ZGUgPG9iamNfdXRpbGl0eS5oPgorI2ltcG9y
dCAiaW50ZXJuYWwuaCIKKyNpbXBvcnQgImxpc3QuaCIKKyNpbXBvcnQgInZhbHVlLmgiCisKKyNp
bXBvcnQgIm9iamNfanNvYmplY3QuaCIKKyNpbXBvcnQgIm9iamNfaW5zdGFuY2UuaCIKKyNpbXBv
cnQgIm9iamNfdXRpbGl0eS5oIgogCi0jaW5jbHVkZSA8cnVudGltZV9vYmplY3QuaD4KLSNpbmNs
dWRlIDxydW50aW1lX3Jvb3QuaD4KKyNpbXBvcnQgInJ1bnRpbWVfb2JqZWN0LmgiCisjaW1wb3J0
ICJydW50aW1lX3Jvb3QuaCIKIAogI2lmIE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPD0g
TUFDX09TX1hfVkVSU0lPTl8xMF8zCiAKQEAgLTY1LDcgKzY1LDcgQEAgc3RhdGljIHZvaWQgX2Rp
ZEV4ZWN1dGUoV2ViU2NyaXB0T2JqZWN0IAogICAgICAgICBmdW5jIChleGVjLCBzdGF0aWNfY2Fz
dDxPYmplY3RJbXAqPihbb2JqIF9leGVjdXRpb25Db250ZXh0XS0+cm9vdE9iamVjdEltcCgpKSk7
CiB9CiAKLS0gKHZvaWQpX2luaXRpYWxpemVXaXRoT2JqZWN0SW1wOihPYmplY3RJbXAgKilpbXAg
b3JpZ2luRXhlY3V0aW9uQ29udGV4dDooY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKilvcmln
aW5FeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEJpbmRpbmdzOjpSb290
T2JqZWN0ICopZXhlY3V0aW9uQ29udGV4dAorLSAodm9pZClfaW5pdGlhbGl6ZVdpdGhPYmplY3RJ
bXA6KE9iamVjdEltcCAqKWltcCBvcmlnaW5FeGVjdXRpb25Db250ZXh0Oihjb25zdCBSb290T2Jq
ZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0Oihjb25zdCBSb290
T2JqZWN0ICopZXhlY3V0aW9uQ29udGV4dAogewogICAgIF9wcml2YXRlLT5pbXAgPSBpbXA7CiAg
ICAgX3ByaXZhdGUtPmV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0OyAgICAKQEAg
LTc0LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgX2RpZEV4ZWN1dGUoV2ViU2NyaXB0T2JqZWN0IAog
ICAgIGFkZE5hdGl2ZVJlZmVyZW5jZSAoZXhlY3V0aW9uQ29udGV4dCwgaW1wKTsKIH0KIAotLSBf
aW5pdFdpdGhPYmplY3RJbXA6KE9iamVjdEltcCAqKWltcCBvcmlnaW5FeGVjdXRpb25Db250ZXh0
Oihjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqKW9yaWdpbkV4ZWN1dGlvbkNvbnRleHQgZXhl
Y3V0aW9uQ29udGV4dDooY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKilleGVjdXRpb25Db250
ZXh0CistIF9pbml0V2l0aE9iamVjdEltcDooT2JqZWN0SW1wICopaW1wIG9yaWdpbkV4ZWN1dGlv
bkNvbnRleHQ6KGNvbnN0IFJvb3RPYmplY3QgKilvcmlnaW5FeGVjdXRpb25Db250ZXh0IGV4ZWN1
dGlvbkNvbnRleHQ6KGNvbnN0IFJvb3RPYmplY3QgKilleGVjdXRpb25Db250ZXh0CiB7CiAgICAg
YXNzZXJ0IChpbXAgIT0gMCk7CiAgICAgLy9hc3NlcnQgKHJvb3QgIT0gMCk7CkBAIC0xNTgsOCAr
MTU4LDcgQEAgc3RhdGljIHZvaWQgX2RpZEV4ZWN1dGUoV2ViU2NyaXB0T2JqZWN0IAogICAgICAg
ICBFeGVjU3RhdGUgKmV4ZWMgPSBpbnRlcnAtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgLy8gSWYg
dGhlIGludGVycHJldGVyIGhhcyBhIGNvbnRleHQsIHdlIHNldCB0aGUgZXhjZXB0aW9uLgogICAg
ICAgICBpZiAoaW50ZXJwLT5jb250ZXh0KCkpIHsKLSAgICAgICAgICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIFtleGNlcHRpb25NZXNzYWdlIFVU
RjhTdHJpbmddKTsKLSAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbiAoZXJyKTsKKyAgICAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCBleGNlcHRpb25NZXNzYWdlKTsK
ICAgICAgICAgICAgIHJldHVybiBZRVM7CiAgICAgICAgIH0KICAgICAgICAgaW50ZXJwID0gaW50
ZXJwLT5uZXh0SW50ZXJwcmV0ZXIoKTsKQEAgLTQwMSwxNyArNDAwLDEzIEBAIHN0YXRpYyBMaXN0
IGxpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUgKmUKICAgICBfZGlkRXhlY3V0ZShzZWxmKTsKIH0K
IAotLSAodm9pZClzZXRFeGNlcHRpb246IChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCistICh2b2lk
KXNldEV4Y2VwdGlvbjooTlNTdHJpbmcgKilkZXNjcmlwdGlvbgogewotICAgIGlmICghW3NlbGYg
X2V4ZWN1dGlvbkNvbnRleHRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeGVjU3RhdGUgKmV4
ZWMgPSBbc2VsZiBfZXhlY3V0aW9uQ29udGV4dF0tPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMo
KTsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9y
LCBbZGVzY3JpcHRpb24gVVRGOFN0cmluZ10pOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbiAoZXJy
KTsKKyAgICBpZiAoY29uc3QgUm9vdE9iamVjdCAqcm9vdCA9IFtzZWxmIF9leGVjdXRpb25Db250
ZXh0XSkKKyAgICAgICAgdGhyb3dFcnJvcihyb290LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVj
KCksIEdlbmVyYWxFcnJvciwgZGVzY3JpcHRpb24pOwogfQogCi0rIChpZClfY29udmVydFZhbHVl
VG9PYmpjVmFsdWU6KFZhbHVlSW1wICopdmFsdWUgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDooY29u
c3QgUm9vdE9iamVjdCAqKW9yaWdpbkV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dDoo
Y29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKilleGVjdXRpb25Db250ZXh0CisrIChpZClfY29u
dmVydFZhbHVlVG9PYmpjVmFsdWU6KFZhbHVlSW1wICopdmFsdWUgb3JpZ2luRXhlY3V0aW9uQ29u
dGV4dDooY29uc3QgUm9vdE9iamVjdCAqKW9yaWdpbkV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9u
Q29udGV4dDooY29uc3QgUm9vdE9iamVjdCAqKWV4ZWN1dGlvbkNvbnRleHQKIHsKICAgICBpZCBy
ZXN1bHQgPSAwOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfY2xh
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvb2JqYy9vYmpjX2NsYXNzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11
IC1yMS40IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19jbGFzcy5oCi0tLSBKYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfY2xhc3MuaAk4IEF1ZyAyMDA1IDA0OjA3OjI2
IC0wMDAwCTEuNAorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2NsYXNzLmgJ
OCBBdWcgMjAwNSAxNTo0MzozNyAtMDAwMApAQCAtMjIsMjYgKzIyLDIzIEBACiAgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCi0jaWZuZGVmIF9CSU5ESU5HU19PQkpDX0NMQVNT
X0hfCi0jZGVmaW5lIF9CSU5ESU5HU19PQkpDX0NMQVNTX0hfCiAKLSNpbmNsdWRlIDxDb3JlRm91
bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2lmbmRlZiBLSlNfQklORElOR1NfT0JKQ19DTEFT
U19ICisjZGVmaW5lIEtKU19CSU5ESU5HU19PQkpDX0NMQVNTX0gKIAorI2luY2x1ZGUgPENvcmVG
b3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAKLSNpbmNsdWRlIDxydW50aW1lLmg+Ci0jaW5j
bHVkZSA8b2JqY19oZWFkZXIuaD4KLSNpbmNsdWRlIDxvYmpjX3J1bnRpbWUuaD4KKyNpbmNsdWRl
ICJvYmpjX3J1bnRpbWUuaCIKIAogbmFtZXNwYWNlIEtKUyB7Ci0KIG5hbWVzcGFjZSBCaW5kaW5n
cyB7CiAKLWNsYXNzIE9iamNDbGFzcyA6IHB1YmxpYyBLSlM6OkJpbmRpbmdzOjpDbGFzcworY2xh
c3MgT2JqY0NsYXNzIDogcHVibGljIENsYXNzCiB7CiAgICAgLy8gVXNlIHRoZSBwdWJsaWMgc3Rh
dGljIGZhY3RvcnkgbWV0aG9kcyB0byBnZXQgaW5zdGFuY2VzIG9mIEphdmFDbGFzcy4KICAgICAK
IHByb3RlY3RlZDoKLSAgICB2b2lkIF9jb21tb25Jbml0IChDbGFzc1N0cnVjdFB0ciBhQ2xhc3Mp
OworICAgIHZvaWQgX2NvbW1vbkluaXQoQ2xhc3NTdHJ1Y3RQdHIgYUNsYXNzKTsKICAgICB2b2lk
IF9jb21tb25Db3B5KGNvbnN0IE9iamNDbGFzcyAmb3RoZXIpOwogICAgIHZvaWQgX2NvbW1vbkRl
bGV0ZSgpOwogICAgIApAQCAtNDksMTYgKzQ2LDExIEBAIHByb3RlY3RlZDoKICAgICAKIHB1Ymxp
YzoKICAgICAvLyBSZXR1cm4gdGhlIGNhY2hlZCBPYmpDIG9mIHRoZSBzcGVjaWZpZWQgbmFtZS4K
LSAgICAvL3N0YXRpYyBPYmpjQ2xhc3MgKmNsYXNzRm9yTmFtZSAoY29uc3QgY2hhciAqbmFtZSk7
Ci0gICAgc3RhdGljIE9iamNDbGFzcyAqY2xhc3NGb3JJc0EgKENsYXNzU3RydWN0UHRyIGFDbGFz
cyk7CisgICAgc3RhdGljIE9iamNDbGFzcyAqY2xhc3NGb3JJc0EoQ2xhc3NTdHJ1Y3RQdHIpOwog
ICAgICAgICAgICAgCi0gICAgfk9iamNDbGFzcyAoKSB7Ci0gICAgICAgIF9jb21tb25EZWxldGUo
KTsKLSAgICB9CisgICAgfk9iamNDbGFzcygpIHsgX2NvbW1vbkRlbGV0ZSgpOyB9CiAgICAgCi0g
ICAgT2JqY0NsYXNzIChjb25zdCBPYmpjQ2xhc3MgJm90aGVyKSA6IENsYXNzKCkgewotICAgICAg
ICBfY29tbW9uQ29weSAob3RoZXIpOwotICAgIH07CisgICAgT2JqY0NsYXNzKGNvbnN0IE9iamND
bGFzcyAmb3RoZXIpIDogQ2xhc3MoKSB7IF9jb21tb25Db3B5KG90aGVyKTsgfQogCiAgICAgT2Jq
Y0NsYXNzICZvcGVyYXRvcj0oY29uc3QgT2JqY0NsYXNzICZvdGhlcikKICAgICB7CkBAIC02Niw3
ICs1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgICAg
IAogICAgICAgICBfY29tbW9uRGVsZXRlKCk7Ci0gICAgICAgIF9jb21tb25Db3B5IChvdGhlcik7
CisgICAgICAgIF9jb21tb25Db3B5KG90aGVyKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICB9CkBAIC03NCwxNiArNjYsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29u
c3QgY2hhciAqbmFtZSgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgTWV0aG9kTGlzdCBtZXRo
b2RzTmFtZWQoY29uc3QgY2hhciAqbmFtZSwgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKLSAg
ICAKICAgICB2aXJ0dWFsIEZpZWxkICpmaWVsZE5hbWVkKGNvbnN0IGNoYXIgKm5hbWUsIEluc3Rh
bmNlICppbnN0YW5jZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFZhbHVlSW1wICpmYWxsYmFja09i
amVjdChFeGVjU3RhdGUgKmV4ZWMsIEluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lKTsKICAgICAKLSAgICB2aXJ0dWFsIENvbnN0cnVjdG9yICpjb25zdHJ1
Y3RvckF0KGxvbmcgaSkgY29uc3QgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9OwotICAgIAot
ICAgIHZpcnR1YWwgbG9uZyBudW1Db25zdHJ1Y3RvcnMoKSBjb25zdCB7IHJldHVybiAwOyB9Owor
ICAgIHZpcnR1YWwgQ29uc3RydWN0b3IgKmNvbnN0cnVjdG9yQXQobG9uZyBpKSBjb25zdCB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBsb25nIG51bUNvbnN0cnVjdG9ycygpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KICAgICAKICAgICBDbGFzc1N0cnVjdFB0ciBpc2EoKSB7IHJldHVybiBfaXNhOyB9
CiAgICAgCkBAIC05NCw3ICs4Miw2IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBC
aW5kaW5ncwotCiB9IC8vIG5hbWVzcGFjZSBLSlMKIAotI2VuZGlmClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQorI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29i
amNfaGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL29iamMvb2JqY19oZWFkZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2hlYWRlci5o
Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaGVhZGVyLmgJMTMgRmViIDIw
MDQgMjI6Mzk6MzYgLTAwMDAJMS4xCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29i
amNfaGVhZGVyLmgJOCBBdWcgMjAwNSAxNTo0MzozNyAtMDAwMApAQCAtMjIsMTAgKzIyLDEyIEBA
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCi0jaWZuZGVmIF9CSU5ESU5H
U19PQkpDX0hFQURFUl9IXwotI2RlZmluZSBfQklORElOR1NfT0JKQ19IRUFERVJfSF8KKworI2lm
bmRlZiBLSlNfQklORElOR1NfT0JKQ19IRUFERVJfSAorI2RlZmluZSBLSlNfQklORElOR1NfT0JK
Q19IRUFERVJfSAogCiAjaWZkZWYgX19PQkpDX18KKwogI2luY2x1ZGUgPG9iamMvb2JqYy1jbGFz
cy5oPgogI2luY2x1ZGUgPG9iamMvb2JqYy1ydW50aW1lLmg+CiAKQEAgLTM2LDEyICszOCwxMiBA
QCB0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqT2JqZWN0U3RydWN0CiAKICNlbHNlCiAKLXR5
cGVkZWYgc3RydWN0IG9iamNfaXZhciB7fSAqSXZhcjsKLXR5cGVkZWYgc3RydWN0IG9iamNfY2xh
c3Mge30gKkNsYXNzU3RydWN0UHRyOwotdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3Qge30gKk9i
amVjdFN0cnVjdFB0cjsKK3R5cGVkZWYgc3RydWN0IG9iamNfaXZhciAqSXZhcjsKK3R5cGVkZWYg
c3RydWN0IG9iamNfY2xhc3MgKkNsYXNzU3RydWN0UHRyOwordHlwZWRlZiBzdHJ1Y3Qgb2JqY19v
YmplY3QgKk9iamVjdFN0cnVjdFB0cjsKIAogY2xhc3MgTlNNZXRob2RTaWduYXR1cmU7CiAKICNl
bmRpZgogCi0jZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50
aW1lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtcCAtdSAtcjEuMTMgSmF2YVNj
cmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUuaAotLS0gSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUuaAk4IEF1ZyAyMDA1IDA0OjA3OjI2IC0wMDAwCTEu
MTMKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLmgJOCBBdWcg
MjAwNSAxNTo0MzozNyAtMDAwMApAQCAtMjIsMjEgKzIyLDE5IEBACiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCi0jaWZuZGVmIF9CSU5ESU5HU19PQkpDX1JVTlRJTUVfSF8K
LSNkZWZpbmUgX0JJTkRJTkdTX09CSkNfUlVOVElNRV9IXworCisjaWZuZGVmIEtKU19CSU5ESU5H
U19PQkpDX1JVTlRJTUVfSAorI2RlZmluZSBLSlNfQklORElOR1NfT0JKQ19SVU5USU1FX0gKIAog
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAKLSNpbmNsdWRlIDxy
dW50aW1lLmg+Ci0jaW5jbHVkZSA8dXN0cmluZy5oPgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKKyNp
bmNsdWRlICJ1c3RyaW5nLmgiCiAKLSNpbmNsdWRlIDxvYmpjX2hlYWRlci5oPgorI2luY2x1ZGUg
Im9iamNfaGVhZGVyLmgiCiAKLW5hbWVzcGFjZSBLSlMKLXsKLQotbmFtZXNwYWNlIEJpbmRpbmdz
Ci17CituYW1lc3BhY2UgS0pTIHsKK25hbWVzcGFjZSBCaW5kaW5ncyB7CiAKIGNsYXNzIE9iamNJ
bnN0YW5jZTsKIApAQCAtNDQsMjggKzQyLDI2IEBAIGNsYXNzIE9iamNGaWVsZCA6IHB1YmxpYyBG
aWVsZAogewogcHVibGljOgogICAgIE9iamNGaWVsZChJdmFyIGl2YXIpOwotCiAgICAgT2JqY0Zp
ZWxkKENGU3RyaW5nUmVmIG5hbWUpOwogICAgIAotICAgIH5PYmpjRmllbGQoKSB7CisgICAgfk9i
amNGaWVsZCgpCisgICAgewogICAgICAgICBpZiAoX25hbWUpCi0gICAgICAgICAgICBDRlJlbGVh
c2UgKF9uYW1lKTsKLSAgICB9OworICAgICAgICAgICAgQ0ZSZWxlYXNlKF9uYW1lKTsKKyAgICB9
CiAKLSAgICBPYmpjRmllbGQoY29uc3QgT2JqY0ZpZWxkICZvdGhlcikgOiBGaWVsZCgpIHsKKyAg
ICBPYmpjRmllbGQoY29uc3QgT2JqY0ZpZWxkICZvdGhlcikgOiBGaWVsZCgpCisgICAgewogICAg
ICAgICBfaXZhciA9IG90aGVyLl9pdmFyOwogCi0gICAgICAgIGlmIChvdGhlci5fbmFtZSAhPSBf
bmFtZSkgewotICAgICAgICAgICAgaWYgKF9uYW1lKQotICAgICAgICAgICAgICAgIENGUmVsZWFz
ZSAoX25hbWUpOwotICAgICAgICAgICAgaWYgKG90aGVyLl9uYW1lKQotICAgICAgICAgICAgICAg
IF9uYW1lID0gKENGU3RyaW5nUmVmKUNGUmV0YWluIChvdGhlci5fbmFtZSk7Ci0gICAgICAgICAg
ICBlbHNlIAotICAgICAgICAgICAgICAgIF9uYW1lID0gMDsKLSAgICAgICAgfQotICAgIH07Cisg
ICAgICAgIGlmIChvdGhlci5fbmFtZSkKKyAgICAgICAgICAgIF9uYW1lID0gKENGU3RyaW5nUmVm
KUNGUmV0YWluKG90aGVyLl9uYW1lKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIF9uYW1l
ID0gMDsKKyAgICB9CiAgICAgCi0gICAgT2JqY0ZpZWxkICZvcGVyYXRvcj0oY29uc3QgT2JqY0Zp
ZWxkICZvdGhlcikgeworICAgIE9iamNGaWVsZCAmb3BlcmF0b3I9KGNvbnN0IE9iamNGaWVsZCAm
b3RoZXIpCisgICAgewogICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAKQEAgLTczLDE2ICs2OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICBpZiAob3RoZXIuX25hbWUgIT0gX25hbWUpIHsKICAgICAgICAgICAgIGlmIChfbmFtZSkK
LSAgICAgICAgICAgICAgICBDRlJlbGVhc2UgKF9uYW1lKTsKKyAgICAgICAgICAgICAgICBDRlJl
bGVhc2UoX25hbWUpOwogICAgICAgICAgICAgaWYgKG90aGVyLl9uYW1lKQotICAgICAgICAgICAg
ICAgIF9uYW1lID0gKENGU3RyaW5nUmVmKUNGUmV0YWluIChvdGhlci5fbmFtZSk7CisgICAgICAg
ICAgICAgICAgX25hbWUgPSAoQ0ZTdHJpbmdSZWYpQ0ZSZXRhaW4ob3RoZXIuX25hbWUpOwogICAg
ICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICBfbmFtZSA9IDA7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9OwotICAgICAgICAKKyAgICB9CisK
ICAgICB2aXJ0dWFsIFZhbHVlSW1wICp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSwg
VmFsdWVJbXAgKmFWYWx1ZSkgY29uc3Q7CiAgICAgCkBAIC05NCw0MSArOTAsNDAgQEAgcHJpdmF0
ZToKICAgICBDRlN0cmluZ1JlZiBfbmFtZTsKIH07CiAKLQogY2xhc3MgT2JqY01ldGhvZCA6IHB1
YmxpYyBNZXRob2QKIHsKIHB1YmxpYzoKLSAgICBPYmpjTWV0aG9kKCkgOiBNZXRob2QoKSwgX29i
amNDbGFzcygwKSwgX3NlbGVjdG9yKDApIHt9OwotCisgICAgT2JqY01ldGhvZCgpIDogX29iamND
bGFzcygwKSwgX3NlbGVjdG9yKDApIHt9CiAgICAgT2JqY01ldGhvZChzdHJ1Y3Qgb2JqY19jbGFz
cyAqYUNsYXNzLCBjb25zdCBjaGFyICpfc2VsZWN0b3IpOwotICAgIH5PYmpjTWV0aG9kICgpIHsK
KyAgICB+T2JqY01ldGhvZCAoKQorICAgIHsKICAgICAgICAgaWYgKF9qYXZhU2NyaXB0TmFtZSk7
Ci0gICAgICAgICAgICBDRlJlbGVhc2UgKF9qYXZhU2NyaXB0TmFtZSk7Ci0gICAgfTsKKyAgICAg
ICAgICAgIENGUmVsZWFzZShfamF2YVNjcmlwdE5hbWUpOworICAgIH0KIAotICAgIE9iamNNZXRo
b2QoY29uc3QgT2JqY01ldGhvZCAmb3RoZXIpIDogTWV0aG9kKCkgeworICAgIE9iamNNZXRob2Qo
Y29uc3QgT2JqY01ldGhvZCAmb3RoZXIpIDogTWV0aG9kKCkKKyAgICB7CiAgICAgICAgIF9vYmpj
Q2xhc3MgPSBvdGhlci5fb2JqY0NsYXNzOwogICAgICAgICBfc2VsZWN0b3IgPSBvdGhlci5fc2Vs
ZWN0b3I7Ci0gICAgfTsKKyAgICB9CiAgICAgCi0gICAgT2JqY01ldGhvZCAmb3BlcmF0b3I9KGNv
bnN0IE9iamNNZXRob2QgJm90aGVyKSB7CisgICAgT2JqY01ldGhvZCAmb3BlcmF0b3I9KGNvbnN0
IE9iamNNZXRob2QgJm90aGVyKQorICAgIHsKICAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQog
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCiAgICAgICAgIF9vYmpjQ2xhc3MgPSBvdGhlci5f
b2JqY0NsYXNzOwogICAgICAgICBfc2VsZWN0b3IgPSBvdGhlci5fc2VsZWN0b3I7Ci0gICAgICAg
IAogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
ICpuYW1lKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGxvbmcgbnVtUGFyYW1ldGVycygpIGNvbnN0
OwotICAgIAorCiAgICAgTlNNZXRob2RTaWduYXR1cmUgKmdldE1ldGhvZFNpZ25hdHVyZSgpIGNv
bnN0OwogICAgIAogICAgIGJvb2wgaXNGYWxsYmFja01ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIHN0
cmNtcChfc2VsZWN0b3IsICJpbnZva2VVbmRlZmluZWRNZXRob2RGcm9tV2ViU2NyaXB0OndpdGhB
cmd1bWVudHM6IikgPT0gMDsgfQotICAgIHZvaWQgc2V0SmF2YVNjcmlwdE5hbWUgKENGU3RyaW5n
UmVmIG4pOworICAgIHZvaWQgc2V0SmF2YVNjcmlwdE5hbWUoQ0ZTdHJpbmdSZWYgbik7CiAgICAg
Q0ZTdHJpbmdSZWYgamF2YVNjcmlwdE5hbWUoKSBjb25zdCB7IHJldHVybiBfamF2YVNjcmlwdE5h
bWU7IH0KICAgICAKIHByaXZhdGU6CkBAIC0xNDAsMjEgKzEzNSwyMCBAQCBwcml2YXRlOgogY2xh
c3MgT2JqY0FycmF5IDogcHVibGljIEFycmF5CiB7CiBwdWJsaWM6Ci0gICAgT2JqY0FycmF5IChP
YmplY3RTdHJ1Y3RQdHIgYSk7Ci0KLSAgICBPYmpjQXJyYXkgKGNvbnN0IE9iamNBcnJheSAmb3Ro
ZXIpOworICAgIE9iamNBcnJheShPYmplY3RTdHJ1Y3RQdHIpOwogCi0gICAgT2JqY0FycmF5ICZv
cGVyYXRvcj0oY29uc3QgT2JqY0FycmF5ICZvdGhlcik7CisgICAgT2JqY0FycmF5KGNvbnN0IE9i
amNBcnJheSAmKTsKKyAgICBPYmpjQXJyYXkgJm9wZXJhdG9yPShjb25zdCBPYmpjQXJyYXkgJik7
CiAgICAgCisgICAgdmlydHVhbCB+T2JqY0FycmF5KCk7CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgVmFsdWVJbXAgKmFW
YWx1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZUltcCAqdmFsdWVBdChFeGVjU3RhdGUgKmV4
ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0TGVuZ3RoKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB+T2JqY0FycmF5KCk7Ci0KICAg
ICBPYmplY3RTdHJ1Y3RQdHIgZ2V0T2JqY0FycmF5KCkgY29uc3QgeyByZXR1cm4gX2FycmF5OyB9
CiAKLSAgICBzdGF0aWMgVmFsdWVJbXAgKmNvbnZlcnRPYmpjQXJyYXlUb0FycmF5IChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdFN0cnVjdFB0ciBhbk9iamVjdCk7CisgICAgc3RhdGljIFZhbHVlSW1w
ICpjb252ZXJ0T2JqY0FycmF5VG9BcnJheShFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdFN0cnVjdFB0
ciBhbk9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgT2JqZWN0U3RydWN0UHRyIF9hcnJheTsKQEAg
LTE2MywyMyArMTU3LDE2IEBAIHByaXZhdGU6CiBjbGFzcyBPYmpjRmFsbGJhY2tPYmplY3RJbXAg
OiBwdWJsaWMgT2JqZWN0SW1wIHsKIHB1YmxpYzoKICAgICBPYmpjRmFsbGJhY2tPYmplY3RJbXAo
T2JqZWN0SW1wICpwcm90byk7Ci0gICAgICAgIAogICAgIE9iamNGYWxsYmFja09iamVjdEltcChP
YmpjSW5zdGFuY2UgKmksIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKIAogICAgIGNv
bnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Ci0KICAgICB2aXJ0dWFsIGJv
b2wgY2FuUHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdDsKLQorICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25l
KTsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKICAgICB2aXJ0dWFs
IFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncyk7Ci0KICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOwotCiAg
ICAgdmlydHVhbCBWYWx1ZUltcCAqZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBo
aW50KSBjb25zdDsKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Q7CkBAIC0xOTMsNyAr
MTgwLDYgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi0KIH0gLy8g
bmFtZXNwYWNlIEtKUwogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29i
amMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfcnVudGltZS5tbSx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xOQpkaWZmIC1wIC11IC1yMS4xOSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29i
amNfcnVudGltZS5tbQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRp
bWUubW0JOCBBdWcgMjAwNSAwNDowNzoyNiAtMDAwMAkxLjE5CisrKyBKYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9vYmpjL29iamNfcnVudGltZS5tbQk4IEF1ZyAyMDA1IDE1OjQzOjM3IC0wMDAwCkBA
IC0xMTUsOCArMTE1LDcgQEAgVmFsdWVJbXAgKk9iamNGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2Uo
RQogICAgICAgICAKICAgICBOU19IQU5ETEVSCiAgICAgICAgIAotICAgICAgICBWYWx1ZUltcCAq
ZXhjZXB0aW9uVmFsdWUgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgW1tsb2Nh
bEV4Y2VwdGlvbiByZWFzb25dIGxvc3N5Q1N0cmluZ10pOwotICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24oZXhjZXB0aW9uVmFsdWUpOworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxF
cnJvciwgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwogICAgICAgICAKICAgICBOU19FTkRIQU5E
TEVSCiAKQEAgLTE1Miw4ICsxNTEsNyBAQCB2b2lkIE9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3Rh
bmNlKEV4ZWNTCiAKICAgICBOU19IQU5ETEVSCiAgICAgICAgIAotICAgICAgICBWYWx1ZUltcCAq
YVZhbHVlID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIFtbbG9jYWxFeGNlcHRp
b24gcmVhc29uXSBsb3NzeUNTdHJpbmddKTsKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGFW
YWx1ZSk7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCBbbG9jYWxFeGNl
cHRpb24gcmVhc29uXSk7CiAgICAgICAgIAogICAgIE5TX0VOREhBTkRMRVIKIH0KQEAgLTE4OSwx
NCArMTg3LDEyIEBAIE9iamNBcnJheSAmT2JqY0FycmF5OjpvcGVyYXRvcj0oY29uc3QgT2IKIHZv
aWQgT2JqY0FycmF5OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGlu
ZGV4LCBWYWx1ZUltcCAqYVZhbHVlKSBjb25zdAogewogICAgIGlmICghW19hcnJheSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc2VydE9iamVjdDphdEluZGV4OildKSB7Ci0gICAgICAg
IE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvciwgIkFycmF5
IGlzIG5vdCBtdXRhYmxlLiIpOwotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwor
ICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIkFycmF5IGlzIG5vdCBtdXRhYmxl
LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGluZGV4ID4gW19hcnJheSBj
b3VudF0pIHsKLSAgICAgICAgT2JqZWN0SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywg
UmFuZ2VFcnJvciwgIkluZGV4IGV4Y2VlZHMgYXJyYXkgc2l6ZS4iKTsKLSAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9y
LCAiSW5kZXggZXhjZWVkcyBhcnJheSBzaXplLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtMjEwLDggKzIwNiw3IEBAIE5TX0RVUklORwogCiBOU19IQU5ETEVSCiAgICAgCi0g
ICAgT2JqZWN0SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCAi
T2JqZWN0aXZlQyBleGNlcHRpb24uIik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsK
KyAgICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk9iamVjdGl2ZS1DIGV4Y2VwdGlv
bi4iKTsKICAgICAKIE5TX0VOREhBTkRMRVIKIH0KQEAgLTIxOSwxMSArMjE0LDggQEAgTlNfRU5E
SEFORExFUgogCiBWYWx1ZUltcCAqT2JqY0FycmF5Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywg
dW5zaWduZWQgaW50IGluZGV4KSBjb25zdAogewotICAgIGlmIChpbmRleCA+IFtfYXJyYXkgY291
bnRdKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJh
bmdlRXJyb3IsICJJbmRleCBleGNlZWRzIGFycmF5IHNpemUuIik7Ci0gICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnJvcik7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9CisgICAgaWYg
KGluZGV4ID4gW19hcnJheSBjb3VudF0pCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFJhbmdlRXJyb3IsICJJbmRleCBleGNlZWRzIGFycmF5IHNpemUuIik7CiAgICAgCiAgICAgT2Jq
ZWN0U3RydWN0UHRyIG9iaiA9IDA7CiAgICAgT2JqZWN0SW1wICogdm9sYXRpbGUgZXJyb3I7CkBA
IC0yMzUsOCArMjI3LDcgQEAgTlNfRFVSSU5HCiAgICAgCiBOU19IQU5ETEVSCiAgICAgCi0gICAg
ZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk9iamVjdGl2ZUMgZXhj
ZXB0aW9uLiIpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CisgICAgZXJyb3IgPSB0
aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk9iamVjdGl2ZS1DIGV4Y2VwdGlvbi4iKTsK
ICAgICBoYXZlRXJyb3IgPSB0cnVlOwogICAgIAogTlNfRU5ESEFORExFUgpJbmRleDogSmF2YVNj
cmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUgSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
b2JqYy9vYmpjX3V0aWxpdHkuaAk4IEF1ZyAyMDA1IDA0OjA3OjI2IC0wMDAwCTEuNQorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkuaAk4IEF1ZyAyMDA1IDE1OjQz
OjM3IC0wMDAwCkBAIC0yMiwxNCArMjIsMTQgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KLSNpZm5kZWYgX0JJTkRJTkdTX09CSkNfVVRJTElUWV9IXwotI2RlZmluZSBf
QklORElOR1NfT0JKQ19VVElMSVRZX0hfCiAKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3Jl
Rm91bmRhdGlvbi5oPgorI2lmbmRlZiBLSlNfQklORElOR1NfT0JKQ19VVElMSVRZX0gKKyNkZWZp
bmUgS0pTX0JJTkRJTkdTX09CSkNfVVRJTElUWV9ICiAKLSNpbmNsdWRlIDx2YWx1ZS5oPgorI2lu
Y2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAKLSNpbmNsdWRlIDxvYmpj
X2hlYWRlci5oPgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgIm9iamNfaGVhZGVyLmgi
CiAKICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIE5TU3RyaW5nOwpAQCAtMzcsMTEgKzM3LDggQEAK
IGNsYXNzIE5TU3RyaW5nOwogI2VuZGlmCiAKLW5hbWVzcGFjZSBLSlMKLXsKLQotbmFtZXNwYWNl
IEJpbmRpbmdzIAoteworbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgQmluZGluZ3MgewogCiB0
eXBlZGVmIHVuaW9uIHsKICAgICBPYmplY3RTdHJ1Y3RQdHIgb2JqZWN0VmFsdWU7CkBAIC03NSwx
MCArNzIsMTEgQEAgT2JqY1ZhbHVlVHlwZSBvYmpjVmFsdWVUeXBlRm9yVHlwZShjb25zdAogCiB2
b2lkIEpTTWV0aG9kTmFtZVRvT2JqQ01ldGhvZE5hbWUoY29uc3QgY2hhciAqbmFtZSwgY2hhciAq
bmFtZSwgdW5zaWduZWQgaW50IGxlbmd0aCk7CiAKLXZvaWQgKmNyZWF0ZU9iamNJbnN0YW5jZUZv
clZhbHVlKE9iamVjdEltcCAqdmFsdWUsIGNvbnN0IFJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3Qg
Um9vdE9iamVjdCAqY3VycmVudCk7Cit2b2lkICpjcmVhdGVPYmpjSW5zdGFuY2VGb3JWYWx1ZShW
YWx1ZUltcCAqdmFsdWUsIGNvbnN0IFJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgUm9vdE9iamVj
dCAqY3VycmVudCk7CiAKLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCitPYmplY3RJbXAgKnRocm93
RXJyb3IoRXhlY1N0YXRlICosIEVycm9yVHlwZSwgTlNTdHJpbmcgKm1lc3NhZ2UpOwogCit9IC8v
IG5hbWVzcGFjZSBCaW5kaW5ncwogfSAvLyBuYW1lc3BhY2UgS0pTCiAKICNlbmRpZgpJbmRleDog
SmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY191dGls
aXR5Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAgLXUgLXIxLjE5IEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY191dGlsaXR5Lm1tCi0tLSBKYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9vYmpjL29iamNfdXRpbGl0eS5tbQk4IEF1ZyAyMDA1IDA0OjA3OjI2IC0wMDAw
CTEuMTkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY191dGlsaXR5Lm1tCTgg
QXVnIDIwMDUgMTU6NDM6MzggLTAwMDAKQEAgLTIyLDIyICsyMiwyMyBAQAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwotI2luY2x1ZGUgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvaW50ZXJuYWwuaD4KKyNpbmNsdWRlICJv
YmpjX3V0aWxpdHkuaCIKKworI2luY2x1ZGUgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogCi0j
aW5jbHVkZSA8b2JqY19pbnN0YW5jZS5oPgotI2luY2x1ZGUgPG9iamNfdXRpbGl0eS5oPgorI2lu
Y2x1ZGUgImludGVybmFsLmgiCiAKLSNpbmNsdWRlIDxydW50aW1lX2FycmF5Lmg+Ci0jaW5jbHVk
ZSA8cnVudGltZV9vYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lX3Jvb3QuaD4KKyNpbmNsdWRl
ICJvYmpjX2luc3RhbmNlLmgiCiAKLSNpbmNsdWRlIDxXZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+
CisjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0Lmgi
CisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAKKyNpbmNsdWRlICJXZWJTY3JpcHRPYmplY3RQ
cml2YXRlLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBLSlM7Ci11c2luZyBuYW1lc3BhY2UgS0pTOjpC
aW5kaW5nczsKK25hbWVzcGFjZSBLSlMgeworbmFtZXNwYWNlIEJpbmRpbmdzIHsKIAogLyoKICAg
ICBUaGUgZGVmYXVsdCBuYW1lIGNvbmNhdGVuYXRlcyB0aGUgY29tcG9uZW50cyBvZiB0aGUKQEAg
LTUwLDcgKzUxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzo6QmluZGluZ3M7CiAgICAgICAgIG1v
dmVUbyRfICAgICAgICAgICAgICAgIG1vdmVUbyQkJF8KICAgICBAcmVzdWx0IFJldHVybnMgdGhl
IG5hbWUgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHNwZWNpZmljZWQgc2VsZWN0b3IgaW4g
dGhlCiAqLwotdm9pZCBCaW5kaW5nczo6SlNNZXRob2ROYW1lVG9PYmpDTWV0aG9kTmFtZShjb25z
dCBjaGFyICpuYW1lLCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCit2b2lkIEpTTWV0
aG9kTmFtZVRvT2JqQ01ldGhvZE5hbWUoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqYnVmZmVyLCB1
bnNpZ25lZCBpbnQgbGVuKQogewogICAgIGNvbnN0IGNoYXIgKm5wID0gbmFtZTsKICAgICBjaGFy
ICpicDsKQEAgLTg3LDcgKzg4LDcgQEAgdm9pZCBCaW5kaW5nczo6SlNNZXRob2ROYW1lVG9PYmpD
TWV0aG9kTgogICAgIFtdLCBvdGhlciAgICAgICBleGNlcHRpb24KIAogKi8KLU9iamNWYWx1ZSBC
aW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJ
bXAgKnZhbHVlLCBPYmpjVmFsdWVUeXBlIHR5cGUpCitPYmpjVmFsdWUgY29udmVydFZhbHVlVG9P
YmpjVmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKnZhbHVlLCBPYmpjVmFsdWVUeXBl
IHR5cGUpCiB7CiAgICAgT2JqY1ZhbHVlIHJlc3VsdDsKICAgICBkb3VibGUgZCA9IDA7CkBAIC05
OCw3ICs5OSw3IEBAIE9iamNWYWx1ZSBCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmEKICAg
ICBzd2l0Y2ggKHR5cGUpewogICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7CiAJICAgIElu
dGVycHJldGVyICpvcmlnaW5JbnRlcnByZXRlciA9IGV4ZWMtPmludGVycHJldGVyKCk7Ci0gICAg
ICAgICAgICBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqb3JpZ2luRXhlY3V0aW9uQ29udGV4
dCA9IHJvb3RGb3JJbnRlcnByZXRlcihvcmlnaW5JbnRlcnByZXRlcik7CisgICAgICAgICAgICBj
b25zdCBSb290T2JqZWN0ICpvcmlnaW5FeGVjdXRpb25Db250ZXh0ID0gcm9vdEZvckludGVycHJl
dGVyKG9yaWdpbkludGVycHJldGVyKTsKIAogCSAgICBJbnRlcnByZXRlciAqaW50ZXJwcmV0ZXIg
PSAwOwogCSAgICBpZiAob3JpZ2luSW50ZXJwcmV0ZXItPmlzR2xvYmFsT2JqZWN0KHZhbHVlKSkg
ewpAQCAtMTA4LDkgKzEwOSw5IEBAIE9iamNWYWx1ZSBCaW5kaW5nczo6Y29udmVydFZhbHVlVG9P
YmpjVmEKIAkgICAgaWYgKCFpbnRlcnByZXRlcikKIAkJaW50ZXJwcmV0ZXIgPSBvcmlnaW5JbnRl
cnByZXRlcjsKIAkJCi0gICAgICAgICAgICBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqZXhl
Y3V0aW9uQ29udGV4dCA9IHJvb3RGb3JJbnRlcnByZXRlcihpbnRlcnByZXRlcik7CisgICAgICAg
ICAgICBjb25zdCBSb290T2JqZWN0ICpleGVjdXRpb25Db250ZXh0ID0gcm9vdEZvckludGVycHJl
dGVyKGludGVycHJldGVyKTsKICAgICAgICAgICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkgewot
ICAgICAgICAgICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0ICpuZXdFeGVjdXRpb25Db250ZXh0
ID0gbmV3IEJpbmRpbmdzOjpSb290T2JqZWN0KDApOworICAgICAgICAgICAgICAgIFJvb3RPYmpl
Y3QgKm5ld0V4ZWN1dGlvbkNvbnRleHQgPSBuZXcgUm9vdE9iamVjdCgwKTsKICAgICAgICAgICAg
ICAgICBuZXdFeGVjdXRpb25Db250ZXh0LT5zZXRJbnRlcnByZXRlciAoaW50ZXJwcmV0ZXIpOwog
ICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBuZXdFeGVjdXRpb25Db250ZXh0Owog
ICAgICAgICAgICAgfQpAQCAtMTY0LDcgKzE2NSw3IEBAIE9iamNWYWx1ZSBCaW5kaW5nczo6Y29u
dmVydFZhbHVlVG9PYmpjVmEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1WYWx1ZUltcCAqQmlu
ZGluZ3M6OmNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKE5TU3RyaW5nICpuc3N0cmluZykKK1ZhbHVl
SW1wICpjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhOU1N0cmluZyAqbnNzdHJpbmcpCiB7CiAgICAg
dW5pY2hhciAqY2hhcnM7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IFtuc3N0cmluZyBsZW5n
dGhdOwpAQCAtMTkyLDcgKzE5Myw3IEBAIFZhbHVlSW1wICpCaW5kaW5nczo6Y29udmVydE5TU3Ry
aW5nVG9TdHIKICAgICBvdGhlciAgICAgICAgICAgc2hvdWxkIG5vdCBoYXBwZW4KIAogKi8KLVZh
bHVlSW1wICpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUgKEV4ZWNTdGF0ZSAqZXhl
Yywgdm9pZCAqYnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUpCitWYWx1ZUltcCAqY29udmVydE9i
amNWYWx1ZVRvVmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywgdm9pZCAqYnVmZmVyLCBPYmpjVmFsdWVU
eXBlIHR5cGUpCiB7CiAgICAgVmFsdWVJbXAgKmFWYWx1ZSA9IE5VTEw7CiAKQEAgLTI4Niw3ICsy
ODcsNyBAQCBWYWx1ZUltcCAqQmluZGluZ3M6OmNvbnZlcnRPYmpjVmFsdWVUb1ZhCiB9CiAKIAot
T2JqY1ZhbHVlVHlwZSBCaW5kaW5nczo6b2JqY1ZhbHVlVHlwZUZvclR5cGUgKGNvbnN0IGNoYXIg
KnR5cGUpCitPYmpjVmFsdWVUeXBlIG9iamNWYWx1ZVR5cGVGb3JUeXBlIChjb25zdCBjaGFyICp0
eXBlKQogewogICAgIGludCB0eXBlTGVuZ3RoID0gc3RybGVuKHR5cGUpOwogICAgIE9iamNWYWx1
ZVR5cGUgb2JqY1ZhbHVlVHlwZSA9IE9iamNJbnZhbGlkVHlwZTsKQEAgLTMzMiwxMiArMzMzLDI0
IEBAIE9iamNWYWx1ZVR5cGUgQmluZGluZ3M6Om9iamNWYWx1ZVR5cGVGb3IKIH0KIAogCi12b2lk
ICpCaW5kaW5nczo6Y3JlYXRlT2JqY0luc3RhbmNlRm9yVmFsdWUgKE9iamVjdEltcCAqdmFsdWUs
IGNvbnN0IFJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgUm9vdE9iamVjdCAqY3VycmVudCkKK3Zv
aWQgKmNyZWF0ZU9iamNJbnN0YW5jZUZvclZhbHVlKFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgUm9v
dE9iamVjdCAqb3JpZ2luLCBjb25zdCBSb290T2JqZWN0ICpjdXJyZW50KQogewogICAgIGlmICgh
dmFsdWUtPmlzT2JqZWN0KCkpCiAJcmV0dXJuIDA7CisgICAgT2JqZWN0SW1wICpvYmplY3QgPSBz
dGF0aWNfY2FzdDxPYmplY3RJbXAgKj4odmFsdWUpOworICAgIHJldHVybiBbW1tXZWJTY3JpcHRP
YmplY3QgYWxsb2NdIF9pbml0V2l0aE9iamVjdEltcDpvYmplY3Qgb3JpZ2luRXhlY3V0aW9uQ29u
dGV4dDpvcmlnaW4gZXhlY3V0aW9uQ29udGV4dDpjdXJyZW50XSBhdXRvcmVsZWFzZV07Cit9CiAK
LSAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlKTsKLSAg
ICAKLSAgICByZXR1cm4gW1tbV2ViU2NyaXB0T2JqZWN0IGFsbG9jXSBfaW5pdFdpdGhPYmplY3RJ
bXA6aW1wIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6b3JpZ2luIGV4ZWN1dGlvbkNvbnRleHQ6Y3Vy
cmVudF0gYXV0b3JlbGVhc2VdOworT2JqZWN0SW1wICp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqZXhl
YywgRXJyb3JUeXBlIHR5cGUsIE5TU3RyaW5nICptZXNzYWdlKQoreworICAgIGFzc2VydChtZXNz
YWdlKTsKKyAgICBzaXplX3QgbGVuZ3RoID0gW21lc3NhZ2UgbGVuZ3RoXTsKKyAgICB1bmljaGFy
ICpidWZmZXIgPSBuZXcgdW5pY2hhcltsZW5ndGhdOworICAgIFttZXNzYWdlIGdldENoYXJhY3Rl
cnM6YnVmZmVyXTsKKyAgICBPYmplY3RJbXAgKmVycm9yID0gdGhyb3dFcnJvcihleGVjLCB0eXBl
LCBVU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIgKj4oYnVmZmVyKSwgbGVuZ3RoKSk7Cisg
ICAgZGVsZXRlIFtdIGJ1ZmZlcjsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30KIH0KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS41MApkaWZmIC1wIC11IC1yMS41MCBKYXZhU2NyaXB0Q29yZS9ranMvYXJy
YXlfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAJOCBB
dWcgMjAwNSAwNDozNToyMiAtMDAwMAkxLjUwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlf
b2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDE1OjQzOjQwIC0wMDAwCkBAIC00MjEsNiArNDIxLDE0IEBA
IGJvb2wgQXJyYXlQcm90b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxsKCkKICAgcmV0dXJuIHRydWU7
CiB9CiAKK3N0YXRpYyBWYWx1ZUltcCAqZ2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKm9iaiwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgUHJvcGVydHlTbG90IHNsb3Q7Cisg
ICAgaWYgKCFvYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBpbmRleCwgc2xvdCkpCisgICAgICAg
IHJldHVybiBOVUxMOworICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGluZGV4KTsKK30K
KwogLy8gRUNNQSAxNS40LjQKIFZhbHVlSW1wICpBcnJheVByb3RvRnVuY0ltcDo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCiB7CkBAIC00MzIsMTEgKzQ0MCw4IEBAIFZhbHVlSW1wICpBcnJheVByb3RvRnVuY0ltcDo6
Y2FsbEFzRnVuY3QKICAgY2FzZSBUb0xvY2FsZVN0cmluZzoKICAgY2FzZSBUb1N0cmluZzoKIAot
ICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkFycmF5SW5zdGFuY2VJbXA6OmluZm8pKSB7Ci0g
ICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICByZXR1cm4gZXJyOwotICAgIH0KKyAg
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZBcnJheUluc3RhbmNlSW1wOjppbmZvKSkKKyAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICAvLyBmYWxsIHRocm91
Z2gKICAgY2FzZSBKb2luOiB7CkBAIC00NzIsMTAgKzQ3Nyw3IEBAIFZhbHVlSW1wICpBcnJheVBy
b3RvRnVuY0ltcDo6Y2FsbEFzRnVuY3QKICAgICAgICAgICBpZiAoY29udmVyc2lvbkZ1bmN0aW9u
LT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihjb252ZXJzaW9uRnVuY3Rp
b24pLT5pbXBsZW1lbnRzQ2FsbCgpKSB7CiAgICAgICAgICAgICBzdHIgKz0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KGNvbnZlcnNpb25GdW5jdGlvbiktPmNhbGwoZXhlYywgbywgTGlzdCgpKS0+
dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFVTdHJpbmcg
bXNnID0gIkNhbid0IGNvbnZlcnQgIiArIG8tPmNsYXNzTmFtZSgpICsgIiBvYmplY3QgdG8gc3Ry
aW5nIjsKLSAgICAgICAgICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
IFJhbmdlRXJyb3IsIG1zZy5jc3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgIkNhbid0IGNvbnZlcnQgIiAr
IG8tPmNsYXNzTmFtZSgpICsgIiBvYmplY3QgdG8gc3RyaW5nIik7CiAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgIHN0ciArPSBlbGVtZW50LT50b1N0cmluZyhleGVjKTsK
QEAgLTUwMiw4ICs1MDQsNyBAQCBWYWx1ZUltcCAqQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1
bmN0CiAgICAgICAgIC8vIGJ5IGNoZWNraW5nIGZvciBuICE9IDAsIGJ1dCB0aGF0IGRvZXNuJ3Qg
d29yayBpZiB0aGlzT2JqIGlzIGFuIGVtcHR5IGFycmF5LgogICAgICAgICBsZW5ndGggPSBjdXJP
YmotPmdldChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSktPnRvVUludDMyKGV4ZWMpOwogICAgICAg
ICB3aGlsZSAoayA8IGxlbmd0aCkgewotICAgICAgICAgIFZhbHVlSW1wICp2OwotICAgICAgICAg
IGlmIChjdXJPYmotPmdldFByb3BlcnR5KGV4ZWMsIGssIHYpKQorICAgICAgICAgIGlmIChWYWx1
ZUltcCAqdiA9IGdldFByb3BlcnR5KGV4ZWMsIGN1ck9iaiwgaykpCiAgICAgICAgICAgICBhcnIt
PnB1dChleGVjLCBuLCB2KTsKICAgICAgICAgICBuKys7CiAgICAgICAgICAgaysrOwpAQCAtNTQ2
LDE3ICs1NDcsMTUgQEAgVmFsdWVJbXAgKkFycmF5UHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jdAog
CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCBtaWRkbGU7IGsrKykgewogICAgICAg
dW5zaWduZWQgbGsxID0gbGVuZ3RoIC0gayAtIDE7Ci0gICAgICBWYWx1ZUltcCAqb2JqOwotICAg
ICAgVmFsdWVJbXAgKm9iajI7Ci0gICAgICBib29sIGhhczIgPSB0aGlzT2JqLT5nZXRQcm9wZXJ0
eShleGVjLCBsazEsIG9iajIpOwotICAgICAgYm9vbCBoYXMxID0gdGhpc09iai0+Z2V0UHJvcGVy
dHkoZXhlYywgaywgb2JqKTsKKyAgICAgIFZhbHVlSW1wICpvYmoyID0gZ2V0UHJvcGVydHkoZXhl
YywgdGhpc09iaiwgbGsxKTsKKyAgICAgIFZhbHVlSW1wICpvYmogPSBnZXRQcm9wZXJ0eShleGVj
LCB0aGlzT2JqLCBrKTsKIAotICAgICAgaWYgKGhhczIpIAorICAgICAgaWYgKG9iajIpIAogICAg
ICAgICB0aGlzT2JqLT5wdXQoZXhlYywgaywgb2JqMik7CiAgICAgICBlbHNlCiAgICAgICAgIHRo
aXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGspOwogCi0gICAgICBpZiAoaGFzMSkKKyAgICAg
IGlmIChvYmopCiAgICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBsazEsIG9iaik7CiAgICAgICBl
bHNlCiAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGxrMSk7CkBAIC01NzEs
OCArNTcwLDcgQEAgVmFsdWVJbXAgKkFycmF5UHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jdAogICAg
IH0gZWxzZSB7CiAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXQoZXhlYywgMCk7CiAgICAgICBm
b3IodW5zaWduZWQgaW50IGsgPSAxOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgVmFsdWVJ
bXAgKm9iajsKLSAgICAgICAgaWYgKHRoaXNPYmotPmdldFByb3BlcnR5KGV4ZWMsIGssIG9iaikp
CisgICAgICAgIGlmIChWYWx1ZUltcCAqb2JqID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwg
aykpCiAgICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGstMSwgb2JqKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGstMSk7CkBAIC02MTgs
OSArNjE2LDggQEAgVmFsdWVJbXAgKkFycmF5UHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jdAogICAg
IGludCBiID0gc3RhdGljX2Nhc3Q8aW50PihiZWdpbik7CiAgICAgaW50IGUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGVuZCk7CiAgICAgZm9yKGludCBrID0gYjsgayA8IGU7IGsrKywgbisrKSB7Ci0gICAg
ICBWYWx1ZUltcCAqb2JqOwotICAgICAgaWYgKHRoaXNPYmotPmdldFByb3BlcnR5KGV4ZWMsIGss
IG9iaikpCi0gICAgICAgIHJlc09iai0+cHV0KGV4ZWMsIG4sIG9iaik7CisgICAgICBpZiAoVmFs
dWVJbXAgKnYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrKSkKKyAgICAgICAgcmVzT2Jq
LT5wdXQoZXhlYywgbiwgdik7CiAgICAgfQogICAgIHJlc09iai0+cHV0KGV4ZWMsIGxlbmd0aFBy
b3BlcnR5TmFtZSwgTnVtYmVyKG4pLCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgIGJyZWFr
OwpAQCAtNzEyLDkgKzcwOSw4IEBAIFZhbHVlSW1wICpBcnJheVByb3RvRnVuY0ltcDo6Y2FsbEFz
RnVuY3QKIAogICAgIC8vcHJpbnRmKCAiU3BsaWNpbmcgZnJvbSAlZCwgZGVsZXRlQ291bnQ9JWQg
XG4iLCBiZWdpbiwgZGVsZXRlQ291bnQgKTsKICAgICBmb3IodW5zaWduZWQgaW50IGsgPSAwOyBr
IDwgZGVsZXRlQ291bnQ7IGsrKykgewotICAgICAgVmFsdWVJbXAgKm9iajsKLSAgICAgIGlmICh0
aGlzT2JqLT5nZXRQcm9wZXJ0eShleGVjLCBrK2JlZ2luLCBvYmopKQotICAgICAgICByZXNPYmot
PnB1dChleGVjLCBrLCBvYmopOworICAgICAgaWYgKFZhbHVlSW1wICp2ID0gZ2V0UHJvcGVydHko
ZXhlYywgdGhpc09iaiwgaytiZWdpbikpCisgICAgICAgIHJlc09iai0+cHV0KGV4ZWMsIGssIHYp
OwogICAgIH0KICAgICByZXNPYmotPnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJl
cihkZWxldGVDb3VudCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAKQEAgLTcyNSw5ICs3MjEs
OCBAQCBWYWx1ZUltcCAqQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0CiAgICAgICB7CiAg
ICAgICAgIGZvciAoIHVuc2lnbmVkIGludCBrID0gYmVnaW47IGsgPCBsZW5ndGggLSBkZWxldGVD
b3VudDsgKytrICkKICAgICAgICAgewotICAgICAgICAgIFZhbHVlSW1wICpvYmo7Ci0gICAgICAg
ICAgaWYgKHRoaXNPYmotPmdldFByb3BlcnR5KGV4ZWMsIGsrZGVsZXRlQ291bnQsIG9iaikpCi0g
ICAgICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgaythZGRpdGlvbmFsQXJncywgb2JqKTsKKyAg
ICAgICAgICBpZiAoVmFsdWVJbXAgKnYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrK2Rl
bGV0ZUNvdW50KSkKKyAgICAgICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBrK2FkZGl0aW9uYWxB
cmdzLCB2KTsKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzT2JqLT5kZWxldGVQcm9w
ZXJ0eShleGVjLCBrK2FkZGl0aW9uYWxBcmdzKTsKICAgICAgICAgfQpAQCAtNzM4LDggKzczMyw3
IEBAIFZhbHVlSW1wICpBcnJheVByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuY3QKICAgICAgIHsKICAg
ICAgICAgZm9yICggdW5zaWduZWQgaW50IGsgPSBsZW5ndGggLSBkZWxldGVDb3VudDsgKGludClr
ID4gYmVnaW47IC0tayApCiAgICAgICAgIHsKLSAgICAgICAgICBWYWx1ZUltcCAqb2JqOwotICAg
ICAgICAgIGlmICh0aGlzT2JqLT5nZXRQcm9wZXJ0eShleGVjLCBrICsgZGVsZXRlQ291bnQgLSAx
LCBvYmopKQorICAgICAgICAgIGlmIChWYWx1ZUltcCAqb2JqID0gZ2V0UHJvcGVydHkoZXhlYywg
dGhpc09iaiwgayArIGRlbGV0ZUNvdW50IC0gMSkpCiAgICAgICAgICAgICB0aGlzT2JqLT5wdXQo
ZXhlYywgayArIGFkZGl0aW9uYWxBcmdzIC0gMSwgb2JqKTsKICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBrK2FkZGl0aW9uYWxBcmdzLTEp
OwpAQCAtNzU3LDkgKzc1MSw4IEBAIFZhbHVlSW1wICpBcnJheVByb3RvRnVuY0ltcDo6Y2FsbEFz
RnVuY3QKICAgICB1bnNpZ25lZCBpbnQgbnJBcmdzID0gYXJncy5zaXplKCk7CiAgICAgZm9yICgg
dW5zaWduZWQgaW50IGsgPSBsZW5ndGg7IGsgPiAwOyAtLWsgKQogICAgIHsKLSAgICAgIFZhbHVl
SW1wICpvYmo7Ci0gICAgICBpZiAodGhpc09iai0+Z2V0UHJvcGVydHkoZXhlYywgayAtIDEsIG9i
aikpCi0gICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBrK25yQXJncy0xLCBvYmopOworICAgICAg
aWYgKFZhbHVlSW1wICp2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayAtIDEpKQorICAg
ICAgICB0aGlzT2JqLT5wdXQoZXhlYywgaytuckFyZ3MtMSwgdik7CiAgICAgICBlbHNlCiAgICAg
ICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsrbnJBcmdzLTEpOwogICAgIH0KQEAg
LTc3OSwxMSArNzcyLDggQEAgVmFsdWVJbXAgKkFycmF5UHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5j
dAogICAgIAogICAgIE9iamVjdEltcCAqZWFjaEZ1bmN0aW9uID0gYXJnc1swXS0+dG9PYmplY3Qo
ZXhlYyk7CiAgICAgCi0gICAgaWYgKCFlYWNoRnVuY3Rpb24tPmltcGxlbWVudHNDYWxsKCkpIHsK
LSAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0g
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgfQor
ICAgIGlmICghZWFjaEZ1bmN0aW9uLT5pbXBsZW1lbnRzQ2FsbCgpKQorICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICAKICAgICBPYmplY3RJbXAgKmFwcGx5VGhp
cyA9IGFyZ3NbMV0tPmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5keW5hbWljSW50ZXJwcmV0
ZXIoKS0+Z2xvYmFsT2JqZWN0KCkgOiAgYXJnc1sxXS0+dG9PYmplY3QoZXhlYyk7CiAgICAgCkBA
IC04NDcsMTEgKzgzNyw4IEBAIE9iamVjdEltcCAqQXJyYXlPYmplY3RJbXA6OmNvbnN0cnVjdChF
eGUKICAgLy8gYSBzaW5nbGUgbnVtZXJpYyBhcmd1bWVudCBkZW5vdGVzIHRoZSBhcnJheSBzaXpl
ICghKQogICBpZiAoYXJncy5zaXplKCkgPT0gMSAmJiBhcmdzWzBdLT5pc051bWJlcigpKSB7CiAg
ICAgdWludDMyX3QgbiA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChuICE9IGFy
Z3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSB7Ci0gICAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6
OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLCAiQXJyYXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91
Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTsKLSAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7
Ci0gICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQorICAgIGlmIChuICE9IGFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpKQorICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgIkFy
cmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIik7CiAgICAg
cmV0dXJuIG5ldyBBcnJheUluc3RhbmNlSW1wKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5i
dWlsdGluQXJyYXlQcm90b3R5cGUoKSwgbik7CiAgIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL2Jvb2xfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpk
aWZmIC1wIC11IC1yMS4xMiBKYXZhU2NyaXB0Q29yZS9ranMvYm9vbF9vYmplY3QuY3BwCi0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvYm9vbF9vYmplY3QuY3BwCTggQXVnIDIwMDUgMDQ6MDc6MjcgLTAw
MDAJMS4xMgorKysgSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNwcAk4IEF1ZyAyMDA1
IDE1OjQzOjQwIC0wMDAwCkBAIC03OCwxMSArNzgsOCBAQCBib29sIEJvb2xlYW5Qcm90b0Z1bmNJ
bXA6OmltcGxlbWVudHNDYWxsCiBWYWx1ZUltcCAqQm9vbGVhblByb3RvRnVuY0ltcDo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
Ji8qYXJncyovKQogewogICAvLyBubyBnZW5lcmljIGZ1bmN0aW9uLiAidGhpcyIgaGFzIHRvIGJl
IGEgQm9vbGVhbiBvYmplY3QKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmQm9vbGVhbkluc3Rh
bmNlSW1wOjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVy
cjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZCb29sZWFuSW5zdGFuY2VJbXA6Omlu
Zm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgLy8gZXhl
Y3V0ZSAidG9TdHJpbmcoKSIgb3IgInZhbHVlT2YoKSIsIHJlc3BlY3RpdmVseQogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjUwCmRpZmYgLXAgLXUgLXIxLjUwIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29i
amVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAJOCBBdWcgMjAw
NSAwNDozNToyMiAtMDAwMAkxLjUwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3Qu
Y3BwCTggQXVnIDIwMDUgMTU6NDM6NDEgLTAwMDAKQEAgLTUxOCw5ICs1MTgsNyBAQCBWYWx1ZUlt
cCAqRGF0ZVByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuY3RpCiAKICAgICAvLyBUb1N0cmluZyBhbmQg
VmFsdWVPZiBhcmUgZ2VuZXJpYyBhY2NvcmRpbmcgdG8gdGhlIHNwZWMsIGJ1dCB0aGUgbW96aWxs
YQogICAgIC8vIHRlc3RzIHN1Z2dlc3Qgb3RoZXJ3aXNlLi4uCi0gICAgT2JqZWN0SW1wICplcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyKTsKLSAgICByZXR1cm4gZXJyOworICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CiAgIH0KIAogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUyCmRpZmYgLXAgLXUgLXIxLjUyIEphdmFTY3Jp
cHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5j
cHAJOCBBdWcgMjAwNSAwNDowNzoyOCAtMDAwMAkxLjUyCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
ZnVuY3Rpb24uY3BwCTggQXVnIDIwMDUgMTU6NDM6NDIgLTAwMDAKQEAgLTYyOCwxMSArNjI4LDgg
QEAgc3RhdGljIFZhbHVlSW1wICpkZWNvZGUoRXhlY1N0YXRlICpleGVjLAogICAgICAgICB9CiAg
ICAgICB9CiAgICAgICBpZiAoY2hhckxlbiA9PSAwKSB7Ci0gICAgICAgIGlmIChzdHJpY3QpIHsK
LQkgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFVSSUVycm9yKTsKLSAg
ICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwotICAgICAgICAgIHJldHVybiBlcnJv
cjsKLSAgICAgICAgfQorICAgICAgICBpZiAoc3RyaWN0KQorICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFVSSUVycm9yKTsKICAgICAgICAgLy8gVGhlIG9ubHkgY2FzZSB3aGVyZSB3
ZSBkb24ndCB1c2UgInN0cmljdCIgbW9kZSBpcyB0aGUgInVuZXNjYXBlIiBmdW5jdGlvbi4KICAg
ICAgICAgLy8gRm9yIHRoYXQsIGl0J3MgZ29vZCB0byBzdXBwb3J0IHRoZSB3b25reSAiJXUiIHN5
bnRheCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdpbklFLgogICAgICAgICBpZiAoayA8PSBsZW4g
LSA2ICYmIHBbMV0gPT0gJ3UnCkBAIC04MDYsMTIgKzgwMyw4IEBAIFZhbHVlSW1wICpHbG9iYWxG
dW5jSW1wOjpjYWxsQXNGdW5jdGlvbigKICAgICAgICAgfQogCiAgICAgICAgIC8vIG5vIHByb2dy
YW0gbm9kZSBtZWFucyBhIHN5bnRheCBvY2N1cnJlZAotICAgICAgICBpZiAoIXByb2dOb2RlKSB7
Ci0gICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJy
b3IsZXJyTXNnLmFzY2lpKCksZXJyTGluZSk7Ci0gICAgICAgICAgZXJyLT5wdXQoZXhlYywic2lk
IixOdW1iZXIoc2lkKSk7Ci0gICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAg
ICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXByb2dOb2RlKQorICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxp
bmUsIHNpZCwgTlVMTCk7CiAgICAgICAgIAogICAgICAgICBwcm9nTm9kZS0+cmVmKCk7CiAgICAg
ICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmpl
Y3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXAgLXUgLXIxLjI3IEphdmFT
Y3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
ZnVuY3Rpb25fb2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjI4IC0wMDAwCTEuMjcKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCTggQXVnIDIwMDUgMTU6NDM6NDIg
LTAwMDAKQEAgLTg5LDkgKzg5LDcgQEAgVmFsdWVJbXAgKkZ1bmN0aW9uUHJvdG9GdW5jSW1wOjpj
YWxsQXNGdQogI2lmbmRlZiBOREVCVUcKICAgICAgIGZwcmludGYoc3RkZXJyLCJhdHRlbXB0ZWQg
dG9TdHJpbmcoKSBjYWxsIG9uIG51bGwgb3Igbm9uLWZ1bmN0aW9uIG9iamVjdFxuIik7CiAjZW5k
aWYKLSAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7
Ci0gICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgIHJldHVybiBlcnI7CisgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIH0KICAgICBpZiAodGhp
c09iai0+aW5oZXJpdHMoJkRlY2xhcmVkRnVuY3Rpb25JbXA6OmluZm8pKSB7CiAgICAgICAgRGVj
bGFyZWRGdW5jdGlvbkltcCAqZmkgPSBzdGF0aWNfY2FzdDxEZWNsYXJlZEZ1bmN0aW9uSW1wKj4K
QEAgLTExMiwxMSArMTEwLDggQEAgVmFsdWVJbXAgKkZ1bmN0aW9uUHJvdG9GdW5jSW1wOjpjYWxs
QXNGdQogICAgIFZhbHVlSW1wICphcmdBcnJheSA9IGFyZ3NbMV07CiAgICAgT2JqZWN0SW1wICpm
dW5jID0gdGhpc09iajsKIAotICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkgewotICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgcmV0dXJuIGVycjsKLSAgICB9CisgICAg
aWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQorICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIAogICAgIE9iamVjdEltcCAqYXBwbHlUaGlzOwogICAgIGlmICh0aGlz
QXJnLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtMTM1LDExICsxMzAsOCBAQCBWYWx1ZUltcCAq
RnVuY3Rpb25Qcm90b0Z1bmNJbXA6OmNhbGxBc0Z1CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAgICAgYXBwbHlBcmdzLmFwcGVuZChhcmdB
cnJheU9iai0+Z2V0KGV4ZWMsaSkpOwogICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgICAgfQorICAg
ICAgZWxzZQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAg
IH0KICAgICByZXN1bHQgPSBmdW5jLT5jYWxsKGV4ZWMsYXBwbHlUaGlzLGFwcGx5QXJncyk7CiAg
ICAgfQpAQCAtMTQ4LDExICsxNDAsOCBAQCBWYWx1ZUltcCAqRnVuY3Rpb25Qcm90b0Z1bmNJbXA6
OmNhbGxBc0Z1CiAgICAgVmFsdWVJbXAgKnRoaXNBcmcgPSBhcmdzWzBdOwogICAgIE9iamVjdElt
cCAqZnVuYyA9IHRoaXNPYmo7CiAKLSAgICBpZiAoIWZ1bmMtPmltcGxlbWVudHNDYWxsKCkpIHsK
LSAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0g
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgfQor
ICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkKKyAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBPYmplY3RJbXAgKmNhbGxUaGlzOwogICAgIGlmICh0
aGlzQXJnLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtMjIzLDEzICsyMTIsMTAgQEAgT2JqZWN0
SW1wICpGdW5jdGlvbk9iamVjdEltcDo6Y29uc3RydWN0KAogICB9CiAKICAgLy8gbm8gcHJvZ3Jh
bSBub2RlID09IHN5bnRheCBlcnJvciAtIHRocm93IGEgc3ludGF4IGVycm9yCi0gIGlmICghcHJv
Z05vZGUpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhF
cnJvcixlcnJNc2cuYXNjaWkoKSxlcnJMaW5lKTsKKyAgaWYgKCFwcm9nTm9kZSkKICAgICAvLyB3
ZSBjYW4ndCByZXR1cm4gYSBDb21wbGV0aW9uKFRocm93KSBoZXJlLCBzbyBqdXN0IHNldCB0aGUg
ZXhjZXB0aW9uCiAgICAgLy8gYW5kIHJldHVybiBpdAotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzaWQsICZzb3VyY2VVUkwpOwogCiAgIFNjb3Bl
Q2hhaW4gc2NvcGVDaGFpbjsKICAgc2NvcGVDaGFpbi5wdXNoKGV4ZWMtPmR5bmFtaWNJbnRlcnBy
ZXRlcigpLT5nbG9iYWxPYmplY3QoKSk7CkBAIC0yNjcsMTEgKzI1Myw3IEBAIE9iamVjdEltcCAq
RnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdCgKIAkgICAgICBjb250aW51ZTsKIAkgIH0gLy8g
ZWxzZSBlcnJvcgogICAgICAgfQotICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsU3ludGF4RXJyb3IsCi0JCQkJIEkxOE5fTk9PUCgiU3ludGF4IGVycm9yIGluIHBhcmFt
ZXRlciBsaXN0IiksCi0JCQkJIC0xKTsKLSAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwot
ICAgICAgcmV0dXJuIGVycjsKKyAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVy
cm9yLCAiU3ludGF4IGVycm9yIGluIHBhcmFtZXRlciBsaXN0Iik7CiAgIH0KIAogICBMaXN0IGNv
bnNBcmdzOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS42MQpkaWZmIC1wIC11IC1yMS42MSBKYXZhU2NyaXB0Q29yZS9r
anMvaW50ZXJuYWwuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCTggQXVn
IDIwMDUgMDQ6MDc6MjggLTAwMDAJMS42MQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFs
LmNwcAk4IEF1ZyAyMDA1IDE1OjQzOjQzIC0wMDAwCkBAIC0xMjcsOSArMTI3LDcgQEAgVVN0cmlu
ZyBVbmRlZmluZWRJbXA6OnRvU3RyaW5nKEV4ZWNTdGF0ZQogCiBPYmplY3RJbXAgKlVuZGVmaW5l
ZEltcDo6dG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdAogewotICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCBJMThOX05PT1AoIlVuZGVmaW5lZCB2
YWx1ZSIpKTsKLSAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gIHJldHVybiBlcnI7CisgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlVuZGVmaW5lZCB2YWx1ZSIpOwogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVsbEltcCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTU2LDkgKzE1NCw3IEBAIFVTdHJpbmcgTnVs
bEltcDo6dG9TdHJpbmcoRXhlY1N0YXRlICovKmUKIAogT2JqZWN0SW1wICpOdWxsSW1wOjp0b09i
amVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0gIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsIEkxOE5fTk9PUCgiTnVsbCB2YWx1ZSIpKTsKLSAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gIHJldHVybiBlcnI7CisgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvciwgIk51bGwgdmFsdWUiKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEJvb2xlYW5JbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KQEAgLTcxNiw4ICs3MTIsNyBAQCBDb21wbGV0aW9uIEludGVycHJldGVySW1wOjpldmFs
dWF0ZShjb25zCiAgIAogICAvLyBubyBwcm9ncmFtIG5vZGUgbWVhbnMgYSBzeW50YXggZXJyb3Ig
b2NjdXJyZWQKICAgaWYgKCFwcm9nTm9kZSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZSgmZ2xvYkV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2cuYXNjaWkoKSwgZXJyTGluZSwg
LTEsICZzb3VyY2VVUkwpOwotICAgIGVyci0+cHV0KCZnbG9iRXhlYywgInNpZCIsIE51bWJlcihz
aWQpKTsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoJmdsb2JFeGVjLCBTeW50
YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzaWQsICZzb3VyY2VVUkwpOwogI2lmIEFQUExFX0NI
QU5HRVMKICAgICB1bmxvY2tJbnRlcnByZXRlcigpOwogI2VuZGlmCkBAIC04NzQsOSArODY5LDcg
QEAgYm9vbCBJbnRlcm5hbEZ1bmN0aW9uSW1wOjpoYXNJbnN0YW5jZShFeAogCiAgIFZhbHVlSW1w
ICpwcm90ID0gZ2V0KGV4ZWMscHJvdG90eXBlUHJvcGVydHlOYW1lKTsKICAgaWYgKCFwcm90LT5p
c09iamVjdCgpICYmICFwcm90LT5pc051bGwoKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsICJJbnZhbGlkIHByb3RvdHlwZSBlbmNvdW50ZXJl
ZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIGluc3RhbmNlb2Ygb3BlcmF0
aW9uLiIpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOworICAgIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yLCAiSW52YWxpZCBwcm90b3R5cGUgZW5jb3VudGVyZWQgaW4gaW5zdGFuY2Vv
ZiBvcGVyYXRpb24uIik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzAKZGlmZiAt
cCAtdSAtcjEuNzAgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAotLS0gSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzLmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjI4IC0wMDAwCTEuNzAKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJOCBBdWcgMjAwNSAxNTo0Mzo0NCAtMDAwMApAQCAtMTM1
LDkgKzEzNSw3IEBAIHZvaWQgTm9kZTo6ZmluYWxDaGVjaygpCiAKIFZhbHVlSW1wICpOb2RlOjp0
aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZykK
IHsKLSAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIGUsIG1zZywgbGluZU5v
KCksIHNvdXJjZUlkKCksICZzb3VyY2VVUkwpOwotICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
LSAgcmV0dXJuIGVycjsKKyAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtc2csIGxp
bmVObygpLCBzb3VyY2VJZCgpLCAmc291cmNlVVJMKTsKIH0KIAogVmFsdWVJbXAgKk5vZGU6OnRo
cm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnLCBW
YWx1ZUltcCAqdiwgTm9kZSAqZXhwcikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJf
b2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
a2pzL251bWJlcl9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXAg
LXUgLXIxLjIwIEphdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAotLS0gSmF2YVNj
cmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwCTggQXVnIDIwMDUgMDQ6MDc6MjggLTAwMDAJ
MS4yMAorKysgSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwCTggQXVnIDIwMDUg
MTU6NDM6NDUgLTAwMDAKQEAgLTEyOCwxMSArMTI4LDggQEAgc3RhdGljIFVTdHJpbmcgY2hhcl9z
ZXF1ZW5jZShjaGFyIGMsIGludAogVmFsdWVJbXAgKk51bWJlclByb3RvRnVuY0ltcDo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7CiAgIC8vIG5vIGdlbmVyaWMgZnVuY3Rpb24uICJ0aGlzIiBoYXMgdG8gYmUgYSBO
dW1iZXIgb2JqZWN0Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJk51bWJlckluc3RhbmNlSW1w
OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAg
fQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZOdW1iZXJJbnN0YW5jZUltcDo6aW5mbykpCisg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICBWYWx1ZUltcCAqdiA9
IHRoaXNPYmotPmludGVybmFsVmFsdWUoKTsKICAgc3dpdGNoIChpZCkgewpAQCAtMTYyLDEzICsx
NTksOCBAQCBWYWx1ZUltcCAqTnVtYmVyUHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jCiAgIHsKICAg
ICAgIFZhbHVlSW1wICpmcmFjdGlvbkRpZ2l0cyA9IGFyZ3NbMF07CiAgICAgICBkb3VibGUgZGYg
PSBmcmFjdGlvbkRpZ2l0cy0+dG9JbnRlZ2VyKGV4ZWMpOwotICAgICAgaWYgKCEoZGYgPj0gMCAm
JiBkZiA8PSAyMCkpIHsgLy8gdHJ1ZSBmb3IgTmFOCi0gICAgICAgICAgT2JqZWN0SW1wICplcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRvRml4ZWQoKSBkaWdpdHMgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVu
IDAgYW5kIDIwIik7Ci0gICAgICAgICAgCi0gICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVy
cik7Ci0gICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgIH0KKyAgICAgIGlmICghKGRmID49IDAg
JiYgZGYgPD0gMjApKSAvLyB0cnVlIGZvciBOYU4KKyAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBSYW5nZUVycm9yLCAidG9GaXhlZCgpIGRpZ2l0cyBhcmd1bWVudCBtdXN0IGJlIGJl
dHdlZW4gMCBhbmQgMjAiKTsKICAgICAgIGludCBmID0gKGludClkZjsKICAgICAgIAogICAgICAg
ZG91YmxlIHggPSB2LT50b051bWJlcihleGVjKTsKQEAgLTIxMiwxMiArMjA0LDggQEAgVmFsdWVJ
bXAgKk51bWJlclByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuYwogICAgICAgCiAgICAgICBWYWx1ZUlt
cCAqZnJhY3Rpb25EaWdpdHMgPSBhcmdzWzBdOwogICAgICAgZG91YmxlIGRmID0gZnJhY3Rpb25E
aWdpdHMtPnRvSW50ZWdlcihleGVjKTsKLSAgICAgIGlmICghKGRmID49IDAgJiYgZGYgPD0gMjAp
KSB7IC8vIHRydWUgZm9yIE5hTgotICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLCBSYW5nZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0b0V4cG9uZW50aWFsKCkgYXJndW1lbnQgbXVzdCBiZXR3ZWVuIDAgYW5kIDIwIik7Ci0g
ICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgcmV0dXJuIGVycjsK
LSAgICAgIH0KKyAgICAgIGlmICghKGRmID49IDAgJiYgZGYgPD0gMjApKSAvLyB0cnVlIGZvciBO
YU4KKyAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAidG9FeHBv
bmVudGlhbCgpIGFyZ3VtZW50IG11c3QgYmV0d2VlbiAwIGFuZCAyMCIpOwogICAgICAgaW50IGYg
PSAoaW50KWRmOwogICAgICAgCiAgICAgICBpbnQgZGVjaW1hbEFkanVzdCA9IDA7CkBAIC0zMTQs
MTIgKzMwMiw4IEBAIFZhbHVlSW1wICpOdW1iZXJQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmMKICAg
ICAgICAgICB4ID0gLXg7CiAgICAgICB9CiAgICAgICAKLSAgICAgIGlmIChkcCA8IDEgfHwgZHAg
PiAyMSkgewotICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBS
YW5nZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b1ByZWNp
c2lvbigpIGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyMSIpOwotICAgICAgICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICB9Cisg
ICAgICBpZiAoIShkcCA+PSAxICYmIGRwIDw9IDIxKSkgLy8gdHJ1ZSBmb3IgTmFOCisgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgInRvUHJlY2lzaW9uKCkgYXJn
dW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDIxIik7CiAgICAgICBpbnQgcCA9IChpbnQpZHA7
CiAgICAgICAKICAgICAgIGlmICh4ICE9IDApIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9v
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9r
anMvb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MApkaWZmIC1wIC11IC1yMS41
MCBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL29i
amVjdC5jcHAJOCBBdWcgMjAwNSAwNDowNzoyOCAtMDAwMAkxLjUwCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvb2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDE1OjQzOjQ1IC0wMDAwCkBAIC04OCwxMCArODgs
NyBAQCBWYWx1ZUltcCAqT2JqZWN0SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlCiAKICAgaWYgKCsr
ZGVwdGggPiBLSlNfTUFYX1NUQUNLKSB7CiAgICAgLS1kZXB0aDsKLSAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmFuZ2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuIik7Ci0gICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKKyAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBSYW5nZUVycm9yLCAiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQu
Iik7CiAgIH0KICNlbmRpZgogCkBAIC0xNjksMjggKzE2Niw2IEBAIFZhbHVlSW1wICpPYmplY3RJ
bXA6OmdldChFeGVjU3RhdGUgKmV4ZWMKICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1ib29s
IE9iamVjdEltcDo6Z2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wKiYgcmVzdWx0KSBjb25zdAotewotICBQcm9wZXJ0eVNs
b3Qgc2xvdDsKLSAgaWYgKGNvbnN0X2Nhc3Q8T2JqZWN0SW1wICo+KHRoaXMpLT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewotICAgIHJlc3VsdCA9IHNsb3QuZ2V0
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE9iamVjdEltcDo6Z2V0UHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wKiYgcmVzdWx0KSBjb25zdAot
ewotICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgaWYgKGNvbnN0X2Nhc3Q8T2JqZWN0SW1wICo+KHRo
aXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewotICAgIHJl
c3VsdCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotICAgIAotICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgT2JqZWN0SW1wOjpnZXRQ
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgT2JqZWN0SW1wICppbXAgPSB0aGlzOwpAQCAtMjc3LDE4ICsy
NTIsNiBAQCBib29sIE9iamVjdEltcDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICplCiAgIHJldHVy
biBjb25zdF9jYXN0PE9iamVjdEltcCAqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgT2JqZWN0SW1wOjpoYXNPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKLXsK
LSAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gIHJldHVybiBjb25zdF9jYXN0PE9iamVjdEltcCAqPih0
aGlzKS0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0K
LWJvb2wgT2JqZWN0SW1wOjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gIHJldHVybiBj
b25zdF9jYXN0PE9iamVjdEltcCAqPih0aGlzKS0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KIC8vIEVDTUEgOC42LjIuNQogYm9vbCBPYmplY3RJbXA6
OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLypleGVjKi8sIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkKIHsKQEAgLTMxMywxMSArMjc2LDYgQEAgYm9vbCBPYmplY3RJbXA6OmRlbGV0
ZVByb3BlcnR5KEV4ZWNTdGF0ZQogICByZXR1cm4gZGVsZXRlUHJvcGVydHkoZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbShwcm9wZXJ0eU5hbWUpKTsKIH0KIAotdm9pZCBPYmplY3RJbXA6OmRlbGV0ZUFs
bFByb3BlcnRpZXMoIEV4ZWNTdGF0ZSAqICkKLXsKLSAgX3Byb3AuY2xlYXIoKTsKLX0KLQogLy8g
RUNNQSA4LjYuMi42CiBWYWx1ZUltcCAqT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRl
ICpleGVjLCBUeXBlIGhpbnQpIGNvbnN0CiB7CkBAIC0zNzEsOSArMzI5LDcgQEAgVmFsdWVJbXAg
Kk9iamVjdEltcDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdAogICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpOwogCi0gIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsIEkxOE5fTk9PUCgiTm8gZGVmYXVsdCB2YWx1
ZSIpKTsKLSAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gIHJldHVybiBlcnI7CisgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIk5vIGRlZmF1bHQgdmFsdWUiKTsKIH0KIAog
Y29uc3QgSGFzaEVudHJ5KiBPYmplY3RJbXA6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CkBAIC01MDUsOCArNDYxLDggQEAgY29uc3Qg
Y2hhciAqIGNvbnN0IGVycm9yTmFtZXNBcnJbXSA9IHsKIAogY29uc3QgY2hhciAqIGNvbnN0ICog
Y29uc3QgRXJyb3I6OmVycm9yTmFtZXMgPSBlcnJvck5hbWVzQXJyOwogCi1PYmplY3RJbXAgKkVy
cm9yOjpjcmVhdGUoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZXJydHlwZSwgY29uc3QgY2hh
ciAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8sIGludCBzb3VyY2VJ
ZCwgY29uc3QgVVN0cmluZyAqc291cmNlVVJMKQorT2JqZWN0SW1wICpFcnJvcjo6Y3JlYXRlKEV4
ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIGVycnR5cGUsIGNvbnN0IFVTdHJpbmcgJm1lc3NhZ2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVubywgaW50IHNvdXJjZUlkLCBjb25z
dCBVU3RyaW5nICpzb3VyY2VVUkwpCiB7CiAgIE9iamVjdEltcCAqY29uczsKICAgc3dpdGNoIChl
cnJ0eXBlKSB7CkBAIC01MzMsMTAgKzQ4OSwxMSBAQCBPYmplY3RJbXAgKkVycm9yOjpjcmVhdGUo
RXhlY1N0YXRlICpleGVjCiAgICAgYnJlYWs7CiAgIH0KIAotICBpZiAoIW1lc3NhZ2UpCi0gICAg
bWVzc2FnZSA9IGVycm9yTmFtZXNbZXJydHlwZV07CiAgIExpc3QgYXJnczsKLSAgYXJncy5hcHBl
bmQoU3RyaW5nKG1lc3NhZ2UpKTsKKyAgaWYgKG1lc3NhZ2UuaXNFbXB0eSgpKQorICAgIGFyZ3Mu
YXBwZW5kKGpzU3RyaW5nKGVycm9yTmFtZXNbZXJydHlwZV0pKTsKKyAgZWxzZQorICAgIGFyZ3Mu
YXBwZW5kKGpzU3RyaW5nKG1lc3NhZ2UpKTsKICAgT2JqZWN0SW1wICplcnIgPSBzdGF0aWNfY2Fz
dDxPYmplY3RJbXAgKj4oY29ucy0+Y29uc3RydWN0KGV4ZWMsYXJncykpOwogCiAgIGlmIChsaW5l
bm8gIT0gLTEpCkBAIC01NjIsOSArNTE5LDM3IEBAIE9iamVjdEltcCAqRXJyb3I6OmNyZWF0ZShF
eGVjU3RhdGUgKmV4ZWMKICovCiB9CiAKLU9iamVjdEltcCAqZXJyb3IoRXhlY1N0YXRlICpleGVj
LCBFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgaW50IGxpbmUsIGludCBzb3Vy
Y2VJZCwgY29uc3QgVVN0cmluZyAqc291cmNlVVJMKQorT2JqZWN0SW1wICpFcnJvcjo6Y3JlYXRl
KEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7
CisgICAgcmV0dXJuIGNyZWF0ZShleGVjLCB0eXBlLCBtZXNzYWdlLCAtMSwgLTEsIE5VTEwpOwor
fQorCitPYmplY3RJbXAgKnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgdHlw
ZSkKK3sKKyAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCB0eXBlLCBV
U3RyaW5nKCksIC0xLCAtMSwgTlVMTCk7CisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsK
KyAgICByZXR1cm4gZXJyb3I7Cit9CisKK09iamVjdEltcCAqdGhyb3dFcnJvcihFeGVjU3RhdGUg
KmV4ZWMsIEVycm9yVHlwZSB0eXBlLCBjb25zdCBVU3RyaW5nICZtZXNzYWdlKQoreworICAgIE9i
amVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIHR5cGUsIG1lc3NhZ2UsIC0xLCAt
MSwgTlVMTCk7CisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAgICByZXR1cm4gZXJy
b3I7Cit9CisKK09iamVjdEltcCAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlw
ZSB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIE9iamVjdEltcCAqZXJyb3IgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsIHR5cGUsIG1lc3NhZ2UsIC0xLCAtMSwgTlVMTCk7CisgICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK09iamVjdElt
cCAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSB0eXBlLCBjb25zdCBVU3Ry
aW5nICZtZXNzYWdlLCBpbnQgbGluZSwgaW50IHNvdXJjZUlkLCBjb25zdCBVU3RyaW5nICpzb3Vy
Y2VVUkwpCiB7Ci0gICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoZXhlYywgdHlwZSwgbWVzc2FnZSwg
bGluZSwgc291cmNlSWQsIHNvdXJjZVVSTCk7CisgICAgT2JqZWN0SW1wICplcnJvciA9IEVycm9y
OjpjcmVhdGUoZXhlYywgdHlwZSwgbWVzc2FnZSwgbGluZSwgc291cmNlSWQsIHNvdXJjZVVSTCk7
CisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDEKZGlmZiAtcCAtdSAtcjEuNDEgSmF2YVNjcmlwdENv
cmUva2pzL29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJOCBBdWcgMjAw
NSAwNDowNzoyOSAtMDAwMAkxLjQxCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJOCBB
dWcgMjAwNSAxNTo0Mzo0NSAtMDAwMApAQCAtOTAsMTUgKzkwLDEzIEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIE9iamVjdEltcChPYmplY3RJbXAgKnByb3RvKTsKIAogICAgIC8qKgotICAgICAqIENy
ZWF0ZXMgYSBuZXcgT2JqZWN0SW1wIHdpdGggYSBwcm90b3R5cGUgb2YgTnVsbCgpCisgICAgICog
Q3JlYXRlcyBhIG5ldyBPYmplY3RJbXAgd2l0aCBhIHByb3RvdHlwZSBvZiBqc051bGwoKQogICAg
ICAqICh0aGF0IGlzLCB0aGUgRUNNQVNjcmlwdCAibnVsbCIgdmFsdWUsIG5vdCBhIG51bGwgb2Jq
ZWN0IHBvaW50ZXIpLgotICAgICAqCiAgICAgICovCiAgICAgT2JqZWN0SW1wKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOwotCi0gICAgVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgdmlydHVh
bCBUeXBlIHR5cGUoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIEEgcG9pbnRlciB0byBhIENs
YXNzSW5mbyBzdHJ1Y3QgZm9yIHRoaXMgY2xhc3MuIFRoaXMgcHJvdmlkZXMgYSBiYXNpYwpAQCAt
MTc3LDEwICsxNzUsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKgogICAgICAqIEByZXR1cm4g
VGhlIG9iamVjdCdzIHByb3RvdHlwZQogICAgICAqLwotICAgIC8qKgotICAgICAqIEltcGxlbWVu
dGF0aW9uIG9mIHRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHByb3BlcnR5IChpbXBsZW1lbnRl
ZCBieQotICAgICAqIGFsbCBPYmplY3RzKQotICAgICAqLwogICAgIFZhbHVlSW1wICpwcm90b3R5
cGUoKSBjb25zdDsKICAgICB2b2lkIHNldFByb3RvdHlwZShWYWx1ZUltcCAqcHJvdG8pOwogCkBA
IC0yMTQsMTcgKzIwOCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqCiAgICAgICogQHJldHVy
biBUaGUgc3BlY2lmaWVkIHByb3BlcnR5LCBvciBVbmRlZmluZWQKICAgICAgKi8KLSAgICAvKioK
LSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tHZXRdXSBpbnRlcm5hbCBwcm9wZXJ0eSAo
aW1wbGVtZW50ZWQgYnkgYWxsCi0gICAgICogT2JqZWN0cykKLSAgICAgKi8KLSAgICAvLyBbW0dl
dF1dIC0gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhbGwgT2JqZWN0cwogICAgIFZhbHVlSW1wICpn
ZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0
OwogICAgIFZhbHVlSW1wICpnZXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpIGNvbnN0OwogCi0gICAgYm9vbCBnZXRQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAqJiByZXN1bHQpIGNvbnN0OwotICAg
IGJvb2wgZ2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFZhbHVlSW1wKiYgcmVzdWx0KSBjb25zdDsKLQogICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgYm9vbCBn
ZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIHVuc2lnbmVkLCBQcm9wZXJ0eVNsb3QmKTsKIApA
QCAtMjQwLDE0ICsyMjYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBAcGFyYW0gcHJvcGVy
dHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQKICAgICAgKiBAcGFyYW0gcHJv
cGVydHlWYWx1ZSBUaGUgdmFsdWUgdG8gc2V0CiAgICAgICovCi0gICAgLyoqCi0gICAgICogSW1w
bGVtZW50YXRpb24gb2YgdGhlIFtbUHV0XV0gaW50ZXJuYWwgcHJvcGVydHkgKGltcGxlbWVudGVk
IGJ5IGFsbAotICAgICAqIE9iamVjdHMpCi0gICAgICovCi0gICAgdmlydHVhbCB2b2lkIHB1dChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAg
IHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBWYWx1ZUlt
cCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAKICAgICAvKioKICAgICAgKiBVc2VkIHRvIGNo
ZWNrIHdoZXRoZXIgb3Igbm90IGEgcGFydGljdWxhciBwcm9wZXJ0eSBpcyBhbGxvd2VkIHRvIGJl
IHNldApAQCAtMjc1LDI3ICsyNTUsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogQHBhcmFt
IHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hlY2sgZm9yCiAgICAg
ICogQHJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eSwgb3RoZXJ3aXNl
IGZhbHNlCiAgICAgICovCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtb
SGFzUHJvcGVydHldXSBpbnRlcm5hbCBwcm9wZXJ0eSAoaW1wbGVtZW50ZWQgYnkKLSAgICAgKiBh
bGwgT2JqZWN0cykKLSAgICAgKi8KLSAgICBib29sIGhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywKLQkJCSAgICAgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBi
b29sIGhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lKSBjb25zdDsKICAgICBib29sIGhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKIAogICAgIC8qKgotICAgICAqIENoZWNrcyB0byBz
ZWUgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBhIHByb3BlcnR5IHdpdGggdGhlIHNwZWNpZmllZCBu
YW1lLgotICAgICAqCi0gICAgICogU2VlIEVDTUEgMTUuMi40LjUKLSAgICAgKgotICAgICAqIEBw
YXJhbSBleGVjIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZQotICAgICAqIEBwYXJhbSBwcm9w
ZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoZWNrIGZvcgotICAgICAqIEBy
ZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHksIG90aGVyd2lzZSBmYWxz
ZQotICAgICAqLwotICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdDsKLQotICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBwcm9wZXJ0
eSBmcm9tIHRoZSBvYmplY3QuCiAgICAgICoKICAgICAgKiBTZWUgRUNNQSA4LjYuMi41CkBAIC0z
MDYsMjIgKzI2OSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBleGlzdCBvbiB0aGUgb2Jq
ZWN0LiBmYWxzZSBpZiBkZWxldGluZyB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlzIG5vdAogICAg
ICAqIGFsbG93ZWQuCiAgICAgICovCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50YXRpb24gb2Yg
dGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgcHJvcGVydHkgKGltcGxlbWVudGVkIGJ5IGFsbAotICAg
ICAqIE9iamVjdHMpCi0gICAgICovCi0gICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOwogICAgIHZp
cnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSk7CiAKICAgICAvKioKLSAgICAgKiBSZW1vdmUgYWxsIHByb3BlcnRpZXMgZnJvbSB0
aGlzIG9iamVjdC4KLSAgICAgKiBUaGlzIGRvZXNuJ3QgdGFrZSBEb250RGVsZXRlIGludG8gYWNj
b3VudCwgYW5kIGlzbid0IGluIHRoZSBFQ01BIHNwZWMuCi0gICAgICogSXQncyBzaW1wbHkgYSBx
dWljayB3YXkgdG8gcmVtb3ZlIGV2ZXJ5dGhpbmcgYmVmb3JlIGRlc3Ryb3lpbmcuCi0gICAgICov
Ci0gICAgdm9pZCBkZWxldGVBbGxQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSAqKTsKLQotICAgIC8qKgog
ICAgICAqIENvbnZlcnRzIHRoZSBvYmplY3QgaW50byBhIHByaW1pdGl2ZSB2YWx1ZS4gVGhlIHZh
bHVlIHJldHVybiBtYXkgZGlmZmVyCiAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBzdXBwbGllZCBo
aW50CiAgICAgICoKQEAgLTQwNyw5ICszNTgsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBA
cGFyYW0gYXJncyBMaXN0IG9mIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9u
CiAgICAgICogQHJldHVybiBUaGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uCiAgICAg
ICovCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbQ2FsbF1dIGludGVy
bmFsIHByb3BlcnR5Ci0gICAgICovCiAgICAgVmFsdWVJbXAgKmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogICAgIHZpcnR1YWwgVmFs
dWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKTsKIApAQCAtNDMyLDkgKzM4MCw2IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB2YWx1ZSBkZWxlZ2F0ZXMgYmVoYXZpb3IgdG8gdGhp
cyBvYmplY3QsIG90aGVyd2lzZQogICAgICAqIGZhbHNlCiAgICAgICovCi0gICAgLyoqCi0gICAg
ICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbSGFzSW5zdGFuY2VdXSBpbnRlcm5hbCBwcm9wZXJ0
eQotICAgICAqLwogICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMs
IFZhbHVlSW1wICp2YWx1ZSk7CiAKICAgICAvKioKQEAgLTQ2Myw5ICs0MDgsNiBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgKiBAcGFyYW0gZXhlYyBUaGUgY3VycmVudCBleGVjdXRpb24gc3RhdGUK
ICAgICAgKiBAcmV0dXJuIFRoZSBmdW5jdGlvbidzIHNjb3BlCiAgICAgICovCi0gICAgLyoqCi0g
ICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbU2NvcGVdXSBpbnRlcm5hbCBwcm9wZXJ0eQot
ICAgICAqLwogICAgIGNvbnN0IFNjb3BlQ2hhaW4gJnNjb3BlKCkgY29uc3QgeyByZXR1cm4gX3Nj
b3BlOyB9CiAgICAgdm9pZCBzZXRTY29wZShjb25zdCBTY29wZUNoYWluICZzKSB7IF9zY29wZSA9
IHM7IH0KIApAQCAtNTA0LDcgKzQ0Niw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqCiAgICAg
ICogQHBhcmFtIHYgVGhlIG5ldyBpbnRlcm5hbCB2YWx1ZQogICAgICAqLwotCiAgICAgdm9pZCBz
ZXRJbnRlcm5hbFZhbHVlKFZhbHVlSW1wICp2KTsKIAogICAgIFZhbHVlSW1wICp0b1ByaW1pdGl2
ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkVHlwZSA9IFVuc3BlY2lmaWVkVHlwZSkg
Y29uc3Q7CkBAIC01MTMsOCArNDU0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVVN0cmluZyB0
b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIE9iamVjdEltcCAqdG9PYmplY3Qo
RXhlY1N0YXRlICpleGVjKSBjb25zdDsKIAotICAgIC8vIFRoaXMgZ2V0IG1ldGhvZCBvbmx5IGxv
b2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCi0gICAgLy8gQSBiaXQgbGlrZSBoYXNQcm9wZXJ0eShy
ZWN1cnNpdmU9ZmFsc2UpLCB0aGlzIGRvZXNuJ3QgZ28gdG8gdGhlIHByb3RvdHlwZS4KKyAgICAv
LyBUaGlzIGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCiAgICAg
Ly8gVGhpcyBpcyB1c2VkIGUuZy4gYnkgbG9va3VwT3JDcmVhdGVGdW5jdGlvbiAodG8gY2FjaGUg
YSBmdW5jdGlvbiwgd2UgZG9uJ3Qgd2FudAogICAgIC8vIHRvIGxvb2sgdXAgaW4gdGhlIHByb3Rv
dHlwZSwgaXQgbWlnaHQgYWxyZWFkeSBleGlzdCB0aGVyZSkKICAgICBWYWx1ZUltcCAqZ2V0RGly
ZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKQEAgLTUyNCw2ICs0NjQs
MTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBwdXREaXJlY3QoY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gMCk7CiAgICAgdm9p
ZCBwdXREaXJlY3QoY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBpbnQgdmFsdWUsIGlu
dCBhdHRyID0gMCk7CiAgICAgCisgICAgLyoqCisgICAgICogUmVtb3ZlIGFsbCBwcm9wZXJ0aWVz
IGZyb20gdGhpcyBvYmplY3QuCisgICAgICogVGhpcyBkb2Vzbid0IHRha2UgRG9udERlbGV0ZSBp
bnRvIGFjY291bnQsIGFuZCBpc24ndCBpbiB0aGUgRUNNQSBzcGVjLgorICAgICAqIEl0J3Mgc2lt
cGx5IGEgcXVpY2sgd2F5IHRvIHJlbW92ZSBldmVyeXRoaW5nIHN0b3JlZCBpbiB0aGUgcHJvcGVy
dHkgbWFwLgorICAgICAqLworICAgIHZvaWQgY2xlYXJQcm9wZXJ0aWVzKCkgeyBfcHJvcC5jbGVh
cigpOyB9CisKICAgICB2b2lkIHNhdmVQcm9wZXJ0aWVzKFNhdmVkUHJvcGVydGllcyAmcCkgY29u
c3QgeyBfcHJvcC5zYXZlKHApOyB9CiAgICAgdm9pZCByZXN0b3JlUHJvcGVydGllcyhjb25zdCBT
YXZlZFByb3BlcnRpZXMgJnApIHsgX3Byb3AucmVzdG9yZShwKTsgfQogCkBAIC01ODgsOSArNTM1
LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICAgICAgICAgVHlwZUVycm9yICAgICAg
PSA1LAogICAgICAgICAgICAgICAgICAgIFVSSUVycm9yICAgICAgID0gNn07CiAKLSAgT2JqZWN0
SW1wICplcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSB0eXBlID0gR2VuZXJhbEVycm9y
LAotICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAwLCBpbnQgbGluZW5vID0gLTEsIGludCBzb3Vy
Y2VJZCA9IC0xLCBjb25zdCBVU3RyaW5nICpzb3VyY2VVUkwgPSAwKTsKLQogICAvKioKICAgICog
QHNob3J0IEZhY3RvcnkgbWV0aG9kcyBmb3IgZXJyb3Igb2JqZWN0cy4KICAgICovCkBAIC02MDIs
MTIgKzU0NiwxMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBAcGFyYW0gZXhlYyBUaGUgY3Vy
cmVudCBleGVjdXRpb24gc3RhdGUKICAgICAgKiBAcGFyYW0gZXJydHlwZSBUeXBlIG9mIGVycm9y
LgogICAgICAqIEBwYXJhbSBtZXNzYWdlIE9wdGlvbmFsIGVycm9yIG1lc3NhZ2UuCi0gICAgICog
QHBhcmFtIGxpbmVubyBPcHRpb25hbCBsaW5lIG51bWJlci4KLSAgICAgKiBAcGFyYW0gbGluZW5v
IE9wdGlvbmFsIHNvdXJjZSBpZC4KKyAgICAgKiBAcGFyYW0gbGluZU51bWJlciBPcHRpb25hbCBs
aW5lIG51bWJlci4KKyAgICAgKiBAcGFyYW0gc291cmNlSWQgT3B0aW9uYWwgc291cmNlIGlkLgor
ICAgICAqIEBwYXJhbSBzb3VyY2VVUkwgT3B0aW9uYWwgc291cmNlIFVSTC4KICAgICAgKi8KLSAg
ICBzdGF0aWMgT2JqZWN0SW1wICpjcmVhdGUoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZXJy
dHlwZSA9IEdlbmVyYWxFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqbWVzc2FnZSA9IDAsIGludCBsaW5lbm8gPSAtMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHNvdXJjZUlkID0gLTEsIGNvbnN0IFVTdHJpbmcgKnNvdXJjZVVSTCA9IDAp
OworICAgIHN0YXRpYyBPYmplY3RJbXAgKmNyZWF0ZShFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlw
ZSBlcnJ0eXBlLCBjb25zdCBVU3RyaW5nICZtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IHNv
dXJjZUlkLCBjb25zdCBVU3RyaW5nICpzb3VyY2VVUkwpOworICAgIHN0YXRpYyBPYmplY3RJbXAg
KmNyZWF0ZShFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlcnJ0eXBlLCBjb25zdCBjaGFyICpt
ZXNzYWdlKTsKIAogICAgIC8qKgogICAgICAqIEFycmF5IG9mIGVycm9yIG5hbWVzIGNvcnJlc3Bv
bmRpbmcgdG8gRXJyb3JUeXBlCkBAIC02MTUsMTIgKzU1OSwxNSBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0ICogY29uc3QgZXJyb3JOYW1lczsKICAgfTsK
IAotICAgIGlubGluZSBib29sIEFsbG9jYXRlZFZhbHVlSW1wOjppc09iamVjdChjb25zdCBDbGFz
c0luZm8gKmluZm8pIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIGlzT2JqZWN0KCkgJiYgc3RhdGlj
X2Nhc3Q8Y29uc3QgT2JqZWN0SW1wICo+KHRoaXMpLT5pbmhlcml0cyhpbmZvKTsgfQorT2JqZWN0
SW1wICp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUpOworT2JqZWN0SW1wICp0aHJv
d0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IFVTdHJpbmcgJm1lc3NhZ2UpOwor
T2JqZWN0SW1wICp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIg
Km1lc3NhZ2UpOworT2JqZWN0SW1wICp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUs
IGNvbnN0IFVTdHJpbmcgJm1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgc291cmNlSWQsIGNv
bnN0IFVTdHJpbmcgKnNvdXJjZVVSTCk7CiAKIGlubGluZSBPYmplY3RJbXA6Ok9iamVjdEltcChP
YmplY3RJbXAgKnByb3RvKQogICAgIDogX3Byb3RvKHByb3RvKSwgX2ludGVybmFsVmFsdWUoMCkK
IHsKKyAgICBhc3NlcnQocHJvdG8pOwogfQogCiBpbmxpbmUgT2JqZWN0SW1wOjpPYmplY3RJbXAo
KQpAQCAtNjU2LDYgKzYwMywxMSBAQCBpbmxpbmUgYm9vbCBPYmplY3RJbXA6OmluaGVyaXRzKGNv
bnN0IENsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbmxpbmUgYm9vbCBBbGxvY2F0ZWRWYWx1
ZUltcDo6aXNPYmplY3QoY29uc3QgQ2xhc3NJbmZvICppbmZvKSBjb25zdAoreworICAgIHJldHVy
biBpc09iamVjdCgpICYmIHN0YXRpY19jYXN0PGNvbnN0IE9iamVjdEltcCAqPih0aGlzKS0+aW5o
ZXJpdHMoaW5mbyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZiAvLyBLSlNfT0JKRUNU
X0gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXAgLXUgLXIxLjEzIEphdmFTY3JpcHRD
b3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9v
YmplY3QuY3BwCTggQXVnIDIwMDUgMDQ6MDc6MjkgLTAwMDAJMS4xMworKysgSmF2YVNjcmlwdENv
cmUva2pzL29iamVjdF9vYmplY3QuY3BwCTggQXVnIDIwMDUgMTU6NDM6NDYgLTAwMDAKQEAgLTY3
LDkgKzY3LDEwIEBAIFZhbHVlSW1wICpPYmplY3RQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmMKICAg
ICBzd2l0Y2ggKGlkKSB7CiAgICAgICAgIGNhc2UgVmFsdWVPZjoKICAgICAgICAgICAgIHJldHVy
biB0aGlzT2JqOwotICAgICAgICBjYXNlIEhhc093blByb3BlcnR5OgotICAgICAgICAgICAgLy8g
U2FtZSBhcyB0aGUgaW4gb3BlcmF0b3IgYnV0IHdpdGhvdXQgY2hlY2tpbmcgdGhlIHByb3RvdHlw
ZQotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih0aGlzT2JqLT5oYXNPd25Qcm9wZXJ0eShl
eGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSkpOworICAgICAgICBjYXNl
IEhhc093blByb3BlcnR5OiB7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAg
ICAgICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc09iai0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMs
IElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpLCBzbG90KSk7CisgICAgICAgIH0K
ICAgICAgICAgY2FzZSBUb0xvY2FsZVN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBqc1N0cmlu
Zyh0aGlzT2JqLT50b1N0cmluZyhleGVjKSk7CiAgICAgICAgIGNhc2UgVG9TdHJpbmc6CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvcmVmZXJlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5jZS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTMKZGlmZiAtcCAtdSAtcjEuMTMgSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5j
ZS5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVuY2UuY3BwCTggQXVnIDIwMDUgMDQ6
MDc6MjkgLTAwMDAJMS4xMworKysgSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5jZS5jcHAJOCBB
dWcgMjAwNSAxNTo0Mzo0NiAtMDAwMApAQCAtNjksMTIgKzY5LDggQEAgUmVmZXJlbmNlIFJlZmVy
ZW5jZTo6bWFrZVZhbHVlUmVmZXJlbmNlKAogCiBWYWx1ZUltcCAqUmVmZXJlbmNlOjpnZXRCYXNl
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKIHsKLSAgaWYgKGJhc2VJc1ZhbHVlKSB7Ci0gICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCBJMThOX05P
T1AoIkludmFsaWQgcmVmZXJlbmNlIGJhc2UiKSk7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVy
cik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotCisgIGlmIChiYXNlSXNWYWx1ZSkKKyAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIkludmFsaWQgcmVmZXJlbmNlIGJh
c2UiKTsKICAgcmV0dXJuIGJhc2U7CiB9CiAKQEAgLTk0LDI1ICs5MCwxNCBAQCBJZGVudGlmaWVy
IFJlZmVyZW5jZTo6Z2V0UHJvcGVydHlOYW1lKEV4CiAKIFZhbHVlSW1wICpSZWZlcmVuY2U6Omdl
dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgCiB7Ci0gIGlmIChiYXNlSXNWYWx1ZSkgewor
ICBpZiAoYmFzZUlzVmFsdWUpCiAgICAgcmV0dXJuIGJhc2U7Ci0gIH0KIAogICBWYWx1ZUltcCAq
byA9IGJhc2U7Ci0gIFR5cGUgdCA9IG8gPyBvLT50eXBlKCkgOiBOdWxsVHlwZTsKLQotICBpZiAo
dCA9PSBOdWxsVHlwZSkgewotICAgIFVTdHJpbmcgbSA9IEkxOE5fTk9PUCgiQ2FuJ3QgZmluZCB2
YXJpYWJsZTogIikgKyBnZXRQcm9wZXJ0eU5hbWUoZXhlYykudXN0cmluZygpOwotICAgIE9iamVj
dEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVuY2VFcnJvciwgbS5hc2NpaSgp
KTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9Ci0K
LSAgaWYgKHQgIT0gT2JqZWN0VHlwZSkgewotICAgIFVTdHJpbmcgbSA9IEkxOE5fTk9PUCgiQmFz
ZSBpcyBub3QgYW4gb2JqZWN0Iik7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsIFJlZmVyZW5jZUVycm9yLCBtLmFzY2lpKCkpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwotICAgIHJldHVybiBlcnI7CisgIGlmICghbyB8fCAhby0+aXNPYmplY3QoKSkgewor
ICAgIGlmICghbyB8fCBvLT5pc051bGwoKSkKKyAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFJlZmVyZW5jZUVycm9yLCAiQ2FuJ3QgZmluZCB2YXJpYWJsZTogIiArIGdldFByb3BlcnR5TmFt
ZShleGVjKS51c3RyaW5nKCkpOworICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5j
ZUVycm9yLCAiQmFzZSBpcyBub3QgYW4gb2JqZWN0Iik7CiAgIH0KIAogICBpZiAocHJvcGVydHlO
YW1lSXNOdW1iZXIpCkBAIC0xMjMsOCArMTA4LDcgQEAgVmFsdWVJbXAgKlJlZmVyZW5jZTo6Z2V0
VmFsdWUoRXhlY1N0YXRlIAogdm9pZCBSZWZlcmVuY2U6OnB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXhl
YywgVmFsdWVJbXAgKncpCiB7CiAgIGlmIChiYXNlSXNWYWx1ZSkgewotICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVuY2VFcnJvcik7Ci0gICAgZXhlYy0+c2V0
RXhjZXB0aW9uKGVycik7CisgICAgdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvcik7CiAg
ICAgcmV0dXJuOwogICB9CiAKQEAgLTE0Niw4ICsxMzAsNyBAQCB2b2lkIFJlZmVyZW5jZTo6cHV0
VmFsdWUoRXhlY1N0YXRlICpleGVjCiBib29sIFJlZmVyZW5jZTo6ZGVsZXRlVmFsdWUoRXhlY1N0
YXRlICpleGVjKQogewogICBpZiAoYmFzZUlzVmFsdWUpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxSZWZlcmVuY2VFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7CisgICAgdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvcik7CiAgICAgcmV0
dXJuIGZhbHNlOwogICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3Jl
Z2V4cF9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxCmRpZmYgLXAgLXUgLXIx
LjIxIEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENv
cmUva2pzL3JlZ2V4cF9vYmplY3QuY3BwCTggQXVnIDIwMDUgMDQ6MDc6MjkgLTAwMDAJMS4yMQor
KysgSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuY3BwCTggQXVnIDIwMDUgMTU6NDM6
NDYgLTAwMDAKQEAgLTc4LDkgKzc4LDcgQEAgVmFsdWVJbXAgKlJlZ0V4cFByb3RvRnVuY0ltcDo6
Y2FsbEFzRnVuYwogICAgICAgICBjYXNlIFRvU3RyaW5nOiByZXR1cm4gU3RyaW5nKCIvLyIpOwog
ICAgICAgfQogICAgIH0KLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxU
eXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7
CisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgfQogCiAgIFJlZ0V4
cEltcCAqcmVpbXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAqPih0aGlzT2JqKTsKQEAgLTI1NCwx
MSArMjUyLDggQEAgT2JqZWN0SW1wICpSZWdFeHBPYmplY3RJbXA6OmNvbnN0cnVjdChFeAogewog
ICBPYmplY3RJbXAgKm8gPSBhcmdzWzBdLT5nZXRPYmplY3QoKTsKICAgaWYgKG8gJiYgby0+aW5o
ZXJpdHMoJlJlZ0V4cEltcDo6aW5mbykpIHsKLSAgICBpZiAoIWFyZ3NbMV0tPmlzVW5kZWZpbmVk
KCkpIHsKLSAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJv
cik7Ci0gICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgIHJldHVybiBlcnI7Ci0g
ICAgfQorICAgIGlmICghYXJnc1sxXS0+aXNVbmRlZmluZWQoKSkKKyAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgcmV0dXJuIG87CiAgIH0KICAgCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS40MgpkaWZmIC1wIC11IC1yMS40MiBKYXZhU2NyaXB0Q29yZS9ranMvc3Ry
aW5nX29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAk4
IEF1ZyAyMDA1IDA0OjA3OjI5IC0wMDAwCTEuNDIKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJp
bmdfb2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDE1OjQzOjQ3IC0wMDAwCkBAIC0zNjksMTEgKzM2OSw4
IEBAIFZhbHVlSW1wICpTdHJpbmdQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmMKIAogICAvLyB0b1N0
cmluZyBhbmQgdmFsdWVPZiBhcmUgbm8gZ2VuZXJpYyBmdW5jdGlvbi4KICAgaWYgKGlkID09IFRv
U3RyaW5nIHx8IGlkID09IFZhbHVlT2YpIHsKLSAgICBpZiAoIXRoaXNPYmogfHwgIXRoaXNPYmot
PmluaGVyaXRzKCZTdHJpbmdJbnN0YW5jZUltcDo6aW5mbykpIHsKLSAgICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgICBleGVjLT5zZXRFeGNl
cHRpb24oZXJyKTsKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgfQorICAgIGlmICghdGhpc09iaiB8
fCAhdGhpc09iai0+aW5oZXJpdHMoJlN0cmluZ0luc3RhbmNlSW1wOjppbmZvKSkKKyAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICByZXR1cm4gU3RyaW5nKHRo
aXNPYmotPmludGVybmFsVmFsdWUoKS0+dG9TdHJpbmcoZXhlYykpOwogICB9CkluZGV4OiBXZWJD
b3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTk4CmRpZmYgLXAgLXUgLXIxLjE5OCBXZWJDb3JlL2todG1sL2Nzcy9j
c3NzdHlsZXNlbGVjdG9yLmNwcAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5jcHAJMzAgSnVsIDIwMDUgMDI6MzM6MTIgLTAwMDAJMS4xOTgKKysrIFdlYkNvcmUva2h0bWwv
Y3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTggQXVnIDIwMDUgMTU6NDQ6NDcgLTAwMDAKQEAgLTM0
LDEwICszNCw2IEBACiAjaW5jbHVkZSAiZG9tL2Nzc192YWx1ZS5oIgogI2luY2x1ZGUgImtodG1s
X2ZhY3RvcnkuaCIKICNpbmNsdWRlICJraHRtbHBhcnRfcC5oIgotdXNpbmcgbmFtZXNwYWNlIGto
dG1sOwotdXNpbmcgbmFtZXNwYWNlIERPTTsKLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0K
IAogI2luY2x1ZGUgImNzcy9jc3Nwcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc3ZhbHVl
cy5oIgpAQCAtNjksNiArNjUsOSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogI2luY2x1
ZGUgPHFpbnRjYWNoZS5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCit1c2luZyBuYW1lc3BhY2Ug
RE9NOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwogLy8gI2RlZmluZSBTVFlMRV9TSEFS
SU5HX1NUQVRTIDEKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCkBAIC0x
ODYsNyArMTg1LDcgQEAgQ1NTU3R5bGVTaGVldEltcGwgKkNTU1N0eWxlU2VsZWN0b3I6OmRlZgog
UmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlTm90WWV0QXZhaWxhYmxlID0gMDsK
IENTU1N0eWxlU2hlZXRJbXBsICpDU1NTdHlsZVNlbGVjdG9yOjpxdWlya3NTaGVldCA9IDA7CiAK
LXN0YXRpYyBDU1NTdHlsZVNlbGVjdG9yOjpFbmNvZGVkdXJsICplbmNvZGVkdXJsID0gMDsKK3N0
YXRpYyBDU1NTdHlsZVNlbGVjdG9yOjpFbmNvZGVkdXJsICpjdXJyZW50RW5jb2RlZFVSTCA9IDA7
CiBzdGF0aWMgUHNldWRvU3RhdGUgcHNldWRvU3RhdGU7CiAKIENTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoIERvY3VtZW50SW1wbCogZG9jLCBRU3RyaW5nIHVzZXJTdHlsZVNoZWV0
LCBTdHlsZVNoZWV0TGlzdEltcGwgKnN0eWxlU2hlZXRzLApAQCAtMjA2LDcgKzIwNSw3IEBAIENT
U1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoIERvY3UKIAogICAgIC8vIEZJWE1FOiBU
aGlzIHN1Y2tzISBUaGUgdXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQogICAgIGlm
ICghdXNlclN0eWxlU2hlZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fdXNlclNoZWV0ID0gbmV3
IERPTTo6Q1NTU3R5bGVTaGVldEltcGwoZG9jKTsKKyAgICAgICAgbV91c2VyU2hlZXQgPSBuZXcg
Q1NTU3R5bGVTaGVldEltcGwoZG9jKTsKICAgICAgICAgbV91c2VyU2hlZXQtPnBhcnNlU3RyaW5n
KERPTVN0cmluZyh1c2VyU3R5bGVTaGVldCksIHN0cmljdFBhcnNpbmcpOwogCiAgICAgICAgIG1f
dXNlclN0eWxlID0gbmV3IENTU1J1bGVTZXQoKTsKQEAgLTI4Nyw3ICsyODYsNyBAQCBzdGF0aWMg
Q1NTU3R5bGVTaGVldEltcGwqIHBhcnNlVUFTaGVldChjCiAgICAgICAgIHN0eWxlICs9IHMtPnNl
dHRpbmdzVG9DU1MoKTsKICAgICBET01TdHJpbmcgc3RyKHN0eWxlKTsKIAotICAgIENTU1N0eWxl
U2hlZXRJbXBsKiBzaGVldCA9IG5ldyBET006OkNTU1N0eWxlU2hlZXRJbXBsKChET006OkNTU1N0
eWxlU2hlZXRJbXBsKikwKTsKKyAgICBDU1NTdHlsZVNoZWV0SW1wbCogc2hlZXQgPSBuZXcgQ1NT
U3R5bGVTaGVldEltcGwoKENTU1N0eWxlU2hlZXRJbXBsKikwKTsKICAgICBzaGVldC0+cGFyc2VT
dHJpbmcoc3RyKTsKICAgICByZXR1cm4gc2hlZXQ7CiB9CkBAIC00NzAsNyArNDY5LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0RWxlbWVudEFuZFBzZQogICAgICAgICBzdHlsZWRFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudEltcGwqPihlbGVtZW50KTsKICAgICBlbHNl
CiAgICAgICAgIHN0eWxlZEVsZW1lbnQgPSAwOwotICAgIDo6ZW5jb2RlZHVybCA9ICZlbmNvZGVk
dXJsOworICAgIGN1cnJlbnRFbmNvZGVkVVJMID0gJmVuY29kZWR1cmw7CiAgICAgcHNldWRvU3Rh
dGUgPSBQc2V1ZG9Vbmtub3duOwogfQogCkBAIC01MzcsNyArNTM2LDcgQEAgc3RhdGljIHZvaWQg
Y2xlYW5wYXRoKFFTdHJpbmcgJnBhdGgpCiAgICAgLy9rZERlYnVnKCkgPDwgImNoZWNrUHNldWRv
U3RhdGUgIiA8PCBwYXRoIDw8IGVuZGw7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3Rh
dGUoIERPTTo6RWxlbWVudEltcGwgKmUsIGJvb2wgY2hlY2tWaXNpdGVkID0gdHJ1ZSApCitzdGF0
aWMgdm9pZCBjaGVja1BzZXVkb1N0YXRlKCBFbGVtZW50SW1wbCAqZSwgYm9vbCBjaGVja1Zpc2l0
ZWQgPSB0cnVlICkKIHsKICAgICBpZiAoIWUtPmlzTGluaygpKSB7CiAgICAgICAgIHBzZXVkb1N0
YXRlID0gUHNldWRvTm9uZTsKQEAgLTU1OSwxMSArNTU4LDExIEBAIHN0YXRpYyB2b2lkIGNoZWNr
UHNldWRvU3RhdGUoIERPTTo6RWxlbWUKICAgICBRU3RyaW5nIHUgPSBjdS5zdHJpbmcoKTsKICAg
ICBpZiAoICF1LmNvbnRhaW5zKCI6Ly8iKSApIHsKICAgICAgICAgaWYgKCB1WzBdID09ICcvJyAp
Ci0gICAgICAgICAgICB1LnByZXBlbmQoZW5jb2RlZHVybC0+aG9zdCk7CisgICAgICAgICAgICB1
LnByZXBlbmQoY3VycmVudEVuY29kZWRVUkwtPmhvc3QpOwogICAgICAgICBlbHNlIGlmICggdVsw
XSA9PSAnIycgKQotICAgICAgICAgICAgdS5wcmVwZW5kKGVuY29kZWR1cmwtPmZpbGUpOworICAg
ICAgICAgICAgdS5wcmVwZW5kKGN1cnJlbnRFbmNvZGVkVVJMLT5maWxlKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdS5wcmVwZW5kKGVuY29kZWR1cmwtPnBhdGgpOworICAgICAgICAgICAg
dS5wcmVwZW5kKGN1cnJlbnRFbmNvZGVkVVJMLT5wYXRoKTsKICAgICAgICAgY2xlYW5wYXRoKCB1
ICk7CiAgICAgfQogICAgIC8vY29tcGxldGVVUkwoIGF0dHIuc3RyaW5nKCkgKTsKQEAgLTU4Miw3
ICs1ODEsNyBAQCBOb2RlSW1wbCogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luCiAgICAg
aWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICBIVE1MRWxl
bWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJlbnQpOwogICAg
ICAgICBpZiAocC0+cmVuZGVyZXIoKSAmJiAhcC0+aW5saW5lU3R5bGVEZWNsKCkgJiYgIXAtPmhh
c0lEKCkpIHsKLSAgICAgICAgICAgIERPTTo6Tm9kZUltcGwqIHIgPSBwLT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICAgICAgICAgIE5vZGVJbXBsKiByID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7CiAg
ICAgICAgICAgICBpbnQgc3ViY291bnQgPSAwOwogICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0
ID0gcC0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKICAgICAgICAgICAgIHdoaWxlIChyKSB7CkBAIC02
NTYsNyArNjU1LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYQog
ICAgICAgICAhc3R5bGVkRWxlbWVudC0+Z2V0RG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxlcygp
KSB7CiAgICAgICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzLgogICAgICAgICBpbnQgY291
bnQgPSAwOwotICAgICAgICBET006Ok5vZGVJbXBsKiBuOworICAgICAgICBOb2RlSW1wbCogbjsK
ICAgICAgICAgZm9yIChuID0gZWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7IG4gJiYgIW4tPmlz
RWxlbWVudE5vZGUoKTsgbiA9IG4tPnByZXZpb3VzU2libGluZygpKTsKICAgICAgICAgd2hpbGUg
KG4pIHsKICAgICAgICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQobikpCkBAIC04
NzUsNyArODc0LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eQog
ICAgIHJldHVybiBzdHlsZTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5k
ZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIERPTTo6RWxlbWVudEltcGwgKmUpCit2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudEltcGwgKmUpCiB7CiAgICAgLy8gQ2FjaGUgb3VyIG9yaWdpbmFsIGRpc3BsYXkuCiAgICAg
c3R5bGUtPnNldE9yaWdpbmFsRGlzcGxheShzdHlsZS0+ZGlzcGxheSgpKTsKQEAgLTEwOTYsNyAr
MTA5NSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihDU1MKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9y
KERPTTo6Q1NTU2VsZWN0b3IgKnNlbCwgRE9NOjpFbGVtZW50SW1wbCAqZSkKK2Jvb2wgQ1NTU3R5
bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3RvciAqc2VsLCBFbGVtZW50SW1w
bCAqZSkKIHsKICAgICBpZighZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIzNSw3ICsx
MjM0LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZDogewogICAgICAgICAgICAg
ICAgIC8vIGZpcnN0LWNoaWxkIG1hdGNoZXMgdGhlIGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxl
bWVudCEKICAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIERPTTo6Tm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2RlKCkgKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoICFuICkKQEAgLTEyNDYsNyArMTI0NSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0xhc3RDaGlsZDogewogICAgICAgICAgICAgICAgIC8vIGxhc3QtY2hpbGQgbWF0Y2hlcyB0
aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQhCiAgICAgICAgICAgICAgICAgaWYgKGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBET006Ok5vZGVJbXBsKiBuID0g
ZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwqIG4gPSBlLT5u
ZXh0U2libGluZygpOwogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gJiYgIW4tPmlzRWxl
bWVudE5vZGUoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmco
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbiApCkBAIC0xMjU3LDcgKzEyNTYsNyBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5Q2hpbGQ6IHsKICAgICAgICAgICAgICAgICAvLyBJZiBi
b3RoIGZpcnN0LWNoaWxkIGFuZCBsYXN0LWNoaWxkIGFwcGx5LCB0aGVuIG9ubHktY2hpbGQgYXBw
bGllcy4KICAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIERPTTo6Tm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2RlKCkgKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoICFuICkgewpAQCAtMTQyNiw3ICsxNDI1LDcgQEAgQ1NTUnVsZVNldDo6fkNT
U1J1bGVTZXQoKQogfQogCiAKLXZvaWQgQ1NTUnVsZVNldDo6YWRkVG9SdWxlU2V0KERPTTo6RE9N
U3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAordm9pZCBDU1NSdWxlU2V0OjphZGRU
b1J1bGVTZXQoRE9NU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgQ1NTU2VsZWN0b3Iq
IHNlbCkKIHsKICAgICBpZiAoIWtleSkgcmV0dXJuOwpAQCAtMTcyMCw3ICsxNzE5LDcgQEAgc3Rh
dGljIFFDb2xvciBjb2xvckZvckNTU1ZhbHVlKCBpbnQgY3NzXwogICAgICAgICAgICAgLy8gRGVz
a3RvcCBiYWNrZ3JvdW5kLgogICAgICAgICAgICAgcmV0dXJuIGJja2dyQ29uZmlnLnJlYWRDb2xv
ckVudHJ5KCJDb2xvcjEiLCAmcUFwcC0+cGFsZXR0ZSgpLmRpc2FibGVkKCkuYmFja2dyb3VuZCgp
KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4ga2h0bWw6OmludmFsaWRDb2xvcjsKKyAgICAg
ICAgcmV0dXJuIGludmFsaWRDb2xvcjsKICAgICB9CiAgICAgCiAgICAgY29uc3QgUVBhbGV0dGUg
JnBhbCA9IHFBcHAtPnBhbGV0dGUoKTsKQEAgLTE3NzgsNyArMTc3Nyw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSggaW50IGlkLCBET006OkNTU1ZhbHVlSW1wbCAqdmFsdWUg
KQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KCBpbnQgaWQsIENTU1ZhbHVl
SW1wbCAqdmFsdWUgKQogewogICAgIC8va2REZWJ1ZyggNjA4MCApIDw8ICJhcHBseWluZyBwcm9w
ZXJ0eSAiIDw8IHByb3AtPm1faWQgPDwgZW5kbDsKIApAQCAtMjgxOSw3ICsyODE4LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KCBpbgogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTCh2ZXJ0aWNhbEFsaWduLCBWZXJ0aWNhbEFsaWduKQogICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlKSByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSkgewotCSAga2h0bWw6OkVWZXJ0aWNhbEFsaWduIGFsaWduOworCSAgRVZlcnRp
Y2FsQWxpZ24gYWxpZ247CiAKIAkgIHN3aXRjaChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkK
IAkgICAgewpAQCAtMzQ3NCw3ICszNDczLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBs
eVByb3BlcnR5KCBpbgogICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3Ro
KHN0eWxlLCBwYWludERldmljZU1ldHJpY3MpOwogICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55
LT5jb21wdXRlTGVuZ3RoKHN0eWxlLCBwYWludERldmljZU1ldHJpY3MpOwogICAgICAgICAgICAg
aW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aChzdHlsZSwg
cGFpbnREZXZpY2VNZXRyaWNzKSA6IDA7Ci0gICAgICAgICAgICBRQ29sb3IgY29sID0ga2h0bWw6
OnRyYW5zcGFyZW50Q29sb3I7CisgICAgICAgICAgICBRQ29sb3IgY29sID0gdHJhbnNwYXJlbnRD
b2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikgewogICAgICAgICAgICAgICAgIGlu
dCBpZGVudCA9IGl0ZW0tPmNvbG9yLT5nZXRJZGVudCgpOwogICAgICAgICAgICAgICAgIGlmIChp
ZGVudCkKQEAgLTM4NjAsNyArMzg1OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eSggaW4KICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQmFja2dy
b3VuZEF0dGFjaG1lbnQoQmFja2dyb3VuZExheWVyKiBsYXllciwgRE9NOjpDU1NWYWx1ZUltcGwq
IHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5kQXR0YWNobWVudChC
YWNrZ3JvdW5kTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZUltcGwqIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CiAgICAgICAg
IGxheWVyLT5zZXRCYWNrZ3JvdW5kQXR0YWNobWVudChSZW5kZXJTdHlsZTo6aW5pdGlhbEJhY2tn
cm91bmRBdHRhY2htZW50KCkpOwpAQCAtMzg4MSw3ICszODgwLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBCYWNrZ3JvdW5kQXR0YQogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBCYWNrZ3JvdW5kSW1hZ2UoQmFja2dyb3VuZExheWVyKiBsYXllciwgRE9NOjpDU1NW
YWx1ZUltcGwqIHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5kSW1h
Z2UoQmFja2dyb3VuZExheWVyKiBsYXllciwgQ1NTVmFsdWVJbXBsKiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewogICAg
ICAgICBsYXllci0+c2V0QmFja2dyb3VuZEltYWdlKFJlbmRlclN0eWxlOjppbml0aWFsQmFja2dy
b3VuZEltYWdlKCkpOwpAQCAtMzg5Myw3ICszODkyLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBCYWNrZ3JvdW5kSW1hZwogICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kSW1hZ2Uoc3RhdGlj
X2Nhc3Q8Q1NTSW1hZ2VWYWx1ZUltcGwgKj4ocHJpbWl0aXZlVmFsdWUpLT5pbWFnZShlbGVtZW50
LT5nZXREb2N1bWVudCgpLT5kb2NMb2FkZXIoKSkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hcEJhY2tncm91bmRSZXBlYXQoQmFja2dyb3VuZExheWVyKiBsYXllciwgRE9NOjpDU1NW
YWx1ZUltcGwqIHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5kUmVw
ZWF0KEJhY2tncm91bmRMYXllciogbGF5ZXIsIENTU1ZhbHVlSW1wbCogdmFsdWUpCiB7CiAgICAg
aWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKICAg
ICAgICAgbGF5ZXItPnNldEJhY2tncm91bmRSZXBlYXQoUmVuZGVyU3R5bGU6OmluaXRpYWxCYWNr
Z3JvdW5kUmVwZWF0KCkpOwpAQCAtMzkyMCw3ICszOTE5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBCYWNrZ3JvdW5kUmVwZQogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBCYWNrZ3JvdW5kWFBvc2l0aW9uKEJhY2tncm91bmRMYXllciogbGF5ZXIsIERPTTo6Q1NT
VmFsdWVJbXBsKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQmFja2dyb3VuZFhQ
b3NpdGlvbihCYWNrZ3JvdW5kTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZUltcGwqIHZhbHVlKQogewog
ICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7
CiAgICAgICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kWFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0
aWFsQmFja2dyb3VuZFhQb3NpdGlvbigpKTsKQEAgLTM5NDAsNyArMzkzOSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWFwQmFja2dyb3VuZFhQb3MKICAgICBsYXllci0+c2V0QmFja2dyb3Vu
ZFhQb3NpdGlvbihsKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5k
WVBvc2l0aW9uKEJhY2tncm91bmRMYXllciogbGF5ZXIsIERPTTo6Q1NTVmFsdWVJbXBsKiB2YWx1
ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQmFja2dyb3VuZFlQb3NpdGlvbihCYWNrZ3Jv
dW5kTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZUltcGwqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+
Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CiAgICAgICAgIGxheWVy
LT5zZXRCYWNrZ3JvdW5kWVBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsQmFja2dyb3VuZFlQ
b3NpdGlvbigpKTsKQEAgLTQwMjEsNyArNDAyMCw3IEBAIGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6
OmdldENvbXB1dGVkU2l6ZUYKICAgICBpbnQgbWluU2l6ZSA9IHNldHRpbmdzLT5taW5Gb250U2l6
ZSgpOwogICAgIGludCBtaW5Mb2dpY2FsU2l6ZSA9IHNldHRpbmdzLT5taW5Mb2dpY2FsRm9udFNp
emUoKTsKIAotICAgIGZsb2F0IHpvb21QZXJjZW50ID0gKCFraHRtbDo6cHJpbnRwYWludGVyICYm
IHZpZXcpID8gdmlldy0+cGFydCgpLT56b29tRmFjdG9yKCkvMTAwLjBmIDogMS4wZjsKKyAgICBm
bG9hdCB6b29tUGVyY2VudCA9ICghcHJpbnRwYWludGVyICYmIHZpZXcpID8gdmlldy0+cGFydCgp
LT56b29tRmFjdG9yKCkvMTAwLjBmIDogMS4wZjsKICAgICBmbG9hdCB6b29tZWRTaXplID0gc3Bl
Y2lmaWVkU2l6ZSAqIHpvb21QZXJjZW50OwogCiAgICAgLy8gQXBwbHkgdGhlIGhhcmQgbWluaW11
bSBmaXJzdC4gIFdlIG9ubHkgYXBwbHkgdGhlIGhhcmQgbWluaW11bSBpZiBhZnRlciB6b29taW5n
IHdlJ3JlIHN0aWxsIHRvbyBzbWFsbC4KSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9kb21wYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
ZG9tcGFyc2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMg
V2ViQ29yZS9raHRtbC9lY21hL2RvbXBhcnNlci5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9k
b21wYXJzZXIuY3BwCTggQXVnIDIwMDUgMDQ6MDc6NDAgLTAwMDAJMS4zCisrKyBXZWJDb3JlL2to
dG1sL2VjbWEvZG9tcGFyc2VyLmNwcAk4IEF1ZyAyMDA1IDE1OjQ0OjQ3IC0wMDAwCkBAIC02OSwx
MSArNjksOCBAQCBET01QYXJzZXI6OkRPTVBhcnNlcihFeGVjU3RhdGUgKmV4ZWMsIERPCiAKIFZh
bHVlSW1wICpET01QYXJzZXJQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZET01QYXJzZXI6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJy
KTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTVBh
cnNlcjo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAg
CiAgIERPTVBhcnNlciAqcGFyc2VyID0gc3RhdGljX2Nhc3Q8RE9NUGFyc2VyICo+KHRoaXNPYmop
OwogCkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2JpbmRpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2JpbmRpbmcuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjM3CmRpZmYgLXAgLXUgLXIxLjM3IFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfYmluZGluZy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfYmluZGluZy5j
cHAJOCBBdWcgMjAwNSAwNDowNzo0MCAtMDAwMAkxLjM3CisrKyBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX2JpbmRpbmcuY3BwCTggQXVnIDIwMDUgMTU6NDQ6NDcgLTAwMDAKQEAgLTkxLDcgKzkxLDcg
QEAgRE9NT2JqZWN0KiBTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZQogCiB2b2lkIFNjcmlw
dEludGVycHJldGVyOjpwdXRET01PYmplY3Qodm9pZCogb2JqZWN0SGFuZGxlLCBET01PYmplY3Qq
IG9iaikgCiB7Ci0gICAgZG9tT2JqZWN0cygpLT5pbnNlcnQob2JqZWN0SGFuZGxlLCBvYmopOwor
ICAgIGRvbU9iamVjdHMoKS0+c2V0KG9iamVjdEhhbmRsZSwgb2JqKTsKIH0KIAogdm9pZCBTY3Jp
cHRJbnRlcnByZXRlcjo6ZGVsZXRlRE9NT2JqZWN0KHZvaWQqIG9iamVjdEhhbmRsZSkgCkBAIC0x
MjUsOSArMTI1LDkgQEAgdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6cHV0RE9NTm9kZUZvckRvYwog
ICAgIE5vZGVNYXAgKmRvY3VtZW50RGljdCA9IGRvbU5vZGVzUGVyRG9jdW1lbnQoKS0+Z2V0KGRv
Y3VtZW50KTsKICAgICBpZiAoIWRvY3VtZW50RGljdCkgewogICAgICAgICBkb2N1bWVudERpY3Qg
PSBuZXcgTm9kZU1hcCgpOwotICAgICAgICBkb21Ob2Rlc1BlckRvY3VtZW50KCktPmluc2VydChk
b2N1bWVudCwgZG9jdW1lbnREaWN0KTsKKyAgICAgICAgZG9tTm9kZXNQZXJEb2N1bWVudCgpLT5z
ZXQoZG9jdW1lbnQsIGRvY3VtZW50RGljdCk7CiAgICAgfQotICAgIGRvY3VtZW50RGljdC0+aW5z
ZXJ0KG5vZGVIYW5kbGUsIG5vZGVXcmFwcGVyKTsKKyAgICBkb2N1bWVudERpY3QtPnNldChub2Rl
SGFuZGxlLCBub2RlV3JhcHBlcik7CiB9CiAKIHZvaWQgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdl
dEFsbERPTU5vZGVzRm9yRG9jdW1lbnQoRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50KQpAQCAt
MzQ2LDkgKzM0Niw4IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgaW4K
ICAgY2hhciBidWZmZXJbMTAwXTsgLy8gbmVlZHMgdG8gZml0IDIwIGNoYXJhY3RlcnMsIHBsdXMg
YW4gaW50ZWdlciBpbiBBU0NJSSwgcGx1cyBhIG51bGwgY2hhcmFjdGVyCiAgIHNwcmludGYoYnVm
ZmVyLCAiJXMgZXhjZXB0aW9uICVkIiwgdHlwZSwgY29kZSk7CiAKLSAgT2JqZWN0SW1wICplcnJv
ck9iamVjdCA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBidWZmZXIpOworICBP
YmplY3RJbXAgKmVycm9yT2JqZWN0ID0gdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGJ1
ZmZlcik7CiAgIGVycm9yT2JqZWN0LT5wdXQoZXhlYywgImNvZGUiLCBOdW1iZXIoY29kZSkpOwot
ICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3JPYmplY3QpOwogfQogCiB9CkluZGV4OiBXZWJDb3Jl
L2todG1sL2VjbWEva2pzX2Nzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApk
aWZmIC1wIC11IC1yMS4zNCBXZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5jcHAKLS0tIFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjQwIC0wMDAwCTEuMzQK
KysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAk4IEF1ZyAyMDA1IDE1OjQ0OjQ4IC0w
MDAwCkBAIC0yMzksMTEgKzIzOSw4IEBAIHZvaWQgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cHV0
KEV4ZWNTdGEKIAogVmFsdWVJbXAgKkRPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmM6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTUNTU1N0eWxl
RGVjbGFyYXRpb246OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1
cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAgIENTU1N0eWxl
RGVjbGFyYXRpb25JbXBsICZzdHlsZURlY2wgPSAqc3RhdGljX2Nhc3Q8RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBVU3RyaW5nIHN0ciA9IGFyZ3NbMF0tPnRv
U3RyaW5nKGV4ZWMpOwpAQCAtNDY2LDExICs0NjMsOCBAQCBWYWx1ZUltcCAqZ2V0RE9NU3R5bGVT
aGVldExpc3QoRXhlY1N0YXRlCiAKIFZhbHVlSW1wICpET01TdHlsZVNoZWV0TGlzdEZ1bmM6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTVN0eWxlU2hl
ZXRMaXN0OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVy
cjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTVN0eWxlU2hlZXRMaXN0
OjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICBTdHls
ZVNoZWV0TGlzdEltcGwgJnN0eWxlU2hlZXRMaXN0ID0gKnN0YXRpY19jYXN0PERPTVN0eWxlU2hl
ZXRMaXN0ICo+KHRoaXNPYmopLT5pbXBsKCk7CiAgIGlmIChpZCA9PSBET01TdHlsZVNoZWV0TGlz
dDo6SXRlbSkKICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHlsZVNoZWV0TGlz
dC5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKQEAgLTU2MCwxMSArNTU0LDggQEAgVmFs
dWVJbXAgKmdldERPTU1lZGlhTGlzdChFeGVjU3RhdGUgKmV4ZQogCiBWYWx1ZUltcCAqS0pTOjpE
T01NZWRpYUxpc3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmlu
aGVyaXRzKCZLSlM6OkRPTU1lZGlhTGlzdDo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pT
OjpET01NZWRpYUxpc3Q6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CiAgIE1lZGlhTGlzdEltcGwgJm1lZGlhTGlzdCA9ICpzdGF0aWNfY2FzdDxET01NZWRp
YUxpc3QgKj4odGhpc09iaiktPmltcGwoKTsKICAgc3dpdGNoIChpZCkgewogICAgIGNhc2UgRE9N
TWVkaWFMaXN0OjpJdGVtOgpAQCAtNjMzLDExICs2MjQsOCBAQCBib29sIERPTUNTU1N0eWxlU2hl
ZXQ6OmdldE93blByb3BlcnR5U2xvCiAKIFZhbHVlSW1wICpET01DU1NTdHlsZVNoZWV0UHJvdG9G
dW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01D
U1NTdHlsZVNoZWV0OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0
dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTUNTU1N0eWxl
U2hlZXQ6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAg
IERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBDU1NTdHlsZVNoZWV0
SW1wbCAmc3R5bGVTaGVldCA9ICpzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCAqPihzdGF0
aWNfY2FzdDxET01DU1NTdHlsZVNoZWV0ICo+KHRoaXNPYmopLT5pbXBsKCkpOwogICBzd2l0Y2gg
KGlkKSB7CkBAIC03MTUsMTEgKzcwMyw4IEBAIGJvb2wgRE9NQ1NTUnVsZUxpc3Q6OmdldE93blBy
b3BlcnR5U2xvdCgKIAogVmFsdWVJbXAgKkRPTUNTU1J1bGVMaXN0RnVuYzo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTUnVsZUxpc3Q6OmluZm8p
KSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsK
LSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTUnVsZUxpc3Q6OmluZm8pKQorICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIENTU1J1bGVMaXN0SW1wbCAmY3Nz
UnVsZUxpc3QgPSAqc3RhdGljX2Nhc3Q8RE9NQ1NTUnVsZUxpc3QgKj4odGhpc09iaiktPmltcGwo
KTsKICAgc3dpdGNoIChpZCkgewogICAgIGNhc2UgRE9NQ1NTUnVsZUxpc3Q6Okl0ZW06CkBAIC05
MTUsMTEgKzkwMCw4IEBAIHZvaWQgRE9NQ1NTUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3QK
IAogVmFsdWVJbXAgKkRPTUNTU1J1bGVGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmS0pTOjpET01DU1NSdWxlOjppbmZvKSkgewotICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZLSlM6OkRPTUNTU1J1bGU6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgIENTU1J1bGVJbXBsICZjc3NSdWxlID0gKnN0YXRpY19jYXN0PERPTUNTU1J1
bGUgKj4odGhpc09iaiktPmltcGwoKTsKIAogICBpZiAoY3NzUnVsZS50eXBlKCkgPT0gRE9NOjpD
U1NSdWxlOjpNRURJQV9SVUxFKSB7CkBAIC0xMTIzLDExICsxMTA1LDggQEAgYm9vbCBET01DU1NQ
cmltaXRpdmVWYWx1ZTo6Z2V0T3duUHJvcGVydAogCiBWYWx1ZUltcCAqRE9NQ1NTUHJpbWl0aXZl
VmFsdWVQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZLSlM6OkRPTUNTU1ByaW1pdGl2ZVZhbHVlOjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9u
KGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZL
SlM6OkRPTUNTU1ByaW1pdGl2ZVZhbHVlOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVj
KTsKICAgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsICZ2YWwgPSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWVJbXBsICo+KHN0YXRpY19jYXN0PERPTUNTU1ByaW1pdGl2ZVZhbHVlICo+KHRoaXNP
YmopLT5pbXBsKCkpOwogICBzd2l0Y2ggKGlkKSB7CkBAIC0xMjU1LDExICsxMjM0LDggQEAgYm9v
bCBET01DU1NWYWx1ZUxpc3Q6OmdldE93blByb3BlcnR5U2xvdAogCiBWYWx1ZUltcCAqRE9NQ1NT
VmFsdWVMaXN0RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMo
JktKUzo6RE9NQ1NTVmFsdWU6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAg
ICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NT
VmFsdWU6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAg
IENTU1ZhbHVlTGlzdEltcGwgJnZhbHVlTGlzdCA9ICpzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3RJ
bXBsICo+KHN0YXRpY19jYXN0PERPTUNTU1ZhbHVlTGlzdCAqPih0aGlzT2JqKS0+aW1wbCgpKTsK
ICAgc3dpdGNoIChpZCkgewogICAgIGNhc2UgRE9NQ1NTVmFsdWVMaXN0OjpJdGVtOgpJbmRleDog
V2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuODYKZGlmZiAtcCAtdSAtcjEuODYgV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwCi0t
LSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAJOCBBdWcgMjAwNSAwNDowNzo0MCAtMDAw
MAkxLjg2CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAJOCBBdWcgMjAwNSAxNTo0
NDo1MCAtMDAwMApAQCAtNjM4LDExICs2MzgsOCBAQCB2b2lkIERPTU5vZGU6OnB1c2hFdmVudEhh
bmRsZXJTY29wZShFeGVjCiAKIFZhbHVlSW1wICpET01Ob2RlUHJvdG9GdW5jOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NTm9kZTo6aW5mbykpIHsKLSAgICBP
YmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMt
PnNldEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmRE9NTm9kZTo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAg
IE5vZGVJbXBsICZub2RlID0gKnN0YXRpY19jYXN0PERPTU5vZGUgKj4odGhpc09iaiktPmltcGwo
KTsKICAgc3dpdGNoIChpZCkgewpAQCAtNzk1LDExICs3OTIsOCBAQCBET01Ob2RlTGlzdEZ1bmM6
OkRPTU5vZGVMaXN0RnVuYyhFeGVjU3RhCiAvLyBOb3QgYSBwcm90b3R5cGUgY2xhc3MgY3VycmVu
dGx5LCBidXQgc2hvdWxkIHByb2JhYmx5IGJlIGNvbnZlcnRlZCB0byBvbmUKIFZhbHVlSW1wICpE
T01Ob2RlTGlzdEZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZLSlM6OkRPTU5vZGVMaXN0OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0g
ICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTU5v
ZGVMaXN0OjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwog
ICBET006Ok5vZGVMaXN0SW1wbCAmbGlzdCA9ICpzdGF0aWNfY2FzdDxET01Ob2RlTGlzdCAqPih0
aGlzT2JqKS0+aW1wbCgpOwogCiAgIGlmIChpZCA9PSBET01Ob2RlTGlzdDo6SXRlbSkKQEAgLTEw
MDMsMTEgKzk5Nyw4IEBAIHZvaWQgRE9NRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1MK
IAogVmFsdWVJbXAgKkRPTURvY3VtZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01Ob2RlOjppbmZvKSkgewotICAgIE9iamVjdElt
cCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKCZLSlM6OkRPTU5vZGU6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBO
b2RlSW1wbCAmbm9kZSA9ICpzdGF0aWNfY2FzdDxET01Ob2RlICo+KHRoaXNPYmopLT5pbXBsKCk7
CiAgIERvY3VtZW50SW1wbCAmZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnRJbXBsICY+KG5vZGUp
OwpAQCAtMTIxMiwxMSArMTIwMyw4IEBAIGJvb2wgRE9NRWxlbWVudDo6Z2V0T3duUHJvcGVydHlT
bG90KEV4ZWMKIAogVmFsdWVJbXAgKkRPTUVsZW1lbnRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9u
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQog
ewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTU5vZGU6OmluZm8pKSB7IC8vIG5v
ZGUgc2hvdWxkIGJlIGVub3VnaCBoZXJlLCBnaXZlbiB0aGUgY2FzdAotICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZLSlM6OkRPTU5vZGU6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBOb2Rl
SW1wbCAmbm9kZSA9ICpzdGF0aWNfY2FzdDxET01Ob2RlICo+KHRoaXNPYmopLT5pbXBsKCk7CiAg
IEVsZW1lbnRJbXBsICZlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgJj4obm9kZSk7
CkBAIC0xMzIxLDExICsxMzA5LDggQEAgRE9NRE9NSW1wbGVtZW50YXRpb246On5ET01ET01JbXBs
ZW1lbnRhdAogCiBWYWx1ZUltcCAqRE9NRE9NSW1wbGVtZW50YXRpb25Qcm90b0Z1bmM6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTURPTUltcGxlbWVu
dGF0aW9uOjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVy
cjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTURPTUltcGxlbWVudGF0
aW9uOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICBE
T01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgRE9NSW1wbGVtZW50YXRp
b25JbXBsICZpbXBsZW1lbnRhdGlvbiA9ICpzdGF0aWNfY2FzdDxET01ET01JbXBsZW1lbnRhdGlv
biAqPih0aGlzT2JqKS0+aW1wbCgpOwogCkBAIC0xNDY1LDExICsxNDUwLDggQEAgYm9vbCBET01O
YW1lZE5vZGVNYXA6OmdldE93blByb3BlcnR5U2xvdAogCiBWYWx1ZUltcCAqRE9NTmFtZWROb2Rl
TWFwUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
S0pTOjpET01OYW1lZE5vZGVNYXA6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
LSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9N
TmFtZWROb2RlTWFwOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgTmFtZWRO
b2RlTWFwSW1wbCAmbWFwID0gKnN0YXRpY19jYXN0PERPTU5hbWVkTm9kZU1hcCAqPih0aGlzT2Jq
KS0+aW1wbCgpOwogCkBAIC0yMDA5LDExICsxOTkxLDggQEAgdm9pZCBET01DaGFyYWN0ZXJEYXRh
OjpwdXQoRXhlY1N0YXRlICpleAogCiBWYWx1ZUltcCAqRE9NQ2hhcmFjdGVyRGF0YVByb3RvRnVu
Yzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ2hh
cmFjdGVyRGF0YTo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVy
biBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01DaGFyYWN0ZXJE
YXRhOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICBE
T01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgQ2hhcmFjdGVyRGF0YUlt
cGwgJmRhdGEgPSAqc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YUltcGwgKj4oc3RhdGljX2Nhc3Q8
RE9NQ2hhcmFjdGVyRGF0YSAqPih0aGlzT2JqKS0+aW1wbCgpKTsKICAgc3dpdGNoKGlkKSB7CkBA
IC0yMDcyLDExICsyMDUxLDggQEAgRE9NVGV4dDo6RE9NVGV4dChFeGVjU3RhdGUgKmV4ZWMsIFRl
eHRJbQogCiBWYWx1ZUltcCAqRE9NVGV4dFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0
YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NVGV4dDo6aW5mbykpIHsKLSAgICBPYmplY3RJ
bXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmS0pTOjpET01UZXh0OjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAg
VGV4dEltcGwgJnRleHQgPSAqc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9N
VGV4dCAqPih0aGlzT2JqKS0+aW1wbCgpKTsKICAgc3dpdGNoKGlkKSB7CkluZGV4OiBXZWJDb3Jl
L2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41NApkaWZmIC1wIC11IC1yMS41NCBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAK
LS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjQx
IC0wMDAwCTEuNTQKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAk4IEF1ZyAy
MDA1IDE1OjQ0OjUxIC0wMDAwCkBAIC00OTUsMTEgKzQ5NSw4IEBAIHZvaWQgRE9NRXZlbnQ6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXQKIAogVmFsdWVJbXAgKkRPTUV2ZW50UHJvdG9GdW5jOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqIHRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTUV2ZW50OjppbmZv
KSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7
Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBp
ZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01FdmVudDo6aW5mbykpCisgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgRXZlbnRJbXBsICZldmVudCA9ICpzdGF0aWNfY2Fz
dDxET01FdmVudCAqPiggdGhpc09iaiApLT5pbXBsKCk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBj
YXNlIERPTUV2ZW50OjpTdG9wUHJvcGFnYXRpb246CkBAIC02NDUsMTEgKzY0Miw4IEBAIFZhbHVl
SW1wICpET01VSUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEUKIAogVmFsdWVJbXAgKkRPTVVJRXZl
bnRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZE
T01VSUV2ZW50OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShl
eGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJu
IGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01VSUV2ZW50OjppbmZvKSkK
KyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICBVSUV2ZW50SW1wbCAm
dWlFdmVudCA9ICpzdGF0aWNfY2FzdDxVSUV2ZW50SW1wbCAqPihzdGF0aWNfY2FzdDxET01VSUV2
ZW50ICo+KHRoaXNPYmopLT5pbXBsKCkpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01V
SUV2ZW50OjpJbml0VUlFdmVudDoKQEAgLTc4NywxMSArNzgxLDggQEAgVmFsdWVJbXAgKkRPTU1v
dXNlRXZlbnQ6OmdldFZhbHVlUHJvcGVydAogCiBWYWx1ZUltcCAqRE9NTW91c2VFdmVudFByb3Rv
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTU1vdXNl
RXZlbnQ6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
VHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJy
OwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTU1vdXNlRXZlbnQ6OmluZm8pKQor
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIE1vdXNlRXZlbnRJbXBs
ICZtb3VzZUV2ZW50ID0gKnN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsICo+KHN0YXRpY19jYXN0
PERPTU1vdXNlRXZlbnQgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3aXRjaCAoaWQpIHsKICAg
ICBjYXNlIERPTU1vdXNlRXZlbnQ6OkluaXRNb3VzZUV2ZW50OgpAQCAtODgzLDExICs4NzQsOCBA
QCBWYWx1ZUltcCAqRE9NS2V5Ym9hcmRFdmVudDo6Z2V0VmFsdWVQcm9wCiAKIFZhbHVlSW1wICpE
T01LZXlib2FyZEV2ZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmRE9NS2V5Ym9hcmRFdmVudDo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
RE9NS2V5Ym9hcmRFdmVudDo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKICAgS2V5Ym9hcmRFdmVudEltcGwgJmV2ZW50ID0gKnN0YXRpY19jYXN0PEtleWJv
YXJkRXZlbnRJbXBsICo+KHN0YXRpY19jYXN0PERPTVVJRXZlbnQgKj4odGhpc09iaiktPmltcGwo
KSk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTUtleWJvYXJkRXZlbnQ6OkluaXRLZXli
b2FyZEV2ZW50OgpAQCAtOTg5LDExICs5NzcsOCBAQCBWYWx1ZUltcCAqRE9NTXV0YXRpb25FdmVu
dDo6Z2V0VmFsdWVQcm9wCiAKIFZhbHVlSW1wICpET01NdXRhdGlvbkV2ZW50UHJvdG9GdW5jOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NTXV0YXRpb25FdmVu
dDo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBl
RXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0g
IH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NTXV0YXRpb25FdmVudDo6aW5mbykpCisg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgTXV0YXRpb25FdmVudElt
cGwgJm11dGF0aW9uRXZlbnQgPSAqc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudEltcGwgKj4oc3Rh
dGljX2Nhc3Q8RE9NRXZlbnQgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3aXRjaCAoaWQpIHsK
ICAgICBjYXNlIERPTU11dGF0aW9uRXZlbnQ6OkluaXRNdXRhdGlvbkV2ZW50OgpAQCAtMTA4MCwx
MSArMTA2NSw4IEBAIFZhbHVlSW1wICpET01XaGVlbEV2ZW50OjpnZXRWYWx1ZVByb3BlcnQKIAog
VmFsdWVJbXAgKkRPTVdoZWVsRXZlbnRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICAgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJkRPTVdoZWVsRXZlbnQ6OmluZm8pKSB7Ci0gICAgICAgIE9i
amVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICAgICAg
ZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0K
KyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01XaGVlbEV2ZW50OjppbmZvKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKQEAgLTExOTIsMTEgKzExNzQsOCBAQCB2b2lkIENsaXBib2FyZDo6cHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhCiAKIFZhbHVlSW1wICpDbGlwYm9hcmRQcm90b0Z1bmM6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkNsaXBib2FyZDo6aW5mbykp
IHsKLSAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgIHJldHVybiBlcnI7
Ci0gICAgfQorICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkNsaXBib2FyZDo6aW5mbykpCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBDbGlwYm9h
cmQgKmNiID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkICo+KHRoaXNPYmopOwogICAgIHN3aXRjaCAo
aWQpIHsKQEAgLTEyMDgsOSArMTE4Nyw3IEBAIFZhbHVlSW1wICpDbGlwYm9hcmRQcm90b0Z1bmM6
OmNhbGxBc0Z1bmMKICAgICAgICAgICAgICAgICBjYi0+Y2xpcGJvYXJkLT5jbGVhckRhdGEoYXJn
c1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0
SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IsImNsZWFyRGF0YTogSW52
YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgImNsZWFyRGF0YTogSW52YWxp
ZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xp
cGJvYXJkOjpHZXREYXRhOgogICAgICAgICB7CkBAIC0xMjIzLDE4ICsxMjAwLDE0IEBAIFZhbHVl
SW1wICpDbGlwYm9hcmRQcm90b0Z1bmM6OmNhbGxBc0Z1bmMKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
U3ludGF4RXJyb3IsImdldERhdGE6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwotICAg
ICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4
RXJyb3IsICJnZXREYXRhOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBjYXNlIENsaXBib2FyZDo6U2V0RGF0YToKICAgICAg
ICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEJv
b2xlYW4oY2ItPmNsaXBib2FyZC0+c2V0RGF0YShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsU3ludGF4RXJyb3IsInNldERhdGE6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwot
ICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAg
IHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IsICJzZXREYXRhOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDbGlwYm9hcmQ6OlNldERyYWdJbWFnZToKICAgICAgICAg
ewpAQCAtMTI0MiwxMSArMTIxNSw4IEBAIFZhbHVlSW1wICpDbGlwYm9hcmRQcm90b0Z1bmM6OmNh
bGxBc0Z1bmMKICAgICAgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKSB7Ci0gICAgICAgICAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCJzZXRE
cmFnSW1hZ2U6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgInNldERyYWdJbWFn
ZTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiAKICAgICAgICAgICAgIGludCB4ID0g
KGludClhcmdzWzFdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGludCB5ID0gKGludClh
cmdzWzJdLT50b051bWJlcihleGVjKTsKQEAgLTEyNTgsOSArMTIyOCw3IEBAIFZhbHVlSW1wICpD
bGlwYm9hcmRQcm90b0Z1bmM6OmNhbGxBc0Z1bmMKICAgICAgICAgICAgICAgICAgICAgY2ItPmNs
aXBib2FyZC0+c2V0RHJhZ0ltYWdlRWxlbWVudChub2RlLCBRUG9pbnQoeCx5KSk7ICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJvciwic2V0RHJhZ0ltYWdlRnJvbUVsZW1l
bnQ6IEludmFsaWQgZmlyc3QgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAic2V0
RHJhZ0ltYWdlRnJvbUVsZW1lbnQ6IEludmFsaWQgZmlyc3QgYXJndW1lbnQiKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTEyNzEsOSArMTIzOSw3IEBAIFZhbHVlSW1w
ICpDbGlwYm9hcmRQcm90b0Z1bmM6OmNhbGxBc0Z1bmMKICAgICAgICAgICAgICAgICBjYi0+Y2xp
cGJvYXJkLT5zZXREcmFnSW1hZ2UoSlNJbWFnZS0+aW1hZ2UoKS0+cGl4bWFwKCksIFFQb2ludCh4
LHkpKTsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRt
bC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMzCmRpZmYgLXAgLXUgLXIxLjEzMyBXZWJD
b3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0
bWwuY3BwCTggQXVnIDIwMDUgMDQ6MDc6NDEgLTAwMDAJMS4xMzMKKysrIFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfaHRtbC5jcHAJOCBBdWcgMjAwNSAxNTo0NDo1NyAtMDAwMApAQCAtMTUxLDExICsx
NTEsOCBAQCBJTVBMRU1FTlRfUFJPVE9GVU5DKEhUTUxEb2NGdW5jdGlvbikKIAogVmFsdWVJbXAg
KktKUzo6SFRNTERvY0Z1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmSFRNTERvY3VtZW50OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZIVE1MRG9j
dW1lbnQ6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAg
IEhUTUxEb2N1bWVudEltcGwgJmRvYyA9ICpzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsICo+
KHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPih0aGlzT2JqKS0+aW1wbCgpKTsKIAogICBzd2l0
Y2ggKGlkKSB7CkBAIC0xNzAsMTEgKzE2Nyw4IEBAIFZhbHVlSW1wICpLSlM6OkhUTUxEb2NGdW5j
dGlvbjo6Y2FsbEFzRnUKIAlXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3co
cGFydCk7CiAJaWYgKHdpbmRvdykgewogCSAgT2JqZWN0SW1wICpmdW5jdGlvbk9iamVjdCA9IHdp
bmRvdy0+Z2V0KGV4ZWMsICJvcGVuIiktPmdldE9iamVjdCgpOwotCSAgaWYgKCFmdW5jdGlvbk9i
amVjdCB8fCAhZnVuY3Rpb25PYmplY3QtPmltcGxlbWVudHNDYWxsKCkpIHsKLQkgICAgT2JqZWN0
SW1wICpleGNlcHRpb24gPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvcik7Ci0JICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwotCSAgICByZXR1cm4gZXhjZXB0aW9uOwotCSAg
fQorCSAgaWYgKCFmdW5jdGlvbk9iamVjdCB8fCAhZnVuY3Rpb25PYmplY3QtPmltcGxlbWVudHND
YWxsKCkpCisJICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAJICByZXR1
cm4gZnVuY3Rpb25PYmplY3QtPmNhbGwoZXhlYywgd2luZG93LCBhcmdzKTsKIAl9CiAgICAgICB9
CkBAIC0yMzI5LDExICsyMzIzLDggQEAgSFRNTEVsZW1lbnRGdW5jdGlvbjo6SFRNTEVsZW1lbnRG
dW5jdGlvbgogCiBWYWx1ZUltcCAqS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50OjppbmZv
KSkgewotICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJy
b3IpOwotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgcmV0dXJuIGVy
cjsKLSAgICB9CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6
aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAg
a2REZWJ1ZygpIDw8ICJLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwgIiA8PCBlbmRs
OwogICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICAgIEhUTUxF
bGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4odGhpc09iaiktPmltcGwoKSk7CkBAIC0zNDMwLDExICsz
NDIxLDggQEAgVmFsdWVJbXAgKktKUzo6SFRNTENvbGxlY3Rpb246OmdldE5hbWVkSQogCiBWYWx1
ZUltcCAqS0pTOjpIVE1MQ29sbGVjdGlvblByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0
YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6SFRNTENvbGxlY3Rpb246OmluZm8pKSB7Ci0gICAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09i
ai0+aW5oZXJpdHMoJktKUzo6SFRNTENvbGxlY3Rpb246OmluZm8pKQorICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIEhUTUxDb2xsZWN0aW9uSW1wbCAmY29sbCA9ICpz
dGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbiAqPih0aGlzT2JqKS0+aW1wbCgpOwogCiAgIHN3aXRj
aCAoaWQpIHsKQEAgLTM3NjUsMTEgKzM3NTMsOCBAQCBzdGF0aWMgYm9vbCBpc0ltYWdlUGF0dGVy
bihWYWx1ZUltcCAqdmFsCiAKIFZhbHVlSW1wICpLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZDb250ZXh0MkQ6OmluZm8p
KSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJv
cik7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICByZXR1cm4gZXJy
OwotICAgIH0KKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZDb250ZXh0MkQ6OmluZm8pKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgQ29udGV4
dDJEICpjb250ZXh0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8S0pTOjpDb250ZXh0MkQgKj4odGhpc09i
aik7CiAgICAga2h0bWw6OlJlbmRlckNhbnZhc0ltYWdlICpyZW5kZXJlciA9IHN0YXRpY19jYXN0
PGtodG1sOjpSZW5kZXJDYW52YXNJbWFnZSo+KGNvbnRleHRPYmplY3QtPl9lbGVtZW50LT5yZW5k
ZXJlcigpKTsKQEAgLTM3ODIsMTEgKzM3NjcsOCBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0MkRG
dW5jdGlvbjo6Y2FsbEFzCiAgICAgCiAgICAgc3dpdGNoIChpZCkgewogICAgICAgICBjYXNlIENv
bnRleHQyRDo6U2F2ZTogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsKLSAg
ICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhF
cnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdz
LnNpemUoKSAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yKTsKICAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoZHJhd2luZ0NvbnRl
eHQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb250ZXh0T2JqZWN0LT5zYXZlKCk7CkBA
IC0zNzk0LDExICszNzc2LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNh
bGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0
MkQ6OlJlc3RvcmU6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKSB7Ci0gICAg
ICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJy
b3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5z
aXplKCkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50
YXhFcnJvcik7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGRyYXdpbmdDb250
ZXh0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29udGV4dE9iamVjdC0+cmVzdG9yZSgp
OwpAQCAtMzgwNiwyMCArMzc4NSwxNCBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlv
bjo6Y2FsbEFzCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENv
bnRleHQyRDo6QmVnaW5QYXRoOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkg
ewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5
bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGFyZ3Muc2l6ZSgpICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGRyYXdpbmdD
b250ZXh0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29u
dGV4dDJEOjpDbG9zZVBhdGg6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKSB7
Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3lu
dGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YXJncy5zaXplKCkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBDR0NvbnRleHRDbG9zZVBhdGgoZHJhd2luZ0Nv
bnRleHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM4NzUsMTEgKzM4NDgs
OCBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgICAg
ICAgICAgICAgIENHQ29udGV4dFNldENNWUtTdHJva2VDb2xvcihkcmF3aW5nQ29udGV4dCwgYywg
bSwgeSwgaywgYSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAgICAgT2JqZWN0SW1w
ICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM5MzQsMzAgKzM5
MDQsMjEgQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAg
ICAgICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29sb3IoZHJhd2luZ0NvbnRleHQs
IGMsIG0sIHksIGssIGEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAgICAgIE9iamVj
dEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAg
ICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ29udGV4dDJEOjpTZXRMaW5lV2lkdGg6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUo
KSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCB3ID0gKGZsb2F0KWFy
Z3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRo
IChkcmF3aW5nQ29udGV4dCwgdyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENvbnRleHQyRDo6U2V0TGluZUNhcDogewotICAgICAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpICE9IDEpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIENHTGluZUNhcCBjYXAg
PSBrQ0dMaW5lQ2FwQnV0dDsKICAgICAgICAgICAgIFFTdHJpbmcgY2FwU3RyaW5nID0gYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgICAgICBpZiAoY2Fw
U3RyaW5nID09ICJyb3VuZCIpCkBAIC0zOTY4LDExICszOTI5LDggQEAgVmFsdWVJbXAgKktKUzo6
Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldExpbmVKb2luOiB7Ci0gICAgICAgICAgICBpZiAo
YXJncy5zaXplKCkgIT0gMSkgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRF
eGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgQ0dMaW5lSm9p
biBqb2luID0ga0NHTGluZUpvaW5NaXRlcjsKICAgICAgICAgICAgIFFTdHJpbmcgam9pblN0cmlu
ZyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwogICAgICAgICAg
ICAgaWYgKGpvaW5TdHJpbmcgPT0gInJvdW5kIikKQEAgLTM5ODMsMjEgKzM5NDEsMTUgQEAgVmFs
dWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldE1pdGVyTGltaXQ6IHsKLSAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0
SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICBmbG9hdCBsID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAg
ICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdCAoZHJhd2luZ0NvbnRleHQsIGwpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkZpbGw6IHsKLSAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0
SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChpc0dyYWRpZW50KGNvbnRleHRPYmplY3QtPl9maWxsU3R5
bGUpKSB7CiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShkcmF3aW5nQ29udGV4
dCk7CkBAIC00MDIzLDExICszOTc1LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rp
b246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
b250ZXh0MkQ6OlN0cm9rZTogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsK
LSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50
YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChh
cmdzLnNpemUoKSAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIGlmIChpc0dyYWRpZW50KGNvbnRleHRPYmplY3Qt
Pl9zdHJva2VTdHlsZSkpIHsKICAgICAgICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGRy
YXdpbmdDb250ZXh0KTsKICAgICAgICAgICAgICAgICAKQEAgLTQwNTUsMTEgKzQwMDQsOCBAQCBW
YWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6U2NhbGU6IHsKLSAgICAgICAg
ICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICpl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBm
bG9hdCBzeCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZs
b2F0IHN5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dD
b250ZXh0U2NhbGVDVE0gKGRyYXdpbmdDb250ZXh0LCBzeCwgc3kpOwpAQCAtNDA2NywzMyArNDAx
MywyNCBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6Um90YXRlOiB7
Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewotICAgICAgICAgICAgICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAg
ICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgZmxvYXQgYW5nbGUgPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAg
ICAgICAgICAgICBDR0NvbnRleHRSb3RhdGVDVE0gKGRyYXdpbmdDb250ZXh0LCBhbmdsZSk7CiAg
ICAgICAgICAgICBjb250ZXh0T2JqZWN0LT5fbmVlZHNGbHVzaFJhc3RlckNhY2hlID0gdHJ1ZTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpU
cmFuc2xhdGU6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKSB7Ci0gICAgICAg
ICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3Ip
OwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXpl
KCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvcik7CiAgICAgICAgICAgICBmbG9hdCB0eCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihl
eGVjKTsKICAgICAgICAgICAgIGZsb2F0IHR5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4
ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNIChkcmF3aW5nQ29udGV4dCwg
dHgsIHR5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29u
dGV4dDJEOjpNb3ZlVG86IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKSB7Ci0g
ICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4
RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJn
cy5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFdLT50b051bWJl
cihleGVjKTsKICAgICAgICAgICAgIENHQ29udGV4dE1vdmVUb1BvaW50IChkcmF3aW5nQ29udGV4
dCwgeCwgeSk7CkBAIC00MTAxLDExICs0MDM4LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJE
RnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDb250ZXh0MkQ6OkxpbmVUbzogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9
IDIpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChhcmdzLnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1sw
XS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQgKGRy
YXdpbmdDb250ZXh0LCB4LCB5KTsKQEAgLTQxMTMsMTEgKzQwNDcsOCBAQCBWYWx1ZUltcCAqS0pT
OjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENvbnRleHQyRDo6UXVhZHJhdGljQ3VydmVUbzogewotICAgICAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA0KQorICAgICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIGZs
b2F0IGNweCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZs
b2F0IGNweSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZs
b2F0IHggPSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CkBAIC00MTI3LDExICs0MDU4
LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkJlemllckN1cnZl
VG86IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA2KSB7Ci0gICAgICAgICAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAg
ICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0g
NikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7
CiAgICAgICAgICAgICBmbG9hdCBjcDF4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMp
OwogICAgICAgICAgICAgZmxvYXQgY3AxeSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVj
KTsKICAgICAgICAgICAgIGZsb2F0IGNwMnggPSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhl
Yyk7CkBAIC00MTQzLDExICs0MDcxLDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rp
b246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
b250ZXh0MkQ6OkFyY1RvOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gNSkgewot
ICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRh
eEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFy
Z3Muc2l6ZSgpICE9IDUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
U3ludGF4RXJyb3IpOwogICAgICAgICAgICAgZmxvYXQgeDEgPSAoZmxvYXQpYXJnc1swXS0+dG9O
dW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB5MSA9IChmbG9hdClhcmdzWzFdLT50b051
bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHgyID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVt
YmVyKGV4ZWMpOwpAQCAtNDE1NywxMSArNDA4Miw4IEBAIFZhbHVlSW1wICpLSlM6OkNvbnRleHQy
REZ1bmN0aW9uOjpjYWxsQXMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ29udGV4dDJEOjpBcmM6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA2
KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
U3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYXJncy5zaXplKCkgIT0gNikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0t
PnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFdLT50
b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHIgPSAoZmxvYXQpYXJnc1syXS0+dG9O
dW1iZXIoZXhlYyk7CkBAIC00MTcyLDExICs0MDk0LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4
dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDb250ZXh0MkQ6OlJlY3Q6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAh
PSA0KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYXJncy5zaXplKCkgIT0gNCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFd
LT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHcgPSAoZmxvYXQpYXJnc1syXS0+
dG9OdW1iZXIoZXhlYyk7CkBAIC00MTg1LDIxICs0MTA0LDE1IEBAIFZhbHVlSW1wICpLSlM6OkNv
bnRleHQyREZ1bmN0aW9uOjpjYWxsQXMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ29udGV4dDJEOjpDbGlwOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXpl
KCkgIT0gMCkgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcCAoZHJh
d2luZ0NvbnRleHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIENvbnRleHQyRDo6Q2xlYXJSZWN0OiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkg
IT0gNCkgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShl
eGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJy
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdz
WzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sx
XS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB3ID0gKGZsb2F0KWFyZ3NbMl0t
PnRvTnVtYmVyKGV4ZWMpOwpAQCAtNDIwOSwxMSArNDEyMiw4IEBAIFZhbHVlSW1wICpLSlM6OkNv
bnRleHQyREZ1bmN0aW9uOjpjYWxsQXMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ29udGV4dDJEOjpGaWxsUmVjdDogewotICAgICAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpICE9IDQpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA0KQorICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIGZsb2F0IHggPSAoZmxv
YXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0
KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9hdClh
cmdzWzJdLT50b051bWJlcihleGVjKTsKQEAgLTQyMjYsMTEgKzQxMzYsOCBAQCBWYWx1ZUltcCAq
S0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
b250ZXh0MkQ6OlN0cm9rZVJlY3Q6IHsKICAgICAgICAgICAgIGludCBzaXplID0gYXJncy5zaXpl
KCk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA8IDQpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJ
bXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaXplIDwgNCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9h
dCB4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQg
eSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHcg
PSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CkBAIC00MjQ4LDExICs0MTU1LDggQEAg
VmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICBjYXNlIENv
bnRleHQyRDo6U2V0U2hhZG93OiB7CiAgICAgICAgICAgICBpbnQgbnVtQXJncyA9IGFyZ3Muc2l6
ZSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobnVtQXJncyA8IDMpIHsKLSAgICAg
ICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJv
cik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChudW1Bcmdz
IDwgMykKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
cik7CiAgICAgICAgICAgICBDR1NpemUgb2Zmc2V0OwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBvZmZzZXQud2lkdGggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CkBAIC00MzIx
LDExICs0MjI1LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwog
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZUNNWUsoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgICAgICAg
ICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBDR0NvbG9y
Q3JlYXRlIChjb2xvclNwYWNlLCBjb21wb25lbnRzKTsKQEAgLTQzMzYsMTEgKzQyMzcsOCBAQCBW
YWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6Q2xlYXJTaGFkb3c6IHsKLSAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0
SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IgKGRyYXdpbmdDb250ZXh0LCBDR1NpemVN
YWtlKDAsIDApLCAwLCBuaWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQz
NTIsMTkgKzQyNTAsMTMgQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxB
cwogICAgICAgICAvLyBjb21wb3NpdGUgb3BlcmF0aW9uIGlzIHNwZWNpZmllZCB3aXRoIGdsb2Jh
bENvbXBvc2l0ZU9wZXJhdGlvbgogICAgICAgICAvLyBpbWcgcGFyYW1ldGVyIGNhbiBiZSBhIEph
dmFTY3JpcHQgSW1hZ2UsIDxpbWc+LCBvciBhIDxjYW52YXM+CiAgICAgICAgIGNhc2UgQ29udGV4
dDJEOjpEcmF3SW1hZ2U6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA8IDMpIHsKLSAg
ICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhF
cnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdz
LnNpemUoKSA8IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgZmlyc3Qg
YXJndW1lbnQgaXMgYW4gb2JqZWN0LgogICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGlj
X2Nhc3Q8T2JqZWN0SW1wKj4oYXJnc1swXSk7Ci0gICAgICAgICAgICBpZiAoIW8tPmlzT2JqZWN0
KCkpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxUeXBlRXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIW8tPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIAogICAgICAgICAgICAgZmxvYXQgdyA9IDA7IC8vIHF1aWV0IGluY29y
cmVjdCBnY2MgNC4wIHdhcm5pbmcKICAgICAgICAgICAgIGZsb2F0IGggPSAwOyAvLyBxdWlldCBp
bmNvcnJlY3QgZ2NjIDQuMCB3YXJuaW5nCkBAIC00NDA1LDExICs0Mjk3LDggQEAgVmFsdWVJbXAg
KktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgICAgIHcgPSAoZmxv
YXQpQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgoc291cmNlQ29udGV4dCk7CiAgICAgICAgICAgICAg
ICAgaCA9IChmbG9hdClDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQoc291cmNlQ29udGV4dCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJ
bXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgICAgICAgICAgICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZmxv
YXQgZHgsIGR5LCBkdyA9IHcsIGRoID0gaDsKICAgICAgICAgICAgIGZsb2F0IHN4ID0gMC5mLCBz
eSA9IDAuZiwgc3cgPSB3LCBzaCA9IGg7CkBAIC00NDM0LDExICs0MzIzLDggQEAgVmFsdWVJbXAg
KktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgICAgIGR3ID0gYXJn
c1s3XS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgZGggPSBhcmdzWzhdLT50b051
bWJlcihleGVjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsK
LSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKIAogICAgICAgICAg
ICAgaWYgKCFzb3VyY2VDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgUVBhaW50ZXIgcDsKQEAg
LTQ0ODgsMTcgKzQzNzQsMTEgQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNh
bGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0
MkQ6OkRyYXdJbWFnZUZyb21SZWN0OiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0g
MTApIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChhcmdzLnNpemUoKSAhPSAxMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBPYmplY3RJbXAgKm8gPSBzdGF0aWNf
Y2FzdDxPYmplY3RJbXAqPihhcmdzWzBdKTsKLSAgICAgICAgICAgIGlmICghby0+aXNPYmplY3Qo
KSB8fCAhby0+aW5oZXJpdHMoJkltYWdlOjppbmZvKSkgewotICAgICAgICAgICAgICAgIE9iamVj
dEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgICAgICAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghby0+aXNPYmplY3QoKSB8fCAhby0+aW5o
ZXJpdHMoJkltYWdlOjppbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwogICAgICAgICAgICAgSW1hZ2UgKmkgPSBzdGF0aWNfY2FzdDxJbWFn
ZSo+KG8pOwogICAgICAgICAgICAgZmxvYXQgc3ggPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsK
ICAgICAgICAgICAgIGZsb2F0IHN5ID0gYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CkBAIC00NTI0
LDMyICs0NDA0LDIzIEBAIFZhbHVlSW1wICpLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsQXMK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpT
ZXRBbHBoYTogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgICAg
ICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7
Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzLnNpemUo
KSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVy
cm9yKTsKICAgICAgICAgICAgIGZsb2F0IGEgPSAgKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4
ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0QWxwaGEgKGRyYXdpbmdDb250ZXh0LCBhKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpT
ZXRDb21wb3NpdGVPcGVyYXRpb246IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAx
KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
U3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYXJncy5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBRU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9y
ID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgICAg
ICBRUGFpbnRlcjo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uIChkcmF3aW5nQ29udGV4dCxjb21wb3Np
dGVPcGVyYXRvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgY2FzZSBDb250ZXh0MkQ6OkNyZWF0ZUxpbmVhckdyYWRpZW50OiB7Ci0gICAgICAgICAg
ICBpZiAoYXJncy5zaXplKCkgIT0gNCkgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgZmxv
YXQgeDAgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHkwID0g
YXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB4MSA9IGFyZ3NbMl0t
PnRvTnVtYmVyKGV4ZWMpOwpAQCAtNDU1OSwxMSArNDQzMCw4IEBAIFZhbHVlSW1wICpLSlM6OkNv
bnRleHQyREZ1bmN0aW9uOjpjYWxsQXMKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2Fz
ZSBDb250ZXh0MkQ6OkNyZWF0ZVJhZGlhbEdyYWRpZW50OiB7Ci0gICAgICAgICAgICBpZiAoYXJn
cy5zaXplKCkgIT0gNikgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDYpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgZmxvYXQgeDAgPSBh
cmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHkwID0gYXJnc1sxXS0+
dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCByMCA9IGFyZ3NbMl0tPnRvTnVtYmVy
KGV4ZWMpOwpAQCAtNDU3NSwxNyArNDQ0MywxMSBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0MkRG
dW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgQ29udGV4
dDJEOjpDcmVhdGVQYXR0ZXJuOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikg
ewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5
bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wKj4oYXJnc1swXSk7Ci0gICAgICAgICAgICBpZiAoIW8tPmlzT2JqZWN0KCkgfHwg
IW8tPmluaGVyaXRzKCZJbWFnZTo6aW5mbykpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAg
KmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgICAgICAgICAgICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW8tPmlzT2JqZWN0KCkgfHwgIW8tPmluaGVyaXRz
KCZJbWFnZTo6aW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKICAgICAgICAgICAgIGludCByZXBldGl0aW9uVHlwZSA9IEltYWdlUGF0dGVy
bjo6UmVwZWF0OwogICAgICAgICAgICAgUVN0cmluZyByZXBldGl0aW9uU3RyaW5nID0gYXJnc1sx
XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgICAgICBpZiAocmVw
ZXRpdGlvblN0cmluZyA9PSAicmVwZWF0LXgiKQpAQCAtNDgzOCwxMSArNDcwMCw4IEBAIHZvaWQg
Q29udGV4dDJEOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKICAgICAgICAgICAgICAgICAvLyBD
RyBkb2Vzbid0IGhhdmUgdGhlIG5vdGlvbiBvZiBhIHNldHRpbmcgYSBzdHJva2UgZ3JhZGllbnQu
CiAgICAgICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4o
dmFsdWUpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghby0+aXNPYmpl
Y3QoKSB8fCAhKG8tPmluaGVyaXRzKCZHcmFkaWVudDo6aW5mbykgfHwgby0+aW5oZXJpdHMoJklt
YWdlUGF0dGVybjo6aW5mbykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghby0+aXNPYmplY3QoKSB8fCAhKG8t
PmluaGVyaXRzKCZHcmFkaWVudDo6aW5mbykgfHwgby0+aW5oZXJpdHMoJkltYWdlUGF0dGVybjo6
aW5mbykpKQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDg1OCwx
MSArNDcxNyw4IEBAIHZvaWQgQ29udGV4dDJEOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKICAg
ICAgICAgICAgICAgICAvLyBDRyBkb2Vzbid0IGhhdmUgdGhlIG5vdGlvbiBvZiBzZXR0aW5nIGEg
ZmlsbCBncmFkaWVudC4KICAgICAgICAgICAgICAgICBPYmplY3RJbXAgKm8gPSBzdGF0aWNfY2Fz
dDxPYmplY3RJbXAqPih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKG8tPnR5cGUoKSAhPSBPYmplY3RUeXBlIHx8ICEoby0+aW5oZXJpdHMoJkdyYWRpZW50Ojpp
bmZvKSB8fCBvLT5pbmhlcml0cygmSW1hZ2VQYXR0ZXJuOjppbmZvKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsK
LSAgICAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KCFvLT5pc09iamVjdCgpIHx8ICEoby0+aW5oZXJpdHMoJkdyYWRpZW50OjppbmZvKSB8fCBvLT5p
bmhlcml0cygmSW1hZ2VQYXR0ZXJuOjppbmZvKSkpCisgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgICAgICAgICAgICAgIC8vIEdyYWRpZW50cyBh
bmQgaW1hZ2UgcGF0dGVybnMgYXJlIGNvbnN0cnVjdGVkIHdoZW4gbmVlZGVkIGR1cmluZyBmaWxs
IGFuZCBzdHJva2Ugb3BlcmF0aW9ucy4KICAgICAgICAgICAgIH0KQEAgLTUxMTIsMjEgKzQ5Njgs
MTUgQEAgSU1QTEVNRU5UX1BST1RPRlVOQyhHcmFkaWVudEZ1bmN0aW9uKQogCiBWYWx1ZUltcCAq
R3JhZGllbnRGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmR3JhZGllbnQ6OmluZm8pKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZHcmFkaWVudDo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CiAKICAgICBHcmFkaWVudCAqZ3JhZGllbnQgPSBzdGF0aWNfY2FzdDxLSlM6OkdyYWRp
ZW50ICo+KHRoaXNPYmopOwogCiAgICAgc3dpdGNoIChpZCkgewogICAgICAgICBjYXNlIEdyYWRp
ZW50OjpBZGRDb2xvclN0b3A6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKSB7
Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3lu
dGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YXJncy5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBTeW50YXhFcnJvcik7CiAKICAgICAgICAgICAgIFFDb2xvciBjb2xvciA9IGNvbG9yRnJvbVZh
bHVlKGV4ZWMsIGFyZ3NbMV0pOwogICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCAo
KGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBjb2xvci5yZWQoKS8yNTUuZiwgY29sb3Iu
Z3JlZW4oKS8yNTUuZiwgY29sb3IuYmx1ZSgpLzI1NS5mLCBjb2xvci5hbHBoYSgpLzI1NS5mKTsK
SW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjMzCmRpZmYgLXAgLXUgLXIxLjMzIFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfbmF2aWdhdG9yLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0
b3IuY3BwCTggQXVnIDIwMDUgMDQ6MDc6NDEgLTAwMDAJMS4zMworKysgV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19uYXZpZ2F0b3IuY3BwCTggQXVnIDIwMDUgMTU6NDQ6NTggLTAwMDAKQEAgLTU4MCwx
MSArNTgwLDggQEAgVmFsdWVJbXAgKlBsdWdpbnNGdW5jOjpjYWxsQXNGdW5jdGlvbihFeAogCiBW
YWx1ZUltcCAqTmF2aWdhdG9yRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJikKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmS0pTOjpOYXZpZ2F0b3I6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
LSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6TmF2
aWdhdG9yOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwog
ICBOYXZpZ2F0b3IgKm5hdiA9IHN0YXRpY19jYXN0PE5hdmlnYXRvciAqPih0aGlzT2JqKTsKICAg
Ly8gamF2YUVuYWJsZWQoKQogICByZXR1cm4gQm9vbGVhbihuYXYtPnBhcnQoKS0+amF2YUVuYWJs
ZWQoKSk7CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3JhbmdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5nZS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtcCAtdSAtcjEuMTQgV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19yYW5nZS5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuY3BwCTgg
QXVnIDIwMDUgMDQ6MDc6NDEgLTAwMDAJMS4xNAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19y
YW5nZS5jcHAJOCBBdWcgMjAwNSAxNTo0NDo1OCAtMDAwMApAQCAtMTEzLDExICsxMTMsOCBAQCBW
YWx1ZUltcCAqRE9NUmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAKIFZhbHVlSW1wICpET01S
YW5nZVByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMo
JktKUzo6RE9NUmFuZ2U6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICBy
ZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NUmFuZ2U6
OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIFJhbmdl
SW1wbCAmcmFuZ2UgPSAqc3RhdGljX2Nhc3Q8RE9NUmFuZ2UgKj4odGhpc09iaiktPmltcGwoKTsK
ICAgVmFsdWVJbXAgKnJlc3VsdCA9IFVuZGVmaW5lZCgpOwogICBpbnQgZXhjZXB0aW9uID0gMDsK
SW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfdHJhdmVyc2FsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJz
YWwuY3BwCTggQXVnIDIwMDUgMDQ6MDc6NDEgLTAwMDAJMS4xNQorKysgV2ViQ29yZS9raHRtbC9l
Y21hL2tqc190cmF2ZXJzYWwuY3BwCTggQXVnIDIwMDUgMTU6NDQ6NTkgLTAwMDAKQEAgLTk3LDEx
ICs5Nyw4IEBAIFZhbHVlSW1wICpET01Ob2RlSXRlcmF0b3I6OmdldFZhbHVlUHJvcGUKIAogVmFs
dWVJbXAgKkRPTU5vZGVJdGVyYXRvclByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
ICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJikKIHsKLSAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmS0pTOjpET01Ob2RlSXRlcmF0b3I6OmluZm8pKSB7Ci0gICAgT2JqZWN0
SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRF
eGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5o
ZXJpdHMoJktKUzo6RE9NTm9kZUl0ZXJhdG9yOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihl
eGVjKTsKICAgTm9kZUl0ZXJhdG9ySW1wbCAmbm9kZUl0ZXJhdG9yID0gKnN0YXRpY19jYXN0PERP
TU5vZGVJdGVyYXRvciAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CkBAIC0x
ODYsMTEgKzE4Myw4IEBAIERPTU5vZGVGaWx0ZXI6On5ET01Ob2RlRmlsdGVyKCkKIAogVmFsdWVJ
bXAgKkRPTU5vZGVGaWx0ZXJQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZLSlM6OkRPTU5vZGVGaWx0ZXI6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1w
ICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNl
cHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJktKUzo6RE9NTm9kZUZpbHRlcjo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKICAgTm9kZUZpbHRlckltcGwgJm5vZGVGaWx0ZXIgPSAqc3RhdGljX2Nh
c3Q8RE9NTm9kZUZpbHRlciAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAg
ICAgY2FzZSBET01Ob2RlRmlsdGVyOjpBY2NlcHROb2RlOgpAQCAtMjg1LDExICsyNzksOCBAQCB2
b2lkIERPTVRyZWVXYWxrZXI6OnB1dChFeGVjU3RhdGUgKmV4ZWMsCiAKIFZhbHVlSW1wICpET01U
cmVlV2Fsa2VyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZLSlM6OkRPTVRyZWVXYWxrZXI6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
LSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9N
VHJlZVdhbGtlcjo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKICAgVHJlZVdhbGtlckltcGwgJnRyZWVXYWxrZXIgPSAqc3RhdGljX2Nhc3Q8RE9NVHJlZVdh
bGtlciAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01U
cmVlV2Fsa2VyOjpQYXJlbnROb2RlOgpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9r
anNfdmlld3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtcjEuOSBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tq
c192aWV3cy5jcHAJOCBBdWcgMjAwNSAwNDowNzo0MSAtMDAwMAkxLjkKKysrIFdlYkNvcmUva2h0
bWwvZWNtYS9ranNfdmlld3MuY3BwCTggQXVnIDIwMDUgMTU6NDQ6NTkgLTAwMDAKQEAgLTY3LDEx
ICs2Nyw4IEBAIGJvb2wgRE9NQWJzdHJhY3RWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QKIAogVmFs
dWVJbXAgKkRPTUFic3RyYWN0Vmlld0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZET01BYnN0cmFjdFZpZXc6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICpl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRp
b24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMo
JkRPTUFic3RyYWN0Vmlldzo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKICAgQWJzdHJhY3RWaWV3SW1wbCAmYWJzdHJhY3RWaWV3ID0gKnN0YXRpY19jYXN0
PERPTUFic3RyYWN0VmlldyAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAg
ICAgY2FzZSBET01BYnN0cmFjdFZpZXc6OkdldENvbXB1dGVkU3R5bGU6IHsKSW5kZXg6IFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE3MApkaWZmIC1wIC11IC1yMS4xNzAgV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cu
Y3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJOCBBdWcgMjAwNSAwNDow
Nzo0MSAtMDAwMAkxLjE3MAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwCTgg
QXVnIDIwMDUgMTU6NDU6MDUgLTAwMDAKQEAgLTM1NSw3ICszNTUsNyBAQCBXaW5kb3c6On5XaW5k
b3coKQogICBkZWxldGUgd2lucTsKIH0KIAotS0pTOjpJbnRlcnByZXRlciAqV2luZG93OjppbnRl
cnByZXRlcigpIGNvbnN0CitJbnRlcnByZXRlciAqV2luZG93OjppbnRlcnByZXRlcigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtKU1Byb3h5Ojpwcm94eSggbV9wYXJ0ICktPmludGVycHJldGVyKCk7
CiB9CkBAIC0zNjksNyArMzY5LDcgQEAgV2luZG93ICpXaW5kb3c6OnJldHJpZXZlV2luZG93KEtI
VE1MUGFydAogICB7CiAgICAgYXNzZXJ0KG9iaik7CiAjaWZuZGVmIFFXUwotICAgIC8vYXNzZXJ0
KCBkeW5hbWljX2Nhc3Q8S0pTOjpXaW5kb3cqPihvYmopICk7IC8vIHR5cGUgY2hlY2tpbmcKKyAg
ICAvL2Fzc2VydCggZHluYW1pY19jYXN0PFdpbmRvdyo+KG9iaikgKTsgLy8gdHlwZSBjaGVja2lu
ZwogI2VuZGlmCiAgIH0KICNlbmRpZgpAQCAtMzgzLDkgKzM4Myw5IEBAIFdpbmRvdyAqV2luZG93
OjpyZXRyaWV2ZUFjdGl2ZShFeGVjU3RhdGUKICAgVmFsdWVJbXAgKmltcCA9IGV4ZWMtPmR5bmFt
aWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKTsKICAgYXNzZXJ0KCBpbXAgKTsKICNpZm5k
ZWYgUVdTCi0gIC8vYXNzZXJ0KCBkeW5hbWljX2Nhc3Q8S0pTOjpXaW5kb3cqPihpbXApICk7Cisg
IC8vYXNzZXJ0KCBkeW5hbWljX2Nhc3Q8V2luZG93Kj4oaW1wKSApOwogI2VuZGlmCi0gIHJldHVy
biBzdGF0aWNfY2FzdDxLSlM6OldpbmRvdyo+KGltcCk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxX
aW5kb3cqPihpbXApOwogfQogCiBWYWx1ZUltcCAqV2luZG93OjpyZXRyaWV2ZShLSFRNTFBhcnQg
KnApCkBAIC0xMjk3LDcgKzEyOTcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRMb2FkQXNFbXB0eURv
Y3VtZW50KGNvCiAgIHJldHVybiB1cmwucHJvdG9jb2woKS5sb3dlcigpID09ICJhYm91dCIgfHwg
dXJsLmlzRW1wdHkoKTsKIH0KIAotYm9vbCBXaW5kb3c6OmlzU2FmZVNjcmlwdCAoY29uc3QgS0pT
OjpTY3JpcHRJbnRlcnByZXRlciAqb3JpZ2luLCBjb25zdCBLSlM6OlNjcmlwdEludGVycHJldGVy
ICp0YXJnZXQpCitib29sIFdpbmRvdzo6aXNTYWZlU2NyaXB0KGNvbnN0IFNjcmlwdEludGVycHJl
dGVyICpvcmlnaW4sIGNvbnN0IFNjcmlwdEludGVycHJldGVyICp0YXJnZXQpCiB7CiAgICAgaWYg
KG9yaWdpbiA9PSB0YXJnZXQpCiAJcmV0dXJuIHRydWU7CkBAIC0xMzYwLDcgKzEzNjAsNyBAQCBi
b29sIFdpbmRvdzo6aXNTYWZlU2NyaXB0KEV4ZWNTdGF0ZSAqZXhlCiAgICAga2REZWJ1Zyg2MDcw
KSA8PCAiV2luZG93Ojppc1NhZmVTY3JpcHQ6IGFjY2Vzc2luZyBkZWxldGVkIHBhcnQgISIgPDwg
ZW5kbDsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgS0hUTUxQYXJ0ICphY3RpdmVQYXJ0ID0g
c3RhdGljX2Nhc3Q8S0pTOjpTY3JpcHRJbnRlcnByZXRlciAqPiggZXhlYy0+ZHluYW1pY0ludGVy
cHJldGVyKCkgKS0+cGFydCgpOworICBLSFRNTFBhcnQgKmFjdGl2ZVBhcnQgPSBzdGF0aWNfY2Fz
dDxTY3JpcHRJbnRlcnByZXRlciAqPiggZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkgKS0+cGFy
dCgpOwogICBpZiAoIWFjdGl2ZVBhcnQpIHsKICAgICBrZERlYnVnKDYwNzApIDw8ICJXaW5kb3c6
OmlzU2FmZVNjcmlwdDogY3VycmVudCBpbnRlcnByZXRlcidzIHBhcnQgaXMgMEwhIiA8PCBlbmRs
OwogICAgIHJldHVybiBmYWxzZTsKQEAgLTE0ODQsNyArMTQ4NCw3IEBAIEpTTGF6eUV2ZW50TGlz
dGVuZXIgKldpbmRvdzo6Z2V0SlNMYXp5RXYKIAogdm9pZCBXaW5kb3c6OmNsZWFyKCBFeGVjU3Rh
dGUgKmV4ZWMgKQogewotICBLSlM6OkludGVycHJldGVyOjpsb2NrKCk7CisgIEludGVycHJldGVy
Ojpsb2NrKCk7CiAgIGlmIChtX3JldHVyblZhbHVlU2xvdCkKICAgICBpZiAoVmFsdWVJbXAgKnJl
dHVyblZhbHVlID0gZ2V0RGlyZWN0KCJyZXR1cm5WYWx1ZSIpKQogICAgICAgKm1fcmV0dXJuVmFs
dWVTbG90ID0gcmV0dXJuVmFsdWU7CkBAIC0xNDkyLDEzICsxNDkyLDEzIEBAIHZvaWQgV2luZG93
OjpjbGVhciggRXhlY1N0YXRlICpleGVjICkKICAgZGVsZXRlIHdpbnE7CiAgIHdpbnEgPSBuZXcg
V2luZG93UU9iamVjdCh0aGlzKTsKICAgLy8gR2V0IHJpZCBvZiBldmVyeXRoaW5nLCB0aG9zZSB1
c2VyIHZhcnMgY291bGQgaG9sZCByZWZlcmVuY2VzIHRvIERPTSBub2RlcwotICBkZWxldGVBbGxQ
cm9wZXJ0aWVzKCBleGVjICk7CisgIGNsZWFyUHJvcGVydGllcygpOwogICAvLyBSZWFsbHkgZGVs
ZXRlIHRob3NlIHByb3BlcnRpZXMsIHNvIHRoYXQgdGhlIERPTSBub2RlcyBnZXQgZGVyZWYnZWQK
LSAgS0pTOjpDb2xsZWN0b3I6OmNvbGxlY3QoKTsKKyAgQ29sbGVjdG9yOjpjb2xsZWN0KCk7CiAg
IC8vIE5vdyByZWNyZWF0ZSBhIHdvcmtpbmcgZ2xvYmFsIG9iamVjdCBmb3IgdGhlIG5leHQgVVJM
IHRoYXQgd2lsbCB1c2UgdXMKLSAgS0pTOjpJbnRlcnByZXRlciAqaW50ZXJwcmV0ZXIgPSBLSlNQ
cm94eTo6cHJveHkoIG1fcGFydCApLT5pbnRlcnByZXRlcigpOworICBJbnRlcnByZXRlciAqaW50
ZXJwcmV0ZXIgPSBLSlNQcm94eTo6cHJveHkoIG1fcGFydCApLT5pbnRlcnByZXRlcigpOwogICBp
bnRlcnByZXRlci0+aW5pdEdsb2JhbE9iamVjdCgpOwotICBLSlM6OkludGVycHJldGVyOjp1bmxv
Y2soKTsKKyAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogfQogCiB2b2lkIFdpbmRvdzo6c2V0Q3Vy
cmVudEV2ZW50KEV2ZW50SW1wbCAqZXZ0KQpAQCAtMTUwOSwxMSArMTUwOSw4IEBAIHZvaWQgV2lu
ZG93OjpzZXRDdXJyZW50RXZlbnQoRXZlbnRJbXBsICoKIAogVmFsdWVJbXAgKldpbmRvd0Z1bmM6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZXaW5kb3c6OmluZm8p
KSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsK
LSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJldpbmRvdzo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yKTsKICAgV2luZG93ICp3aW5kb3cgPSBzdGF0aWNfY2FzdDxXaW5k
b3cgKj4odGhpc09iaik7CiAgIFFTdHJpbmcgc3RyLCBzdHIyOwogCkBAIC0yMDYxLDcgKzIwNTgs
NyBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShXaW5kb3cgKndpCiAgICAgICBRX0FT
U0VSVCggd2luZG93LT5tX3BhcnQgKTsKICAgICAgIGlmICggd2luZG93LT5tX3BhcnQgKQogICAg
ICAgewotICAgICAgICBLSlM6OkludGVycHJldGVyICppbnRlcnByZXRlciA9IEtKU1Byb3h5Ojpw
cm94eSggd2luZG93LT5tX3BhcnQgKS0+aW50ZXJwcmV0ZXIoKTsKKyAgICAgICAgSW50ZXJwcmV0
ZXIgKmludGVycHJldGVyID0gS0pTUHJveHk6OnByb3h5KCB3aW5kb3ctPm1fcGFydCApLT5pbnRl
cnByZXRlcigpOwogICAgICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBpbnRlcnByZXRlci0+Z2xvYmFs
RXhlYygpOwogICAgICAgICBRX0FTU0VSVCggd2luZG93ID09IGludGVycHJldGVyLT5nbG9iYWxP
YmplY3QoKSApOwogICAgICAgICBPYmplY3RJbXAgKm9iaiggd2luZG93ICk7CkBAIC0yMTQ3LDcg
KzIxNDQsNyBAQCBRTWFwPGludCwgU2NoZWR1bGVkQWN0aW9uKj4gKldpbmRvd1FPYmplCiB7CiAg
ICAgUU1hcEl0ZXJhdG9yPGludCxTY2hlZHVsZWRBY3Rpb24qPiBpdDsKIAotICAgIFFNYXA8aW50
LCBLSlM6OlNjaGVkdWxlZEFjdGlvbio+KnBhdXNlZEFjdGlvbnMgPSBuZXcgUU1hcDxpbnQsIEtK
Uzo6U2NoZWR1bGVkQWN0aW9uKj47CisgICAgUU1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+KnBh
dXNlZEFjdGlvbnMgPSBuZXcgUU1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+OwogICAgIGZvciAo
aXQgPSBzY2hlZHVsZWRBY3Rpb25zLmJlZ2luKCk7IGl0ICE9IHNjaGVkdWxlZEFjdGlvbnMuZW5k
KCk7ICsraXQpIHsKICAgICAgICAgaW50IHRpbWVySWQgPSBpdC5rZXkoKTsKICAgICAgICAgcGF1
c2VUaW1lciAodGltZXJJZCwga2V5KTsKQEAgLTI0NjksMTEgKzI0NjYsOCBAQCBVU3RyaW5nIExv
Y2F0aW9uOjp0b1N0cmluZyhFeGVjU3RhdGUgKikgCiAKIFZhbHVlSW1wICpMb2NhdGlvbkZ1bmM6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZMb2NhdGlvbjo6aW5m
bykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3Ip
OwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAg
aWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTG9jYXRpb246OmluZm8pKQorICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIExvY2F0aW9uICpsb2NhdGlvbiA9IHN0YXRpY19j
YXN0PExvY2F0aW9uICo+KHRoaXNPYmopOwogICBLSFRNTFBhcnQgKnBhcnQgPSBsb2NhdGlvbi0+
cGFydCgpOwogICBpZiAocGFydCkgewpAQCAtMjYyMCwxOSArMjYxNCwxMyBAQCBWYWx1ZUltcCAq
U2VsZWN0aW9uOjp0b1ByaW1pdGl2ZShFeGVjU3RhCiAKIFVTdHJpbmcgU2VsZWN0aW9uOjp0b1N0
cmluZyhFeGVjU3RhdGUgKikgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFydC0+c2VsZWN0aW9uKCku
aXNSYW5nZSgpKQotICAgICAgICByZXR1cm4gVVN0cmluZygiIik7Ci0gICAgaW50IGV4Y2VwdGlv
biA9IDA7Ci0gICAgcmV0dXJuIFVTdHJpbmcobV9wYXJ0LT5zZWxlY3Rpb24oKS50b1JhbmdlKCkt
PnRvU3RyaW5nKGV4Y2VwdGlvbikpOworICAgIHJldHVybiBVU3RyaW5nKG1fcGFydC0+c2VsZWN0
ZWRUZXh0KCkpOwogfQogCiBWYWx1ZUltcCAqU2VsZWN0aW9uRnVuYzo6Y2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7
Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmU2VsZWN0aW9uOjppbmZvKSkgewotICAgICAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Cisg
ICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmU2VsZWN0aW9uOjppbmZvKSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBTZWxlY3Rpb24gKnNlbGVjdGlv
biA9IHN0YXRpY19jYXN0PFNlbGVjdGlvbiAqPih0aGlzT2JqKTsKICAgICBLSFRNTFBhcnQgKnBh
cnQgPSBzZWxlY3Rpb24tPnBhcnQoKTsKICAgICBpZiAocGFydCkgewpAQCAtMjY4OCw3ICsyNjc2
LDcgQEAgVmFsdWVJbXAgKlNlbGVjdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKAogICAgICAgICAg
ICAgICAgICAgICBncmFudWxhcml0eSA9IGtodG1sOjpXT1JEOwogICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGdyYW51bGFyaXR5U3RyaW5nID09ICJsaW5lIikKICAgICAgICAgICAgICAgICAgICAg
Z3JhbnVsYXJpdHkgPSBraHRtbDo6TElORTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChncmFu
dWxhcml0eVN0cmluZyA9PSAicGFyZ3JhcGgiKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGdy
YW51bGFyaXR5U3RyaW5nID09ICJwYXJhZ3JhcGgiKQogICAgICAgICAgICAgICAgICAgICBncmFu
dWxhcml0eSA9IGtodG1sOjpQQVJBR1JBUEg7CiAgICAgICAgICAgICAgICAgcy5tb2RpZnkoYWx0
ZXIsIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgICAgIHBhcnQtPnNldFNl
bGVjdGlvbihzKTsKQEAgLTI3OTcsMTEgKzI3ODUsOCBAQCBVU3RyaW5nIEhpc3Rvcnk6OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqZXhlCiAKIFZhbHVlSW1wICpIaXN0b3J5RnVuYzo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkhpc3Rvcnk6OmluZm8pKSB7Ci0gICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+
aW5oZXJpdHMoJkhpc3Rvcnk6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgIEhpc3RvcnkgKmhpc3RvcnkgPSBzdGF0aWNfY2FzdDxIaXN0b3J5ICo+KHRo
aXNPYmopOwogCiAgIGludCBzdGVwczsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRw
cmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWNtYS94bWxodHRwcmVxdWVzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAt
cCAtdSAtcjEuMzUgV2ViQ29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcAotLS0gV2Vi
Q29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjQyIC0w
MDAwCTEuMzUKKysrIFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAJOCBBdWcg
MjAwNSAxNTo0NTowNiAtMDAwMApAQCAtNjU0LDExICs2NTQsOCBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpjYW5jZWxSZXF1ZXN0cyhET006CiAKIFZhbHVlSW1wICpYTUxIdHRwUmVxdWVzdFByb3Rv
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJlhNTEh0dHBS
ZXF1ZXN0OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVy
cjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZYTUxIdHRwUmVxdWVzdDo6aW5mbykp
CisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICBYTUxIdHRwUmVx
dWVzdCAqcmVxdWVzdCA9IHN0YXRpY19jYXN0PFhNTEh0dHBSZXF1ZXN0ICo+KHRoaXNPYmopOwog
CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEveG1sc2VyaWFsaXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS94bWxzZXJpYWxpemVyLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUgV2ViQ29yZS9raHRtbC9l
Y21hL3htbHNlcmlhbGl6ZXIuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEveG1sc2VyaWFsaXpl
ci5jcHAJOCBBdWcgMjAwNSAwNDowNzo0MiAtMDAwMAkxLjUKKysrIFdlYkNvcmUva2h0bWwvZWNt
YS94bWxzZXJpYWxpemVyLmNwcAk4IEF1ZyAyMDA1IDE1OjQ1OjA2IC0wMDAwCkBAIC03MiwxMSAr
NzIsOCBAQCBYTUxTZXJpYWxpemVyOjpYTUxTZXJpYWxpemVyKEV4ZWNTdGF0ZSAqCiAKIFZhbHVl
SW1wICpYTUxTZXJpYWxpemVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmWE1MU2VyaWFsaXplcjo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
WE1MU2VyaWFsaXplcjo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKIAogICBzd2l0Y2ggKGlkKSB7CiAgIGNhc2UgWE1MU2VyaWFsaXplcjo6U2VyaWFsaXpl
VG9TdHJpbmc6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3394</attachid>
            <date>2005-08-14 22:53:42 -0700</date>
            <delta_ts>2005-08-15 15:21:51 -0700</delta_ts>
            <desc>adds new throwError function, uses it, other cleanup (merged with TOT)</desc>
            <filename>ThrowErrorAndCleanupPatch.txt</filename>
            <type>text/plain</type>
            <size>152103</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNvYmplY3Qu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXAgLXUgLXIxLjIwIEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL05QX2pzb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvTlBfanNvYmplY3QuY3BwCTggQXVnIDIwMDUgMDQ6MDc6MjIgLTAwMDAJMS4yMAorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNvYmplY3QuY3BwCTE1IEF1ZyAyMDA1IDA1OjUzOjU2
IC0wMDAwCkBAIC0zOTcsMTQgKzM5NywxMyBAQCBib29sIF9OUE5fSGFzTWV0aG9kKE5QUCBucHAs
IE5QT2JqZWN0ICpvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIF9OUE5fU2V0RXhjZXB0
aW9uIChOUE9iamVjdCAqbywgY29uc3QgTlBVVEY4ICptZXNzYWdlKQordm9pZCBfTlBOX1NldEV4
Y2VwdGlvbihOUE9iamVjdCAqbywgY29uc3QgTlBVVEY4ICptZXNzYWdlKQogewogICAgIGlmIChv
LT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewogICAgICAgICBKYXZhU2NyaXB0T2Jq
ZWN0ICpvYmogPSAoSmF2YVNjcmlwdE9iamVjdCAqKW87IAogICAgICAgICBFeGVjU3RhdGUgKmV4
ZWMgPSBvYmotPmV4ZWN1dGlvbkNvbnRleHQtPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsK
ICAgICAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICAgICAgT2JqZWN0SW1wICplcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgbWVzc2FnZSk7Ci0gICAgICAgIGV4ZWMt
PnNldEV4Y2VwdGlvbiAoZXJyKTsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJy
b3IsIG1lc3NhZ2UpOwogICAgICAgICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAgICAgfQogfQpJ
bmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtcCAtdSAtcjEuMzAgSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgJOCBBdWcg
MjAwNSAwNDowNzoyMiAtMDAwMAkxLjMwCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50
aW1lLmgJMTUgQXVnIDIwMDUgMDU6NTM6NTYgLTAwMDAKQEAgLTI5LDExICsyOSw4IEBACiAjaW5j
bHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAidmFsdWUuaCIKIAotbmFtZXNwYWNlIEtKUyAKLXsK
LQotbmFtZXNwYWNlIEJpbmRpbmdzCi17CituYW1lc3BhY2UgS0pTICB7CituYW1lc3BhY2UgQmlu
ZGluZ3MgewogCiBjbGFzcyBJbnN0YW5jZTsKIGNsYXNzIE1ldGhvZDsKQEAgLTQ3LDcgKzQ0LDcg
QEAgY2xhc3MgUGFyYW1ldGVyCiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBSdW50aW1lVHlwZSB0
eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgflBhcmFtZXRlcigpIHt9OworICAgIHZpcnR1
YWwgflBhcmFtZXRlcigpIHt9CiB9OwogCiAvLyBGSVhNRTogIENvbnN0cnVjdG9yIHNob3VsZCBi
ZSByZW1vdmVkIGZyb20gYWJzdHJhY3QgcnVudGltZSBjbGFzc2VzCkBAIC0xMDIsNyArOTksNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGxvbmcgbnVtUGFyYW1ldGVycygpIGNvbnN0ID0gMDsK
ICAgICAgICAgCi0gICAgdmlydHVhbCB+TWV0aG9kKCkge307CisgICAgdmlydHVhbCB+TWV0aG9k
KCkge30KIH07CiAKIGNsYXNzIENsYXNzCkBAIC0xNDAsNyArMTM3LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkICpjcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9yVmFsdWUoRXhlY1N0YXRlICpl
eGVjLCBCaW5kaW5nTGFuZ3VhZ2UgbGFuZ3VhZ2UsIE9iamVjdEltcCAqdmFsdWUsIGNvbnN0IFJv
b3RPYmplY3QgKm9yaWdpbiwgY29uc3QgUm9vdE9iamVjdCAqY3VycmVudCk7CiAgICAgc3RhdGlj
IE9iamVjdEltcCAqY3JlYXRlUnVudGltZU9iamVjdChCaW5kaW5nTGFuZ3VhZ2UgbGFuZ3VhZ2Us
IHZvaWQgKm5hdGl2ZUluc3RhbmNlLCBjb25zdCBSb290T2JqZWN0ICpyID0gMCk7CiAKLSAgICBJ
bnN0YW5jZSgpIDogX2V4ZWN1dGlvbkNvbnRleHQoMCkge307CisgICAgSW5zdGFuY2UoKSA6IF9l
eGVjdXRpb25Db250ZXh0KDApIHt9CiAgICAgCiAgICAgSW5zdGFuY2UoY29uc3QgSW5zdGFuY2Ug
Jm90aGVyKTsKIApAQCAtMTQ5LDIzICsxNDYsMjMgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIGZ1
bmN0aW9ucyBhcmUgY2FsbGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG1haW4gZW50cnkgcG9pbnRz
IGludG8KICAgICAvLyB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9ucy4gIFRoZXkgY2FuIGJlIHVz
ZWQgdG8gZXN0YWJsaXNoIGFuZCBjbGVhbnVwCiAgICAgLy8gYW55IG5lZWRlZCBzdGF0ZS4KLSAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW4oKSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kKCkge307Cisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZW5kKCkge30KICAg
ICAKICAgICB2aXJ0dWFsIENsYXNzICpnZXRDbGFzcygpIGNvbnN0ID0gMDsKICAgICAKICAgICB2
aXJ0dWFsIFZhbHVlSW1wICpnZXRWYWx1ZU9mRmllbGQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBG
aWVsZCAqYUZpZWxkKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlSW1wICpnZXRWYWx1ZU9mVW5k
ZWZpbmVkRmllbGQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwg
VHlwZSBoaW50KSBjb25zdCB7IHJldHVybiBVbmRlZmluZWQoKTsgfTsKKyAgICB2aXJ0dWFsIFZh
bHVlSW1wICpnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eSwgVHlwZSBoaW50KSBjb25zdCB7IHJldHVybiBVbmRlZmluZWQo
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mRmllbGQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBGaWVsZCAqYUZpZWxkLCBWYWx1ZUltcCAqYVZhbHVlKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNTZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoKSB7IHJldHVybiBmYWxzZTsg
fTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHksIFZhbHVlSW1wICphVmFsdWUpIHt9Owor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCgpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5LCBWYWx1ZUltcCAqYVZh
bHVlKSB7fQogICAgIAogICAgIHZpcnR1YWwgVmFsdWVJbXAgKmludm9rZU1ldGhvZChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZCwgY29uc3QgTGlzdCAmYXJncykgPSAw
OwogICAgIHZpcnR1YWwgVmFsdWVJbXAgKmludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBMaXN0ICZhcmdzKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCBWYWx1ZUltcCAq
ZGVmYXVsdFZhbHVlKFR5cGUgaGludCkgY29uc3QgPSAwOwogICAgIAotICAgIHZpcnR1YWwgVmFs
dWVJbXAgKnZhbHVlT2YoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoZ2V0Q2xhc3MoKS0+bmFtZSgp
KTsgfTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICp2YWx1ZU9mKCkgY29uc3QgeyByZXR1cm4gU3Ry
aW5nKGdldENsYXNzKCktPm5hbWUoKSk7IH0KICAgICAKICAgICB2b2lkIHNldEV4ZWN1dGlvbkNv
bnRleHQoY29uc3QgUm9vdE9iamVjdCAqcikgeyBfZXhlY3V0aW9uQ29udGV4dCA9IHI7IH0KICAg
ICBjb25zdCBSb290T2JqZWN0ICpleGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gX2V4
ZWN1dGlvbkNvbnRleHQ7IH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVf
YXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9ydW50aW1lX2FycmF5LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZm
IC1wIC11IC1yMS4xMCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX2FycmF5LmNwcAot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJOCBBdWcgMjAwNSAw
NDowNzoyMiAtMDAwMAkxLjEwCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX2Fy
cmF5LmNwcAkxNSBBdWcgMjAwNSAwNTo1Mzo1NiAtMDAwMApAQCAtODcsOCArODcsNyBAQCBib29s
IFJ1bnRpbWVBcnJheUltcDo6Z2V0T3duUHJvcGVydHlTbG90CiB2b2lkIFJ1bnRpbWVBcnJheUlt
cDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gbGVu
Z3RoUHJvcGVydHlOYW1lKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFJhbmdlRXJyb3IpOwotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKQEAgLTEwNSw4ICsxMDQsNyBAQCB2b2lkIFJ1bnRpbWVBcnJheUltcDo6cHV0KEV4
ZWNTdGF0ZSAqZXhlCiB2b2lkIFJ1bnRpbWVBcnJheUltcDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywg
dW5zaWduZWQgaW5kZXgsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAgICAgaWYgKGlu
ZGV4ID49IGdldExlbmd0aCgpKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFJhbmdlRXJyb3IpOwotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
KyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWVfb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtcCAtdSAt
cjEuMTYgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9vYmplY3QuaAotLS0gSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9vYmplY3QuaAk4IEF1ZyAyMDA1IDA0OjA3OjIyIC0w
MDAwCTEuMTYKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmgJMTUg
QXVnIDIwMDUgMDU6NTM6NTYgLTAwMDAKQEAgLTIyLDE5ICsyMiwxNyBAQAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwotI2lmbmRlZiBfUlVOVElNRV9PQkpFQ1RfSF8KLSNk
ZWZpbmUgX1JVTlRJTUVfT0JKRUNUX0hfCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9ydW50
aW1lLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvcHJvdGVjdC5oPgorI2lmbmRlZiBLSlNfUlVOVElNRV9PQkpFQ1RfSAorI2Rl
ZmluZSBLSlNfUlVOVElNRV9PQkpFQ1RfSAorCisjaW5jbHVkZSAicnVudGltZS5oIgogCiBuYW1l
c3BhY2UgS0pTIHsKIAogY2xhc3MgUnVudGltZU9iamVjdEltcCA6IHB1YmxpYyBPYmplY3RJbXAg
ewogcHVibGljOgogICAgIFJ1bnRpbWVPYmplY3RJbXAoT2JqZWN0SW1wICpwcm90byk7Ci0gICAg
CiAgICAgflJ1bnRpbWVPYmplY3RJbXAoKTsKICAgICAKICAgICBSdW50aW1lT2JqZWN0SW1wKEJp
bmRpbmdzOjpJbnN0YW5jZSAqaSwgYm9vbCBvd25zSW5zdGFuY2UgPSB0cnVlKTsKQEAgLTQyLDIz
ICs0MCwxNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQogCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotCi0gICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIg
PSBOb25lKTsKLQogICAgIHZpcnR1YWwgYm9vbCBjYW5QdXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGRl
bGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsKLQorICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZh
bHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUp
OwogICAgIHZpcnR1YWwgVmFsdWVJbXAgKmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIFR5
cGUgaGludCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEludGVybmFsSW5zdGFuY2UgKEJpbmRpbmdz
OjpJbnN0YW5jZSAqaSkgeyBpbnN0YW5jZSA9IGk7IH0KLSAgICBCaW5kaW5nczo6SW5zdGFuY2Ug
KmdldEludGVybmFsSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpbnN0YW5jZTsgfQotCiAgICAg
dmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZUlt
cCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpOwogICAgIAorICAgIHZvaWQgc2V0SW50ZXJuYWxJbnN0YW5jZShCaW5k
aW5nczo6SW5zdGFuY2UgKmkpIHsgaW5zdGFuY2UgPSBpOyB9CisgICAgQmluZGluZ3M6Okluc3Rh
bmNlICpnZXRJbnRlcm5hbEluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gaW5zdGFuY2U7IH0KKwog
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAogcHJpdmF0ZToKQEAgLTcwLDYgKzYx
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG93bnNJbnN0YW5jZTsKIH07CiAgICAgCi19OyAvLyBu
YW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfaW5zdGFuY2UuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjI4CmRpZmYgLXAgLXUgLXIxLjI4IEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL2puaS9qbmlfaW5zdGFuY2UuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkv
am5pX2luc3RhbmNlLmNwcAkxMCBBdWcgMjAwNSAyMDo1MTowMCAtMDAwMAkxLjI4CisrKyBKYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNlLmNwcAkxNSBBdWcgMjAwNSAwNTo1
Mzo1NiAtMDAwMApAQCAtMTUxLDkgKzE1MSw3IEBAIFZhbHVlSW1wICpKYXZhSW5zdGFuY2U6Omlu
dm9rZU1ldGhvZCAoRXgKICAgICAgICAgY29uc3QgY2hhciAqY2FsbGluZ1VSTCA9IDA7ICAvLyBG
SVhNRSwgbmVlZCB0byBwcm9wYWdhdGUgY2FsbGluZyBVUkwgdG8gSmF2YQogICAgICAgICBoYW5k
bGVkID0gZGlzcGF0Y2hKTklDYWxsIChleGVjQ29udGV4dC0+bmF0aXZlSGFuZGxlKCksIG9iaiwg
ak1ldGhvZC0+aXNTdGF0aWMoKSwgak1ldGhvZC0+Sk5JUmV0dXJuVHlwZSgpLCBqTWV0aG9kLT5t
ZXRob2RJRChvYmopLCBqQXJncywgcmVzdWx0LCBjYWxsaW5nVVJMLCBleGNlcHRpb25EZXNjcmlw
dGlvbik7CiAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikgewotICAgICAgICAgICAg
T2JqZWN0SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBleGNl
cHRpb25EZXNjcmlwdGlvbi0+dG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygpLmNfc3RyKCkpOwot
ICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKLSAgICAgICAgICAgIAorICAg
ICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0
aW9uLT50b1N0cmluZyhleGVjKSk7CiAgICAgICAgICAgICBmcmVlIChqQXJncyk7CiAgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL2puaS9qbmlfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfcnVudGltZS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtcCAtdSAtcjEuMjcgSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvam5pL2puaV9ydW50aW1lLmNwcAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2pu
aV9ydW50aW1lLmNwcAk4IEF1ZyAyMDA1IDIxOjE0OjU0IC0wMDAwCTEuMjcKKysrIEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfcnVudGltZS5jcHAJMTUgQXVnIDIwMDUgMDU6NTM6NTcg
LTAwMDAKQEAgLTk1LDEwICs5NSw4IEBAIGp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVG
cm9tSW5zdGEKIAkJCiAJCWFyZ3NbMF0ubCA9IGppbnN0YW5jZTsKIAkJZGlzcGF0Y2hKTklDYWxs
IChleGVjQ29udGV4dC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgcmV0
dXJuVHlwZSwgbWlkLCBhcmdzLCByZXN1bHQsIDAsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKLQkJ
aWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKSB7Ci0JCSAgICBPYmplY3RJbXAgKmVycm9yID0gRXJy
b3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLT50b1N0
cmluZyhleGVjKS5VVEY4U3RyaW5nKCkuY19zdHIoKSk7Ci0JCSAgICBleGVjLT5zZXRFeGNlcHRp
b24oZXJyb3IpOwotCQl9CisJCWlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKKwkJICAgIHRocm93
RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCBleGNlcHRpb25EZXNjcmlwdGlvbi0+dG9TdHJpbmco
ZXhlYykpOwogCSAgICB9CiAJfQogICAgIH0KQEAgLTE4MywxMCArMTgxLDggQEAgdm9pZCBKYXZh
RmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbgogCQlhcmdzWzBdLmwgPSBqaW5zdGFuY2U7
CiAJCWFyZ3NbMV0gPSBqYXZhVmFsdWU7CiAJCWRpc3BhdGNoSk5JQ2FsbCAoZXhlY0NvbnRleHQt
Pm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHZvaWRfdHlwZSwgbWlkLCBh
cmdzLCByZXN1bHQsIDAsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKLQkJaWYgKGV4Y2VwdGlvbkRl
c2NyaXB0aW9uKSB7Ci0JCSAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVj
LCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLT50b1N0cmluZyhleGVjKS5VVEY4
U3RyaW5nKCkuY19zdHIoKSk7Ci0JCSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwotCQl9
CisJCWlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKKwkJICAgIHRocm93RXJyb3IoZXhlYywgR2Vu
ZXJhbEVycm9yLCBleGNlcHRpb25EZXNjcmlwdGlvbi0+dG9TdHJpbmcoZXhlYykpOwogCSAgICB9
CiAJfQogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0
T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
MQpkaWZmIC1wIC11IC1yMS4yMSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlw
dE9iamVjdC5tbQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmpl
Y3QubW0JOCBBdWcgMjAwNSAwNDowNzoyNiAtMDAwMAkxLjIxCisrKyBKYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkxNSBBdWcgMjAwNSAwNTo1Mzo1NyAtMDAw
MApAQCAtMjMsMTggKzIzLDE4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+CisjaW1wb3J0ICJXZWJTY3Jp
cHRPYmplY3RQcml2YXRlLmgiCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9pbnRlcm5hbC5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL2xpc3QuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS92YWx1ZS5oPgotCi0jaW5jbHVkZSA8b2JqY19qc29iamVjdC5oPgotI2luY2x1ZGUgPG9i
amNfaW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxvYmpjX3V0aWxpdHkuaD4KKyNpbXBvcnQgImludGVy
bmFsLmgiCisjaW1wb3J0ICJsaXN0LmgiCisjaW1wb3J0ICJ2YWx1ZS5oIgorCisjaW1wb3J0ICJv
YmpjX2pzb2JqZWN0LmgiCisjaW1wb3J0ICJvYmpjX2luc3RhbmNlLmgiCisjaW1wb3J0ICJvYmpj
X3V0aWxpdHkuaCIKIAotI2luY2x1ZGUgPHJ1bnRpbWVfb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVu
dGltZV9yb290Lmg+CisjaW1wb3J0ICJydW50aW1lX29iamVjdC5oIgorI2ltcG9ydCAicnVudGlt
ZV9yb290LmgiCiAKICNpZiBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDw9IE1BQ19PU19Y
X1ZFUlNJT05fMTBfMwogCkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRl
KFdlYlNjcmlwdE9iamVjdCAKICAgICAgICAgZnVuYyAoZXhlYywgc3RhdGljX2Nhc3Q8T2JqZWN0
SW1wKj4oW29iaiBfZXhlY3V0aW9uQ29udGV4dF0tPnJvb3RPYmplY3RJbXAoKSkpOwogfQogCi0t
ICh2b2lkKV9pbml0aWFsaXplV2l0aE9iamVjdEltcDooT2JqZWN0SW1wICopaW1wIG9yaWdpbkV4
ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICopb3JpZ2luRXhlY3V0
aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0Oihjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAq
KWV4ZWN1dGlvbkNvbnRleHQKKy0gKHZvaWQpX2luaXRpYWxpemVXaXRoT2JqZWN0SW1wOihPYmpl
Y3RJbXAgKilpbXAgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDooY29uc3QgUm9vdE9iamVjdCAqKW9y
aWdpbkV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dDooY29uc3QgUm9vdE9iamVjdCAq
KWV4ZWN1dGlvbkNvbnRleHQKIHsKICAgICBfcHJpdmF0ZS0+aW1wID0gaW1wOwogICAgIF9wcml2
YXRlLT5leGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDsgICAgCkBAIC03NCw3ICs3
NCw3IEBAIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdlYlNjcmlwdE9iamVjdCAKICAgICBhZGRO
YXRpdmVSZWZlcmVuY2UgKGV4ZWN1dGlvbkNvbnRleHQsIGltcCk7CiB9CiAKLS0gX2luaXRXaXRo
T2JqZWN0SW1wOihPYmplY3RJbXAgKilpbXAgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDooY29uc3Qg
QmluZGluZ3M6OlJvb3RPYmplY3QgKilvcmlnaW5FeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNv
bnRleHQ6KGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICopZXhlY3V0aW9uQ29udGV4dAorLSBf
aW5pdFdpdGhPYmplY3RJbXA6KE9iamVjdEltcCAqKWltcCBvcmlnaW5FeGVjdXRpb25Db250ZXh0
Oihjb25zdCBSb290T2JqZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250
ZXh0Oihjb25zdCBSb290T2JqZWN0ICopZXhlY3V0aW9uQ29udGV4dAogewogICAgIGFzc2VydCAo
aW1wICE9IDApOwogICAgIC8vYXNzZXJ0IChyb290ICE9IDApOwpAQCAtMTU4LDggKzE1OCw3IEBA
IHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdlYlNjcmlwdE9iamVjdCAKICAgICAgICAgRXhlY1N0
YXRlICpleGVjID0gaW50ZXJwLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIC8vIElmIHRoZSBpbnRl
cnByZXRlciBoYXMgYSBjb250ZXh0LCB3ZSBzZXQgdGhlIGV4Y2VwdGlvbi4KICAgICAgICAgaWYg
KGludGVycC0+Y29udGV4dCgpKSB7Ci0gICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9y
OjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBbZXhjZXB0aW9uTWVzc2FnZSBVVEY4U3RyaW5n
XSk7Ci0gICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24gKGVycik7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uTWVzc2FnZSk7CiAgICAgICAg
ICAgICByZXR1cm4gWUVTOwogICAgICAgICB9CiAgICAgICAgIGludGVycCA9IGludGVycC0+bmV4
dEludGVycHJldGVyKCk7CkBAIC00MDEsMTcgKzQwMCwxMyBAQCBzdGF0aWMgTGlzdCBsaXN0RnJv
bU5TQXJyYXkoRXhlY1N0YXRlICplCiAgICAgX2RpZEV4ZWN1dGUoc2VsZik7CiB9CiAKLS0gKHZv
aWQpc2V0RXhjZXB0aW9uOiAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgorLSAodm9pZClzZXRFeGNl
cHRpb246KE5TU3RyaW5nICopZGVzY3JpcHRpb24KIHsKLSAgICBpZiAoIVtzZWxmIF9leGVjdXRp
b25Db250ZXh0XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhlY1N0YXRlICpleGVjID0gW3Nl
bGYgX2V4ZWN1dGlvbkNvbnRleHRdLT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7Ci0gICAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgW2Rlc2Ny
aXB0aW9uIFVURjhTdHJpbmddKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24gKGVycik7CisgICAg
aWYgKGNvbnN0IFJvb3RPYmplY3QgKnJvb3QgPSBbc2VsZiBfZXhlY3V0aW9uQ29udGV4dF0pCisg
ICAgICAgIHRocm93RXJyb3Iocm9vdC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpLCBHZW5l
cmFsRXJyb3IsIGRlc2NyaXB0aW9uKTsKIH0KIAotKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1Zh
bHVlOihWYWx1ZUltcCAqKXZhbHVlIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IFJvb3RP
YmplY3QgKilvcmlnaW5FeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEJp
bmRpbmdzOjpSb290T2JqZWN0ICopZXhlY3V0aW9uQ29udGV4dAorKyAoaWQpX2NvbnZlcnRWYWx1
ZVRvT2JqY1ZhbHVlOihWYWx1ZUltcCAqKXZhbHVlIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6KGNv
bnN0IFJvb3RPYmplY3QgKilvcmlnaW5FeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQ6
KGNvbnN0IFJvb3RPYmplY3QgKilleGVjdXRpb25Db250ZXh0CiB7CiAgICAgaWQgcmVzdWx0ID0g
MDsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2NsYXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMv
b2JqY19jbGFzcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBK
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfY2xhc3MuaAotLS0gSmF2YVNjcmlwdENv
cmUvYmluZGluZ3Mvb2JqYy9vYmpjX2NsYXNzLmgJOCBBdWcgMjAwNSAwNDowNzoyNiAtMDAwMAkx
LjQKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19jbGFzcy5oCTE1IEF1ZyAy
MDA1IDA1OjUzOjU3IC0wMDAwCkBAIC0yMiwyNiArMjIsMjMgQEAKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KLSNpZm5kZWYgX0JJTkRJTkdTX09CSkNfQ0xBU1NfSF8KLSNk
ZWZpbmUgX0JJTkRJTkdTX09CSkNfQ0xBU1NfSF8KIAotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9u
L0NvcmVGb3VuZGF0aW9uLmg+CisjaWZuZGVmIEtKU19CSU5ESU5HU19PQkpDX0NMQVNTX0gKKyNk
ZWZpbmUgS0pTX0JJTkRJTkdTX09CSkNfQ0xBU1NfSAogCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRp
b24vQ29yZUZvdW5kYXRpb24uaD4KIAotI2luY2x1ZGUgPHJ1bnRpbWUuaD4KLSNpbmNsdWRlIDxv
YmpjX2hlYWRlci5oPgotI2luY2x1ZGUgPG9iamNfcnVudGltZS5oPgorI2luY2x1ZGUgIm9iamNf
cnVudGltZS5oIgogCiBuYW1lc3BhY2UgS0pTIHsKLQogbmFtZXNwYWNlIEJpbmRpbmdzIHsKIAot
Y2xhc3MgT2JqY0NsYXNzIDogcHVibGljIEtKUzo6QmluZGluZ3M6OkNsYXNzCitjbGFzcyBPYmpj
Q2xhc3MgOiBwdWJsaWMgQ2xhc3MKIHsKICAgICAvLyBVc2UgdGhlIHB1YmxpYyBzdGF0aWMgZmFj
dG9yeSBtZXRob2RzIHRvIGdldCBpbnN0YW5jZXMgb2YgSmF2YUNsYXNzLgogICAgIAogcHJvdGVj
dGVkOgotICAgIHZvaWQgX2NvbW1vbkluaXQgKENsYXNzU3RydWN0UHRyIGFDbGFzcyk7CisgICAg
dm9pZCBfY29tbW9uSW5pdChDbGFzc1N0cnVjdFB0ciBhQ2xhc3MpOwogICAgIHZvaWQgX2NvbW1v
bkNvcHkoY29uc3QgT2JqY0NsYXNzICZvdGhlcik7CiAgICAgdm9pZCBfY29tbW9uRGVsZXRlKCk7
CiAgICAgCkBAIC00OSwxNiArNDYsMTEgQEAgcHJvdGVjdGVkOgogICAgIAogcHVibGljOgogICAg
IC8vIFJldHVybiB0aGUgY2FjaGVkIE9iakMgb2YgdGhlIHNwZWNpZmllZCBuYW1lLgotICAgIC8v
c3RhdGljIE9iamNDbGFzcyAqY2xhc3NGb3JOYW1lIChjb25zdCBjaGFyICpuYW1lKTsKLSAgICBz
dGF0aWMgT2JqY0NsYXNzICpjbGFzc0ZvcklzQSAoQ2xhc3NTdHJ1Y3RQdHIgYUNsYXNzKTsKKyAg
ICBzdGF0aWMgT2JqY0NsYXNzICpjbGFzc0ZvcklzQShDbGFzc1N0cnVjdFB0cik7CiAgICAgICAg
ICAgICAKLSAgICB+T2JqY0NsYXNzICgpIHsKLSAgICAgICAgX2NvbW1vbkRlbGV0ZSgpOwotICAg
IH0KKyAgICB+T2JqY0NsYXNzKCkgeyBfY29tbW9uRGVsZXRlKCk7IH0KICAgICAKLSAgICBPYmpj
Q2xhc3MgKGNvbnN0IE9iamNDbGFzcyAmb3RoZXIpIDogQ2xhc3MoKSB7Ci0gICAgICAgIF9jb21t
b25Db3B5IChvdGhlcik7Ci0gICAgfTsKKyAgICBPYmpjQ2xhc3MoY29uc3QgT2JqY0NsYXNzICZv
dGhlcikgOiBDbGFzcygpIHsgX2NvbW1vbkNvcHkob3RoZXIpOyB9CiAKICAgICBPYmpjQ2xhc3Mg
Jm9wZXJhdG9yPShjb25zdCBPYmpjQ2xhc3MgJm90aGVyKQogICAgIHsKQEAgLTY2LDcgKzU4LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgCiAgICAg
ICAgIF9jb21tb25EZWxldGUoKTsKLSAgICAgICAgX2NvbW1vbkNvcHkgKG90aGVyKTsKKyAgICAg
ICAgX2NvbW1vbkNvcHkob3RoZXIpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KQEAgLTc0LDE2ICs2NiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
ICpuYW1lKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBNZXRob2RMaXN0IG1ldGhvZHNOYW1l
ZChjb25zdCBjaGFyICpuYW1lLCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0OwotICAgIAogICAg
IHZpcnR1YWwgRmllbGQgKmZpZWxkTmFtZWQoY29uc3QgY2hhciAqbmFtZSwgSW5zdGFuY2UgKmlu
c3RhbmNlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgVmFsdWVJbXAgKmZhbGxiYWNrT2JqZWN0KEV4
ZWNTdGF0ZSAqZXhlYywgSW5zdGFuY2UgKmluc3RhbmNlLCBjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eU5hbWUpOwogICAgIAotICAgIHZpcnR1YWwgQ29uc3RydWN0b3IgKmNvbnN0cnVjdG9yQXQo
bG9uZyBpKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH07Ci0gICAgCi0gICAgdmly
dHVhbCBsb25nIG51bUNvbnN0cnVjdG9ycygpIGNvbnN0IHsgcmV0dXJuIDA7IH07CisgICAgdmly
dHVhbCBDb25zdHJ1Y3RvciAqY29uc3RydWN0b3JBdChsb25nIGkpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIGxvbmcgbnVtQ29uc3RydWN0b3JzKCkgY29uc3QgeyByZXR1cm4gMDsg
fQogICAgIAogICAgIENsYXNzU3RydWN0UHRyIGlzYSgpIHsgcmV0dXJuIF9pc2E7IH0KICAgICAK
QEAgLTk0LDcgKzgyLDYgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEJpbmRpbmdz
Ci0KIH0gLy8gbmFtZXNwYWNlIEtKUwogCi0jZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCisjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19oZWFk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvb2JqYy9vYmpjX2hlYWRlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaGVhZGVyLmgKLS0tIEph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19oZWFkZXIuaAkxMyBGZWIgMjAwNCAyMjoz
OTozNiAtMDAwMAkxLjEKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19oZWFk
ZXIuaAkxNSBBdWcgMjAwNSAwNTo1Mzo1NyAtMDAwMApAQCAtMjIsMTAgKzIyLDEyIEBACiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCi0jaWZuZGVmIF9CSU5ESU5HU19PQkpD
X0hFQURFUl9IXwotI2RlZmluZSBfQklORElOR1NfT0JKQ19IRUFERVJfSF8KKworI2lmbmRlZiBL
SlNfQklORElOR1NfT0JKQ19IRUFERVJfSAorI2RlZmluZSBLSlNfQklORElOR1NfT0JKQ19IRUFE
RVJfSAogCiAjaWZkZWYgX19PQkpDX18KKwogI2luY2x1ZGUgPG9iamMvb2JqYy1jbGFzcy5oPgog
I2luY2x1ZGUgPG9iamMvb2JqYy1ydW50aW1lLmg+CiAKQEAgLTM2LDEyICszOCwxMiBAQCB0eXBl
ZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqT2JqZWN0U3RydWN0CiAKICNlbHNlCiAKLXR5cGVkZWYg
c3RydWN0IG9iamNfaXZhciB7fSAqSXZhcjsKLXR5cGVkZWYgc3RydWN0IG9iamNfY2xhc3Mge30g
KkNsYXNzU3RydWN0UHRyOwotdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3Qge30gKk9iamVjdFN0
cnVjdFB0cjsKK3R5cGVkZWYgc3RydWN0IG9iamNfaXZhciAqSXZhcjsKK3R5cGVkZWYgc3RydWN0
IG9iamNfY2xhc3MgKkNsYXNzU3RydWN0UHRyOwordHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3Qg
Kk9iamVjdFN0cnVjdFB0cjsKIAogY2xhc3MgTlNNZXRob2RTaWduYXR1cmU7CiAKICNlbmRpZgog
Ci0jZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtcCAtdSAtcjEuMTMgSmF2YVNjcmlwdENv
cmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvb2JqYy9vYmpjX3J1bnRpbWUuaAk4IEF1ZyAyMDA1IDA0OjA3OjI2IC0wMDAwCTEuMTMKKysr
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLmgJMTUgQXVnIDIwMDUg
MDU6NTM6NTcgLTAwMDAKQEAgLTIyLDIxICsyMiwxOSBAQAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwotI2lmbmRlZiBfQklORElOR1NfT0JKQ19SVU5USU1FX0hfCi0jZGVm
aW5lIF9CSU5ESU5HU19PQkpDX1JVTlRJTUVfSF8KKworI2lmbmRlZiBLSlNfQklORElOR1NfT0JK
Q19SVU5USU1FX0gKKyNkZWZpbmUgS0pTX0JJTkRJTkdTX09CSkNfUlVOVElNRV9ICiAKICNpbmNs
dWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgogCi0jaW5jbHVkZSA8cnVudGlt
ZS5oPgotI2luY2x1ZGUgPHVzdHJpbmcuaD4KKyNpbmNsdWRlICJydW50aW1lLmgiCisjaW5jbHVk
ZSAidXN0cmluZy5oIgogCi0jaW5jbHVkZSA8b2JqY19oZWFkZXIuaD4KKyNpbmNsdWRlICJvYmpj
X2hlYWRlci5oIgogCi1uYW1lc3BhY2UgS0pTCi17Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncwotewor
bmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgQmluZGluZ3MgewogCiBjbGFzcyBPYmpjSW5zdGFu
Y2U7CiAKQEAgLTQ0LDI4ICs0MiwyNiBAQCBjbGFzcyBPYmpjRmllbGQgOiBwdWJsaWMgRmllbGQK
IHsKIHB1YmxpYzoKICAgICBPYmpjRmllbGQoSXZhciBpdmFyKTsKLQogICAgIE9iamNGaWVsZChD
RlN0cmluZ1JlZiBuYW1lKTsKICAgICAKLSAgICB+T2JqY0ZpZWxkKCkgeworICAgIH5PYmpjRmll
bGQoKQorICAgIHsKICAgICAgICAgaWYgKF9uYW1lKQotICAgICAgICAgICAgQ0ZSZWxlYXNlIChf
bmFtZSk7Ci0gICAgfTsKKyAgICAgICAgICAgIENGUmVsZWFzZShfbmFtZSk7CisgICAgfQogCi0g
ICAgT2JqY0ZpZWxkKGNvbnN0IE9iamNGaWVsZCAmb3RoZXIpIDogRmllbGQoKSB7CisgICAgT2Jq
Y0ZpZWxkKGNvbnN0IE9iamNGaWVsZCAmb3RoZXIpIDogRmllbGQoKQorICAgIHsKICAgICAgICAg
X2l2YXIgPSBvdGhlci5faXZhcjsKIAotICAgICAgICBpZiAob3RoZXIuX25hbWUgIT0gX25hbWUp
IHsKLSAgICAgICAgICAgIGlmIChfbmFtZSkKLSAgICAgICAgICAgICAgICBDRlJlbGVhc2UgKF9u
YW1lKTsKLSAgICAgICAgICAgIGlmIChvdGhlci5fbmFtZSkKLSAgICAgICAgICAgICAgICBfbmFt
ZSA9IChDRlN0cmluZ1JlZilDRlJldGFpbiAob3RoZXIuX25hbWUpOwotICAgICAgICAgICAgZWxz
ZSAKLSAgICAgICAgICAgICAgICBfbmFtZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9OworICAgICAg
ICBpZiAob3RoZXIuX25hbWUpCisgICAgICAgICAgICBfbmFtZSA9IChDRlN0cmluZ1JlZilDRlJl
dGFpbihvdGhlci5fbmFtZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBfbmFtZSA9IDA7
CisgICAgfQogICAgIAotICAgIE9iamNGaWVsZCAmb3BlcmF0b3I9KGNvbnN0IE9iamNGaWVsZCAm
b3RoZXIpIHsKKyAgICBPYmpjRmllbGQgJm9wZXJhdG9yPShjb25zdCBPYmpjRmllbGQgJm90aGVy
KQorICAgIHsKICAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwogCkBAIC03MywxNiArNjksMTYgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAg
aWYgKG90aGVyLl9uYW1lICE9IF9uYW1lKSB7CiAgICAgICAgICAgICBpZiAoX25hbWUpCi0gICAg
ICAgICAgICAgICAgQ0ZSZWxlYXNlIChfbmFtZSk7CisgICAgICAgICAgICAgICAgQ0ZSZWxlYXNl
KF9uYW1lKTsKICAgICAgICAgICAgIGlmIChvdGhlci5fbmFtZSkKLSAgICAgICAgICAgICAgICBf
bmFtZSA9IChDRlN0cmluZ1JlZilDRlJldGFpbiAob3RoZXIuX25hbWUpOworICAgICAgICAgICAg
ICAgIF9uYW1lID0gKENGU3RyaW5nUmVmKUNGUmV0YWluKG90aGVyLl9uYW1lKTsKICAgICAgICAg
ICAgIGVsc2UgCiAgICAgICAgICAgICAgICAgX25hbWUgPSAwOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfTsKLSAgICAgICAgCisgICAgfQorCiAgICAg
dmlydHVhbCBWYWx1ZUltcCAqdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRv
SW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UsIFZhbHVl
SW1wICphVmFsdWUpIGNvbnN0OwogICAgIApAQCAtOTQsNDEgKzkwLDQwIEBAIHByaXZhdGU6CiAg
ICAgQ0ZTdHJpbmdSZWYgX25hbWU7CiB9OwogCi0KIGNsYXNzIE9iamNNZXRob2QgOiBwdWJsaWMg
TWV0aG9kCiB7CiBwdWJsaWM6Ci0gICAgT2JqY01ldGhvZCgpIDogTWV0aG9kKCksIF9vYmpjQ2xh
c3MoMCksIF9zZWxlY3RvcigwKSB7fTsKLQorICAgIE9iamNNZXRob2QoKSA6IF9vYmpjQ2xhc3Mo
MCksIF9zZWxlY3RvcigwKSB7fQogICAgIE9iamNNZXRob2Qoc3RydWN0IG9iamNfY2xhc3MgKmFD
bGFzcywgY29uc3QgY2hhciAqX3NlbGVjdG9yKTsKLSAgICB+T2JqY01ldGhvZCAoKSB7CisgICAg
fk9iamNNZXRob2QgKCkKKyAgICB7CiAgICAgICAgIGlmIChfamF2YVNjcmlwdE5hbWUpOwotICAg
ICAgICAgICAgQ0ZSZWxlYXNlIChfamF2YVNjcmlwdE5hbWUpOwotICAgIH07CisgICAgICAgICAg
ICBDRlJlbGVhc2UoX2phdmFTY3JpcHROYW1lKTsKKyAgICB9CiAKLSAgICBPYmpjTWV0aG9kKGNv
bnN0IE9iamNNZXRob2QgJm90aGVyKSA6IE1ldGhvZCgpIHsKKyAgICBPYmpjTWV0aG9kKGNvbnN0
IE9iamNNZXRob2QgJm90aGVyKSA6IE1ldGhvZCgpCisgICAgewogICAgICAgICBfb2JqY0NsYXNz
ID0gb3RoZXIuX29iamNDbGFzczsKICAgICAgICAgX3NlbGVjdG9yID0gb3RoZXIuX3NlbGVjdG9y
OwotICAgIH07CisgICAgfQogICAgIAotICAgIE9iamNNZXRob2QgJm9wZXJhdG9yPShjb25zdCBP
YmpjTWV0aG9kICZvdGhlcikgeworICAgIE9iamNNZXRob2QgJm9wZXJhdG9yPShjb25zdCBPYmpj
TWV0aG9kICZvdGhlcikKKyAgICB7CiAgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKLQogICAgICAgICBfb2JqY0NsYXNzID0gb3RoZXIuX29iamND
bGFzczsKICAgICAgICAgX3NlbGVjdG9yID0gb3RoZXIuX3NlbGVjdG9yOwotICAgICAgICAKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqbmFt
ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBsb25nIG51bVBhcmFtZXRlcnMoKSBjb25zdDsKLSAg
ICAKKwogICAgIE5TTWV0aG9kU2lnbmF0dXJlICpnZXRNZXRob2RTaWduYXR1cmUoKSBjb25zdDsK
ICAgICAKICAgICBib29sIGlzRmFsbGJhY2tNZXRob2QoKSBjb25zdCB7IHJldHVybiBzdHJjbXAo
X3NlbGVjdG9yLCAiaW52b2tlVW5kZWZpbmVkTWV0aG9kRnJvbVdlYlNjcmlwdDp3aXRoQXJndW1l
bnRzOiIpID09IDA7IH0KLSAgICB2b2lkIHNldEphdmFTY3JpcHROYW1lIChDRlN0cmluZ1JlZiBu
KTsKKyAgICB2b2lkIHNldEphdmFTY3JpcHROYW1lKENGU3RyaW5nUmVmIG4pOwogICAgIENGU3Ry
aW5nUmVmIGphdmFTY3JpcHROYW1lKCkgY29uc3QgeyByZXR1cm4gX2phdmFTY3JpcHROYW1lOyB9
CiAgICAgCiBwcml2YXRlOgpAQCAtMTQwLDIxICsxMzUsMjAgQEAgcHJpdmF0ZToKIGNsYXNzIE9i
amNBcnJheSA6IHB1YmxpYyBBcnJheQogewogcHVibGljOgotICAgIE9iamNBcnJheSAoT2JqZWN0
U3RydWN0UHRyIGEpOwotCi0gICAgT2JqY0FycmF5IChjb25zdCBPYmpjQXJyYXkgJm90aGVyKTsK
KyAgICBPYmpjQXJyYXkoT2JqZWN0U3RydWN0UHRyKTsKIAotICAgIE9iamNBcnJheSAmb3BlcmF0
b3I9KGNvbnN0IE9iamNBcnJheSAmb3RoZXIpOworICAgIE9iamNBcnJheShjb25zdCBPYmpjQXJy
YXkgJik7CisgICAgT2JqY0FycmF5ICZvcGVyYXRvcj0oY29uc3QgT2JqY0FycmF5ICYpOwogICAg
IAorICAgIHZpcnR1YWwgfk9iamNBcnJheSgpOworCiAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
QXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIFZhbHVlSW1wICphVmFsdWUp
IGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWVJbXAgKnZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1
bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldExl
bmd0aCgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgfk9iamNBcnJheSgpOwotCiAgICAgT2Jq
ZWN0U3RydWN0UHRyIGdldE9iamNBcnJheSgpIGNvbnN0IHsgcmV0dXJuIF9hcnJheTsgfQogCi0g
ICAgc3RhdGljIFZhbHVlSW1wICpjb252ZXJ0T2JqY0FycmF5VG9BcnJheSAoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RTdHJ1Y3RQdHIgYW5PYmplY3QpOworICAgIHN0YXRpYyBWYWx1ZUltcCAqY29u
dmVydE9iamNBcnJheVRvQXJyYXkoRXhlY1N0YXRlICpleGVjLCBPYmplY3RTdHJ1Y3RQdHIgYW5P
YmplY3QpOwogCiBwcml2YXRlOgogICAgIE9iamVjdFN0cnVjdFB0ciBfYXJyYXk7CkBAIC0xNjMs
MjMgKzE1NywxNiBAQCBwcml2YXRlOgogY2xhc3MgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wIDogcHVi
bGljIE9iamVjdEltcCB7CiBwdWJsaWM6CiAgICAgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKE9iamVj
dEltcCAqcHJvdG8pOwotICAgICAgICAKICAgICBPYmpjRmFsbGJhY2tPYmplY3RJbXAoT2JqY0lu
c3RhbmNlICppLCBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7CiAKICAgICBjb25zdCBD
bGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVy
JiwgUHJvcGVydHlTbG90Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAg
VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotCiAgICAgdmlydHVhbCBib29sIGNh
blB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3Q7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAg
ICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1
ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpOwotCiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsKLQogICAgIHZp
cnR1YWwgVmFsdWVJbXAgKmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgaGludCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0OwpAQCAtMTkzLDcgKzE4MCw2
IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwotCiB9IC8vIG5hbWVz
cGFjZSBLSlMKIAogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29i
amNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENv
cmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTkKZGlmZiAtcCAtdSAtcjEuMTkgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1
bnRpbWUubW0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLm1t
CTggQXVnIDIwMDUgMDQ6MDc6MjYgLTAwMDAJMS4xOQorKysgSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvb2JqYy9vYmpjX3J1bnRpbWUubW0JMTUgQXVnIDIwMDUgMDU6NTM6NTcgLTAwMDAKQEAgLTEx
NSw4ICsxMTUsNyBAQCBWYWx1ZUltcCAqT2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFCiAg
ICAgICAgIAogICAgIE5TX0hBTkRMRVIKICAgICAgICAgCi0gICAgICAgIFZhbHVlSW1wICpleGNl
cHRpb25WYWx1ZSA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBbW2xvY2FsRXhj
ZXB0aW9uIHJlYXNvbl0gbG9zc3lDU3RyaW5nXSk7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9y
LCBbbG9jYWxFeGNlcHRpb24gcmVhc29uXSk7CiAgICAgICAgIAogICAgIE5TX0VOREhBTkRMRVIK
IApAQCAtMTUyLDggKzE1MSw3IEBAIHZvaWQgT2JqY0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2Uo
RXhlY1MKIAogICAgIE5TX0hBTkRMRVIKICAgICAgICAgCi0gICAgICAgIFZhbHVlSW1wICphVmFs
dWUgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgW1tsb2NhbEV4Y2VwdGlvbiBy
ZWFzb25dIGxvc3N5Q1N0cmluZ10pOwotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oYVZhbHVl
KTsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIFtsb2NhbEV4Y2VwdGlv
biByZWFzb25dKTsKICAgICAgICAgCiAgICAgTlNfRU5ESEFORExFUgogfQpAQCAtMTg5LDE0ICsx
ODcsMTIgQEAgT2JqY0FycmF5ICZPYmpjQXJyYXk6Om9wZXJhdG9yPShjb25zdCBPYgogdm9pZCBP
YmpjQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgs
IFZhbHVlSW1wICphVmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKCFbX2FycmF5IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoaW5zZXJ0T2JqZWN0OmF0SW5kZXg6KV0pIHsKLSAgICAgICAgT2Jq
ZWN0SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCAiQXJyYXkgaXMg
bm90IG11dGFibGUuIik7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CisgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQXJyYXkgaXMgbm90IG11dGFibGUuIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoaW5kZXggPiBbX2FycmF5IGNvdW50
XSkgewotICAgICAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5n
ZUVycm9yLCAiSW5kZXggZXhjZWVkcyBhcnJheSBzaXplLiIpOwotICAgICAgICBleGVjLT5zZXRF
eGNlcHRpb24oZXJyb3IpOworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJJ
bmRleCBleGNlZWRzIGFycmF5IHNpemUuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CkBAIC0yMTAsOCArMjA2LDcgQEAgTlNfRFVSSU5HCiAKIE5TX0hBTkRMRVIKICAgICAKLSAgICBP
YmplY3RJbXAgKmVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsICJPYmpl
Y3RpdmVDIGV4Y2VwdGlvbi4iKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOworICAg
IHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiT2JqZWN0aXZlLUMgZXhjZXB0aW9uLiIp
OwogICAgIAogTlNfRU5ESEFORExFUgogfQpAQCAtMjE5LDExICsyMTQsOCBAQCBOU19FTkRIQU5E
TEVSCiAKIFZhbHVlSW1wICpPYmpjQXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNp
Z25lZCBpbnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKGluZGV4ID4gW19hcnJheSBjb3VudF0p
IHsKLSAgICAgICAgT2JqZWN0SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmFuZ2VF
cnJvciwgIkluZGV4IGV4Y2VlZHMgYXJyYXkgc2l6ZS4iKTsKLSAgICAgICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycm9yKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KKyAgICBpZiAoaW5k
ZXggPiBbX2FycmF5IGNvdW50XSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmFu
Z2VFcnJvciwgIkluZGV4IGV4Y2VlZHMgYXJyYXkgc2l6ZS4iKTsKICAgICAKICAgICBPYmplY3RT
dHJ1Y3RQdHIgb2JqID0gMDsKICAgICBPYmplY3RJbXAgKiB2b2xhdGlsZSBlcnJvcjsKQEAgLTIz
NSw4ICsyMjcsNyBAQCBOU19EVVJJTkcKICAgICAKIE5TX0hBTkRMRVIKICAgICAKLSAgICBlcnJv
ciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCAiT2JqZWN0aXZlQyBleGNlcHRp
b24uIik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAgICBlcnJvciA9IHRocm93
RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiT2JqZWN0aXZlLUMgZXhjZXB0aW9uLiIpOwogICAg
IGhhdmVFcnJvciA9IHRydWU7CiAgICAgCiBOU19FTkRIQU5ETEVSCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfdXRpbGl0eS5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9vYmpjL29iamNfdXRpbGl0eS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpj
L29iamNfdXRpbGl0eS5oCTggQXVnIDIwMDUgMDQ6MDc6MjYgLTAwMDAJMS41CisrKyBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfdXRpbGl0eS5oCTE1IEF1ZyAyMDA1IDA1OjUzOjU4
IC0wMDAwCkBAIC0yMiwxNCArMjIsMTQgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KLSNpZm5kZWYgX0JJTkRJTkdTX09CSkNfVVRJTElUWV9IXwotI2RlZmluZSBfQklO
RElOR1NfT0JKQ19VVElMSVRZX0hfCiAKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91
bmRhdGlvbi5oPgorI2lmbmRlZiBLSlNfQklORElOR1NfT0JKQ19VVElMSVRZX0gKKyNkZWZpbmUg
S0pTX0JJTkRJTkdTX09CSkNfVVRJTElUWV9ICiAKLSNpbmNsdWRlIDx2YWx1ZS5oPgorI2luY2x1
ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAKLSNpbmNsdWRlIDxvYmpjX2hl
YWRlci5oPgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgIm9iamNfaGVhZGVyLmgiCiAK
ICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIE5TU3RyaW5nOwpAQCAtMzcsMTEgKzM3LDggQEAKIGNs
YXNzIE5TU3RyaW5nOwogI2VuZGlmCiAKLW5hbWVzcGFjZSBLSlMKLXsKLQotbmFtZXNwYWNlIEJp
bmRpbmdzIAoteworbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgQmluZGluZ3MgewogCiB0eXBl
ZGVmIHVuaW9uIHsKICAgICBPYmplY3RTdHJ1Y3RQdHIgb2JqZWN0VmFsdWU7CkBAIC03NSwxMCAr
NzIsMTEgQEAgT2JqY1ZhbHVlVHlwZSBvYmpjVmFsdWVUeXBlRm9yVHlwZShjb25zdAogCiB2b2lk
IEpTTWV0aG9kTmFtZVRvT2JqQ01ldGhvZE5hbWUoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbmFt
ZSwgdW5zaWduZWQgaW50IGxlbmd0aCk7CiAKLXZvaWQgKmNyZWF0ZU9iamNJbnN0YW5jZUZvclZh
bHVlKE9iamVjdEltcCAqdmFsdWUsIGNvbnN0IFJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgUm9v
dE9iamVjdCAqY3VycmVudCk7Cit2b2lkICpjcmVhdGVPYmpjSW5zdGFuY2VGb3JWYWx1ZShWYWx1
ZUltcCAqdmFsdWUsIGNvbnN0IFJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgUm9vdE9iamVjdCAq
Y3VycmVudCk7CiAKLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCitPYmplY3RJbXAgKnRocm93RXJy
b3IoRXhlY1N0YXRlICosIEVycm9yVHlwZSwgTlNTdHJpbmcgKm1lc3NhZ2UpOwogCit9IC8vIG5h
bWVzcGFjZSBCaW5kaW5ncwogfSAvLyBuYW1lc3BhY2UgS0pTCiAKICNlbmRpZgpJbmRleDogSmF2
YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY191dGlsaXR5
Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAgLXUgLXIxLjE5IEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY191dGlsaXR5Lm1tCi0tLSBKYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9vYmpjL29iamNfdXRpbGl0eS5tbQk4IEF1ZyAyMDA1IDA0OjA3OjI2IC0wMDAwCTEu
MTkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY191dGlsaXR5Lm1tCTE1IEF1
ZyAyMDA1IDA1OjUzOjU4IC0wMDAwCkBAIC0yMiwyMiArMjIsMjMgQEAKICAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KLSNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KIAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL2ludGVybmFsLmg+CisjaW5jbHVkZSAib2Jq
Y191dGlsaXR5LmgiCisKKyNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KIAotI2lu
Y2x1ZGUgPG9iamNfaW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxvYmpjX3V0aWxpdHkuaD4KKyNpbmNs
dWRlICJpbnRlcm5hbC5oIgogCi0jaW5jbHVkZSA8cnVudGltZV9hcnJheS5oPgotI2luY2x1ZGUg
PHJ1bnRpbWVfb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZV9yb290Lmg+CisjaW5jbHVkZSAi
b2JqY19pbnN0YW5jZS5oIgogCi0jaW5jbHVkZSA8V2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oPgor
I2luY2x1ZGUgInJ1bnRpbWVfYXJyYXkuaCIKKyNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgor
I2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogCisjaW5jbHVkZSAiV2ViU2NyaXB0T2JqZWN0UHJp
dmF0ZS5oIgogCi11c2luZyBuYW1lc3BhY2UgS0pTOwotdXNpbmcgbmFtZXNwYWNlIEtKUzo6Qmlu
ZGluZ3M7CituYW1lc3BhY2UgS0pTIHsKK25hbWVzcGFjZSBCaW5kaW5ncyB7CiAKIC8qCiAgICAg
VGhlIGRlZmF1bHQgbmFtZSBjb25jYXRlbmF0ZXMgdGhlIGNvbXBvbmVudHMgb2YgdGhlCkBAIC01
MCw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwogICAgICAgICBtb3Zl
VG8kXyAgICAgICAgICAgICAgICBtb3ZlVG8kJCRfCiAgICAgQHJlc3VsdCBSZXR1cm5zIHRoZSBu
YW1lIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBzcGVjaWZpY2VkIHNlbGVjdG9yIGluIHRo
ZQogKi8KLXZvaWQgQmluZGluZ3M6OkpTTWV0aG9kTmFtZVRvT2JqQ01ldGhvZE5hbWUoY29uc3Qg
Y2hhciAqbmFtZSwgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQordm9pZCBKU01ldGhv
ZE5hbWVUb09iakNNZXRob2ROYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmJ1ZmZlciwgdW5z
aWduZWQgaW50IGxlbikKIHsKICAgICBjb25zdCBjaGFyICpucCA9IG5hbWU7CiAgICAgY2hhciAq
YnA7CkBAIC04Nyw3ICs4OCw3IEBAIHZvaWQgQmluZGluZ3M6OkpTTWV0aG9kTmFtZVRvT2JqQ01l
dGhvZE4KICAgICBbXSwgb3RoZXIgICAgICAgZXhjZXB0aW9uCiAKICovCi1PYmpjVmFsdWUgQmlu
ZGluZ3M6OmNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1w
ICp2YWx1ZSwgT2JqY1ZhbHVlVHlwZSB0eXBlKQorT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2Jq
Y1ZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICp2YWx1ZSwgT2JqY1ZhbHVlVHlwZSB0
eXBlKQogewogICAgIE9iamNWYWx1ZSByZXN1bHQ7CiAgICAgZG91YmxlIGQgPSAwOwpAQCAtOTgs
NyArOTksNyBAQCBPYmpjVmFsdWUgQmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvT2JqY1ZhCiAgICAg
c3dpdGNoICh0eXBlKXsKICAgICAgICAgY2FzZSBPYmpjT2JqZWN0VHlwZTogewogCSAgICBJbnRl
cnByZXRlciAqb3JpZ2luSW50ZXJwcmV0ZXIgPSBleGVjLT5pbnRlcnByZXRlcigpOwotICAgICAg
ICAgICAgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbkV4ZWN1dGlvbkNvbnRleHQg
PSByb290Rm9ySW50ZXJwcmV0ZXIob3JpZ2luSW50ZXJwcmV0ZXIpOworICAgICAgICAgICAgY29u
c3QgUm9vdE9iamVjdCAqb3JpZ2luRXhlY3V0aW9uQ29udGV4dCA9IHJvb3RGb3JJbnRlcnByZXRl
cihvcmlnaW5JbnRlcnByZXRlcik7CiAKIAkgICAgSW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0g
MDsKIAkgICAgaWYgKG9yaWdpbkludGVycHJldGVyLT5pc0dsb2JhbE9iamVjdCh2YWx1ZSkpIHsK
QEAgLTEwOCw5ICsxMDksOSBAQCBPYmpjVmFsdWUgQmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvT2Jq
Y1ZhCiAJICAgIGlmICghaW50ZXJwcmV0ZXIpCiAJCWludGVycHJldGVyID0gb3JpZ2luSW50ZXJw
cmV0ZXI7CiAJCQotICAgICAgICAgICAgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKmV4ZWN1
dGlvbkNvbnRleHQgPSByb290Rm9ySW50ZXJwcmV0ZXIoaW50ZXJwcmV0ZXIpOworICAgICAgICAg
ICAgY29uc3QgUm9vdE9iamVjdCAqZXhlY3V0aW9uQ29udGV4dCA9IHJvb3RGb3JJbnRlcnByZXRl
cihpbnRlcnByZXRlcik7CiAgICAgICAgICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQpIHsKLSAg
ICAgICAgICAgICAgICBCaW5kaW5nczo6Um9vdE9iamVjdCAqbmV3RXhlY3V0aW9uQ29udGV4dCA9
IG5ldyBCaW5kaW5nczo6Um9vdE9iamVjdCgwKTsKKyAgICAgICAgICAgICAgICBSb290T2JqZWN0
ICpuZXdFeGVjdXRpb25Db250ZXh0ID0gbmV3IFJvb3RPYmplY3QoMCk7CiAgICAgICAgICAgICAg
ICAgbmV3RXhlY3V0aW9uQ29udGV4dC0+c2V0SW50ZXJwcmV0ZXIgKGludGVycHJldGVyKTsKICAg
ICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gbmV3RXhlY3V0aW9uQ29udGV4dDsKICAg
ICAgICAgICAgIH0KQEAgLTE2NCw3ICsxNjUsNyBAQCBPYmpjVmFsdWUgQmluZGluZ3M6OmNvbnZl
cnRWYWx1ZVRvT2JqY1ZhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmFsdWVJbXAgKkJpbmRp
bmdzOjpjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhOU1N0cmluZyAqbnNzdHJpbmcpCitWYWx1ZUlt
cCAqY29udmVydE5TU3RyaW5nVG9TdHJpbmcoTlNTdHJpbmcgKm5zc3RyaW5nKQogewogICAgIHVu
aWNoYXIgKmNoYXJzOwogICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBbbnNzdHJpbmcgbGVuZ3Ro
XTsKQEAgLTE5Miw3ICsxOTMsNyBAQCBWYWx1ZUltcCAqQmluZGluZ3M6OmNvbnZlcnROU1N0cmlu
Z1RvU3RyCiAgICAgb3RoZXIgICAgICAgICAgIHNob3VsZCBub3QgaGFwcGVuCiAKICovCi1WYWx1
ZUltcCAqQmluZGluZ3M6OmNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlIChFeGVjU3RhdGUgKmV4ZWMs
IHZvaWQgKmJ1ZmZlciwgT2JqY1ZhbHVlVHlwZSB0eXBlKQorVmFsdWVJbXAgKmNvbnZlcnRPYmpj
VmFsdWVUb1ZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIHZvaWQgKmJ1ZmZlciwgT2JqY1ZhbHVlVHlw
ZSB0eXBlKQogewogICAgIFZhbHVlSW1wICphVmFsdWUgPSBOVUxMOwogCkBAIC0yODYsNyArMjg3
LDcgQEAgVmFsdWVJbXAgKkJpbmRpbmdzOjpjb252ZXJ0T2JqY1ZhbHVlVG9WYQogfQogCiAKLU9i
amNWYWx1ZVR5cGUgQmluZGluZ3M6Om9iamNWYWx1ZVR5cGVGb3JUeXBlIChjb25zdCBjaGFyICp0
eXBlKQorT2JqY1ZhbHVlVHlwZSBvYmpjVmFsdWVUeXBlRm9yVHlwZSAoY29uc3QgY2hhciAqdHlw
ZSkKIHsKICAgICBpbnQgdHlwZUxlbmd0aCA9IHN0cmxlbih0eXBlKTsKICAgICBPYmpjVmFsdWVU
eXBlIG9iamNWYWx1ZVR5cGUgPSBPYmpjSW52YWxpZFR5cGU7CkBAIC0zMzIsMTIgKzMzMywyNCBA
QCBPYmpjVmFsdWVUeXBlIEJpbmRpbmdzOjpvYmpjVmFsdWVUeXBlRm9yCiB9CiAKIAotdm9pZCAq
QmluZGluZ3M6OmNyZWF0ZU9iamNJbnN0YW5jZUZvclZhbHVlIChPYmplY3RJbXAgKnZhbHVlLCBj
b25zdCBSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IFJvb3RPYmplY3QgKmN1cnJlbnQpCit2b2lk
ICpjcmVhdGVPYmpjSW5zdGFuY2VGb3JWYWx1ZShWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IFJvb3RP
YmplY3QgKm9yaWdpbiwgY29uc3QgUm9vdE9iamVjdCAqY3VycmVudCkKIHsKICAgICBpZiAoIXZh
bHVlLT5pc09iamVjdCgpKQogCXJldHVybiAwOworICAgIE9iamVjdEltcCAqb2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KHZhbHVlKTsKKyAgICByZXR1cm4gW1tbV2ViU2NyaXB0T2Jq
ZWN0IGFsbG9jXSBfaW5pdFdpdGhPYmplY3RJbXA6b2JqZWN0IG9yaWdpbkV4ZWN1dGlvbkNvbnRl
eHQ6b3JpZ2luIGV4ZWN1dGlvbkNvbnRleHQ6Y3VycmVudF0gYXV0b3JlbGVhc2VdOworfQogCi0g
ICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZSk7Ci0gICAg
Ci0gICAgcmV0dXJuIFtbW1dlYlNjcmlwdE9iamVjdCBhbGxvY10gX2luaXRXaXRoT2JqZWN0SW1w
OmltcCBvcmlnaW5FeGVjdXRpb25Db250ZXh0Om9yaWdpbiBleGVjdXRpb25Db250ZXh0OmN1cnJl
bnRdIGF1dG9yZWxlYXNlXTsKK09iamVjdEltcCAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMs
IEVycm9yVHlwZSB0eXBlLCBOU1N0cmluZyAqbWVzc2FnZSkKK3sKKyAgICBhc3NlcnQobWVzc2Fn
ZSk7CisgICAgc2l6ZV90IGxlbmd0aCA9IFttZXNzYWdlIGxlbmd0aF07CisgICAgdW5pY2hhciAq
YnVmZmVyID0gbmV3IHVuaWNoYXJbbGVuZ3RoXTsKKyAgICBbbWVzc2FnZSBnZXRDaGFyYWN0ZXJz
OmJ1ZmZlcl07CisgICAgT2JqZWN0SW1wICplcnJvciA9IHRocm93RXJyb3IoZXhlYywgdHlwZSwg
VVN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyICo+KGJ1ZmZlciksIGxlbmd0aCkpOworICAg
IGRlbGV0ZSBbXSBidWZmZXI7CisgICAgcmV0dXJuIGVycm9yOworfQorCit9CiB9CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNTAKZGlmZiAtcCAtdSAtcjEuNTAgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5
X29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCTggQXVn
IDIwMDUgMDQ6MzU6MjIgLTAwMDAJMS41MAorKysgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29i
amVjdC5jcHAJMTUgQXVnIDIwMDUgMDU6NTM6NTggLTAwMDAKQEAgLTQyMSw2ICs0MjEsMTQgQEAg
Ym9vbCBBcnJheVByb3RvRnVuY0ltcDo6aW1wbGVtZW50c0NhbGwoKQogICByZXR1cm4gdHJ1ZTsK
IH0KIAorc3RhdGljIFZhbHVlSW1wICpnZXRQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqb2JqLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAg
ICBpZiAoIW9iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgpOworfQor
CiAvLyBFQ01BIDE1LjQuNAogVmFsdWVJbXAgKkFycmF5UHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKIHsKQEAgLTQzMiwxMSArNDQwLDggQEAgVmFsdWVJbXAgKkFycmF5UHJvdG9GdW5jSW1wOjpj
YWxsQXNGdW5jdAogICBjYXNlIFRvTG9jYWxlU3RyaW5nOgogICBjYXNlIFRvU3RyaW5nOgogCi0g
ICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmQXJyYXlJbnN0YW5jZUltcDo6aW5mbykpIHsKLSAg
ICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgfQorICAg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJkFycmF5SW5zdGFuY2VJbXA6OmluZm8pKQorICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIC8vIGZhbGwgdGhyb3Vn
aAogICBjYXNlIEpvaW46IHsKQEAgLTQ3MiwxMCArNDc3LDcgQEAgVmFsdWVJbXAgKkFycmF5UHJv
dG9GdW5jSW1wOjpjYWxsQXNGdW5jdAogICAgICAgICAgIGlmIChjb252ZXJzaW9uRnVuY3Rpb24t
PmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGNvbnZlcnNpb25GdW5jdGlv
biktPmltcGxlbWVudHNDYWxsKCkpIHsKICAgICAgICAgICAgIHN0ciArPSBzdGF0aWNfY2FzdDxP
YmplY3RJbXAgKj4oY29udmVyc2lvbkZ1bmN0aW9uKS0+Y2FsbChleGVjLCBvLCBMaXN0KCkpLT50
b1N0cmluZyhleGVjKTsKICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVVN0cmluZyBt
c2cgPSAiQ2FuJ3QgY29udmVydCAiICsgby0+Y2xhc3NOYW1lKCkgKyAiIG9iamVjdCB0byBzdHJp
bmciOwotICAgICAgICAgICAgT2JqZWN0SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywg
UmFuZ2VFcnJvciwgbXNnLmNzdHJpbmcoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAiQ2FuJ3QgY29udmVydCAiICsg
by0+Y2xhc3NOYW1lKCkgKyAiIG9iamVjdCB0byBzdHJpbmciKTsKICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgc3RyICs9IGVsZW1lbnQtPnRvU3RyaW5nKGV4ZWMpOwpA
QCAtNTAyLDggKzUwNCw3IEBAIFZhbHVlSW1wICpBcnJheVByb3RvRnVuY0ltcDo6Y2FsbEFzRnVu
Y3QKICAgICAgICAgLy8gYnkgY2hlY2tpbmcgZm9yIG4gIT0gMCwgYnV0IHRoYXQgZG9lc24ndCB3
b3JrIGlmIHRoaXNPYmogaXMgYW4gZW1wdHkgYXJyYXkuCiAgICAgICAgIGxlbmd0aCA9IGN1ck9i
ai0+Z2V0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgICAg
IHdoaWxlIChrIDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgVmFsdWVJbXAgKnY7Ci0gICAgICAgICAg
aWYgKGN1ck9iai0+Z2V0UHJvcGVydHkoZXhlYywgaywgdikpCisgICAgICAgICAgaWYgKFZhbHVl
SW1wICp2ID0gZ2V0UHJvcGVydHkoZXhlYywgY3VyT2JqLCBrKSkKICAgICAgICAgICAgIGFyci0+
cHV0KGV4ZWMsIG4sIHYpOwogICAgICAgICAgIG4rKzsKICAgICAgICAgICBrKys7CkBAIC01NDYs
MTcgKzU0NywxNSBAQCBWYWx1ZUltcCAqQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGludCBrID0gMDsgayA8IG1pZGRsZTsgaysrKSB7CiAgICAgICB1
bnNpZ25lZCBsazEgPSBsZW5ndGggLSBrIC0gMTsKLSAgICAgIFZhbHVlSW1wICpvYmo7Ci0gICAg
ICBWYWx1ZUltcCAqb2JqMjsKLSAgICAgIGJvb2wgaGFzMiA9IHRoaXNPYmotPmdldFByb3BlcnR5
KGV4ZWMsIGxrMSwgb2JqMik7Ci0gICAgICBib29sIGhhczEgPSB0aGlzT2JqLT5nZXRQcm9wZXJ0
eShleGVjLCBrLCBvYmopOworICAgICAgVmFsdWVJbXAgKm9iajIgPSBnZXRQcm9wZXJ0eShleGVj
LCB0aGlzT2JqLCBsazEpOworICAgICAgVmFsdWVJbXAgKm9iaiA9IGdldFByb3BlcnR5KGV4ZWMs
IHRoaXNPYmosIGspOwogCi0gICAgICBpZiAoaGFzMikgCisgICAgICBpZiAob2JqMikgCiAgICAg
ICAgIHRoaXNPYmotPnB1dChleGVjLCBrLCBvYmoyKTsKICAgICAgIGVsc2UKICAgICAgICAgdGhp
c09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywgayk7CiAKLSAgICAgIGlmIChoYXMxKQorICAgICAg
aWYgKG9iaikKICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGxrMSwgb2JqKTsKICAgICAgIGVs
c2UKICAgICAgICAgdGhpc09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywgbGsxKTsKQEAgLTU3MSw4
ICs1NzAsNyBAQCBWYWx1ZUltcCAqQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0CiAgICAg
fSBlbHNlIHsKICAgICAgIHJlc3VsdCA9IHRoaXNPYmotPmdldChleGVjLCAwKTsKICAgICAgIGZv
cih1bnNpZ25lZCBpbnQgayA9IDE7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICBWYWx1ZUlt
cCAqb2JqOwotICAgICAgICBpZiAodGhpc09iai0+Z2V0UHJvcGVydHkoZXhlYywgaywgb2JqKSkK
KyAgICAgICAgaWYgKFZhbHVlSW1wICpvYmogPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBr
KSkKICAgICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgay0xLCBvYmopOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgdGhpc09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywgay0xKTsKQEAgLTYxOCw5
ICs2MTYsOCBAQCBWYWx1ZUltcCAqQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0CiAgICAg
aW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KGJlZ2luKTsKICAgICBpbnQgZSA9IHN0YXRpY19jYXN0
PGludD4oZW5kKTsKICAgICBmb3IoaW50IGsgPSBiOyBrIDwgZTsgaysrLCBuKyspIHsKLSAgICAg
IFZhbHVlSW1wICpvYmo7Ci0gICAgICBpZiAodGhpc09iai0+Z2V0UHJvcGVydHkoZXhlYywgaywg
b2JqKSkKLSAgICAgICAgcmVzT2JqLT5wdXQoZXhlYywgbiwgb2JqKTsKKyAgICAgIGlmIChWYWx1
ZUltcCAqdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspKQorICAgICAgICByZXNPYmot
PnB1dChleGVjLCBuLCB2KTsKICAgICB9CiAgICAgcmVzT2JqLT5wdXQoZXhlYywgbGVuZ3RoUHJv
cGVydHlOYW1lLCBOdW1iZXIobiksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgYnJlYWs7
CkBAIC03MTIsOSArNzA5LDggQEAgVmFsdWVJbXAgKkFycmF5UHJvdG9GdW5jSW1wOjpjYWxsQXNG
dW5jdAogCiAgICAgLy9wcmludGYoICJTcGxpY2luZyBmcm9tICVkLCBkZWxldGVDb3VudD0lZCBc
biIsIGJlZ2luLCBkZWxldGVDb3VudCApOwogICAgIGZvcih1bnNpZ25lZCBpbnQgayA9IDA7IGsg
PCBkZWxldGVDb3VudDsgaysrKSB7Ci0gICAgICBWYWx1ZUltcCAqb2JqOwotICAgICAgaWYgKHRo
aXNPYmotPmdldFByb3BlcnR5KGV4ZWMsIGsrYmVnaW4sIG9iaikpCi0gICAgICAgIHJlc09iai0+
cHV0KGV4ZWMsIGssIG9iaik7CisgICAgICBpZiAoVmFsdWVJbXAgKnYgPSBnZXRQcm9wZXJ0eShl
eGVjLCB0aGlzT2JqLCBrK2JlZ2luKSkKKyAgICAgICAgcmVzT2JqLT5wdXQoZXhlYywgaywgdik7
CiAgICAgfQogICAgIHJlc09iai0+cHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVy
KGRlbGV0ZUNvdW50KSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKIApAQCAtNzI1LDkgKzcyMSw4
IEBAIFZhbHVlSW1wICpBcnJheVByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuY3QKICAgICAgIHsKICAg
ICAgICAgZm9yICggdW5zaWduZWQgaW50IGsgPSBiZWdpbjsgayA8IGxlbmd0aCAtIGRlbGV0ZUNv
dW50OyArK2sgKQogICAgICAgICB7Ci0gICAgICAgICAgVmFsdWVJbXAgKm9iajsKLSAgICAgICAg
ICBpZiAodGhpc09iai0+Z2V0UHJvcGVydHkoZXhlYywgaytkZWxldGVDb3VudCwgb2JqKSkKLSAg
ICAgICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBrK2FkZGl0aW9uYWxBcmdzLCBvYmopOworICAg
ICAgICAgIGlmIChWYWx1ZUltcCAqdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsrZGVs
ZXRlQ291bnQpKQorICAgICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsrYWRkaXRpb25hbEFy
Z3MsIHYpOwogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3Bl
cnR5KGV4ZWMsIGsrYWRkaXRpb25hbEFyZ3MpOwogICAgICAgICB9CkBAIC03MzgsOCArNzMzLDcg
QEAgVmFsdWVJbXAgKkFycmF5UHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jdAogICAgICAgewogICAg
ICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgayA9IGxlbmd0aCAtIGRlbGV0ZUNvdW50OyAoaW50KWsg
PiBiZWdpbjsgLS1rICkKICAgICAgICAgewotICAgICAgICAgIFZhbHVlSW1wICpvYmo7Ci0gICAg
ICAgICAgaWYgKHRoaXNPYmotPmdldFByb3BlcnR5KGV4ZWMsIGsgKyBkZWxldGVDb3VudCAtIDEs
IG9iaikpCisgICAgICAgICAgaWYgKFZhbHVlSW1wICpvYmogPSBnZXRQcm9wZXJ0eShleGVjLCB0
aGlzT2JqLCBrICsgZGVsZXRlQ291bnQgLSAxKSkKICAgICAgICAgICAgIHRoaXNPYmotPnB1dChl
eGVjLCBrICsgYWRkaXRpb25hbEFyZ3MgLSAxLCBvYmopOwogICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsrYWRkaXRpb25hbEFyZ3MtMSk7
CkBAIC03NTcsOSArNzUxLDggQEAgVmFsdWVJbXAgKkFycmF5UHJvdG9GdW5jSW1wOjpjYWxsQXNG
dW5jdAogICAgIHVuc2lnbmVkIGludCBuckFyZ3MgPSBhcmdzLnNpemUoKTsKICAgICBmb3IgKCB1
bnNpZ25lZCBpbnQgayA9IGxlbmd0aDsgayA+IDA7IC0tayApCiAgICAgewotICAgICAgVmFsdWVJ
bXAgKm9iajsKLSAgICAgIGlmICh0aGlzT2JqLT5nZXRQcm9wZXJ0eShleGVjLCBrIC0gMSwgb2Jq
KSkKLSAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsrbnJBcmdzLTEsIG9iaik7CisgICAgICBp
ZiAoVmFsdWVJbXAgKnYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrIC0gMSkpCisgICAg
ICAgIHRoaXNPYmotPnB1dChleGVjLCBrK25yQXJncy0xLCB2KTsKICAgICAgIGVsc2UKICAgICAg
ICAgdGhpc09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywgaytuckFyZ3MtMSk7CiAgICAgfQpAQCAt
Nzc5LDExICs3NzIsOCBAQCBWYWx1ZUltcCAqQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0
CiAgICAgCiAgICAgT2JqZWN0SW1wICplYWNoRnVuY3Rpb24gPSBhcmdzWzBdLT50b09iamVjdChl
eGVjKTsKICAgICAKLSAgICBpZiAoIWVhY2hGdW5jdGlvbi0+aW1wbGVtZW50c0NhbGwoKSkgewot
ICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgcmV0dXJuIGVycjsKLSAgICB9Cisg
ICAgaWYgKCFlYWNoRnVuY3Rpb24tPmltcGxlbWVudHNDYWxsKCkpCisgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIAogICAgIE9iamVjdEltcCAqYXBwbHlUaGlz
ID0gYXJnc1sxXS0+aXNVbmRlZmluZWRPck51bGwoKSA/IGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRl
cigpLT5nbG9iYWxPYmplY3QoKSA6ICBhcmdzWzFdLT50b09iamVjdChleGVjKTsKICAgICAKQEAg
LTg0NywxMSArODM3LDggQEAgT2JqZWN0SW1wICpBcnJheU9iamVjdEltcDo6Y29uc3RydWN0KEV4
ZQogICAvLyBhIHNpbmdsZSBudW1lcmljIGFyZ3VtZW50IGRlbm90ZXMgdGhlIGFycmF5IHNpemUg
KCEpCiAgIGlmIChhcmdzLnNpemUoKSA9PSAxICYmIGFyZ3NbMF0tPmlzTnVtYmVyKCkpIHsKICAg
ICB1aW50MzJfdCBuID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKG4gIT0gYXJn
c1swXS0+dG9OdW1iZXIoZXhlYykpIHsKLSAgICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsICJBcnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3Vn
aCBwb3NpdGl2ZSBpbnRlZ2VyLiIpOwotICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsK
LSAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9CisgICAgaWYgKG4gIT0gYXJnc1swXS0+dG9OdW1i
ZXIoZXhlYykpCisgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAiQXJy
YXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTsKICAgICBy
ZXR1cm4gbmV3IEFycmF5SW5zdGFuY2VJbXAoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1
aWx0aW5BcnJheVByb3RvdHlwZSgpLCBuKTsKICAgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvYm9vbF9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9ranMvYm9vbF9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRp
ZmYgLXAgLXUgLXIxLjEyIEphdmFTY3JpcHRDb3JlL2tqcy9ib29sX29iamVjdC5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9ib29sX29iamVjdC5jcHAJOCBBdWcgMjAwNSAwNDowNzoyNyAtMDAw
MAkxLjEyCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvYm9vbF9vYmplY3QuY3BwCTE1IEF1ZyAyMDA1
IDA1OjUzOjU5IC0wMDAwCkBAIC03OCwxMSArNzgsOCBAQCBib29sIEJvb2xlYW5Qcm90b0Z1bmNJ
bXA6OmltcGxlbWVudHNDYWxsCiBWYWx1ZUltcCAqQm9vbGVhblByb3RvRnVuY0ltcDo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
Ji8qYXJncyovKQogewogICAvLyBubyBnZW5lcmljIGZ1bmN0aW9uLiAidGhpcyIgaGFzIHRvIGJl
IGEgQm9vbGVhbiBvYmplY3QKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmQm9vbGVhbkluc3Rh
bmNlSW1wOjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVy
cjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZCb29sZWFuSW5zdGFuY2VJbXA6Omlu
Zm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgLy8gZXhl
Y3V0ZSAidG9TdHJpbmcoKSIgb3IgInZhbHVlT2YoKSIsIHJlc3BlY3RpdmVseQogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjUxCmRpZmYgLXAgLXUgLXIxLjUxIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29i
amVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAJMTEgQXVnIDIw
MDUgMTA6NTc6MTkgLTAwMDAJMS41MQorKysgSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0
LmNwcAkxNSBBdWcgMjAwNSAwNTo1NDowMCAtMDAwMApAQCAtNTI2LDkgKzUyNiw3IEBAIFZhbHVl
SW1wICpEYXRlUHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jdGkKIAogICAgIC8vIFRvU3RyaW5nIGFu
ZCBWYWx1ZU9mIGFyZSBnZW5lcmljIGFjY29yZGluZyB0byB0aGUgc3BlYywgYnV0IHRoZSBtb3pp
bGxhCiAgICAgLy8gdGVzdHMgc3VnZ2VzdCBvdGhlcndpc2UuLi4KLSAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwotICAgIHJldHVybiBlcnI7CisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKICAgfQogCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlv
bi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTIKZGlmZiAtcCAtdSAtcjEuNTIgSmF2YVNj
cmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9u
LmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjI4IC0wMDAwCTEuNTIKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9mdW5jdGlvbi5jcHAJMTUgQXVnIDIwMDUgMDU6NTQ6MDAgLTAwMDAKQEAgLTYyOCwxMSArNjI4
LDggQEAgc3RhdGljIFZhbHVlSW1wICpkZWNvZGUoRXhlY1N0YXRlICpleGVjLAogICAgICAgICB9
CiAgICAgICB9CiAgICAgICBpZiAoY2hhckxlbiA9PSAwKSB7Ci0gICAgICAgIGlmIChzdHJpY3Qp
IHsKLQkgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFVSSUVycm9yKTsK
LSAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwotICAgICAgICAgIHJldHVybiBl
cnJvcjsKLSAgICAgICAgfQorICAgICAgICBpZiAoc3RyaWN0KQorICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFVSSUVycm9yKTsKICAgICAgICAgLy8gVGhlIG9ubHkgY2FzZSB3aGVy
ZSB3ZSBkb24ndCB1c2UgInN0cmljdCIgbW9kZSBpcyB0aGUgInVuZXNjYXBlIiBmdW5jdGlvbi4K
ICAgICAgICAgLy8gRm9yIHRoYXQsIGl0J3MgZ29vZCB0byBzdXBwb3J0IHRoZSB3b25reSAiJXUi
IHN5bnRheCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdpbklFLgogICAgICAgICBpZiAoayA8PSBs
ZW4gLSA2ICYmIHBbMV0gPT0gJ3UnCkBAIC04MDYsMTIgKzgwMyw4IEBAIFZhbHVlSW1wICpHbG9i
YWxGdW5jSW1wOjpjYWxsQXNGdW5jdGlvbigKICAgICAgICAgfQogCiAgICAgICAgIC8vIG5vIHBy
b2dyYW0gbm9kZSBtZWFucyBhIHN5bnRheCBvY2N1cnJlZAotICAgICAgICBpZiAoIXByb2dOb2Rl
KSB7Ci0gICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4
RXJyb3IsZXJyTXNnLmFzY2lpKCksZXJyTGluZSk7Ci0gICAgICAgICAgZXJyLT5wdXQoZXhlYywi
c2lkIixOdW1iZXIoc2lkKSk7Ci0gICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0g
ICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXByb2dOb2RlKQor
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVy
ckxpbmUsIHNpZCwgTlVMTCk7CiAgICAgICAgIAogICAgICAgICBwcm9nTm9kZS0+cmVmKCk7CiAg
ICAgICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9v
YmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI4CmRpZmYgLXAgLXUgLXIxLjI4IEph
dmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvZnVuY3Rpb25fb2JqZWN0LmNwcAkxNCBBdWcgMjAwNSAxNjowNDoxOSAtMDAwMAkxLjI4Cisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb25fb2JqZWN0LmNwcAkxNSBBdWcgMjAwNSAwNTo1
NDowMCAtMDAwMApAQCAtODgsOSArODgsNyBAQCBWYWx1ZUltcCAqRnVuY3Rpb25Qcm90b0Z1bmNJ
bXA6OmNhbGxBc0Z1CiAjaWZuZGVmIE5ERUJVRwogICAgICAgZnByaW50ZihzdGRlcnIsImF0dGVt
cHRlZCB0b1N0cmluZygpIGNhbGwgb24gbnVsbCBvciBub24tZnVuY3Rpb24gb2JqZWN0XG4iKTsK
ICNlbmRpZgotICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVy
cm9yKTsKLSAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgcmV0dXJuIGVycjsK
KyAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgfQogICAgIGlm
ICh0aGlzT2JqLT5pbmhlcml0cygmRGVjbGFyZWRGdW5jdGlvbkltcDo6aW5mbykpIHsKICAgICAg
ICBEZWNsYXJlZEZ1bmN0aW9uSW1wICpmaSA9IHN0YXRpY19jYXN0PERlY2xhcmVkRnVuY3Rpb25J
bXAqPgpAQCAtMTExLDExICsxMDksOCBAQCBWYWx1ZUltcCAqRnVuY3Rpb25Qcm90b0Z1bmNJbXA6
OmNhbGxBc0Z1CiAgICAgVmFsdWVJbXAgKmFyZ0FycmF5ID0gYXJnc1sxXTsKICAgICBPYmplY3RJ
bXAgKmZ1bmMgPSB0aGlzT2JqOwogCi0gICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKSB7
Ci0gICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwot
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICByZXR1cm4gZXJyOwotICAgIH0K
KyAgICBpZiAoIWZ1bmMtPmltcGxlbWVudHNDYWxsKCkpCisgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgT2JqZWN0SW1wICphcHBseVRoaXM7CiAgICAgaWYg
KHRoaXNBcmctPmlzVW5kZWZpbmVkT3JOdWxsKCkpCkBAIC0xMzQsMTEgKzEyOSw4IEBAIFZhbHVl
SW1wICpGdW5jdGlvblByb3RvRnVuY0ltcDo6Y2FsbEFzRnUKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgICBhcHBseUFyZ3MuYXBwZW5k
KGFyZ0FycmF5T2JqLT5nZXQoZXhlYyxpKSk7CiAgICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICB9
CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAgICAgfQogICAgIHJlc3VsdCA9IGZ1bmMtPmNhbGwoZXhlYyxhcHBseVRoaXMsYXBwbHlBcmdz
KTsKICAgICB9CkBAIC0xNDcsMTEgKzEzOSw4IEBAIFZhbHVlSW1wICpGdW5jdGlvblByb3RvRnVu
Y0ltcDo6Y2FsbEFzRnUKICAgICBWYWx1ZUltcCAqdGhpc0FyZyA9IGFyZ3NbMF07CiAgICAgT2Jq
ZWN0SW1wICpmdW5jID0gdGhpc09iajsKIAotICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwo
KSkgewotICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKLSAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgcmV0dXJuIGVycjsKLSAg
ICB9CisgICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQorICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIE9iamVjdEltcCAqY2FsbFRoaXM7CiAgICAg
aWYgKHRoaXNBcmctPmlzVW5kZWZpbmVkT3JOdWxsKCkpCkBAIC0yMjIsMTMgKzIxMSwxMCBAQCBP
YmplY3RJbXAgKkZ1bmN0aW9uT2JqZWN0SW1wOjpjb25zdHJ1Y3QoCiAgIH0KIAogICAvLyBubyBw
cm9ncmFtIG5vZGUgPT0gc3ludGF4IGVycm9yIC0gdGhyb3cgYSBzeW50YXggZXJyb3IKLSAgaWYg
KCFwcm9nTm9kZSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5
bnRheEVycm9yLGVyck1zZy5hc2NpaSgpLGVyckxpbmUpOworICBpZiAoIXByb2dOb2RlKQogICAg
IC8vIHdlIGNhbid0IHJldHVybiBhIENvbXBsZXRpb24oVGhyb3cpIGhlcmUsIHNvIGp1c3Qgc2V0
IHRoZSBleGNlcHRpb24KICAgICAvLyBhbmQgcmV0dXJuIGl0Ci0gICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNpZCwgJnNvdXJjZVVSTCk7CiAKICAg
U2NvcGVDaGFpbiBzY29wZUNoYWluOwogICBzY29wZUNoYWluLnB1c2goZXhlYy0+ZHluYW1pY0lu
dGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpKTsKQEAgLTI2NiwxMSArMjUyLDcgQEAgT2JqZWN0
SW1wICpGdW5jdGlvbk9iamVjdEltcDo6Y29uc3RydWN0KAogCSAgICAgIGNvbnRpbnVlOwogCSAg
fSAvLyBlbHNlIGVycm9yCiAgICAgICB9Ci0gICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxTeW50YXhFcnJvciwKLQkJCQkgSTE4Tl9OT09QKCJTeW50YXggZXJyb3IgaW4g
cGFyYW1ldGVyIGxpc3QiKSwKLQkJCQkgLTEpOwotICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVy
cik7Ci0gICAgICByZXR1cm4gZXJyOworICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IsICJTeW50YXggZXJyb3IgaW4gcGFyYW1ldGVyIGxpc3QiKTsKICAgfQogCiAgIExp
c3QgY29uc0FyZ3M7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYzCmRpZmYgLXAgLXUgLXIxLjYzIEphdmFTY3JpcHRD
b3JlL2tqcy9pbnRlcm5hbC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJ
MTQgQXVnIDIwMDUgMTY6NDE6NDcgLTAwMDAJMS42MworKysgSmF2YVNjcmlwdENvcmUva2pzL2lu
dGVybmFsLmNwcAkxNSBBdWcgMjAwNSAwNTo1NDowMSAtMDAwMApAQCAtMTI3LDkgKzEyNyw3IEBA
IFVTdHJpbmcgVW5kZWZpbmVkSW1wOjp0b1N0cmluZyhFeGVjU3RhdGUKIAogT2JqZWN0SW1wICpV
bmRlZmluZWRJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKIHsKLSAgT2JqZWN0
SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvciwgSTE4Tl9OT09QKCJVbmRl
ZmluZWQgdmFsdWUiKSk7Ci0gIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICByZXR1cm4gZXJy
OworICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJVbmRlZmluZWQgdmFsdWUi
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bGxJbXAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Niw5ICsxNTQsNyBAQCBVU3Ry
aW5nIE51bGxJbXA6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqLyplCiAKIE9iamVjdEltcCAqTnVsbElt
cDo6dG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdAogewotICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCBJMThOX05PT1AoIk51bGwgdmFsdWUiKSk7
Ci0gIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICByZXR1cm4gZXJyOworICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJOdWxsIHZhbHVlIik7CiB9CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCb29sZWFuSW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC02NjQsOCArNjYwLDcgQEAgQ29tcGxldGlvbiBJbnRlcnByZXRlcklt
cDo6ZXZhbHVhdGUoY29ucwogICAKICAgLy8gbm8gcHJvZ3JhbSBub2RlIG1lYW5zIGEgc3ludGF4
IGVycm9yIG9jY3VycmVkCiAgIGlmICghcHJvZ05vZGUpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoJmdsb2JFeGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLmFzY2lpKCksIGVy
ckxpbmUsIC0xLCAmc291cmNlVVJMKTsKLSAgICBlcnItPnB1dCgmZ2xvYkV4ZWMsICJzaWQiLCBO
dW1iZXIoc2lkKSk7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKCZnbG9iRXhl
YywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc2lkLCAmc291cmNlVVJMKTsKICNpZiBB
UFBMRV9DSEFOR0VTCiAgICAgdW5sb2NrSW50ZXJwcmV0ZXIoKTsKICNlbmRpZgpAQCAtODI2LDkg
KzgyMSw3IEBAIGJvb2wgSW50ZXJuYWxGdW5jdGlvbkltcDo6aGFzSW5zdGFuY2UoRXgKIAogICBW
YWx1ZUltcCAqcHJvdCA9IGdldChleGVjLHByb3RvdHlwZVByb3BlcnR5TmFtZSk7CiAgIGlmICgh
cHJvdC0+aXNPYmplY3QoKSAmJiAhcHJvdC0+aXNOdWxsKCkpIHsKLSAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCAiSW52YWxpZCBwcm90b3R5cGUgZW5j
b3VudGVyZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBpbnN0YW5jZW9m
IG9wZXJhdGlvbi4iKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAgICB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvciwgIkludmFsaWQgcHJvdG90eXBlIGVuY291bnRlcmVkIGluIGlu
c3RhbmNlb2Ygb3BlcmF0aW9uLiIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcz
CmRpZmYgLXAgLXUgLXIxLjczIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJMTIgQXVnIDIwMDUgMjM6MjA6NDggLTAwMDAJMS43Mwor
KysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkxNSBBdWcgMjAwNSAwNTo1NDowMyAtMDAw
MApAQCAtNjMsNyArNjMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogICAgIHJldHVybiBDb21w
bGV0aW9uKFRocm93LCBleGVjLT5leGNlcHRpb24oKSk7IFwKICAgfSBcCiAgIGlmIChDb2xsZWN0
b3I6Om91dE9mTWVtb3J5KCkpIFwKLSAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgRXJyb3I6
OmNyZWF0ZShleGVjLEdlbmVyYWxFcnJvciwiT3V0IG9mIG1lbW9yeSIpKTsKKyAgICByZXR1cm4g
Q29tcGxldGlvbihUaHJvdywgRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsICJPdXQg
b2YgbWVtb3J5IikpOwogCiAjZGVmaW5lIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFIFwKICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7IFwKQEAgLTEzNSwxMDggKzEzNSw3MSBAQCB2b2lkIE5v
ZGU6OmZpbmFsQ2hlY2soKQogCiBWYWx1ZUltcCAqTm9kZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUg
KmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2cpCiB7Ci0gIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtc2csIGxpbmVObygpLCBzb3VyY2VJZCgpLCAmc291
cmNlVVJMKTsKLSAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gIHJldHVybiBlcnI7CisgICAg
cmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtc2csIGxpbmVObygpLCBzb3VyY2VJZCgp
LCAmc291cmNlVVJMKTsKIH0KIAotVmFsdWVJbXAgKk5vZGU6OnRocm93RXJyb3IoRXhlY1N0YXRl
ICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnLCBWYWx1ZUltcCAqdiwgTm9kZSAq
ZXhwcikKK3N0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0cmluZyAmc3RyaW5nLCBjb25zdCBVU3Ry
aW5nICZzdWJzdHJpbmcpCiB7Ci0gIGNoYXIgKnZTdHIgPSBzdHJkdXAodi0+dG9TdHJpbmcoZXhl
YykuYXNjaWkoKSk7Ci0gIGNoYXIgKmV4cHJTdHIgPSBzdHJkdXAoZXhwci0+dG9TdHJpbmcoKS5h
c2NpaSgpKTsKLSAgCi0gIGludCBsZW5ndGggPSAgc3RybGVuKG1zZykgLSA0IC8qIHR3byAlcyAq
LyArIHN0cmxlbih2U3RyKSArIHN0cmxlbihleHByU3RyKSArIDEgLyogbnVsbCB0ZXJtaW5hdG9y
ICovOwotICBjaGFyICpzdHIgPSBuZXcgY2hhcltsZW5ndGhdOwotICBzcHJpbnRmKHN0ciwgbXNn
LCB2U3RyLCBleHByU3RyKTsKLSAgZnJlZSh2U3RyKTsKLSAgZnJlZShleHByU3RyKTsKKyAgICBp
bnQgcG9zaXRpb24gPSBzdHJpbmcuZmluZCgiJXMiKTsKKyAgICBhc3NlcnQocG9zaXRpb24gIT0g
LTEpOworICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoMCwgcG9zaXRpb24pICsgc3Vic3RyaW5n
ICsgc3RyaW5nLnN1YnN0cihwb3NpdGlvbiArIDIpOworfQogCi0gIFZhbHVlSW1wICpyZXN1bHQg
PSB0aHJvd0Vycm9yKGV4ZWMsIGUsIHN0cik7Ci0gIGRlbGV0ZSBbXSBzdHI7Ci0gIAotICByZXR1
cm4gcmVzdWx0OworVmFsdWVJbXAgKk5vZGU6OnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBF
cnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnLCBWYWx1ZUltcCAqdiwgTm9kZSAqZXhwcikKK3sK
KyAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7CisgICAgc3Vic3RpdHV0ZShtZXNzYWdlLCB2LT50
b1N0cmluZyhleGVjKSk7CisgICAgc3Vic3RpdHV0ZShtZXNzYWdlLCBleHByLT50b1N0cmluZygp
KTsKKyAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygp
LCBzb3VyY2VJZCgpLCAmc291cmNlVVJMKTsKIH0KIAogCiBWYWx1ZUltcCAqTm9kZTo6dGhyb3dF
cnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2csIElkZW50
aWZpZXIgbGFiZWwpCiB7Ci0gIGNvbnN0IGNoYXIgKmwgPSBsYWJlbC5hc2NpaSgpOwotICBpbnQg
bGVuZ3RoID0gc3RybGVuKG1zZykgLSAyIC8qICVzICovICsgc3RybGVuKGwpICsgMSAvKiBudWxs
IHRlcm1pbmF0b3IgKi87Ci0gIGNoYXIgKm1lc3NhZ2UgPSBuZXcgY2hhcltsZW5ndGhdOwotICBz
cHJpbnRmKG1lc3NhZ2UsIG1zZywgbCk7Ci0KLSAgVmFsdWVJbXAgKnJlc3VsdCA9IHRocm93RXJy
b3IoZXhlYywgZSwgbWVzc2FnZSk7Ci0gIGRlbGV0ZSBbXSBtZXNzYWdlOwotCi0gIHJldHVybiBy
ZXN1bHQ7CisgICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOworICAgIHN1YnN0aXR1dGUobWVzc2Fn
ZSwgbGFiZWwudXN0cmluZygpKTsKKyAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUs
IG1lc3NhZ2UsIGxpbmVObygpLCBzb3VyY2VJZCgpLCAmc291cmNlVVJMKTsKIH0KIAogVmFsdWVJ
bXAgKk5vZGU6OnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3Qg
Y2hhciAqbXNnLCBWYWx1ZUltcCAqdiwgTm9kZSAqZTEsIE5vZGUgKmUyKQogewotICBjaGFyICp2
U3RyID0gc3RyZHVwKHYtPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOwotICBjaGFyICplMVN0ciA9
IHN0cmR1cChlMS0+dG9TdHJpbmcoKS5hc2NpaSgpKTsKLSAgY2hhciAqZTJTdHIgPSBzdHJkdXAo
ZTItPnRvU3RyaW5nKCkuYXNjaWkoKSk7Ci0gIAotICBpbnQgbGVuZ3RoID0gIHN0cmxlbihtc2cp
IC0gNiAvKiB0aHJlZSAlcyAqLyArIHN0cmxlbih2U3RyKSArIHN0cmxlbihlMVN0cikgKyBzdHJs
ZW4oZTJTdHIpICsgMSAvKiBudWxsIHRlcm1pbmF0b3IgKi87Ci0gIGNoYXIgKnN0ciA9IG5ldyBj
aGFyW2xlbmd0aF07Ci0gIHNwcmludGYoc3RyLCBtc2csIHZTdHIsIGUxU3RyLCBlMlN0cik7Ci0g
IGZyZWUodlN0cik7Ci0gIGZyZWUoZTFTdHIpOwotICBmcmVlKGUyU3RyKTsKLQotICBWYWx1ZUlt
cCAqcmVzdWx0ID0gdGhyb3dFcnJvcihleGVjLCBlLCBzdHIpOwotICBkZWxldGUgW10gc3RyOwot
ICAKLSAgcmV0dXJuIHJlc3VsdDsKKyAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7CisgICAgc3Vi
c3RpdHV0ZShtZXNzYWdlLCB2LT50b1N0cmluZyhleGVjKSk7CisgICAgc3Vic3RpdHV0ZShtZXNz
YWdlLCBlMS0+dG9TdHJpbmcoKSk7CisgICAgc3Vic3RpdHV0ZShtZXNzYWdlLCBlMi0+dG9TdHJp
bmcoKSk7CisgICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtZXNzYWdlLCBsaW5l
Tm8oKSwgc291cmNlSWQoKSwgJnNvdXJjZVVSTCk7CiB9CiAKIFZhbHVlSW1wICpOb2RlOjp0aHJv
d0Vycm9yKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgVmFs
dWVJbXAgKnYsIE5vZGUgKmV4cHIsIElkZW50aWZpZXIgbGFiZWwpCiB7Ci0gIGNoYXIgKnZTdHIg
PSBzdHJkdXAodi0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7Ci0gIGNoYXIgKmV4cHJTdHIgPSBz
dHJkdXAoZXhwci0+dG9TdHJpbmcoKS5hc2NpaSgpKTsKLSAgY29uc3QgY2hhciAqbCA9IGxhYmVs
LmFzY2lpKCk7Ci0gIGludCBsZW5ndGggPSBzdHJsZW4obXNnKSAtIDYgLyogdGhyZWUgJXMgKi8g
KyBzdHJsZW4odlN0cikgKyBzdHJsZW4oZXhwclN0cikgKyBzdHJsZW4obCkgKyAxIC8qIG51bGwg
dGVybWluYXRvciAqLzsKLSAgY2hhciAqbWVzc2FnZSA9IG5ldyBjaGFyW2xlbmd0aF07Ci0gIHNw
cmludGYobWVzc2FnZSwgbXNnLCB2U3RyLCBleHByU3RyLCBsKTsKLSAgZnJlZSh2U3RyKTsKLSAg
ZnJlZShleHByU3RyKTsKLQotICBWYWx1ZUltcCAqcmVzdWx0ID0gdGhyb3dFcnJvcihleGVjLCBl
LCBtZXNzYWdlKTsKLSAgZGVsZXRlIFtdIG1lc3NhZ2U7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKKyAg
ICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7CisgICAgc3Vic3RpdHV0ZShtZXNzYWdlLCB2LT50b1N0
cmluZyhleGVjKSk7CisgICAgc3Vic3RpdHV0ZShtZXNzYWdlLCBleHByLT50b1N0cmluZygpKTsK
KyAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBz
b3VyY2VJZCgpLCAmc291cmNlVVJMKTsKIH0KIAogVmFsdWVJbXAgKk5vZGU6OnRocm93RXJyb3Io
RXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnLCBWYWx1ZUltcCAq
diwgSWRlbnRpZmllciBsYWJlbCkKIHsKLSAgY2hhciAqdlN0ciA9IHN0cmR1cCh2LT50b1N0cmlu
ZyhleGVjKS5hc2NpaSgpKTsKLSAgY29uc3QgY2hhciAqbCA9IGxhYmVsLmFzY2lpKCk7Ci0gIGlu
dCBsZW5ndGggPSBzdHJsZW4obXNnKSAtIDQgLyogdHdvICVzICovICsgc3RybGVuKHZTdHIpICsg
c3RybGVuKGwpICsgMSAvKiBudWxsIHRlcm1pbmF0b3IgKi87Ci0gIGNoYXIgKm1lc3NhZ2UgPSBu
ZXcgY2hhcltsZW5ndGhdOwotICBzcHJpbnRmKG1lc3NhZ2UsIG1zZywgdlN0ciwgbCk7Ci0gIGZy
ZWUodlN0cik7Ci0KLSAgVmFsdWVJbXAgKnJlc3VsdCA9IHRocm93RXJyb3IoZXhlYywgZSwgbWVz
c2FnZSk7Ci0gIGRlbGV0ZSBbXSBtZXNzYWdlOwotCi0gIHJldHVybiByZXN1bHQ7CisgICAgVVN0
cmluZyBtZXNzYWdlID0gbXNnOworICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgdi0+dG9TdHJpbmco
ZXhlYykpOworICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgbGFiZWwudXN0cmluZygpKTsKKyAgICBy
ZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBzb3VyY2VJ
ZCgpLCAmc291cmNlVVJMKTsKIH0KIAogCiB2b2lkIE5vZGU6OnNldEV4Y2VwdGlvbkRldGFpbHNJ
Zk5lZWRlZChFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnRv
T2JqZWN0KGV4ZWMpOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywg
ImxpbmUiKSAmJgotICAgICAgICAgICAgIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgInNv
dXJjZVVSTCIpKSB7CisgICAgICAgIE9iamVjdEltcCAqZXhjZXB0aW9uID0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKCFleGNlcHRpb24t
Pmhhc1Byb3BlcnR5KGV4ZWMsICJsaW5lIikgJiYgIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhl
YywgInNvdXJjZVVSTCIpKSB7CiAgICAgICAgICAgICBleGNlcHRpb24tPnB1dChleGVjLCAibGlu
ZSIsIE51bWJlcihsaW5lKSk7CiAgICAgICAgICAgICBleGNlcHRpb24tPnB1dChleGVjLCAic291
cmNlVVJMIiwgU3RyaW5nKHNvdXJjZVVSTCkpOwogICAgICAgICB9CiAgICAgfQogfQogCi0KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFN0YXRlbWVudE5vZGU6OlN0YXRlbWVudE5vZGUoKSA6
IGwwKC0xKSwgbDEoLTEpLCBzaWQoLTEpLCBicmVha1BvaW50KGZhbHNlKQogewogfQpAQCAtMzI0
LDEwICsyODcsNyBAQCBWYWx1ZUltcCAqVGhpc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqCiAK
IHN0YXRpYyBWYWx1ZUltcCAqdW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJmlkZW50KQogewotICBVU3RyaW5nIG0gPSBJMThOX05PT1AoIkNh
bid0IGZpbmQgdmFyaWFibGU6ICIpICsgaWRlbnQudXN0cmluZygpOwotICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmVmZXJlbmNlRXJyb3IsIG0uYXNjaWkoKSk7Ci0gIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICByZXR1cm4gZXJyOworICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiQ2FuJ3QgZmluZCB2YXJpYWJsZTogIiArIGlkZW50
LnVzdHJpbmcoKSk7CiB9CiAKIC8vIEVDTUEgMTEuMS4yICYgMTAuMS40CkBAIC0zMzIyLDYgKzMy
ODIsNiBAQCB2b2lkIFNvdXJjZUVsZW1lbnRzTm9kZTo6cHJvY2Vzc1ZhckRlY2xzCiAgICAgbi0+
ZWxlbWVudC0+cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwogfQogCi1Qcm9ncmFtTm9kZTo6UHJvZ3Jh
bU5vZGUoU291cmNlRWxlbWVudHNOb2RlICpzKTogRnVuY3Rpb25Cb2R5Tm9kZShzKSB7Ci0gICAg
Ly9mcHJpbnRmKHN0ZGVyciwiUHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlICVwXG4iLHRoaXMpOwor
UHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqcykgOiBGdW5jdGlv
bkJvZHlOb2RlKHMpCit7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9u
dW1iZXJfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMApkaWZmIC1wIC11IC1y
MS4yMCBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjI4IC0wMDAwCTEuMjAK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAkxNSBBdWcgMjAwNSAwNTo1
NDowNCAtMDAwMApAQCAtMTI4LDExICsxMjgsOCBAQCBzdGF0aWMgVVN0cmluZyBjaGFyX3NlcXVl
bmNlKGNoYXIgYywgaW50CiBWYWx1ZUltcCAqTnVtYmVyUHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKIHsKICAgLy8gbm8gZ2VuZXJpYyBmdW5jdGlvbi4gInRoaXMiIGhhcyB0byBiZSBhIE51bWJl
ciBvYmplY3QKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTnVtYmVySW5zdGFuY2VJbXA6Omlu
Zm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9Cisg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJk51bWJlckluc3RhbmNlSW1wOjppbmZvKSkKKyAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgIFZhbHVlSW1wICp2ID0gdGhp
c09iai0+aW50ZXJuYWxWYWx1ZSgpOwogICBzd2l0Y2ggKGlkKSB7CkBAIC0xNjIsMTMgKzE1OSw4
IEBAIFZhbHVlSW1wICpOdW1iZXJQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmMKICAgewogICAgICAg
VmFsdWVJbXAgKmZyYWN0aW9uRGlnaXRzID0gYXJnc1swXTsKICAgICAgIGRvdWJsZSBkZiA9IGZy
YWN0aW9uRGlnaXRzLT50b0ludGVnZXIoZXhlYyk7Ci0gICAgICBpZiAoIShkZiA+PSAwICYmIGRm
IDw9IDIwKSkgeyAvLyB0cnVlIGZvciBOYU4KLSAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYywgUmFuZ2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidG9GaXhlZCgpIGRpZ2l0cyBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMCBh
bmQgMjAiKTsKLSAgICAgICAgICAKLSAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
LSAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgfQorICAgICAgaWYgKCEoZGYgPj0gMCAmJiBk
ZiA8PSAyMCkpIC8vIHRydWUgZm9yIE5hTgorICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFJhbmdlRXJyb3IsICJ0b0ZpeGVkKCkgZGlnaXRzIGFyZ3VtZW50IG11c3QgYmUgYmV0d2Vl
biAwIGFuZCAyMCIpOwogICAgICAgaW50IGYgPSAoaW50KWRmOwogICAgICAgCiAgICAgICBkb3Vi
bGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtMjEyLDEyICsyMDQsOCBAQCBWYWx1ZUltcCAq
TnVtYmVyUHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jCiAgICAgICAKICAgICAgIFZhbHVlSW1wICpm
cmFjdGlvbkRpZ2l0cyA9IGFyZ3NbMF07CiAgICAgICBkb3VibGUgZGYgPSBmcmFjdGlvbkRpZ2l0
cy0+dG9JbnRlZ2VyKGV4ZWMpOwotICAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpIHsg
Ly8gdHJ1ZSBmb3IgTmFOCi0gICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsIFJhbmdlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InRvRXhwb25lbnRpYWwoKSBhcmd1bWVudCBtdXN0IGJldHdlZW4gMCBhbmQgMjAiKTsKLSAgICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICByZXR1cm4gZXJyOwotICAg
ICAgfQorICAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpIC8vIHRydWUgZm9yIE5hTgor
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJ0b0V4cG9uZW50
aWFsKCkgYXJndW1lbnQgbXVzdCBiZXR3ZWVuIDAgYW5kIDIwIik7CiAgICAgICBpbnQgZiA9IChp
bnQpZGY7CiAgICAgICAKICAgICAgIGludCBkZWNpbWFsQWRqdXN0ID0gMDsKQEAgLTMxNCwxMiAr
MzAyLDggQEAgVmFsdWVJbXAgKk51bWJlclByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuYwogICAgICAg
ICAgIHggPSAteDsKICAgICAgIH0KICAgICAgIAotICAgICAgaWYgKGRwIDwgMSB8fCBkcCA+IDIx
KSB7Ci0gICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdl
RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvUHJlY2lzaW9u
KCkgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDIxIik7Ci0gICAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgIH0KKyAgICAg
IGlmICghKGRwID49IDEgJiYgZHAgPD0gMjEpKSAvLyB0cnVlIGZvciBOYU4KKyAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAidG9QcmVjaXNpb24oKSBhcmd1bWVu
dCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjEiKTsKICAgICAgIGludCBwID0gKGludClkcDsKICAg
ICAgIAogICAgICAgaWYgKHggIT0gMCkgewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9v
YmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXAgLXUgLXIxLjUwIEph
dmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0
LmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjI4IC0wMDAwCTEuNTAKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9vYmplY3QuY3BwCTE1IEF1ZyAyMDA1IDA1OjU0OjA0IC0wMDAwCkBAIC04OCwxMCArODgsNyBA
QCBWYWx1ZUltcCAqT2JqZWN0SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlCiAKICAgaWYgKCsrZGVw
dGggPiBLSlNfTUFYX1NUQUNLKSB7CiAgICAgLS1kZXB0aDsKLSAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYywgUmFuZ2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuIik7Ci0gICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKKyAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBSYW5nZUVycm9yLCAiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuIik7
CiAgIH0KICNlbmRpZgogCkBAIC0xNjksMjggKzE2Niw2IEBAIFZhbHVlSW1wICpPYmplY3RJbXA6
OmdldChFeGVjU3RhdGUgKmV4ZWMKICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1ib29sIE9i
amVjdEltcDo6Z2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFZhbHVlSW1wKiYgcmVzdWx0KSBjb25zdAotewotICBQcm9wZXJ0eVNsb3Qg
c2xvdDsKLSAgaWYgKGNvbnN0X2Nhc3Q8T2JqZWN0SW1wICo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNs
b3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewotICAgIHJlc3VsdCA9IHNsb3QuZ2V0VmFs
dWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIE9iamVjdEltcDo6Z2V0UHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wKiYgcmVzdWx0KSBjb25zdAotewot
ICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgaWYgKGNvbnN0X2Nhc3Q8T2JqZWN0SW1wICo+KHRoaXMp
LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewotICAgIHJlc3Vs
dCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotICAgIAotICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgT2JqZWN0SW1wOjpnZXRQcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgT2JqZWN0SW1wICppbXAgPSB0aGlzOwpAQCAtMjc3LDE4ICsyNTIs
NiBAQCBib29sIE9iamVjdEltcDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICplCiAgIHJldHVybiBj
b25zdF9jYXN0PE9iamVjdEltcCAqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgT2JqZWN0SW1wOjpoYXNPd25Qcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKLXsKLSAg
UHJvcGVydHlTbG90IHNsb3Q7Ci0gIHJldHVybiBjb25zdF9jYXN0PE9iamVjdEltcCAqPih0aGlz
KS0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLWJv
b2wgT2JqZWN0SW1wOjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkgY29uc3QKLXsKLSAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gIHJldHVybiBjb25z
dF9jYXN0PE9iamVjdEltcCAqPih0aGlzKS0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7Ci19Ci0KIC8vIEVDTUEgOC42LjIuNQogYm9vbCBPYmplY3RJbXA6OmRl
bGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLypleGVjKi8sIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSkKIHsKQEAgLTMxMywxMSArMjc2LDYgQEAgYm9vbCBPYmplY3RJbXA6OmRlbGV0ZVBy
b3BlcnR5KEV4ZWNTdGF0ZQogICByZXR1cm4gZGVsZXRlUHJvcGVydHkoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShwcm9wZXJ0eU5hbWUpKTsKIH0KIAotdm9pZCBPYmplY3RJbXA6OmRlbGV0ZUFsbFBy
b3BlcnRpZXMoIEV4ZWNTdGF0ZSAqICkKLXsKLSAgX3Byb3AuY2xlYXIoKTsKLX0KLQogLy8gRUNN
QSA4LjYuMi42CiBWYWx1ZUltcCAqT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlICpl
eGVjLCBUeXBlIGhpbnQpIGNvbnN0CiB7CkBAIC0zNzEsOSArMzI5LDcgQEAgVmFsdWVJbXAgKk9i
amVjdEltcDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdAogICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpOwogCi0gIE9iamVjdEltcCAqZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsIEkxOE5fTk9PUCgiTm8gZGVmYXVsdCB2YWx1ZSIp
KTsKLSAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gIHJldHVybiBlcnI7CisgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIk5vIGRlZmF1bHQgdmFsdWUiKTsKIH0KIAogY29u
c3QgSGFzaEVudHJ5KiBPYmplY3RJbXA6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CkBAIC01MDUsOCArNDYxLDggQEAgY29uc3QgY2hh
ciAqIGNvbnN0IGVycm9yTmFtZXNBcnJbXSA9IHsKIAogY29uc3QgY2hhciAqIGNvbnN0ICogY29u
c3QgRXJyb3I6OmVycm9yTmFtZXMgPSBlcnJvck5hbWVzQXJyOwogCi1PYmplY3RJbXAgKkVycm9y
OjpjcmVhdGUoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZXJydHlwZSwgY29uc3QgY2hhciAq
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8sIGludCBzb3VyY2VJZCwg
Y29uc3QgVVN0cmluZyAqc291cmNlVVJMKQorT2JqZWN0SW1wICpFcnJvcjo6Y3JlYXRlKEV4ZWNT
dGF0ZSAqZXhlYywgRXJyb3JUeXBlIGVycnR5cGUsIGNvbnN0IFVTdHJpbmcgJm1lc3NhZ2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVubywgaW50IHNvdXJjZUlkLCBjb25zdCBV
U3RyaW5nICpzb3VyY2VVUkwpCiB7CiAgIE9iamVjdEltcCAqY29uczsKICAgc3dpdGNoIChlcnJ0
eXBlKSB7CkBAIC01MzMsMTAgKzQ4OSwxMSBAQCBPYmplY3RJbXAgKkVycm9yOjpjcmVhdGUoRXhl
Y1N0YXRlICpleGVjCiAgICAgYnJlYWs7CiAgIH0KIAotICBpZiAoIW1lc3NhZ2UpCi0gICAgbWVz
c2FnZSA9IGVycm9yTmFtZXNbZXJydHlwZV07CiAgIExpc3QgYXJnczsKLSAgYXJncy5hcHBlbmQo
U3RyaW5nKG1lc3NhZ2UpKTsKKyAgaWYgKG1lc3NhZ2UuaXNFbXB0eSgpKQorICAgIGFyZ3MuYXBw
ZW5kKGpzU3RyaW5nKGVycm9yTmFtZXNbZXJydHlwZV0pKTsKKyAgZWxzZQorICAgIGFyZ3MuYXBw
ZW5kKGpzU3RyaW5nKG1lc3NhZ2UpKTsKICAgT2JqZWN0SW1wICplcnIgPSBzdGF0aWNfY2FzdDxP
YmplY3RJbXAgKj4oY29ucy0+Y29uc3RydWN0KGV4ZWMsYXJncykpOwogCiAgIGlmIChsaW5lbm8g
IT0gLTEpCkBAIC01NjIsOSArNTE5LDM3IEBAIE9iamVjdEltcCAqRXJyb3I6OmNyZWF0ZShFeGVj
U3RhdGUgKmV4ZWMKICovCiB9CiAKLU9iamVjdEltcCAqZXJyb3IoRXhlY1N0YXRlICpleGVjLCBF
cnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgaW50IGxpbmUsIGludCBzb3VyY2VJ
ZCwgY29uc3QgVVN0cmluZyAqc291cmNlVVJMKQorT2JqZWN0SW1wICpFcnJvcjo6Y3JlYXRlKEV4
ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7Cisg
ICAgcmV0dXJuIGNyZWF0ZShleGVjLCB0eXBlLCBtZXNzYWdlLCAtMSwgLTEsIE5VTEwpOworfQor
CitPYmplY3RJbXAgKnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgdHlwZSkK
K3sKKyAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCB0eXBlLCBVU3Ry
aW5nKCksIC0xLCAtMSwgTlVMTCk7CisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAg
ICByZXR1cm4gZXJyb3I7Cit9CisKK09iamVjdEltcCAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4
ZWMsIEVycm9yVHlwZSB0eXBlLCBjb25zdCBVU3RyaW5nICZtZXNzYWdlKQoreworICAgIE9iamVj
dEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIHR5cGUsIG1lc3NhZ2UsIC0xLCAtMSwg
TlVMTCk7CisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7
Cit9CisKK09iamVjdEltcCAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSB0
eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsIHR5cGUsIG1lc3NhZ2UsIC0xLCAtMSwgTlVMTCk7CisgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK09iamVjdEltcCAq
dGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSB0eXBlLCBjb25zdCBVU3RyaW5n
ICZtZXNzYWdlLCBpbnQgbGluZSwgaW50IHNvdXJjZUlkLCBjb25zdCBVU3RyaW5nICpzb3VyY2VV
UkwpCiB7Ci0gICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoZXhlYywgdHlwZSwgbWVzc2FnZSwgbGlu
ZSwgc291cmNlSWQsIHNvdXJjZVVSTCk7CisgICAgT2JqZWN0SW1wICplcnJvciA9IEVycm9yOjpj
cmVhdGUoZXhlYywgdHlwZSwgbWVzc2FnZSwgbGluZSwgc291cmNlSWQsIHNvdXJjZVVSTCk7Cisg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtcCAtdSAtcjEuNDQgSmF2YVNjcmlwdENvcmUv
a2pzL29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJMTQgQXVnIDIwMDUg
MTY6Mjc6MTMgLTAwMDAJMS40NAorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCTE1IEF1
ZyAyMDA1IDA1OjU0OjA0IC0wMDAwCkBAIC05MCwxNSArOTAsMTMgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgT2JqZWN0SW1wKE9iamVjdEltcCAqcHJvdG8pOwogCiAgICAgLyoqCi0gICAgICogQ3Jl
YXRlcyBhIG5ldyBPYmplY3RJbXAgd2l0aCBhIHByb3RvdHlwZSBvZiBOdWxsKCkKKyAgICAgKiBD
cmVhdGVzIGEgbmV3IE9iamVjdEltcCB3aXRoIGEgcHJvdG90eXBlIG9mIGpzTnVsbCgpCiAgICAg
ICogKHRoYXQgaXMsIHRoZSBFQ01BU2NyaXB0ICJudWxsIiB2YWx1ZSwgbm90IGEgbnVsbCBvYmpl
Y3QgcG9pbnRlcikuCi0gICAgICoKICAgICAgKi8KICAgICBPYmplY3RJbXAoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBtYXJrKCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFR5cGUgdHlwZSgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogQSBwb2ludGVyIHRvIGEgQ2xh
c3NJbmZvIHN0cnVjdCBmb3IgdGhpcyBjbGFzcy4gVGhpcyBwcm92aWRlcyBhIGJhc2ljCkBAIC0x
NzcsMTAgKzE3NSw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqCiAgICAgICogQHJldHVybiBU
aGUgb2JqZWN0J3MgcHJvdG90eXBlCiAgICAgICovCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50
YXRpb24gb2YgdGhlIFtbUHJvdG90eXBlXV0gaW50ZXJuYWwgcHJvcGVydHkgKGltcGxlbWVudGVk
IGJ5Ci0gICAgICogYWxsIE9iamVjdHMpCi0gICAgICovCiAgICAgVmFsdWVJbXAgKnByb3RvdHlw
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJvdG90eXBlKFZhbHVlSW1wICpwcm90byk7CiAKQEAg
LTIxNCwxNyArMjA4LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICoKICAgICAgKiBAcmV0dXJu
IFRoZSBzcGVjaWZpZWQgcHJvcGVydHksIG9yIFVuZGVmaW5lZAogICAgICAqLwotICAgIC8qKgot
ICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW0dldF1dIGludGVybmFsIHByb3BlcnR5IChp
bXBsZW1lbnRlZCBieSBhbGwKLSAgICAgKiBPYmplY3RzKQotICAgICAqLwotICAgIC8vIFtbR2V0
XV0gLSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGFsbCBPYmplY3RzCiAgICAgVmFsdWVJbXAgKmdl
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7
CiAgICAgVmFsdWVJbXAgKmdldChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSkgY29uc3Q7CiAKLSAgICBib29sIGdldFByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcComIHJlc3VsdCkgY29uc3Q7Ci0gICAg
Ym9vbCBnZXRQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
VmFsdWVJbXAqJiByZXN1bHQpIGNvbnN0OwotCiAgICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIGdl
dFByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOwogCkBA
IC0yNDAsMTQgKzIyNiw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIEBwYXJhbSBwcm9wZXJ0
eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldAogICAgICAqIEBwYXJhbSBwcm9w
ZXJ0eVZhbHVlIFRoZSB2YWx1ZSB0byBzZXQKICAgICAgKi8KLSAgICAvKioKLSAgICAgKiBJbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgW1tQdXRdXSBpbnRlcm5hbCBwcm9wZXJ0eSAoaW1wbGVtZW50ZWQg
YnkgYWxsCi0gICAgICogT2JqZWN0cykKLSAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZpcnR1
YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZpcnR1YWwg
dm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKIAogICAgIC8qKgogICAgICAqIFVzZWQgdG8gY2hl
Y2sgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyIHByb3BlcnR5IGlzIGFsbG93ZWQgdG8gYmUg
c2V0CkBAIC0yNzUsMjcgKzI1NSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBAcGFyYW0g
cHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGVjayBmb3IKICAgICAg
KiBAcmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5LCBvdGhlcndpc2Ug
ZmFsc2UKICAgICAgKi8KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tI
YXNQcm9wZXJ0eV1dIGludGVybmFsIHByb3BlcnR5IChpbXBsZW1lbnRlZCBieQotICAgICAqIGFs
bCBPYmplY3RzKQotICAgICAqLwotICAgIGJvb2wgaGFzUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LAotCQkJICAgICBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGJv
b2wgaGFzUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgLyoqCi0gICAgICogQ2hlY2tzIHRvIHNl
ZSB3aGV0aGVyIHRoZSBvYmplY3QgaGFzIGEgcHJvcGVydHkgd2l0aCB0aGUgc3BlY2lmaWVkIG5h
bWUuCi0gICAgICoKLSAgICAgKiBTZWUgRUNNQSAxNS4yLjQuNQotICAgICAqCi0gICAgICogQHBh
cmFtIGV4ZWMgVGhlIGN1cnJlbnQgZXhlY3V0aW9uIHN0YXRlCi0gICAgICogQHBhcmFtIHByb3Bl
cnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hlY2sgZm9yCi0gICAgICogQHJl
dHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eSwgb3RoZXJ3aXNlIGZhbHNl
Ci0gICAgICovCi0gICAgdmlydHVhbCBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
IGNvbnN0OwotCi0gICAgLyoqCiAgICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHByb3BlcnR5
IGZyb20gdGhlIG9iamVjdC4KICAgICAgKgogICAgICAqIFNlZSBFQ01BIDguNi4yLjUKQEAgLTMw
NiwyMiArMjY5LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIGV4aXN0IG9uIHRoZSBvYmpl
Y3QuIGZhbHNlIGlmIGRlbGV0aW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaXMgbm90CiAgICAg
ICogYWxsb3dlZC4KICAgICAgKi8KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0
aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSAoaW1wbGVtZW50ZWQgYnkgYWxsCi0gICAg
ICogT2JqZWN0cykKLSAgICAgKi8KLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSk7CiAgICAgdmly
dHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKTsKIAogICAgIC8qKgotICAgICAqIFJlbW92ZSBhbGwgcHJvcGVydGllcyBmcm9tIHRo
aXMgb2JqZWN0LgotICAgICAqIFRoaXMgZG9lc24ndCB0YWtlIERvbnREZWxldGUgaW50byBhY2Nv
dW50LCBhbmQgaXNuJ3QgaW4gdGhlIEVDTUEgc3BlYy4KLSAgICAgKiBJdCdzIHNpbXBseSBhIHF1
aWNrIHdheSB0byByZW1vdmUgZXZlcnl0aGluZyBiZWZvcmUgZGVzdHJveWluZy4KLSAgICAgKi8K
LSAgICB2b2lkIGRlbGV0ZUFsbFByb3BlcnRpZXMoRXhlY1N0YXRlICopOwotCi0gICAgLyoqCiAg
ICAgICogQ29udmVydHMgdGhlIG9iamVjdCBpbnRvIGEgcHJpbWl0aXZlIHZhbHVlLiBUaGUgdmFs
dWUgcmV0dXJuIG1heSBkaWZmZXIKICAgICAgKiBkZXBlbmRpbmcgb24gdGhlIHN1cHBsaWVkIGhp
bnQKICAgICAgKgpAQCAtNDA3LDkgKzM1OCw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIEBw
YXJhbSBhcmdzIExpc3Qgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24K
ICAgICAgKiBAcmV0dXJuIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24KICAgICAg
Ki8KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tDYWxsXV0gaW50ZXJu
YWwgcHJvcGVydHkKLSAgICAgKi8KICAgICBWYWx1ZUltcCAqY2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAgICAgdmlydHVhbCBWYWx1
ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpOwogCkBAIC00MzIsOSArMzgwLDYgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICogQHJldHVybiB0cnVlIGlmIHZhbHVlIGRlbGVnYXRlcyBiZWhhdmlvciB0byB0aGlz
IG9iamVjdCwgb3RoZXJ3aXNlCiAgICAgICogZmFsc2UKICAgICAgKi8KLSAgICAvKioKLSAgICAg
KiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tIYXNJbnN0YW5jZV1dIGludGVybmFsIHByb3BlcnR5
Ci0gICAgICovCiAgICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywg
VmFsdWVJbXAgKnZhbHVlKTsKIAogICAgIC8qKgpAQCAtNDYzLDkgKzQwOCw2IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAqIEBwYXJhbSBleGVjIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZQog
ICAgICAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uJ3Mgc2NvcGUKICAgICAgKi8KLSAgICAvKioKLSAg
ICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tTY29wZV1dIGludGVybmFsIHByb3BlcnR5Ci0g
ICAgICovCiAgICAgY29uc3QgU2NvcGVDaGFpbiAmc2NvcGUoKSBjb25zdCB7IHJldHVybiBfc2Nv
cGU7IH0KICAgICB2b2lkIHNldFNjb3BlKGNvbnN0IFNjb3BlQ2hhaW4gJnMpIHsgX3Njb3BlID0g
czsgfQogCkBAIC01MDQsNyArNDQ2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICoKICAgICAg
KiBAcGFyYW0gdiBUaGUgbmV3IGludGVybmFsIHZhbHVlCiAgICAgICovCi0KICAgICB2b2lkIHNl
dEludGVybmFsVmFsdWUoVmFsdWVJbXAgKnYpOwogCiAgICAgVmFsdWVJbXAgKnRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWRUeXBlID0gVW5zcGVjaWZpZWRUeXBlKSBj
b25zdDsKQEAgLTUxMyw4ICs0NTQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBVU3RyaW5nIHRv
U3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgT2JqZWN0SW1wICp0b09iamVjdChF
eGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogCi0gICAgLy8gVGhpcyBnZXQgbWV0aG9kIG9ubHkgbG9v
a3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KLSAgICAvLyBBIGJpdCBsaWtlIGhhc1Byb3BlcnR5KHJl
Y3Vyc2l2ZT1mYWxzZSksIHRoaXMgZG9lc24ndCBnbyB0byB0aGUgcHJvdG90eXBlLgorICAgIC8v
IFRoaXMgZ2V0IGZ1bmN0aW9uIG9ubHkgbG9va3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KICAgICAv
LyBUaGlzIGlzIHVzZWQgZS5nLiBieSBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uICh0byBjYWNoZSBh
IGZ1bmN0aW9uLCB3ZSBkb24ndCB3YW50CiAgICAgLy8gdG8gbG9vayB1cCBpbiB0aGUgcHJvdG90
eXBlLCBpdCBtaWdodCBhbHJlYWR5IGV4aXN0IHRoZXJlKQogICAgIFZhbHVlSW1wICpnZXREaXJl
Y3QoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdApAQCAtNTI0LDYgKzQ2NCwx
MyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSAwKTsKICAgICB2b2lk
IHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGludCB2YWx1ZSwgaW50
IGF0dHIgPSAwKTsKICAgICAKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIHByb3BlcnRpZXMg
ZnJvbSB0aGlzIG9iamVjdC4KKyAgICAgKiBUaGlzIGRvZXNuJ3QgdGFrZSBEb250RGVsZXRlIGlu
dG8gYWNjb3VudCwgYW5kIGlzbid0IGluIHRoZSBFQ01BIHNwZWMuCisgICAgICogSXQncyBzaW1w
bHkgYSBxdWljayB3YXkgdG8gcmVtb3ZlIGV2ZXJ5dGhpbmcgc3RvcmVkIGluIHRoZSBwcm9wZXJ0
eSBtYXAuCisgICAgICovCisgICAgdm9pZCBjbGVhclByb3BlcnRpZXMoKSB7IF9wcm9wLmNsZWFy
KCk7IH0KKwogICAgIHZvaWQgc2F2ZVByb3BlcnRpZXMoU2F2ZWRQcm9wZXJ0aWVzICZwKSBjb25z
dCB7IF9wcm9wLnNhdmUocCk7IH0KICAgICB2b2lkIHJlc3RvcmVQcm9wZXJ0aWVzKGNvbnN0IFNh
dmVkUHJvcGVydGllcyAmcCkgeyBfcHJvcC5yZXN0b3JlKHApOyB9CiAKQEAgLTUzNyw0NiArNDg0
LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgU2NvcGVDaGFpbiBfc2NvcGU7CiAgIH07CiAKLSAg
Ly8gaXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSBidXQg
aXQgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZQotICAvLyBzaW5jZSB0aGlzIGlzIGZ1bmN0aW9uIHZl
cnkgaG90IGluIHZhcmlhYmxlIGxvb2t1cAotICBpbmxpbmUgYm9vbCBPYmplY3RJbXA6OmdldFBy
b3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQotICB7Ci0gICAgT2JqZWN0SW1wICppbXAgPSB0aGlzOwot
Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIGlmIChpbXAtPmdldE93blByb3BlcnR5U2xvdChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIAot
ICAgICAgVmFsdWVJbXAgKnByb3RvID0gaW1wLT5fcHJvdG87Ci0gICAgICBpZiAoIXByb3RvLT5p
c09iamVjdCgpKQotICAgICAgICBicmVhazsKLSAgICAgIAotICAgICAgaW1wID0gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wICo+KHByb3RvKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0KLSAgLy8gaXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBs
YXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCi0gIC8vIGJ1dCBpdCBtYWtlcyBh
IGJpZyBkaWZmZXJlbmNlIHRvIHByb3BlcnR5IGxvb2t1cCBpZiBzdWJjbGFzc2VzIGNhbiBpbmxp
bmUgdGhlaXIKLSAgLy8gc3VwZXJjbGFzcyBjYWxsIHRvIHRoaXMKLSAgaW5saW5lIGJvb2wgT2Jq
ZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLSAgewotICAgICAgVmFsdWVJ
bXAgKippbXBMb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSk7Ci0gICAg
ICBpZiAoaW1wTG9jYXRpb24pIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgaW1w
TG9jYXRpb24pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgLy8gbm9u
LXN0YW5kYXJkIG5ldHNjYXBlIGV4dGVuc2lvbgotICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+c3BlY2lhbFByb3RvdHlwZUlkZW50aWZpZXIoKSkg
ewotICAgICAgICBzbG90LnNldFZhbHVlU2xvdCh0aGlzLCAmX3Byb3RvKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCiAgIC8qKgog
ICAgKiBUeXBlcyBvZiBOYXRpdmUgRXJyb3JzIGF2YWlsYWJsZS4gRm9yIGN1c3RvbSBlcnJvcnMs
IEdlbmVyYWxFcnJvcgogICAgKiBzaG91bGQgYmUgdXNlZC4KQEAgLTU4OSw5ICs0OTYsNiBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgICAgICAgICBUeXBlRXJyb3IgICAgICA9IDUsCiAg
ICAgICAgICAgICAgICAgICAgVVJJRXJyb3IgICAgICAgPSA2fTsKIAotICBPYmplY3RJbXAgKmVy
cm9yKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIHR5cGUgPSBHZW5lcmFsRXJyb3IsCi0gICAg
Y29uc3QgY2hhciAqbWVzc2FnZSA9IDAsIGludCBsaW5lbm8gPSAtMSwgaW50IHNvdXJjZUlkID0g
LTEsIGNvbnN0IFVTdHJpbmcgKnNvdXJjZVVSTCA9IDApOwotCiAgIC8qKgogICAgKiBAc2hvcnQg
RmFjdG9yeSBtZXRob2RzIGZvciBlcnJvciBvYmplY3RzLgogICAgKi8KQEAgLTYwMywxMiArNTA3
LDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIEBwYXJhbSBleGVjIFRoZSBjdXJyZW50IGV4
ZWN1dGlvbiBzdGF0ZQogICAgICAqIEBwYXJhbSBlcnJ0eXBlIFR5cGUgb2YgZXJyb3IuCiAgICAg
ICogQHBhcmFtIG1lc3NhZ2UgT3B0aW9uYWwgZXJyb3IgbWVzc2FnZS4KLSAgICAgKiBAcGFyYW0g
bGluZW5vIE9wdGlvbmFsIGxpbmUgbnVtYmVyLgotICAgICAqIEBwYXJhbSBsaW5lbm8gT3B0aW9u
YWwgc291cmNlIGlkLgorICAgICAqIEBwYXJhbSBsaW5lTnVtYmVyIE9wdGlvbmFsIGxpbmUgbnVt
YmVyLgorICAgICAqIEBwYXJhbSBzb3VyY2VJZCBPcHRpb25hbCBzb3VyY2UgaWQuCisgICAgICog
QHBhcmFtIHNvdXJjZVVSTCBPcHRpb25hbCBzb3VyY2UgVVJMLgogICAgICAqLwotICAgIHN0YXRp
YyBPYmplY3RJbXAgKmNyZWF0ZShFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlcnJ0eXBlID0g
R2VuZXJhbEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt
ZXNzYWdlID0gMCwgaW50IGxpbmVubyA9IC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc291cmNlSWQgPSAtMSwgY29uc3QgVVN0cmluZyAqc291cmNlVVJMID0gMCk7CisgICAg
c3RhdGljIE9iamVjdEltcCAqY3JlYXRlKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IFVT
dHJpbmcgJm1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgc291cmNlSWQsIGNvbnN0IFVTdHJp
bmcgKnNvdXJjZVVSTCk7CisgICAgc3RhdGljIE9iamVjdEltcCAqY3JlYXRlKEV4ZWNTdGF0ZSAq
LCBFcnJvclR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAgICAgLyoqCiAgICAgICogQXJy
YXkgb2YgZXJyb3IgbmFtZXMgY29ycmVzcG9uZGluZyB0byBFcnJvclR5cGUKQEAgLTYxNiw2ICs1
MjAsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCAq
IGNvbnN0IGVycm9yTmFtZXM7CiAgIH07CiAKK09iamVjdEltcCAqdGhyb3dFcnJvcihFeGVjU3Rh
dGUgKiwgRXJyb3JUeXBlLCBjb25zdCBVU3RyaW5nICZtZXNzYWdlLCBpbnQgbGluZU51bWJlciwg
aW50IHNvdXJjZUlkLCBjb25zdCBVU3RyaW5nICpzb3VyY2VVUkwpOworT2JqZWN0SW1wICp0aHJv
d0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IFVTdHJpbmcgJm1lc3NhZ2UpOwor
T2JqZWN0SW1wICp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIg
Km1lc3NhZ2UpOworT2JqZWN0SW1wICp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUp
OworICAKIGlubGluZSBib29sIEFsbG9jYXRlZFZhbHVlSW1wOjppc09iamVjdChjb25zdCBDbGFz
c0luZm8gKmluZm8pIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzT2JqZWN0KCkgJiYgc3RhdGljX2Nh
c3Q8Y29uc3QgT2JqZWN0SW1wICo+KHRoaXMpLT5pbmhlcml0cyhpbmZvKTsKQEAgLTY2MSw2ICs1
NzAsNDIgQEAgaW5saW5lIGJvb2wgT2JqZWN0SW1wOjppbmhlcml0cyhjb25zdCBDbAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rp
b24gdGhpcyBsYXJnZSBidXQgaXQgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZQorLy8gc2luY2UgdGhp
cyBpcyBmdW5jdGlvbiB2ZXJ5IGhvdCBpbiB2YXJpYWJsZSBsb29rdXAKK2lubGluZSBib29sIE9i
amVjdEltcDo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgT2JqZWN0SW1wICpv
YmplY3QgPSB0aGlzOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChvYmplY3QtPmdl
dE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgVmFsdWVJbXAgKnByb3RvID0gb2JqZWN0LT5fcHJvdG87
CisgICAgICAgIGlmICghcHJvdG8tPmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgb2JqZWN0ID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHByb3RvKTsK
KyAgICB9Cit9CisKKy8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRo
aXMgbGFyZ2UsIGVzcGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLAorLy8gYnV0IGl0IG1ha2Vz
IGEgYmlnIGRpZmZlcmVuY2UgdG8gcHJvcGVydHkgbG9va3VwIHRoYXQgZGVyaXZlZCBjbGFzc2Vz
IGNhbiBpbmxpbmUgdGhlaXIKKy8vIGJhc2UgY2xhc3MgY2FsbCB0byB0aGlzLgoraW5saW5lIGJv
b2wgT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBpZiAo
VmFsdWVJbXAgKipsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSkpIHsK
KyAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgbG9jYXRpb24pOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBub24tc3RhbmRhcmQgTmV0c2NhcGUgZXh0ZW5zaW9u
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+c3Bl
Y2lhbFByb3RvdHlwZUlkZW50aWZpZXIoKSkgeworICAgICAgICBzbG90LnNldFZhbHVlU2xvdCh0
aGlzLCAmX3Byb3RvKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYgLy8gS0pTX09CSkVDVF9ICklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMwpkaWZmIC1wIC11IC1yMS4xMyBKYXZhU2NyaXB0Q29yZS9r
anMvb2JqZWN0X29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0
LmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjI5IC0wMDAwCTEuMTMKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9vYmplY3Rfb2JqZWN0LmNwcAkxNSBBdWcgMjAwNSAwNTo1NDowNSAtMDAwMApAQCAtNjcsOSAr
NjcsMTAgQEAgVmFsdWVJbXAgKk9iamVjdFByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuYwogICAgIHN3
aXRjaCAoaWQpIHsKICAgICAgICAgY2FzZSBWYWx1ZU9mOgogICAgICAgICAgICAgcmV0dXJuIHRo
aXNPYmo7Ci0gICAgICAgIGNhc2UgSGFzT3duUHJvcGVydHk6Ci0gICAgICAgICAgICAvLyBTYW1l
IGFzIHRoZSBpbiBvcGVyYXRvciBidXQgd2l0aG91dCBjaGVja2luZyB0aGUgcHJvdG90eXBlCi0g
ICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRoaXNPYmotPmhhc093blByb3BlcnR5KGV4ZWMs
IElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKSk7CisgICAgICAgIGNhc2UgSGFz
T3duUHJvcGVydHk6IHsKKyAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbih0aGlzT2JqLT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRl
bnRpZmllcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSksIHNsb3QpKTsKKyAgICAgICAgfQogICAg
ICAgICBjYXNlIFRvTG9jYWxlU3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHRo
aXNPYmotPnRvU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgY2FzZSBUb1N0cmluZzoKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcmVmZXJlbmNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMwpkaWZmIC1wIC11IC1yMS4xMyBKYXZhU2NyaXB0Q29yZS9ranMvcmVmZXJlbmNlLmNw
cAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5jZS5jcHAJOCBBdWcgMjAwNSAwNDowNzoy
OSAtMDAwMAkxLjEzCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcmVmZXJlbmNlLmNwcAkxNSBBdWcg
MjAwNSAwNTo1NDowNSAtMDAwMApAQCAtNjksMTIgKzY5LDggQEAgUmVmZXJlbmNlIFJlZmVyZW5j
ZTo6bWFrZVZhbHVlUmVmZXJlbmNlKAogCiBWYWx1ZUltcCAqUmVmZXJlbmNlOjpnZXRCYXNlKEV4
ZWNTdGF0ZSAqZXhlYykgY29uc3QKIHsKLSAgaWYgKGJhc2VJc1ZhbHVlKSB7Ci0gICAgT2JqZWN0
SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCBJMThOX05PT1Ao
IkludmFsaWQgcmVmZXJlbmNlIGJhc2UiKSk7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotCisgIGlmIChiYXNlSXNWYWx1ZSkKKyAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIkludmFsaWQgcmVmZXJlbmNlIGJhc2Ui
KTsKICAgcmV0dXJuIGJhc2U7CiB9CiAKQEAgLTk0LDI1ICs5MCwxNCBAQCBJZGVudGlmaWVyIFJl
ZmVyZW5jZTo6Z2V0UHJvcGVydHlOYW1lKEV4CiAKIFZhbHVlSW1wICpSZWZlcmVuY2U6OmdldFZh
bHVlKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgCiB7Ci0gIGlmIChiYXNlSXNWYWx1ZSkgeworICBp
ZiAoYmFzZUlzVmFsdWUpCiAgICAgcmV0dXJuIGJhc2U7Ci0gIH0KIAogICBWYWx1ZUltcCAqbyA9
IGJhc2U7Ci0gIFR5cGUgdCA9IG8gPyBvLT50eXBlKCkgOiBOdWxsVHlwZTsKLQotICBpZiAodCA9
PSBOdWxsVHlwZSkgewotICAgIFVTdHJpbmcgbSA9IEkxOE5fTk9PUCgiQ2FuJ3QgZmluZCB2YXJp
YWJsZTogIikgKyBnZXRQcm9wZXJ0eU5hbWUoZXhlYykudXN0cmluZygpOwotICAgIE9iamVjdElt
cCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVuY2VFcnJvciwgbS5hc2NpaSgpKTsK
LSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9Ci0KLSAg
aWYgKHQgIT0gT2JqZWN0VHlwZSkgewotICAgIFVTdHJpbmcgbSA9IEkxOE5fTk9PUCgiQmFzZSBp
cyBub3QgYW4gb2JqZWN0Iik7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsIFJlZmVyZW5jZUVycm9yLCBtLmFzY2lpKCkpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwotICAgIHJldHVybiBlcnI7CisgIGlmICghbyB8fCAhby0+aXNPYmplY3QoKSkgeworICAg
IGlmICghbyB8fCBvLT5pc051bGwoKSkKKyAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJl
ZmVyZW5jZUVycm9yLCAiQ2FuJ3QgZmluZCB2YXJpYWJsZTogIiArIGdldFByb3BlcnR5TmFtZShl
eGVjKS51c3RyaW5nKCkpOworICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVy
cm9yLCAiQmFzZSBpcyBub3QgYW4gb2JqZWN0Iik7CiAgIH0KIAogICBpZiAocHJvcGVydHlOYW1l
SXNOdW1iZXIpCkBAIC0xMjMsOCArMTA4LDcgQEAgVmFsdWVJbXAgKlJlZmVyZW5jZTo6Z2V0VmFs
dWUoRXhlY1N0YXRlIAogdm9pZCBSZWZlcmVuY2U6OnB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywg
VmFsdWVJbXAgKncpCiB7CiAgIGlmIChiYXNlSXNWYWx1ZSkgewotICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVuY2VFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7CisgICAgdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvcik7CiAgICAg
cmV0dXJuOwogICB9CiAKQEAgLTE0Niw4ICsxMzAsNyBAQCB2b2lkIFJlZmVyZW5jZTo6cHV0VmFs
dWUoRXhlY1N0YXRlICpleGVjCiBib29sIFJlZmVyZW5jZTo6ZGVsZXRlVmFsdWUoRXhlY1N0YXRl
ICpleGVjKQogewogICBpZiAoYmFzZUlzVmFsdWUpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxSZWZlcmVuY2VFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9u
KGVycik7CisgICAgdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvcik7CiAgICAgcmV0dXJu
IGZhbHNlOwogICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4
cF9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxCmRpZmYgLXAgLXUgLXIxLjIx
IEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL3JlZ2V4cF9vYmplY3QuY3BwCTggQXVnIDIwMDUgMDQ6MDc6MjkgLTAwMDAJMS4yMQorKysg
SmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuY3BwCTE1IEF1ZyAyMDA1IDA1OjU0OjA2
IC0wMDAwCkBAIC03OCw5ICs3OCw3IEBAIFZhbHVlSW1wICpSZWdFeHBQcm90b0Z1bmNJbXA6OmNh
bGxBc0Z1bmMKICAgICAgICAgY2FzZSBUb1N0cmluZzogcmV0dXJuIFN0cmluZygiLy8iKTsKICAg
ICAgIH0KICAgICB9Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlw
ZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwor
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIH0KIAogICBSZWdFeHBJ
bXAgKnJlaW1wID0gc3RhdGljX2Nhc3Q8UmVnRXhwSW1wKj4odGhpc09iaik7CkBAIC0yNTQsMTEg
KzI1Miw4IEBAIE9iamVjdEltcCAqUmVnRXhwT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXgKIHsKICAg
T2JqZWN0SW1wICpvID0gYXJnc1swXS0+Z2V0T2JqZWN0KCk7CiAgIGlmIChvICYmIG8tPmluaGVy
aXRzKCZSZWdFeHBJbXA6OmluZm8pKSB7Ci0gICAgaWYgKCFhcmdzWzFdLT5pc1VuZGVmaW5lZCgp
KSB7Ci0gICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3Ip
OwotICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICByZXR1cm4gZXJyOwotICAg
IH0KKyAgICBpZiAoIWFyZ3NbMV0tPmlzVW5kZWZpbmVkKCkpCisgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIHJldHVybiBvOwogICB9CiAgIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNDIKZGlmZiAtcCAtdSAtcjEuNDIgSmF2YVNjcmlwdENvcmUva2pzL3N0cmlu
Z19vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJOCBB
dWcgMjAwNSAwNDowNzoyOSAtMDAwMAkxLjQyCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5n
X29iamVjdC5jcHAJMTUgQXVnIDIwMDUgMDU6NTQ6MDYgLTAwMDAKQEAgLTM2OSwxMSArMzY5LDgg
QEAgVmFsdWVJbXAgKlN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbEFzRnVuYwogCiAgIC8vIHRvU3Ry
aW5nIGFuZCB2YWx1ZU9mIGFyZSBubyBnZW5lcmljIGZ1bmN0aW9uLgogICBpZiAoaWQgPT0gVG9T
dHJpbmcgfHwgaWQgPT0gVmFsdWVPZikgewotICAgIGlmICghdGhpc09iaiB8fCAhdGhpc09iai0+
aW5oZXJpdHMoJlN0cmluZ0luc3RhbmNlSW1wOjppbmZvKSkgewotICAgICAgT2JqZWN0SW1wICpl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICAgIGV4ZWMtPnNldEV4Y2Vw
dGlvbihlcnIpOwotICAgICAgcmV0dXJuIGVycjsKLSAgICB9CisgICAgaWYgKCF0aGlzT2JqIHx8
ICF0aGlzT2JqLT5pbmhlcml0cygmU3RyaW5nSW5zdGFuY2VJbXA6OmluZm8pKQorICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIHJldHVybiBTdHJpbmcodGhp
c09iai0+aW50ZXJuYWxWYWx1ZSgpLT50b1N0cmluZyhleGVjKSk7CiAgIH0KSW5kZXg6IFdlYkNv
cmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xOTgKZGlmZiAtcCAtdSAtcjEuMTk4IFdlYkNvcmUva2h0bWwvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBXZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9y
LmNwcAkzMCBKdWwgMjAwNSAwMjozMzoxMiAtMDAwMAkxLjE5OAorKysgV2ViQ29yZS9raHRtbC9j
c3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMTUgQXVnIDIwMDUgMDU6NTQ6MTkgLTAwMDAKQEAgLTM0
LDEwICszNCw2IEBACiAjaW5jbHVkZSAiZG9tL2Nzc192YWx1ZS5oIgogI2luY2x1ZGUgImtodG1s
X2ZhY3RvcnkuaCIKICNpbmNsdWRlICJraHRtbHBhcnRfcC5oIgotdXNpbmcgbmFtZXNwYWNlIGto
dG1sOwotdXNpbmcgbmFtZXNwYWNlIERPTTsKLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0K
IAogI2luY2x1ZGUgImNzcy9jc3Nwcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc3ZhbHVl
cy5oIgpAQCAtNjksNiArNjUsOSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogI2luY2x1
ZGUgPHFpbnRjYWNoZS5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCit1c2luZyBuYW1lc3BhY2Ug
RE9NOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwogLy8gI2RlZmluZSBTVFlMRV9TSEFS
SU5HX1NUQVRTIDEKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCkBAIC0x
ODYsNyArMTg1LDcgQEAgQ1NTU3R5bGVTaGVldEltcGwgKkNTU1N0eWxlU2VsZWN0b3I6OmRlZgog
UmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlTm90WWV0QXZhaWxhYmxlID0gMDsK
IENTU1N0eWxlU2hlZXRJbXBsICpDU1NTdHlsZVNlbGVjdG9yOjpxdWlya3NTaGVldCA9IDA7CiAK
LXN0YXRpYyBDU1NTdHlsZVNlbGVjdG9yOjpFbmNvZGVkdXJsICplbmNvZGVkdXJsID0gMDsKK3N0
YXRpYyBDU1NTdHlsZVNlbGVjdG9yOjpFbmNvZGVkdXJsICpjdXJyZW50RW5jb2RlZFVSTCA9IDA7
CiBzdGF0aWMgUHNldWRvU3RhdGUgcHNldWRvU3RhdGU7CiAKIENTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoIERvY3VtZW50SW1wbCogZG9jLCBRU3RyaW5nIHVzZXJTdHlsZVNoZWV0
LCBTdHlsZVNoZWV0TGlzdEltcGwgKnN0eWxlU2hlZXRzLApAQCAtMjA2LDcgKzIwNSw3IEBAIENT
U1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoIERvY3UKIAogICAgIC8vIEZJWE1FOiBU
aGlzIHN1Y2tzISBUaGUgdXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQogICAgIGlm
ICghdXNlclN0eWxlU2hlZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fdXNlclNoZWV0ID0gbmV3
IERPTTo6Q1NTU3R5bGVTaGVldEltcGwoZG9jKTsKKyAgICAgICAgbV91c2VyU2hlZXQgPSBuZXcg
Q1NTU3R5bGVTaGVldEltcGwoZG9jKTsKICAgICAgICAgbV91c2VyU2hlZXQtPnBhcnNlU3RyaW5n
KERPTVN0cmluZyh1c2VyU3R5bGVTaGVldCksIHN0cmljdFBhcnNpbmcpOwogCiAgICAgICAgIG1f
dXNlclN0eWxlID0gbmV3IENTU1J1bGVTZXQoKTsKQEAgLTI4Nyw3ICsyODYsNyBAQCBzdGF0aWMg
Q1NTU3R5bGVTaGVldEltcGwqIHBhcnNlVUFTaGVldChjCiAgICAgICAgIHN0eWxlICs9IHMtPnNl
dHRpbmdzVG9DU1MoKTsKICAgICBET01TdHJpbmcgc3RyKHN0eWxlKTsKIAotICAgIENTU1N0eWxl
U2hlZXRJbXBsKiBzaGVldCA9IG5ldyBET006OkNTU1N0eWxlU2hlZXRJbXBsKChET006OkNTU1N0
eWxlU2hlZXRJbXBsKikwKTsKKyAgICBDU1NTdHlsZVNoZWV0SW1wbCogc2hlZXQgPSBuZXcgQ1NT
U3R5bGVTaGVldEltcGwoKENTU1N0eWxlU2hlZXRJbXBsKikwKTsKICAgICBzaGVldC0+cGFyc2VT
dHJpbmcoc3RyKTsKICAgICByZXR1cm4gc2hlZXQ7CiB9CkBAIC00NzAsNyArNDY5LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0RWxlbWVudEFuZFBzZQogICAgICAgICBzdHlsZWRFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudEltcGwqPihlbGVtZW50KTsKICAgICBlbHNl
CiAgICAgICAgIHN0eWxlZEVsZW1lbnQgPSAwOwotICAgIDo6ZW5jb2RlZHVybCA9ICZlbmNvZGVk
dXJsOworICAgIGN1cnJlbnRFbmNvZGVkVVJMID0gJmVuY29kZWR1cmw7CiAgICAgcHNldWRvU3Rh
dGUgPSBQc2V1ZG9Vbmtub3duOwogfQogCkBAIC01MzcsNyArNTM2LDcgQEAgc3RhdGljIHZvaWQg
Y2xlYW5wYXRoKFFTdHJpbmcgJnBhdGgpCiAgICAgLy9rZERlYnVnKCkgPDwgImNoZWNrUHNldWRv
U3RhdGUgIiA8PCBwYXRoIDw8IGVuZGw7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3Rh
dGUoIERPTTo6RWxlbWVudEltcGwgKmUsIGJvb2wgY2hlY2tWaXNpdGVkID0gdHJ1ZSApCitzdGF0
aWMgdm9pZCBjaGVja1BzZXVkb1N0YXRlKCBFbGVtZW50SW1wbCAqZSwgYm9vbCBjaGVja1Zpc2l0
ZWQgPSB0cnVlICkKIHsKICAgICBpZiAoIWUtPmlzTGluaygpKSB7CiAgICAgICAgIHBzZXVkb1N0
YXRlID0gUHNldWRvTm9uZTsKQEAgLTU1OSwxMSArNTU4LDExIEBAIHN0YXRpYyB2b2lkIGNoZWNr
UHNldWRvU3RhdGUoIERPTTo6RWxlbWUKICAgICBRU3RyaW5nIHUgPSBjdS5zdHJpbmcoKTsKICAg
ICBpZiAoICF1LmNvbnRhaW5zKCI6Ly8iKSApIHsKICAgICAgICAgaWYgKCB1WzBdID09ICcvJyAp
Ci0gICAgICAgICAgICB1LnByZXBlbmQoZW5jb2RlZHVybC0+aG9zdCk7CisgICAgICAgICAgICB1
LnByZXBlbmQoY3VycmVudEVuY29kZWRVUkwtPmhvc3QpOwogICAgICAgICBlbHNlIGlmICggdVsw
XSA9PSAnIycgKQotICAgICAgICAgICAgdS5wcmVwZW5kKGVuY29kZWR1cmwtPmZpbGUpOworICAg
ICAgICAgICAgdS5wcmVwZW5kKGN1cnJlbnRFbmNvZGVkVVJMLT5maWxlKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdS5wcmVwZW5kKGVuY29kZWR1cmwtPnBhdGgpOworICAgICAgICAgICAg
dS5wcmVwZW5kKGN1cnJlbnRFbmNvZGVkVVJMLT5wYXRoKTsKICAgICAgICAgY2xlYW5wYXRoKCB1
ICk7CiAgICAgfQogICAgIC8vY29tcGxldGVVUkwoIGF0dHIuc3RyaW5nKCkgKTsKQEAgLTU4Miw3
ICs1ODEsNyBAQCBOb2RlSW1wbCogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luCiAgICAg
aWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICBIVE1MRWxl
bWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJlbnQpOwogICAg
ICAgICBpZiAocC0+cmVuZGVyZXIoKSAmJiAhcC0+aW5saW5lU3R5bGVEZWNsKCkgJiYgIXAtPmhh
c0lEKCkpIHsKLSAgICAgICAgICAgIERPTTo6Tm9kZUltcGwqIHIgPSBwLT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICAgICAgICAgIE5vZGVJbXBsKiByID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7CiAg
ICAgICAgICAgICBpbnQgc3ViY291bnQgPSAwOwogICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0
ID0gcC0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKICAgICAgICAgICAgIHdoaWxlIChyKSB7CkBAIC02
NTYsNyArNjU1LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYQog
ICAgICAgICAhc3R5bGVkRWxlbWVudC0+Z2V0RG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxlcygp
KSB7CiAgICAgICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzLgogICAgICAgICBpbnQgY291
bnQgPSAwOwotICAgICAgICBET006Ok5vZGVJbXBsKiBuOworICAgICAgICBOb2RlSW1wbCogbjsK
ICAgICAgICAgZm9yIChuID0gZWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7IG4gJiYgIW4tPmlz
RWxlbWVudE5vZGUoKTsgbiA9IG4tPnByZXZpb3VzU2libGluZygpKTsKICAgICAgICAgd2hpbGUg
KG4pIHsKICAgICAgICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQobikpCkBAIC04
NzUsNyArODc0LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eQog
ICAgIHJldHVybiBzdHlsZTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5k
ZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIERPTTo6RWxlbWVudEltcGwgKmUpCit2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudEltcGwgKmUpCiB7CiAgICAgLy8gQ2FjaGUgb3VyIG9yaWdpbmFsIGRpc3BsYXkuCiAgICAg
c3R5bGUtPnNldE9yaWdpbmFsRGlzcGxheShzdHlsZS0+ZGlzcGxheSgpKTsKQEAgLTEwOTYsNyAr
MTA5NSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihDU1MKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9y
KERPTTo6Q1NTU2VsZWN0b3IgKnNlbCwgRE9NOjpFbGVtZW50SW1wbCAqZSkKK2Jvb2wgQ1NTU3R5
bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3RvciAqc2VsLCBFbGVtZW50SW1w
bCAqZSkKIHsKICAgICBpZighZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIzNSw3ICsx
MjM0LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZDogewogICAgICAgICAgICAg
ICAgIC8vIGZpcnN0LWNoaWxkIG1hdGNoZXMgdGhlIGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxl
bWVudCEKICAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIERPTTo6Tm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2RlKCkgKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoICFuICkKQEAgLTEyNDYsNyArMTI0NSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0xhc3RDaGlsZDogewogICAgICAgICAgICAgICAgIC8vIGxhc3QtY2hpbGQgbWF0Y2hlcyB0
aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQhCiAgICAgICAgICAgICAgICAgaWYgKGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBET006Ok5vZGVJbXBsKiBuID0g
ZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwqIG4gPSBlLT5u
ZXh0U2libGluZygpOwogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gJiYgIW4tPmlzRWxl
bWVudE5vZGUoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmco
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbiApCkBAIC0xMjU3LDcgKzEyNTYsNyBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5Q2hpbGQ6IHsKICAgICAgICAgICAgICAgICAvLyBJZiBi
b3RoIGZpcnN0LWNoaWxkIGFuZCBsYXN0LWNoaWxkIGFwcGx5LCB0aGVuIG9ubHktY2hpbGQgYXBw
bGllcy4KICAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIERPTTo6Tm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2RlKCkgKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoICFuICkgewpAQCAtMTQyNiw3ICsxNDI1LDcgQEAgQ1NTUnVsZVNldDo6fkNT
U1J1bGVTZXQoKQogfQogCiAKLXZvaWQgQ1NTUnVsZVNldDo6YWRkVG9SdWxlU2V0KERPTTo6RE9N
U3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAordm9pZCBDU1NSdWxlU2V0OjphZGRU
b1J1bGVTZXQoRE9NU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgQ1NTU2VsZWN0b3Iq
IHNlbCkKIHsKICAgICBpZiAoIWtleSkgcmV0dXJuOwpAQCAtMTcyMCw3ICsxNzE5LDcgQEAgc3Rh
dGljIFFDb2xvciBjb2xvckZvckNTU1ZhbHVlKCBpbnQgY3NzXwogICAgICAgICAgICAgLy8gRGVz
a3RvcCBiYWNrZ3JvdW5kLgogICAgICAgICAgICAgcmV0dXJuIGJja2dyQ29uZmlnLnJlYWRDb2xv
ckVudHJ5KCJDb2xvcjEiLCAmcUFwcC0+cGFsZXR0ZSgpLmRpc2FibGVkKCkuYmFja2dyb3VuZCgp
KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4ga2h0bWw6OmludmFsaWRDb2xvcjsKKyAgICAg
ICAgcmV0dXJuIGludmFsaWRDb2xvcjsKICAgICB9CiAgICAgCiAgICAgY29uc3QgUVBhbGV0dGUg
JnBhbCA9IHFBcHAtPnBhbGV0dGUoKTsKQEAgLTE3NzgsNyArMTc3Nyw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSggaW50IGlkLCBET006OkNTU1ZhbHVlSW1wbCAqdmFsdWUg
KQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KCBpbnQgaWQsIENTU1ZhbHVl
SW1wbCAqdmFsdWUgKQogewogICAgIC8va2REZWJ1ZyggNjA4MCApIDw8ICJhcHBseWluZyBwcm9w
ZXJ0eSAiIDw8IHByb3AtPm1faWQgPDwgZW5kbDsKIApAQCAtMjgxOSw3ICsyODE4LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KCBpbgogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTCh2ZXJ0aWNhbEFsaWduLCBWZXJ0aWNhbEFsaWduKQogICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlKSByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSkgewotCSAga2h0bWw6OkVWZXJ0aWNhbEFsaWduIGFsaWduOworCSAgRVZlcnRp
Y2FsQWxpZ24gYWxpZ247CiAKIAkgIHN3aXRjaChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkK
IAkgICAgewpAQCAtMzQ3NCw3ICszNDczLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBs
eVByb3BlcnR5KCBpbgogICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3Ro
KHN0eWxlLCBwYWludERldmljZU1ldHJpY3MpOwogICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55
LT5jb21wdXRlTGVuZ3RoKHN0eWxlLCBwYWludERldmljZU1ldHJpY3MpOwogICAgICAgICAgICAg
aW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aChzdHlsZSwg
cGFpbnREZXZpY2VNZXRyaWNzKSA6IDA7Ci0gICAgICAgICAgICBRQ29sb3IgY29sID0ga2h0bWw6
OnRyYW5zcGFyZW50Q29sb3I7CisgICAgICAgICAgICBRQ29sb3IgY29sID0gdHJhbnNwYXJlbnRD
b2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikgewogICAgICAgICAgICAgICAgIGlu
dCBpZGVudCA9IGl0ZW0tPmNvbG9yLT5nZXRJZGVudCgpOwogICAgICAgICAgICAgICAgIGlmIChp
ZGVudCkKQEAgLTM4NjAsNyArMzg1OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eSggaW4KICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQmFja2dy
b3VuZEF0dGFjaG1lbnQoQmFja2dyb3VuZExheWVyKiBsYXllciwgRE9NOjpDU1NWYWx1ZUltcGwq
IHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5kQXR0YWNobWVudChC
YWNrZ3JvdW5kTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZUltcGwqIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CiAgICAgICAg
IGxheWVyLT5zZXRCYWNrZ3JvdW5kQXR0YWNobWVudChSZW5kZXJTdHlsZTo6aW5pdGlhbEJhY2tn
cm91bmRBdHRhY2htZW50KCkpOwpAQCAtMzg4MSw3ICszODgwLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBCYWNrZ3JvdW5kQXR0YQogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBCYWNrZ3JvdW5kSW1hZ2UoQmFja2dyb3VuZExheWVyKiBsYXllciwgRE9NOjpDU1NW
YWx1ZUltcGwqIHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5kSW1h
Z2UoQmFja2dyb3VuZExheWVyKiBsYXllciwgQ1NTVmFsdWVJbXBsKiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewogICAg
ICAgICBsYXllci0+c2V0QmFja2dyb3VuZEltYWdlKFJlbmRlclN0eWxlOjppbml0aWFsQmFja2dy
b3VuZEltYWdlKCkpOwpAQCAtMzg5Myw3ICszODkyLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBCYWNrZ3JvdW5kSW1hZwogICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kSW1hZ2Uoc3RhdGlj
X2Nhc3Q8Q1NTSW1hZ2VWYWx1ZUltcGwgKj4ocHJpbWl0aXZlVmFsdWUpLT5pbWFnZShlbGVtZW50
LT5nZXREb2N1bWVudCgpLT5kb2NMb2FkZXIoKSkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hcEJhY2tncm91bmRSZXBlYXQoQmFja2dyb3VuZExheWVyKiBsYXllciwgRE9NOjpDU1NW
YWx1ZUltcGwqIHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5kUmVw
ZWF0KEJhY2tncm91bmRMYXllciogbGF5ZXIsIENTU1ZhbHVlSW1wbCogdmFsdWUpCiB7CiAgICAg
aWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKICAg
ICAgICAgbGF5ZXItPnNldEJhY2tncm91bmRSZXBlYXQoUmVuZGVyU3R5bGU6OmluaXRpYWxCYWNr
Z3JvdW5kUmVwZWF0KCkpOwpAQCAtMzkyMCw3ICszOTE5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBCYWNrZ3JvdW5kUmVwZQogICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBCYWNrZ3JvdW5kWFBvc2l0aW9uKEJhY2tncm91bmRMYXllciogbGF5ZXIsIERPTTo6Q1NT
VmFsdWVJbXBsKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQmFja2dyb3VuZFhQ
b3NpdGlvbihCYWNrZ3JvdW5kTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZUltcGwqIHZhbHVlKQogewog
ICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7
CiAgICAgICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kWFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0
aWFsQmFja2dyb3VuZFhQb3NpdGlvbigpKTsKQEAgLTM5NDAsNyArMzkzOSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWFwQmFja2dyb3VuZFhQb3MKICAgICBsYXllci0+c2V0QmFja2dyb3Vu
ZFhQb3NpdGlvbihsKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBCYWNrZ3JvdW5k
WVBvc2l0aW9uKEJhY2tncm91bmRMYXllciogbGF5ZXIsIERPTTo6Q1NTVmFsdWVJbXBsKiB2YWx1
ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQmFja2dyb3VuZFlQb3NpdGlvbihCYWNrZ3Jv
dW5kTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZUltcGwqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+
Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CiAgICAgICAgIGxheWVy
LT5zZXRCYWNrZ3JvdW5kWVBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsQmFja2dyb3VuZFlQ
b3NpdGlvbigpKTsKQEAgLTQwMjEsNyArNDAyMCw3IEBAIGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6
OmdldENvbXB1dGVkU2l6ZUYKICAgICBpbnQgbWluU2l6ZSA9IHNldHRpbmdzLT5taW5Gb250U2l6
ZSgpOwogICAgIGludCBtaW5Mb2dpY2FsU2l6ZSA9IHNldHRpbmdzLT5taW5Mb2dpY2FsRm9udFNp
emUoKTsKIAotICAgIGZsb2F0IHpvb21QZXJjZW50ID0gKCFraHRtbDo6cHJpbnRwYWludGVyICYm
IHZpZXcpID8gdmlldy0+cGFydCgpLT56b29tRmFjdG9yKCkvMTAwLjBmIDogMS4wZjsKKyAgICBm
bG9hdCB6b29tUGVyY2VudCA9ICghcHJpbnRwYWludGVyICYmIHZpZXcpID8gdmlldy0+cGFydCgp
LT56b29tRmFjdG9yKCkvMTAwLjBmIDogMS4wZjsKICAgICBmbG9hdCB6b29tZWRTaXplID0gc3Bl
Y2lmaWVkU2l6ZSAqIHpvb21QZXJjZW50OwogCiAgICAgLy8gQXBwbHkgdGhlIGhhcmQgbWluaW11
bSBmaXJzdC4gIFdlIG9ubHkgYXBwbHkgdGhlIGhhcmQgbWluaW11bSBpZiBhZnRlciB6b29taW5n
IHdlJ3JlIHN0aWxsIHRvbyBzbWFsbC4KSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9kb21wYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
ZG9tcGFyc2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMg
V2ViQ29yZS9raHRtbC9lY21hL2RvbXBhcnNlci5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9k
b21wYXJzZXIuY3BwCTggQXVnIDIwMDUgMDQ6MDc6NDAgLTAwMDAJMS4zCisrKyBXZWJDb3JlL2to
dG1sL2VjbWEvZG9tcGFyc2VyLmNwcAkxNSBBdWcgMjAwNSAwNTo1NDoxOSAtMDAwMApAQCAtNjks
MTEgKzY5LDggQEAgRE9NUGFyc2VyOjpET01QYXJzZXIoRXhlY1N0YXRlICpleGVjLCBETwogCiBW
YWx1ZUltcCAqRE9NUGFyc2VyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmRE9NUGFyc2VyOjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVy
cik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01Q
YXJzZXI6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAg
IAogICBET01QYXJzZXIgKnBhcnNlciA9IHN0YXRpY19jYXN0PERPTVBhcnNlciAqPih0aGlzT2Jq
KTsKIApJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOApkaWZmIC1wIC11IC1yMS4zOCBXZWJDb3JlL2todG1s
L2VjbWEva2pzX2JpbmRpbmcuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2JpbmRpbmcu
Y3BwCTkgQXVnIDIwMDUgMjE6Mjk6NDEgLTAwMDAJMS4zOAorKysgV2ViQ29yZS9raHRtbC9lY21h
L2tqc19iaW5kaW5nLmNwcAkxNSBBdWcgMjAwNSAwNTo1NDoyMCAtMDAwMApAQCAtOTIsNyArOTIs
NyBAQCBET01PYmplY3QqIFNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplCiAKIHZvaWQgU2Ny
aXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdCh2b2lkKiBvYmplY3RIYW5kbGUsIERPTU9iamVj
dCogb2JqKSAKIHsKLSAgICBkb21PYmplY3RzKCktPmluc2VydChvYmplY3RIYW5kbGUsIG9iaik7
CisgICAgZG9tT2JqZWN0cygpLT5zZXQob2JqZWN0SGFuZGxlLCBvYmopOwogfQogCiB2b2lkIFNj
cmlwdEludGVycHJldGVyOjpkZWxldGVET01PYmplY3Qodm9pZCogb2JqZWN0SGFuZGxlKSAKQEAg
LTEyNiw5ICsxMjYsOSBAQCB2b2lkIFNjcmlwdEludGVycHJldGVyOjpwdXRET01Ob2RlRm9yRG9j
CiAgICAgTm9kZU1hcCAqZG9jdW1lbnREaWN0ID0gZG9tTm9kZXNQZXJEb2N1bWVudCgpLT5nZXQo
ZG9jdW1lbnQpOwogICAgIGlmICghZG9jdW1lbnREaWN0KSB7CiAgICAgICAgIGRvY3VtZW50RGlj
dCA9IG5ldyBOb2RlTWFwKCk7Ci0gICAgICAgIGRvbU5vZGVzUGVyRG9jdW1lbnQoKS0+aW5zZXJ0
KGRvY3VtZW50LCBkb2N1bWVudERpY3QpOworICAgICAgICBkb21Ob2Rlc1BlckRvY3VtZW50KCkt
PnNldChkb2N1bWVudCwgZG9jdW1lbnREaWN0KTsKICAgICB9Ci0gICAgZG9jdW1lbnREaWN0LT5p
bnNlcnQobm9kZUhhbmRsZSwgbm9kZVdyYXBwZXIpOworICAgIGRvY3VtZW50RGljdC0+c2V0KG5v
ZGVIYW5kbGUsIG5vZGVXcmFwcGVyKTsKIH0KIAogdm9pZCBTY3JpcHRJbnRlcnByZXRlcjo6Zm9y
Z2V0QWxsRE9NTm9kZXNGb3JEb2N1bWVudChET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQpCkBA
IC0zNDksOSArMzQ5LDggQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlICpleGVjLCBp
bgogICBjaGFyIGJ1ZmZlclsxMDBdOyAvLyBuZWVkcyB0byBmaXQgMjAgY2hhcmFjdGVycywgcGx1
cyBhbiBpbnRlZ2VyIGluIEFTQ0lJLCBwbHVzIGEgbnVsbCBjaGFyYWN0ZXIKICAgc3ByaW50Zihi
dWZmZXIsICIlcyBleGNlcHRpb24gJWQiLCB0eXBlLCBjb2RlKTsKIAotICBPYmplY3RJbXAgKmVy
cm9yT2JqZWN0ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIGJ1ZmZlcik7Cisg
IE9iamVjdEltcCAqZXJyb3JPYmplY3QgPSB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwg
YnVmZmVyKTsKICAgZXJyb3JPYmplY3QtPnB1dChleGVjLCAiY29kZSIsIE51bWJlcihjb2RlKSk7
Ci0gIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvck9iamVjdCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM0
CmRpZmYgLXAgLXUgLXIxLjM0IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAotLS0gV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwCTggQXVnIDIwMDUgMDQ6MDc6NDAgLTAwMDAJMS4z
NAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwCTE1IEF1ZyAyMDA1IDA1OjU0OjIx
IC0wMDAwCkBAIC0yMzksMTEgKzIzOSw4IEBAIHZvaWQgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
cHV0KEV4ZWNTdGEKIAogVmFsdWVJbXAgKkRPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmM6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTUNTU1N0
eWxlRGVjbGFyYXRpb246OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICBy
ZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAgIENTU1N0
eWxlRGVjbGFyYXRpb25JbXBsICZzdHlsZURlY2wgPSAqc3RhdGljX2Nhc3Q8RE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBVU3RyaW5nIHN0ciA9IGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpOwpAQCAtNDY2LDExICs0NjMsOCBAQCBWYWx1ZUltcCAqZ2V0RE9NU3R5
bGVTaGVldExpc3QoRXhlY1N0YXRlCiAKIFZhbHVlSW1wICpET01TdHlsZVNoZWV0TGlzdEZ1bmM6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTVN0eWxl
U2hlZXRMaXN0OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShl
eGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJu
IGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTVN0eWxlU2hlZXRM
aXN0OjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICBT
dHlsZVNoZWV0TGlzdEltcGwgJnN0eWxlU2hlZXRMaXN0ID0gKnN0YXRpY19jYXN0PERPTVN0eWxl
U2hlZXRMaXN0ICo+KHRoaXNPYmopLT5pbXBsKCk7CiAgIGlmIChpZCA9PSBET01TdHlsZVNoZWV0
TGlzdDo6SXRlbSkKICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHlsZVNoZWV0
TGlzdC5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKQEAgLTU2MCwxMSArNTU0LDggQEAg
VmFsdWVJbXAgKmdldERPTU1lZGlhTGlzdChFeGVjU3RhdGUgKmV4ZQogCiBWYWx1ZUltcCAqS0pT
OjpET01NZWRpYUxpc3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmot
PmluaGVyaXRzKCZLSlM6OkRPTU1lZGlhTGlzdDo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
S0pTOjpET01NZWRpYUxpc3Q6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgIE1lZGlhTGlzdEltcGwgJm1lZGlhTGlzdCA9ICpzdGF0aWNfY2FzdDxET01N
ZWRpYUxpc3QgKj4odGhpc09iaiktPmltcGwoKTsKICAgc3dpdGNoIChpZCkgewogICAgIGNhc2Ug
RE9NTWVkaWFMaXN0OjpJdGVtOgpAQCAtNjMzLDExICs2MjQsOCBAQCBib29sIERPTUNTU1N0eWxl
U2hlZXQ6OmdldE93blByb3BlcnR5U2xvCiAKIFZhbHVlSW1wICpET01DU1NTdHlsZVNoZWV0UHJv
dG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpE
T01DU1NTdHlsZVNoZWV0OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAg
cmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTUNTU1N0
eWxlU2hlZXQ6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBDU1NTdHlsZVNo
ZWV0SW1wbCAmc3R5bGVTaGVldCA9ICpzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCAqPihz
dGF0aWNfY2FzdDxET01DU1NTdHlsZVNoZWV0ICo+KHRoaXNPYmopLT5pbXBsKCkpOwogICBzd2l0
Y2ggKGlkKSB7CkBAIC03MTUsMTEgKzcwMyw4IEBAIGJvb2wgRE9NQ1NTUnVsZUxpc3Q6OmdldE93
blByb3BlcnR5U2xvdCgKIAogVmFsdWVJbXAgKkRPTUNTU1J1bGVMaXN0RnVuYzo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTUnVsZUxpc3Q6Omlu
Zm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9Cisg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTUnVsZUxpc3Q6OmluZm8pKQorICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIENTU1J1bGVMaXN0SW1wbCAm
Y3NzUnVsZUxpc3QgPSAqc3RhdGljX2Nhc3Q8RE9NQ1NTUnVsZUxpc3QgKj4odGhpc09iaiktPmlt
cGwoKTsKICAgc3dpdGNoIChpZCkgewogICAgIGNhc2UgRE9NQ1NTUnVsZUxpc3Q6Okl0ZW06CkBA
IC05MTUsMTEgKzkwMCw4IEBAIHZvaWQgRE9NQ1NTUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3QKIAogVmFsdWVJbXAgKkRPTUNTU1J1bGVGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0
aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01DU1NSdWxlOjppbmZvKSkgewotICAgIE9iamVjdElt
cCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKCZLSlM6OkRPTUNTU1J1bGU6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CiAgIENTU1J1bGVJbXBsICZjc3NSdWxlID0gKnN0YXRpY19jYXN0PERPTUNT
U1J1bGUgKj4odGhpc09iaiktPmltcGwoKTsKIAogICBpZiAoY3NzUnVsZS50eXBlKCkgPT0gRE9N
OjpDU1NSdWxlOjpNRURJQV9SVUxFKSB7CkBAIC0xMTIzLDExICsxMTA1LDggQEAgYm9vbCBET01D
U1NQcmltaXRpdmVWYWx1ZTo6Z2V0T3duUHJvcGVydAogCiBWYWx1ZUltcCAqRE9NQ1NTUHJpbWl0
aXZlVmFsdWVQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKCZLSlM6OkRPTUNTU1ByaW1pdGl2ZVZhbHVlOjppbmZvKSkgewotICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZLSlM6OkRPTUNTU1ByaW1pdGl2ZVZhbHVlOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihl
eGVjKTsKICAgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsICZ2YWwgPSAqc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWVJbXBsICo+KHN0YXRpY19jYXN0PERPTUNTU1ByaW1pdGl2ZVZhbHVlICo+KHRo
aXNPYmopLT5pbXBsKCkpOwogICBzd2l0Y2ggKGlkKSB7CkBAIC0xMjU1LDExICsxMjM0LDggQEAg
Ym9vbCBET01DU1NWYWx1ZUxpc3Q6OmdldE93blByb3BlcnR5U2xvdAogCiBWYWx1ZUltcCAqRE9N
Q1NTVmFsdWVMaXN0RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJktKUzo6RE9NQ1NTVmFsdWU6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
LSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9N
Q1NTVmFsdWU6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAgIENTU1ZhbHVlTGlzdEltcGwgJnZhbHVlTGlzdCA9ICpzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3RJbXBsICo+KHN0YXRpY19jYXN0PERPTUNTU1ZhbHVlTGlzdCAqPih0aGlzT2JqKS0+aW1wbCgp
KTsKICAgc3dpdGNoIChpZCkgewogICAgIGNhc2UgRE9NQ1NTVmFsdWVMaXN0OjpJdGVtOgpJbmRl
eDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuODYKZGlmZiAtcCAtdSAtcjEuODYgV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAJOCBBdWcgMjAwNSAwNDowNzo0MCAt
MDAwMAkxLjg2CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAJMTUgQXVnIDIwMDUg
MDU6NTQ6MjIgLTAwMDAKQEAgLTYzOCwxMSArNjM4LDggQEAgdm9pZCBET01Ob2RlOjpwdXNoRXZl
bnRIYW5kbGVyU2NvcGUoRXhlYwogCiBWYWx1ZUltcCAqRE9NTm9kZVByb3RvRnVuYzo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTU5vZGU6OmluZm8pKSB7Ci0g
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBl
eGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJkRPTU5vZGU6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMp
OwogICBOb2RlSW1wbCAmbm9kZSA9ICpzdGF0aWNfY2FzdDxET01Ob2RlICo+KHRoaXNPYmopLT5p
bXBsKCk7CiAgIHN3aXRjaCAoaWQpIHsKQEAgLTc5NSwxMSArNzkyLDggQEAgRE9NTm9kZUxpc3RG
dW5jOjpET01Ob2RlTGlzdEZ1bmMoRXhlY1N0YQogLy8gTm90IGEgcHJvdG90eXBlIGNsYXNzIGN1
cnJlbnRseSwgYnV0IHNob3VsZCBwcm9iYWJseSBiZSBjb252ZXJ0ZWQgdG8gb25lCiBWYWx1ZUlt
cCAqRE9NTm9kZUxpc3RGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmS0pTOjpET01Ob2RlTGlzdDo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpE
T01Ob2RlTGlzdDo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKICAgRE9NOjpOb2RlTGlzdEltcGwgJmxpc3QgPSAqc3RhdGljX2Nhc3Q8RE9NTm9kZUxpc3Qg
Kj4odGhpc09iaiktPmltcGwoKTsKIAogICBpZiAoaWQgPT0gRE9NTm9kZUxpc3Q6Okl0ZW0pCkBA
IC0xMDAzLDExICs5OTcsOCBAQCB2b2lkIERPTURvY3VtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTCiAKIFZhbHVlSW1wICpET01Eb2N1bWVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0g
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NTm9kZTo6aW5mbykpIHsKLSAgICBPYmpl
Y3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmS0pTOjpET01Ob2RlOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsK
ICAgTm9kZUltcGwgJm5vZGUgPSAqc3RhdGljX2Nhc3Q8RE9NTm9kZSAqPih0aGlzT2JqKS0+aW1w
bCgpOwogICBEb2N1bWVudEltcGwgJmRvYyA9IHN0YXRpY19jYXN0PERvY3VtZW50SW1wbCAmPihu
b2RlKTsKQEAgLTEyMTIsMTEgKzEyMDMsOCBAQCBib29sIERPTUVsZW1lbnQ6OmdldE93blByb3Bl
cnR5U2xvdChFeGVjCiAKIFZhbHVlSW1wICpET01FbGVtZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01Ob2RlOjppbmZvKSkgeyAv
LyBub2RlIHNob3VsZCBiZSBlbm91Z2ggaGVyZSwgZ2l2ZW4gdGhlIGNhc3QKLSAgICBPYmplY3RJ
bXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmS0pTOjpET01Ob2RlOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAg
Tm9kZUltcGwgJm5vZGUgPSAqc3RhdGljX2Nhc3Q8RE9NTm9kZSAqPih0aGlzT2JqKS0+aW1wbCgp
OwogICBFbGVtZW50SW1wbCAmZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICY+KG5v
ZGUpOwpAQCAtMTMyMSwxMSArMTMwOSw4IEBAIERPTURPTUltcGxlbWVudGF0aW9uOjp+RE9NRE9N
SW1wbGVtZW50YXQKIAogVmFsdWVJbXAgKkRPTURPTUltcGxlbWVudGF0aW9uUHJvdG9GdW5jOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01ET01JbXBs
ZW1lbnRhdGlvbjo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVy
biBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01ET01JbXBsZW1l
bnRhdGlvbjo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
ICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAgIERPTUltcGxlbWVu
dGF0aW9uSW1wbCAmaW1wbGVtZW50YXRpb24gPSAqc3RhdGljX2Nhc3Q8RE9NRE9NSW1wbGVtZW50
YXRpb24gKj4odGhpc09iaiktPmltcGwoKTsKIApAQCAtMTQ2NSwxMSArMTQ1MCw4IEBAIGJvb2wg
RE9NTmFtZWROb2RlTWFwOjpnZXRPd25Qcm9wZXJ0eVNsb3QKIAogVmFsdWVJbXAgKkRPTU5hbWVk
Tm9kZU1hcFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJktKUzo6RE9NTmFtZWROb2RlTWFwOjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVy
cik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6
OkRPTU5hbWVkTm9kZU1hcDo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAgIE5h
bWVkTm9kZU1hcEltcGwgJm1hcCA9ICpzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVNYXAgKj4odGhp
c09iaiktPmltcGwoKTsKIApAQCAtMjAwOSwxMSArMTk5MSw4IEBAIHZvaWQgRE9NQ2hhcmFjdGVy
RGF0YTo6cHV0KEV4ZWNTdGF0ZSAqZXgKIAogVmFsdWVJbXAgKkRPTUNoYXJhY3RlckRhdGFQcm90
b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRP
TUNoYXJhY3RlckRhdGE6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICBy
ZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ2hhcmFj
dGVyRGF0YTo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
ICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAgIENoYXJhY3RlckRh
dGFJbXBsICZkYXRhID0gKnN0YXRpY19jYXN0PENoYXJhY3RlckRhdGFJbXBsICo+KHN0YXRpY19j
YXN0PERPTUNoYXJhY3RlckRhdGEgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3aXRjaChpZCkg
ewpAQCAtMjA3MiwxMSArMjA1MSw4IEBAIERPTVRleHQ6OkRPTVRleHQoRXhlY1N0YXRlICpleGVj
LCBUZXh0SW0KIAogVmFsdWVJbXAgKkRPTVRleHRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewot
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTVRleHQ6OmluZm8pKSB7Ci0gICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+
aW5oZXJpdHMoJktKUzo6RE9NVGV4dDo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7
CiAgIFRleHRJbXBsICZ0ZXh0ID0gKnN0YXRpY19jYXN0PFRleHRJbXBsICo+KHN0YXRpY19jYXN0
PERPTVRleHQgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3aXRjaChpZCkgewpJbmRleDogV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNTUKZGlmZiAtcCAtdSAtcjEuNTUgV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMu
Y3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJMTQgQXVnIDIwMDUgMDg6
Mjg6MDEgLTAwMDAJMS41NQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwCTE1
IEF1ZyAyMDA1IDA1OjU0OjIzIC0wMDAwCkBAIC01MTEsMTEgKzUxMSw4IEBAIHZvaWQgRE9NRXZl
bnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXQKIAogVmFsdWVJbXAgKkRPTUV2ZW50UHJvdG9G
dW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqIHRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTUV2ZW50
OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAg
fQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01FdmVudDo6aW5mbykpCisgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgRXZlbnRJbXBsICZldmVudCA9ICpzdGF0
aWNfY2FzdDxET01FdmVudCAqPiggdGhpc09iaiApLT5pbXBsKCk7CiAgIHN3aXRjaCAoaWQpIHsK
ICAgICBjYXNlIERPTUV2ZW50OjpTdG9wUHJvcGFnYXRpb246CkBAIC02NjEsMTEgKzY1OCw4IEBA
IFZhbHVlSW1wICpET01VSUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEUKIAogVmFsdWVJbXAgKkRP
TVVJRXZlbnRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKCZET01VSUV2ZW50OjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAg
cmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01VSUV2ZW50Ojpp
bmZvKSkKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICBVSUV2ZW50
SW1wbCAmdWlFdmVudCA9ICpzdGF0aWNfY2FzdDxVSUV2ZW50SW1wbCAqPihzdGF0aWNfY2FzdDxE
T01VSUV2ZW50ICo+KHRoaXNPYmopLT5pbXBsKCkpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2Fz
ZSBET01VSUV2ZW50OjpJbml0VUlFdmVudDoKQEAgLTgwMywxMSArNzk3LDggQEAgVmFsdWVJbXAg
KkRPTU1vdXNlRXZlbnQ6OmdldFZhbHVlUHJvcGVydAogCiBWYWx1ZUltcCAqRE9NTW91c2VFdmVu
dFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRP
TU1vdXNlRXZlbnQ6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1
cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTU1vdXNlRXZlbnQ6Omlu
Zm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIE1vdXNlRXZl
bnRJbXBsICZtb3VzZUV2ZW50ID0gKnN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsICo+KHN0YXRp
Y19jYXN0PERPTU1vdXNlRXZlbnQgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3aXRjaCAoaWQp
IHsKICAgICBjYXNlIERPTU1vdXNlRXZlbnQ6OkluaXRNb3VzZUV2ZW50OgpAQCAtODk5LDExICs4
OTAsOCBAQCBWYWx1ZUltcCAqRE9NS2V5Ym9hcmRFdmVudDo6Z2V0VmFsdWVQcm9wCiAKIFZhbHVl
SW1wICpET01LZXlib2FyZEV2ZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0
aGlzT2JqLT5pbmhlcml0cygmRE9NS2V5Ym9hcmRFdmVudDo6aW5mbykpIHsKLSAgICBPYmplY3RJ
bXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmRE9NS2V5Ym9hcmRFdmVudDo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKICAgS2V5Ym9hcmRFdmVudEltcGwgJmV2ZW50ID0gKnN0YXRpY19jYXN0
PEtleWJvYXJkRXZlbnRJbXBsICo+KHN0YXRpY19jYXN0PERPTVVJRXZlbnQgKj4odGhpc09iaikt
PmltcGwoKSk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTUtleWJvYXJkRXZlbnQ6Oklu
aXRLZXlib2FyZEV2ZW50OgpAQCAtMTAwNSwxMSArOTkzLDggQEAgVmFsdWVJbXAgKkRPTU11dGF0
aW9uRXZlbnQ6OmdldFZhbHVlUHJvcAogCiBWYWx1ZUltcCAqRE9NTXV0YXRpb25FdmVudFByb3Rv
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTU11dGF0
aW9uRXZlbnQ6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4g
ZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTU11dGF0aW9uRXZlbnQ6Omlu
Zm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIE11dGF0aW9u
RXZlbnRJbXBsICZtdXRhdGlvbkV2ZW50ID0gKnN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnRJbXBs
ICo+KHN0YXRpY19jYXN0PERPTUV2ZW50ICo+KHRoaXNPYmopLT5pbXBsKCkpOwogICBzd2l0Y2gg
KGlkKSB7CiAgICAgY2FzZSBET01NdXRhdGlvbkV2ZW50OjpJbml0TXV0YXRpb25FdmVudDoKQEAg
LTEwOTYsMTEgKzEwODEsOCBAQCBWYWx1ZUltcCAqRE9NV2hlZWxFdmVudDo6Z2V0VmFsdWVQcm9w
ZXJ0CiAKIFZhbHVlSW1wICpET01XaGVlbEV2ZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsK
LSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01XaGVlbEV2ZW50OjppbmZvKSkgewotICAg
ICAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0g
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7Ci0gICAgICAgIHJldHVybiBlcnJvcjsK
LSAgICB9CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NV2hlZWxFdmVudDo6aW5mbykp
CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCkBAIC0xMjA4LDExICsxMTkwLDggQEAgdm9pZCBDbGlwYm9hcmQ6
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCiBWYWx1ZUltcCAqQ2xpcGJvYXJkUHJvdG9GdW5j
OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZDbGlwYm9hcmQ6
OmluZm8pKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5
cGVFcnJvcik7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICByZXR1
cm4gZXJyOwotICAgIH0KKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZDbGlwYm9hcmQ6Omlu
Zm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAg
Q2xpcGJvYXJkICpjYiA9IHN0YXRpY19jYXN0PENsaXBib2FyZCAqPih0aGlzT2JqKTsKICAgICBz
d2l0Y2ggKGlkKSB7CkBAIC0xMjI0LDkgKzEyMDMsNyBAQCBWYWx1ZUltcCAqQ2xpcGJvYXJkUHJv
dG9GdW5jOjpjYWxsQXNGdW5jCiAgICAgICAgICAgICAgICAgY2ItPmNsaXBib2FyZC0+Y2xlYXJE
YXRhKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yLCJjbGVhckRh
dGE6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIGV4ZWMt
PnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJjbGVhckRhdGE6
IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogICAgICAgICAgICAgfQogICAgICAgICBj
YXNlIENsaXBib2FyZDo6R2V0RGF0YToKICAgICAgICAgewpAQCAtMTIzOSwxOCArMTIxNiwxNCBA
QCBWYWx1ZUltcCAqQ2xpcGJvYXJkUHJvdG9GdW5jOjpjYWxsQXNGdW5jCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFN5bnRheEVycm9yLCJnZXREYXRhOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMi
KTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFN5bnRheEVycm9yLCAiZ2V0RGF0YTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbGlwYm9hcmQ6OlNldERhdGE6
CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMikgewogICAgICAgICAgICAgICAgIHJl
dHVybiBCb29sZWFuKGNiLT5jbGlwYm9hcmQtPnNldERhdGEoYXJnc1swXS0+dG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFN5bnRheEVycm9yLCJzZXREYXRhOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVu
dHMiKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yLCAic2V0RGF0YTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7
CiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xpcGJvYXJkOjpTZXREcmFnSW1hZ2U6CiAg
ICAgICAgIHsKQEAgLTEyNTgsMTEgKzEyMzEsOCBAQCBWYWx1ZUltcCAqQ2xpcGJvYXJkUHJvdG9G
dW5jOjpjYWxsQXNGdW5jCiAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMykgewotICAgICAg
ICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJv
ciwic2V0RHJhZ0ltYWdlOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsKLSAgICAgICAg
ICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJzZXRE
cmFnSW1hZ2U6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogCiAgICAgICAgICAgICBp
bnQgeCA9IChpbnQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBpbnQgeSA9
IChpbnQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CkBAIC0xMjc0LDkgKzEyNDQsNyBAQCBWYWx1
ZUltcCAqQ2xpcGJvYXJkUHJvdG9GdW5jOjpjYWxsQXNGdW5jCiAgICAgICAgICAgICAgICAgICAg
IGNiLT5jbGlwYm9hcmQtPnNldERyYWdJbWFnZUVsZW1lbnQobm9kZSwgUVBvaW50KHgseSkpOyAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBPYmplY3RJ
bXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgU3ludGF4RXJyb3IsInNldERyYWdJbWFnZUZy
b21FbGVtZW50OiBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
ciwgInNldERyYWdJbWFnZUZyb21FbGVtZW50OiBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50Iik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0xMjg3LDkgKzEyNTUsNyBAQCBW
YWx1ZUltcCAqQ2xpcGJvYXJkUHJvdG9GdW5jOjpjYWxsQXNGdW5jCiAgICAgICAgICAgICAgICAg
Y2ItPmNsaXBib2FyZC0+c2V0RHJhZ0ltYWdlKEpTSW1hZ2UtPmltYWdlKCktPnBpeG1hcCgpLCBR
UG9pbnQoeCx5KSk7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1w
ICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICAgICAgICAgICAgICBl
eGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0
bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
a2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzNApkaWZmIC1wIC11IC1yMS4x
MzQgV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21h
L2tqc19odG1sLmNwcAkxNCBBdWcgMjAwNSAwODowNzoyMiAtMDAwMAkxLjEzNAorKysgV2ViQ29y
ZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAkxNSBBdWcgMjAwNSAwNTo1NDoyOCAtMDAwMApAQCAt
MTUxLDExICsxNTEsOCBAQCBJTVBMRU1FTlRfUFJPVE9GVU5DKEhUTUxEb2NGdW5jdGlvbikKIAog
VmFsdWVJbXAgKktKUzo6SFRNTERvY0Z1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0
aGlzT2JqLT5pbmhlcml0cygmSFRNTERvY3VtZW50OjppbmZvKSkgewotICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZIVE1MRG9jdW1lbnQ6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CiAgIEhUTUxEb2N1bWVudEltcGwgJmRvYyA9ICpzdGF0aWNfY2FzdDxIVE1MRG9jdW1l
bnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAqPih0aGlzT2JqKS0+aW1wbCgpKTsK
IAogICBzd2l0Y2ggKGlkKSB7CkBAIC0xNzAsMTEgKzE2Nyw4IEBAIFZhbHVlSW1wICpLSlM6OkhU
TUxEb2NGdW5jdGlvbjo6Y2FsbEFzRnUKIAlXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmll
dmVXaW5kb3cocGFydCk7CiAJaWYgKHdpbmRvdykgewogCSAgT2JqZWN0SW1wICpmdW5jdGlvbk9i
amVjdCA9IHdpbmRvdy0+Z2V0KGV4ZWMsICJvcGVuIiktPmdldE9iamVjdCgpOwotCSAgaWYgKCFm
dW5jdGlvbk9iamVjdCB8fCAhZnVuY3Rpb25PYmplY3QtPmltcGxlbWVudHNDYWxsKCkpIHsKLQkg
ICAgT2JqZWN0SW1wICpleGNlcHRpb24gPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvcik7
Ci0JICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwotCSAgICByZXR1cm4gZXhjZXB0
aW9uOwotCSAgfQorCSAgaWYgKCFmdW5jdGlvbk9iamVjdCB8fCAhZnVuY3Rpb25PYmplY3QtPmlt
cGxlbWVudHNDYWxsKCkpCisJICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAJICByZXR1cm4gZnVuY3Rpb25PYmplY3QtPmNhbGwoZXhlYywgd2luZG93LCBhcmdzKTsKIAl9
CiAgICAgICB9CkBAIC0yMzI5LDExICsyMzIzLDggQEAgSFRNTEVsZW1lbnRGdW5jdGlvbjo6SFRN
TEVsZW1lbnRGdW5jdGlvbgogCiBWYWx1ZUltcCAqS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkhUTUxFbGVt
ZW50OjppbmZvKSkgewotICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxUeXBlRXJyb3IpOwotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAg
cmV0dXJuIGVycjsKLSAgICB9CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpIVE1M
RWxlbWVudDo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiAgICAga2REZWJ1ZygpIDw8ICJLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwg
IiA8PCBlbmRsOwogICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwog
ICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwgKj4oc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4odGhpc09iaiktPmltcGwoKSk7CkBAIC0z
NDMwLDExICszNDIxLDggQEAgVmFsdWVJbXAgKktKUzo6SFRNTENvbGxlY3Rpb246OmdldE5hbWVk
SQogCiBWYWx1ZUltcCAqS0pTOjpIVE1MQ29sbGVjdGlvblByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6SFRNTENvbGxlY3Rpb246OmluZm8p
KSB7Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsK
LSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6SFRNTENvbGxlY3Rpb246OmluZm8pKQorICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIEhUTUxDb2xsZWN0aW9uSW1wbCAm
Y29sbCA9ICpzdGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbiAqPih0aGlzT2JqKS0+aW1wbCgpOwog
CiAgIHN3aXRjaCAoaWQpIHsKQEAgLTM3NjksMTEgKzM3NTcsOCBAQCBzdGF0aWMgYm9vbCBpc0lt
YWdlUGF0dGVybihWYWx1ZUltcCAqdmFsCiAKIFZhbHVlSW1wICpLSlM6OkNvbnRleHQyREZ1bmN0
aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZDb250ZXh0
MkQ6OmluZm8pKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICBy
ZXR1cm4gZXJyOwotICAgIH0KKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZDb250ZXh0MkQ6
OmluZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAg
ICAgQ29udGV4dDJEICpjb250ZXh0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8S0pTOjpDb250ZXh0MkQg
Kj4odGhpc09iaik7CiAgICAga2h0bWw6OlJlbmRlckNhbnZhc0ltYWdlICpyZW5kZXJlciA9IHN0
YXRpY19jYXN0PGtodG1sOjpSZW5kZXJDYW52YXNJbWFnZSo+KGNvbnRleHRPYmplY3QtPl9lbGVt
ZW50LT5yZW5kZXJlcigpKTsKQEAgLTM3ODYsMTEgKzM3NzEsOCBAQCBWYWx1ZUltcCAqS0pTOjpD
b250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgCiAgICAgc3dpdGNoIChpZCkgewogICAgICAg
ICBjYXNlIENvbnRleHQyRDo6U2F2ZTogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9
IDApIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChhcmdzLnNpemUoKSAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoZHJh
d2luZ0NvbnRleHQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb250ZXh0T2JqZWN0LT5z
YXZlKCk7CkBAIC0zNzk4LDExICszNzgwLDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVu
Y3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDb250ZXh0MkQ6OlJlc3RvcmU6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAw
KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
U3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYXJncy5zaXplKCkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGRy
YXdpbmdDb250ZXh0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY29udGV4dE9iamVjdC0+
cmVzdG9yZSgpOwpAQCAtMzgxMCwyMCArMzc4OSwxNCBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0
MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIENvbnRleHQyRDo6QmVnaW5QYXRoOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXpl
KCkgIT0gMCkgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRo
KGRyYXdpbmdDb250ZXh0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ29udGV4dDJEOjpDbG9zZVBhdGg6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUo
KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBDR0NvbnRleHRDbG9zZVBhdGgo
ZHJhd2luZ0NvbnRleHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM4Nzks
MTEgKzM4NTIsOCBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAg
ICAgICAgICAgICAgICAgICAgIENHQ29udGV4dFNldENNWUtTdHJva2VDb2xvcihkcmF3aW5nQ29u
dGV4dCwgYywgbSwgeSwgaywgYSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAgICAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAg
ICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM5
MzgsMzAgKzM5MDgsMjEgQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxB
cwogICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29sb3IoZHJhd2lu
Z0NvbnRleHQsIGMsIG0sIHksIGssIGEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAg
ICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAg
ICAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ29udGV4dDJEOjpTZXRMaW5lV2lkdGg6IHsKLSAgICAgICAgICAgIGlmIChh
cmdzLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCB3ID0g
KGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0
TGluZVdpZHRoIChkcmF3aW5nQ29udGV4dCwgdyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6U2V0TGluZUNhcDogewotICAgICAgICAgICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIENHTGlu
ZUNhcCBjYXAgPSBrQ0dMaW5lQ2FwQnV0dDsKICAgICAgICAgICAgIFFTdHJpbmcgY2FwU3RyaW5n
ID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgICAg
ICBpZiAoY2FwU3RyaW5nID09ICJyb3VuZCIpCkBAIC0zOTcyLDExICszOTMzLDggQEAgVmFsdWVJ
bXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldExpbmVKb2luOiB7Ci0gICAgICAg
ICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBl
eGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAg
Q0dMaW5lSm9pbiBqb2luID0ga0NHTGluZUpvaW5NaXRlcjsKICAgICAgICAgICAgIFFTdHJpbmcg
am9pblN0cmluZyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwog
ICAgICAgICAgICAgaWYgKGpvaW5TdHJpbmcgPT0gInJvdW5kIikKQEAgLTM5ODcsMjEgKzM5NDUs
MTUgQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldE1pdGVyTGlt
aXQ6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAg
ICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0g
MSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7
CiAgICAgICAgICAgICBmbG9hdCBsID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdCAoZHJhd2luZ0NvbnRleHQsIGwpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkZp
bGw6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAg
ICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0g
MCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpc0dyYWRpZW50KGNvbnRleHRPYmplY3Qt
Pl9maWxsU3R5bGUpKSB7CiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShkcmF3
aW5nQ29udGV4dCk7CkBAIC00MDI3LDExICszOTc5LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4
dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDb250ZXh0MkQ6OlN0cm9rZTogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgp
ICE9IDApIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVy
cik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIGlmIChpc0dyYWRpZW50KGNvbnRl
eHRPYmplY3QtPl9zdHJva2VTdHlsZSkpIHsKICAgICAgICAgICAgICAgICBDR0NvbnRleHRTYXZl
R1N0YXRlKGRyYXdpbmdDb250ZXh0KTsKICAgICAgICAgICAgICAgICAKQEAgLTQwNTksMTEgKzQw
MDgsOCBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6U2NhbGU6IHsK
LSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAg
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBl
cnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAg
ICAgICAgICBmbG9hdCBzeCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAg
ICAgICAgIGZsb2F0IHN5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAg
ICAgICAgQ0dDb250ZXh0U2NhbGVDVE0gKGRyYXdpbmdDb250ZXh0LCBzeCwgc3kpOwpAQCAtNDA3
MSwzMyArNDAxNywyNCBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFz
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6
Um90YXRlOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewotICAgICAgICAg
ICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsK
LSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgp
ICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IpOwogICAgICAgICAgICAgZmxvYXQgYW5nbGUgPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYyk7CiAgICAgICAgICAgICBDR0NvbnRleHRSb3RhdGVDVE0gKGRyYXdpbmdDb250ZXh0LCBh
bmdsZSk7CiAgICAgICAgICAgICBjb250ZXh0T2JqZWN0LT5fbmVlZHNGbHVzaFJhc3RlckNhY2hl
ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29u
dGV4dDJEOjpUcmFuc2xhdGU6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKSB7
Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3lu
dGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YXJncy5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCB0eCA9IChmbG9hdClhcmdzWzBdLT50
b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHR5ID0gKGZsb2F0KWFyZ3NbMV0tPnRv
TnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNIChkcmF3aW5n
Q29udGV4dCwgdHgsIHR5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ29udGV4dDJEOjpNb3ZlVG86IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAh
PSAyKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFd
LT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIENHQ29udGV4dE1vdmVUb1BvaW50IChkcmF3
aW5nQ29udGV4dCwgeCwgeSk7CkBAIC00MTA1LDExICs0MDQyLDggQEAgVmFsdWVJbXAgKktKUzo6
Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkxpbmVUbzogewotICAgICAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpICE9IDIpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIGZsb2F0IHggPSAoZmxv
YXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0
KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRv
UG9pbnQgKGRyYXdpbmdDb250ZXh0LCB4LCB5KTsKQEAgLTQxMTcsMTEgKzQwNTEsOCBAQCBWYWx1
ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6UXVhZHJhdGljQ3VydmVUbzogewot
ICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpIHsKLSAgICAgICAgICAgICAgICBPYmpl
Y3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAg
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA0KQorICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAg
ICAgICAgIGZsb2F0IGNweCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAg
ICAgICAgIGZsb2F0IGNweSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKICAgICAg
ICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CkBAIC00MTMx
LDExICs0MDYyLDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkJl
emllckN1cnZlVG86IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA2KSB7Ci0gICAg
ICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJy
b3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5z
aXplKCkgIT0gNikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50
YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCBjcDF4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQgY3AxeSA9IChmbG9hdClhcmdzWzFdLT50b051
bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IGNwMnggPSAoZmxvYXQpYXJnc1syXS0+dG9O
dW1iZXIoZXhlYyk7CkBAIC00MTQ3LDExICs0MDc1LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4
dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDb250ZXh0MkQ6OkFyY1RvOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkg
IT0gNSkgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShl
eGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJy
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgZmxvYXQgeDEgPSAoZmxvYXQpYXJn
c1swXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB5MSA9IChmbG9hdClhcmdz
WzFdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHgyID0gKGZsb2F0KWFyZ3Nb
Ml0tPnRvTnVtYmVyKGV4ZWMpOwpAQCAtNDE2MSwxMSArNDA4Niw4IEBAIFZhbHVlSW1wICpLSlM6
OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsQXMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpBcmM6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNp
emUoKSAhPSA2KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gNikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0
KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClh
cmdzWzFdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHIgPSAoZmxvYXQpYXJn
c1syXS0+dG9OdW1iZXIoZXhlYyk7CkBAIC00MTc2LDExICs0MDk4LDggQEAgVmFsdWVJbXAgKktK
Uzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlJlY3Q6IHsKLSAgICAgICAgICAgIGlmIChhcmdz
LnNpemUoKSAhPSA0KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2Vw
dGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gNCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBmbG9hdCB4ID0gKGZs
b2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9h
dClhcmdzWzFdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHcgPSAoZmxvYXQp
YXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CkBAIC00MTg5LDIxICs0MTA4LDE1IEBAIFZhbHVlSW1w
ICpLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsQXMKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpDbGlwOiB7Ci0gICAgICAgICAgICBpZiAo
YXJncy5zaXplKCkgIT0gMCkgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRF
eGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgQ0dDb250ZXh0
Q2xpcCAoZHJhd2luZ0NvbnRleHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIENvbnRleHQyRDo6Q2xlYXJSZWN0OiB7Ci0gICAgICAgICAgICBpZiAoYXJn
cy5zaXplKCkgIT0gNCkgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgZmxvYXQgeCA9IChm
bG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxv
YXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB3ID0gKGZsb2F0
KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOwpAQCAtNDIxMywxMSArNDEyNiw4IEBAIFZhbHVlSW1w
ICpLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsQXMKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpGaWxsUmVjdDogewotICAgICAgICAgICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDQpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA0KQorICAgICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIGZsb2F0
IHggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB5
ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgZmxvYXQgdyA9
IChmbG9hdClhcmdzWzJdLT50b051bWJlcihleGVjKTsKQEAgLTQyMzAsMTEgKzQxNDAsOCBAQCBW
YWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDb250ZXh0MkQ6OlN0cm9rZVJlY3Q6IHsKICAgICAgICAgICAgIGludCBzaXplID0g
YXJncy5zaXplKCk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA8IDQpIHsKLSAgICAgICAgICAgICAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAg
ICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaXplIDwgNCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAg
ICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAg
IGZsb2F0IHcgPSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CkBAIC00MjUyLDExICs0
MTU5LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAg
ICBjYXNlIENvbnRleHQyRDo6U2V0U2hhZG93OiB7CiAgICAgICAgICAgICBpbnQgbnVtQXJncyA9
IGFyZ3Muc2l6ZSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobnVtQXJncyA8IDMp
IHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxT
eW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChudW1BcmdzIDwgMykKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvcik7CiAgICAgICAgICAgICBDR1NpemUgb2Zmc2V0OwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBvZmZzZXQud2lkdGggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7
CkBAIC00MzI1LDExICs0MjI5LDggQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246
OmNhbGxBcwogICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFj
ZUNyZWF0ZURldmljZUNNWUsoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAg
ICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4
RXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENHQ29sb3JSZWYgY29sb3JSZWYg
PSBDR0NvbG9yQ3JlYXRlIChjb2xvclNwYWNlLCBjb21wb25lbnRzKTsKQEAgLTQzNDAsMTEgKzQy
NDEsOCBAQCBWYWx1ZUltcCAqS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6Q2xlYXJTaGFk
b3c6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAg
ICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0g
MCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7
CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IgKGRyYXdpbmdDb250ZXh0
LCBDR1NpemVNYWtlKDAsIDApLCAwLCBuaWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTQzNTYsMTkgKzQyNTQsMTMgQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rp
b246OmNhbGxBcwogICAgICAgICAvLyBjb21wb3NpdGUgb3BlcmF0aW9uIGlzIHNwZWNpZmllZCB3
aXRoIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbgogICAgICAgICAvLyBpbWcgcGFyYW1ldGVyIGNh
biBiZSBhIEphdmFTY3JpcHQgSW1hZ2UsIDxpbWc+LCBvciBhIDxjYW52YXM+CiAgICAgICAgIGNh
c2UgQ29udGV4dDJEOjpEcmF3SW1hZ2U6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA8
IDMpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChhcmdzLnNpemUoKSA8IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgZmlyc3QgYXJndW1lbnQgaXMgYW4gb2JqZWN0LgogICAgICAgICAgICAgT2JqZWN0SW1wICpv
ID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oYXJnc1swXSk7Ci0gICAgICAgICAgICBpZiAoIW8t
PmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIW8tPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgICAgICAgICAgZmxvYXQgdyA9IDA7IC8vIHF1
aWV0IGluY29ycmVjdCBnY2MgNC4wIHdhcm5pbmcKICAgICAgICAgICAgIGZsb2F0IGggPSAwOyAv
LyBxdWlldCBpbmNvcnJlY3QgZ2NjIDQuMCB3YXJuaW5nCkBAIC00NDA5LDExICs0MzAxLDggQEAg
VmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgICAg
IHcgPSAoZmxvYXQpQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgoc291cmNlQ29udGV4dCk7CiAgICAg
ICAgICAgICAgICAgaCA9IChmbG9hdClDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQoc291cmNlQ29u
dGV4dCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgICAg
ICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVy
biBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZmxvYXQgZHgsIGR5LCBkdyA9IHcsIGRoID0gaDsKICAgICAgICAgICAgIGZsb2F0IHN4
ID0gMC5mLCBzeSA9IDAuZiwgc3cgPSB3LCBzaCA9IGg7CkBAIC00NDM4LDExICs0MzI3LDggQEAg
VmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgICAg
IGR3ID0gYXJnc1s3XS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgZGggPSBhcmdz
WzhdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRh
eEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKIAog
ICAgICAgICAgICAgaWYgKCFzb3VyY2VDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgUVBhaW50
ZXIgcDsKQEAgLTQ0OTIsMTcgKzQzNzgsMTEgQEAgVmFsdWVJbXAgKktKUzo6Q29udGV4dDJERnVu
Y3Rpb246OmNhbGxBcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDb250ZXh0MkQ6OkRyYXdJbWFnZUZyb21SZWN0OiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5z
aXplKCkgIT0gMTApIHsKLSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxMCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBPYmplY3RJbXAgKm8g
PSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihhcmdzWzBdKTsKLSAgICAgICAgICAgIGlmICghby0+
aXNPYmplY3QoKSB8fCAhby0+aW5oZXJpdHMoJkltYWdlOjppbmZvKSkgewotICAgICAgICAgICAg
ICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAg
ICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghby0+aXNPYmplY3QoKSB8
fCAhby0+aW5oZXJpdHMoJkltYWdlOjppbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgICAgICAgICAgSW1hZ2UgKmkgPSBzdGF0aWNf
Y2FzdDxJbWFnZSo+KG8pOwogICAgICAgICAgICAgZmxvYXQgc3ggPSBhcmdzWzFdLT50b051bWJl
cihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHN5ID0gYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7
CkBAIC00NTI4LDMyICs0NDA4LDIzIEBAIFZhbHVlSW1wICpLSlM6OkNvbnRleHQyREZ1bmN0aW9u
OjpjYWxsQXMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29u
dGV4dDJEOjpTZXRBbHBoYTogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsK
LSAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50
YXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChh
cmdzLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIGZsb2F0IGEgPSAgKGZsb2F0KWFyZ3NbMF0tPnRv
TnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0QWxwaGEgKGRyYXdpbmdDb250
ZXh0LCBhKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29u
dGV4dDJEOjpTZXRDb21wb3NpdGVPcGVyYXRpb246IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNp
emUoKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBRU3RyaW5nIGNvbXBvc2l0
ZU9wZXJhdG9yID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CiAg
ICAgICAgICAgICBRUGFpbnRlcjo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uIChkcmF3aW5nQ29udGV4
dCxjb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkNyZWF0ZUxpbmVhckdyYWRpZW50OiB7Ci0g
ICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gNCkgewotICAgICAgICAgICAgICAgIE9iamVj
dEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAg
ICAgICAgZmxvYXQgeDAgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZs
b2F0IHkwID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCB4MSA9
IGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOwpAQCAtNDU2MywxMSArNDQzNCw4IEBAIFZhbHVlSW1w
ICpLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsQXMKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgY2FzZSBDb250ZXh0MkQ6OkNyZWF0ZVJhZGlhbEdyYWRpZW50OiB7Ci0gICAgICAgICAg
ICBpZiAoYXJncy5zaXplKCkgIT0gNikgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDYpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgZmxv
YXQgeDAgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGZsb2F0IHkwID0g
YXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBmbG9hdCByMCA9IGFyZ3NbMl0t
PnRvTnVtYmVyKGV4ZWMpOwpAQCAtNDU3OSwxNyArNDQ0NywxMSBAQCBWYWx1ZUltcCAqS0pTOjpD
b250ZXh0MkRGdW5jdGlvbjo6Y2FsbEFzCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNh
c2UgQ29udGV4dDJEOjpDcmVhdGVQYXR0ZXJuOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXpl
KCkgIT0gMikgewotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wKj4oYXJnc1swXSk7Ci0gICAgICAgICAgICBpZiAoIW8tPmlzT2Jq
ZWN0KCkgfHwgIW8tPmluaGVyaXRzKCZJbWFnZTo6aW5mbykpIHsKLSAgICAgICAgICAgICAgICBP
YmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgICAgICAg
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBl
cnI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW8tPmlzT2JqZWN0KCkgfHwgIW8t
PmluaGVyaXRzKCZJbWFnZTo6aW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yKTsKICAgICAgICAgICAgIGludCByZXBldGl0aW9uVHlwZSA9IElt
YWdlUGF0dGVybjo6UmVwZWF0OwogICAgICAgICAgICAgUVN0cmluZyByZXBldGl0aW9uU3RyaW5n
ID0gYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgICAg
ICBpZiAocmVwZXRpdGlvblN0cmluZyA9PSAicmVwZWF0LXgiKQpAQCAtNDg0MiwxMSArNDcwNCw4
IEBAIHZvaWQgQ29udGV4dDJEOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKICAgICAgICAgICAg
ICAgICAvLyBDRyBkb2Vzbid0IGhhdmUgdGhlIG5vdGlvbiBvZiBhIHNldHRpbmcgYSBzdHJva2Ug
Z3JhZGllbnQuCiAgICAgICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGljX2Nhc3Q8T2Jq
ZWN0SW1wKj4odmFsdWUpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICgh
by0+aXNPYmplY3QoKSB8fCAhKG8tPmluaGVyaXRzKCZHcmFkaWVudDo6aW5mbykgfHwgby0+aW5o
ZXJpdHMoJkltYWdlUGF0dGVybjo6aW5mbykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE9iamVj
dEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgICAgICAgICAg
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghby0+aXNPYmplY3Qo
KSB8fCAhKG8tPmluaGVyaXRzKCZHcmFkaWVudDo6aW5mbykgfHwgby0+aW5oZXJpdHMoJkltYWdl
UGF0dGVybjo6aW5mbykpKQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtNDg2MiwxMSArNDcyMSw4IEBAIHZvaWQgQ29udGV4dDJEOjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGEKICAgICAgICAgICAgICAgICAvLyBDRyBkb2Vzbid0IGhhdmUgdGhlIG5vdGlvbiBvZiBz
ZXR0aW5nIGEgZmlsbCBncmFkaWVudC4KICAgICAgICAgICAgICAgICBPYmplY3RJbXAgKm8gPSBz
dGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKG8tPnR5cGUoKSAhPSBPYmplY3RUeXBlIHx8ICEoby0+aW5oZXJpdHMoJkdy
YWRpZW50OjppbmZvKSB8fCBvLT5pbmhlcml0cygmSW1hZ2VQYXR0ZXJuOjppbmZvKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlw
ZUVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCFvLT5pc09iamVjdCgpIHx8ICEoby0+aW5oZXJpdHMoJkdyYWRpZW50OjppbmZv
KSB8fCBvLT5pbmhlcml0cygmSW1hZ2VQYXR0ZXJuOjppbmZvKSkpCisgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgICAgICAgICAgICAgIC8vIEdy
YWRpZW50cyBhbmQgaW1hZ2UgcGF0dGVybnMgYXJlIGNvbnN0cnVjdGVkIHdoZW4gbmVlZGVkIGR1
cmluZyBmaWxsIGFuZCBzdHJva2Ugb3BlcmF0aW9ucy4KICAgICAgICAgICAgIH0KQEAgLTUxMTYs
MjEgKzQ5NzIsMTUgQEAgSU1QTEVNRU5UX1BST1RPRlVOQyhHcmFkaWVudEZ1bmN0aW9uKQogCiBW
YWx1ZUltcCAqR3JhZGllbnRGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmR3JhZGllbnQ6OmluZm8pKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2Vw
dGlvbihlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KKyAgICBpZiAoIXRoaXNPYmot
PmluaGVyaXRzKCZHcmFkaWVudDo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CiAKICAgICBHcmFkaWVudCAqZ3JhZGllbnQgPSBzdGF0aWNfY2FzdDxL
SlM6OkdyYWRpZW50ICo+KHRoaXNPYmopOwogCiAgICAgc3dpdGNoIChpZCkgewogICAgICAgICBj
YXNlIEdyYWRpZW50OjpBZGRDb2xvclN0b3A6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUo
KSAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKICAgICAgICAgICAgIFFDb2xvciBjb2xvciA9IGNv
bG9yRnJvbVZhbHVlKGV4ZWMsIGFyZ3NbMV0pOwogICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENv
bG9yU3RvcCAoKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBjb2xvci5yZWQoKS8yNTUu
ZiwgY29sb3IuZ3JlZW4oKS8yNTUuZiwgY29sb3IuYmx1ZSgpLzI1NS5mLCBjb2xvci5hbHBoYSgp
LzI1NS5mKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0
b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMzCmRpZmYgLXAgLXUgLXIxLjMzIFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tq
c19uYXZpZ2F0b3IuY3BwCTggQXVnIDIwMDUgMDQ6MDc6NDEgLTAwMDAJMS4zMworKysgV2ViQ29y
ZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwCTE1IEF1ZyAyMDA1IDA1OjU0OjI4IC0wMDAw
CkBAIC01ODAsMTEgKzU4MCw4IEBAIFZhbHVlSW1wICpQbHVnaW5zRnVuYzo6Y2FsbEFzRnVuY3Rp
b24oRXgKIAogVmFsdWVJbXAgKk5hdmlnYXRvckZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICYpCiB7Ci0gIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJktKUzo6TmF2aWdhdG9yOjppbmZvKSkgewotICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZLSlM6Ok5hdmlnYXRvcjo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKICAgTmF2aWdhdG9yICpuYXYgPSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3IgKj4odGhp
c09iaik7CiAgIC8vIGphdmFFbmFibGVkKCkKICAgcmV0dXJuIEJvb2xlYW4obmF2LT5wYXJ0KCkt
PmphdmFFbmFibGVkKCkpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5nZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFu
Z2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXAgLXUgLXIxLjE0IFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3Jh
bmdlLmNwcAk4IEF1ZyAyMDA1IDA0OjA3OjQxIC0wMDAwCTEuMTQKKysrIFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfcmFuZ2UuY3BwCTE1IEF1ZyAyMDA1IDA1OjU0OjI5IC0wMDAwCkBAIC0xMTMsMTEg
KzExMyw4IEBAIFZhbHVlSW1wICpET01SYW5nZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAogVmFs
dWVJbXAgKkRPTVJhbmdlUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmS0pTOjpET01SYW5nZTo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pT
OjpET01SYW5nZTo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKICAgUmFuZ2VJbXBsICZyYW5nZSA9ICpzdGF0aWNfY2FzdDxET01SYW5nZSAqPih0aGlzT2Jq
KS0+aW1wbCgpOwogICBWYWx1ZUltcCAqcmVzdWx0ID0gVW5kZWZpbmVkKCk7CiAgIGludCBleGNl
cHRpb24gPSAwOwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZl
cnNhbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtcCAtdSAtcjEuMTUgV2Vi
Q29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX3RyYXZlcnNhbC5jcHAJOCBBdWcgMjAwNSAwNDowNzo0MSAtMDAwMAkxLjE1CisrKyBXZWJD
b3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5jcHAJMTUgQXVnIDIwMDUgMDU6NTQ6MjkgLTAw
MDAKQEAgLTk3LDExICs5Nyw4IEBAIFZhbHVlSW1wICpET01Ob2RlSXRlcmF0b3I6OmdldFZhbHVl
UHJvcGUKIAogVmFsdWVJbXAgKkRPTU5vZGVJdGVyYXRvclByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJikKIHsK
LSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01Ob2RlSXRlcmF0b3I6OmluZm8pKSB7
Ci0gICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICgh
dGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NTm9kZUl0ZXJhdG9yOjppbmZvKSkKKyAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICBET01FeGNlcHRpb25UcmFuc2xhdG9y
IGV4Y2VwdGlvbihleGVjKTsKICAgTm9kZUl0ZXJhdG9ySW1wbCAmbm9kZUl0ZXJhdG9yID0gKnN0
YXRpY19jYXN0PERPTU5vZGVJdGVyYXRvciAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2gg
KGlkKSB7CkBAIC0xODYsMTEgKzE4Myw4IEBAIERPTU5vZGVGaWx0ZXI6On5ET01Ob2RlRmlsdGVy
KCkKIAogVmFsdWVJbXAgKkRPTU5vZGVGaWx0ZXJQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewot
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTU5vZGVGaWx0ZXI6OmluZm8pKSB7Ci0g
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBl
eGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJktKUzo6RE9NTm9kZUZpbHRlcjo6aW5mbykpCisgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgTm9kZUZpbHRlckltcGwgJm5vZGVGaWx0ZXIg
PSAqc3RhdGljX2Nhc3Q8RE9NTm9kZUZpbHRlciAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0
Y2ggKGlkKSB7CiAgICAgY2FzZSBET01Ob2RlRmlsdGVyOjpBY2NlcHROb2RlOgpAQCAtMjg1LDEx
ICsyNzksOCBAQCB2b2lkIERPTVRyZWVXYWxrZXI6OnB1dChFeGVjU3RhdGUgKmV4ZWMsCiAKIFZh
bHVlSW1wICpET01UcmVlV2Fsa2VyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmKQogewotICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZLSlM6OkRPTVRyZWVXYWxrZXI6OmluZm8pKSB7Ci0gICAgT2JqZWN0SW1w
ICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNl
cHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9CisgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJktKUzo6RE9NVHJlZVdhbGtlcjo6aW5mbykpCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKICAgVHJlZVdhbGtlckltcGwgJnRyZWVXYWxrZXIgPSAqc3RhdGljX2Nh
c3Q8RE9NVHJlZVdhbGtlciAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAg
ICAgY2FzZSBET01UcmVlV2Fsa2VyOjpQYXJlbnROb2RlOgpJbmRleDogV2ViQ29yZS9raHRtbC9l
Y21hL2tqc192aWV3cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWNtYS9ranNfdmlld3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAt
cCAtdSAtcjEuOSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAotLS0gV2ViQ29yZS9r
aHRtbC9lY21hL2tqc192aWV3cy5jcHAJOCBBdWcgMjAwNSAwNDowNzo0MSAtMDAwMAkxLjkKKysr
IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuY3BwCTE1IEF1ZyAyMDA1IDA1OjU0OjI5IC0w
MDAwCkBAIC02NywxMSArNjcsOCBAQCBib29sIERPTUFic3RyYWN0Vmlldzo6Z2V0T3duUHJvcGVy
dHlTbG90CiAKIFZhbHVlSW1wICpET01BYnN0cmFjdFZpZXdGdW5jOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsK
LSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NQWJzdHJhY3RWaWV3OjppbmZvKSkgewotICAg
IE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZET01BYnN0cmFjdFZpZXc6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgIEFic3RyYWN0Vmlld0ltcGwgJmFic3RyYWN0VmlldyA9
ICpzdGF0aWNfY2FzdDxET01BYnN0cmFjdFZpZXcgKj4odGhpc09iaiktPmltcGwoKTsKICAgc3dp
dGNoIChpZCkgewogICAgIGNhc2UgRE9NQWJzdHJhY3RWaWV3OjpHZXRDb21wdXRlZFN0eWxlOiB7
CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNzAKZGlmZiAtcCAtdSAtcjEuMTcwIFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwCTgg
QXVnIDIwMDUgMDQ6MDc6NDEgLTAwMDAJMS4xNzAKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
d2luZG93LmNwcAkxNSBBdWcgMjAwNSAwNTo1NDozMSAtMDAwMApAQCAtMzU1LDcgKzM1NSw3IEBA
IFdpbmRvdzo6fldpbmRvdygpCiAgIGRlbGV0ZSB3aW5xOwogfQogCi1LSlM6OkludGVycHJldGVy
ICpXaW5kb3c6OmludGVycHJldGVyKCkgY29uc3QKK0ludGVycHJldGVyICpXaW5kb3c6OmludGVy
cHJldGVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gS0pTUHJveHk6OnByb3h5KCBtX3BhcnQgKS0+
aW50ZXJwcmV0ZXIoKTsKIH0KQEAgLTM2OSw3ICszNjksNyBAQCBXaW5kb3cgKldpbmRvdzo6cmV0
cmlldmVXaW5kb3coS0hUTUxQYXJ0CiAgIHsKICAgICBhc3NlcnQob2JqKTsKICNpZm5kZWYgUVdT
Ci0gICAgLy9hc3NlcnQoIGR5bmFtaWNfY2FzdDxLSlM6OldpbmRvdyo+KG9iaikgKTsgLy8gdHlw
ZSBjaGVja2luZworICAgIC8vYXNzZXJ0KCBkeW5hbWljX2Nhc3Q8V2luZG93Kj4ob2JqKSApOyAv
LyB0eXBlIGNoZWNraW5nCiAjZW5kaWYKICAgfQogI2VuZGlmCkBAIC0zODMsOSArMzgzLDkgQEAg
V2luZG93ICpXaW5kb3c6OnJldHJpZXZlQWN0aXZlKEV4ZWNTdGF0ZQogICBWYWx1ZUltcCAqaW1w
ID0gZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpOwogICBhc3NlcnQo
IGltcCApOwogI2lmbmRlZiBRV1MKLSAgLy9hc3NlcnQoIGR5bmFtaWNfY2FzdDxLSlM6OldpbmRv
dyo+KGltcCkgKTsKKyAgLy9hc3NlcnQoIGR5bmFtaWNfY2FzdDxXaW5kb3cqPihpbXApICk7CiAj
ZW5kaWYKLSAgcmV0dXJuIHN0YXRpY19jYXN0PEtKUzo6V2luZG93Kj4oaW1wKTsKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PFdpbmRvdyo+KGltcCk7CiB9CiAKIFZhbHVlSW1wICpXaW5kb3c6OnJldHJp
ZXZlKEtIVE1MUGFydCAqcCkKQEAgLTEyOTcsNyArMTI5Nyw3IEBAIHN0YXRpYyBib29sIHNob3Vs
ZExvYWRBc0VtcHR5RG9jdW1lbnQoY28KICAgcmV0dXJuIHVybC5wcm90b2NvbCgpLmxvd2VyKCkg
PT0gImFib3V0IiB8fCB1cmwuaXNFbXB0eSgpOwogfQogCi1ib29sIFdpbmRvdzo6aXNTYWZlU2Ny
aXB0IChjb25zdCBLSlM6OlNjcmlwdEludGVycHJldGVyICpvcmlnaW4sIGNvbnN0IEtKUzo6U2Ny
aXB0SW50ZXJwcmV0ZXIgKnRhcmdldCkKK2Jvb2wgV2luZG93Ojppc1NhZmVTY3JpcHQoY29uc3Qg
U2NyaXB0SW50ZXJwcmV0ZXIgKm9yaWdpbiwgY29uc3QgU2NyaXB0SW50ZXJwcmV0ZXIgKnRhcmdl
dCkKIHsKICAgICBpZiAob3JpZ2luID09IHRhcmdldCkKIAlyZXR1cm4gdHJ1ZTsKQEAgLTEzNjAs
NyArMTM2MCw3IEBAIGJvb2wgV2luZG93Ojppc1NhZmVTY3JpcHQoRXhlY1N0YXRlICpleGUKICAg
ICBrZERlYnVnKDYwNzApIDw8ICJXaW5kb3c6OmlzU2FmZVNjcmlwdDogYWNjZXNzaW5nIGRlbGV0
ZWQgcGFydCAhIiA8PCBlbmRsOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBLSFRNTFBhcnQg
KmFjdGl2ZVBhcnQgPSBzdGF0aWNfY2FzdDxLSlM6OlNjcmlwdEludGVycHJldGVyICo+KCBleGVj
LT5keW5hbWljSW50ZXJwcmV0ZXIoKSApLT5wYXJ0KCk7CisgIEtIVE1MUGFydCAqYWN0aXZlUGFy
dCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KCBleGVjLT5keW5hbWljSW50ZXJw
cmV0ZXIoKSApLT5wYXJ0KCk7CiAgIGlmICghYWN0aXZlUGFydCkgewogICAgIGtkRGVidWcoNjA3
MCkgPDwgIldpbmRvdzo6aXNTYWZlU2NyaXB0OiBjdXJyZW50IGludGVycHJldGVyJ3MgcGFydCBp
cyAwTCEiIDw8IGVuZGw7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAg
SlNMYXp5RXZlbnRMaXN0ZW5lciAqV2luZG93OjpnZXRKU0xhenlFdgogCiB2b2lkIFdpbmRvdzo6
Y2xlYXIoIEV4ZWNTdGF0ZSAqZXhlYyApCiB7Ci0gIEtKUzo6SW50ZXJwcmV0ZXI6OmxvY2soKTsK
KyAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKICAgaWYgKG1fcmV0dXJuVmFsdWVTbG90KQogICAgIGlm
IChWYWx1ZUltcCAqcmV0dXJuVmFsdWUgPSBnZXREaXJlY3QoInJldHVyblZhbHVlIikpCiAgICAg
ICAqbV9yZXR1cm5WYWx1ZVNsb3QgPSByZXR1cm5WYWx1ZTsKQEAgLTE0OTIsMTMgKzE0OTIsMTMg
QEAgdm9pZCBXaW5kb3c6OmNsZWFyKCBFeGVjU3RhdGUgKmV4ZWMgKQogICBkZWxldGUgd2lucTsK
ICAgd2lucSA9IG5ldyBXaW5kb3dRT2JqZWN0KHRoaXMpOwogICAvLyBHZXQgcmlkIG9mIGV2ZXJ5
dGhpbmcsIHRob3NlIHVzZXIgdmFycyBjb3VsZCBob2xkIHJlZmVyZW5jZXMgdG8gRE9NIG5vZGVz
Ci0gIGRlbGV0ZUFsbFByb3BlcnRpZXMoIGV4ZWMgKTsKKyAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAg
IC8vIFJlYWxseSBkZWxldGUgdGhvc2UgcHJvcGVydGllcywgc28gdGhhdCB0aGUgRE9NIG5vZGVz
IGdldCBkZXJlZidlZAotICBLSlM6OkNvbGxlY3Rvcjo6Y29sbGVjdCgpOworICBDb2xsZWN0b3I6
OmNvbGxlY3QoKTsKICAgLy8gTm93IHJlY3JlYXRlIGEgd29ya2luZyBnbG9iYWwgb2JqZWN0IGZv
ciB0aGUgbmV4dCBVUkwgdGhhdCB3aWxsIHVzZSB1cwotICBLSlM6OkludGVycHJldGVyICppbnRl
cnByZXRlciA9IEtKU1Byb3h5Ojpwcm94eSggbV9wYXJ0ICktPmludGVycHJldGVyKCk7CisgIElu
dGVycHJldGVyICppbnRlcnByZXRlciA9IEtKU1Byb3h5Ojpwcm94eSggbV9wYXJ0ICktPmludGVy
cHJldGVyKCk7CiAgIGludGVycHJldGVyLT5pbml0R2xvYmFsT2JqZWN0KCk7Ci0gIEtKUzo6SW50
ZXJwcmV0ZXI6OnVubG9jaygpOworICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiB9CiAKIHZvaWQg
V2luZG93OjpzZXRDdXJyZW50RXZlbnQoRXZlbnRJbXBsICpldnQpCkBAIC0xNTA5LDExICsxNTA5
LDggQEAgdm9pZCBXaW5kb3c6OnNldEN1cnJlbnRFdmVudChFdmVudEltcGwgKgogCiBWYWx1ZUlt
cCAqV2luZG93RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMo
JldpbmRvdzo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBl
cnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmV2luZG93OjppbmZvKSkKKyAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICBXaW5kb3cgKndpbmRvdyA9IHN0
YXRpY19jYXN0PFdpbmRvdyAqPih0aGlzT2JqKTsKICAgUVN0cmluZyBzdHIsIHN0cjI7CiAKQEAg
LTIwNjEsNyArMjA1OCw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFdpbmRvdyAq
d2kKICAgICAgIFFfQVNTRVJUKCB3aW5kb3ctPm1fcGFydCApOwogICAgICAgaWYgKCB3aW5kb3ct
Pm1fcGFydCApCiAgICAgICB7Ci0gICAgICAgIEtKUzo6SW50ZXJwcmV0ZXIgKmludGVycHJldGVy
ID0gS0pTUHJveHk6OnByb3h5KCB3aW5kb3ctPm1fcGFydCApLT5pbnRlcnByZXRlcigpOworICAg
ICAgICBJbnRlcnByZXRlciAqaW50ZXJwcmV0ZXIgPSBLSlNQcm94eTo6cHJveHkoIHdpbmRvdy0+
bV9wYXJ0ICktPmludGVycHJldGVyKCk7CiAgICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IGludGVy
cHJldGVyLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIFFfQVNTRVJUKCB3aW5kb3cgPT0gaW50ZXJw
cmV0ZXItPmdsb2JhbE9iamVjdCgpICk7CiAgICAgICAgIE9iamVjdEltcCAqb2JqKCB3aW5kb3cg
KTsKQEAgLTIxNDcsNyArMjE0NCw3IEBAIFFNYXA8aW50LCBTY2hlZHVsZWRBY3Rpb24qPiAqV2lu
ZG93UU9iamUKIHsKICAgICBRTWFwSXRlcmF0b3I8aW50LFNjaGVkdWxlZEFjdGlvbio+IGl0Owog
Ci0gICAgUU1hcDxpbnQsIEtKUzo6U2NoZWR1bGVkQWN0aW9uKj4qcGF1c2VkQWN0aW9ucyA9IG5l
dyBRTWFwPGludCwgS0pTOjpTY2hlZHVsZWRBY3Rpb24qPjsKKyAgICBRTWFwPGludCwgU2NoZWR1
bGVkQWN0aW9uKj4qcGF1c2VkQWN0aW9ucyA9IG5ldyBRTWFwPGludCwgU2NoZWR1bGVkQWN0aW9u
Kj47CiAgICAgZm9yIChpdCA9IHNjaGVkdWxlZEFjdGlvbnMuYmVnaW4oKTsgaXQgIT0gc2NoZWR1
bGVkQWN0aW9ucy5lbmQoKTsgKytpdCkgewogICAgICAgICBpbnQgdGltZXJJZCA9IGl0LmtleSgp
OwogICAgICAgICBwYXVzZVRpbWVyICh0aW1lcklkLCBrZXkpOwpAQCAtMjQ2OSwxMSArMjQ2Niw4
IEBAIFVTdHJpbmcgTG9jYXRpb246OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqKSAKIAogVmFsdWVJbXAg
KkxvY2F0aW9uRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMo
JkxvY2F0aW9uOjppbmZvKSkgewotICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShl
eGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJu
IGVycjsKLSAgfQorICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZMb2NhdGlvbjo6aW5mbykpCisg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgTG9jYXRpb24gKmxvY2F0
aW9uID0gc3RhdGljX2Nhc3Q8TG9jYXRpb24gKj4odGhpc09iaik7CiAgIEtIVE1MUGFydCAqcGFy
dCA9IGxvY2F0aW9uLT5wYXJ0KCk7CiAgIGlmIChwYXJ0KSB7CkBAIC0yNjIwLDE5ICsyNjE0LDEz
IEBAIFZhbHVlSW1wICpTZWxlY3Rpb246OnRvUHJpbWl0aXZlKEV4ZWNTdGEKIAogVVN0cmluZyBT
ZWxlY3Rpb246OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqKSBjb25zdAogewotICAgIGlmICghbV9wYXJ0
LT5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCi0gICAgICAgIHJldHVybiBVU3RyaW5nKCIiKTsKLSAg
ICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICByZXR1cm4gVVN0cmluZyhtX3BhcnQtPnNlbGVjdGlv
bigpLnRvUmFuZ2UoKS0+dG9TdHJpbmcoZXhjZXB0aW9uKSk7CisgICAgcmV0dXJuIFVTdHJpbmco
bV9wYXJ0LT5zZWxlY3RlZFRleHQoKSk7CiB9CiAKIFZhbHVlSW1wICpTZWxlY3Rpb25GdW5jOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZTZWxlY3Rpb246Omlu
Zm8pKSB7Ci0gICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgICAgICByZXR1cm4g
ZXJyOwotICAgIH0KKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZTZWxlY3Rpb246OmluZm8p
KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIFNlbGVj
dGlvbiAqc2VsZWN0aW9uID0gc3RhdGljX2Nhc3Q8U2VsZWN0aW9uICo+KHRoaXNPYmopOwogICAg
IEtIVE1MUGFydCAqcGFydCA9IHNlbGVjdGlvbi0+cGFydCgpOwogICAgIGlmIChwYXJ0KSB7CkBA
IC0yNjg4LDcgKzI2NzYsNyBAQCBWYWx1ZUltcCAqU2VsZWN0aW9uRnVuYzo6Y2FsbEFzRnVuY3Rp
b24oCiAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5ID0ga2h0bWw6OldPUkQ7CiAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHlTdHJpbmcgPT0gImxpbmUiKQogICAgICAg
ICAgICAgICAgICAgICBncmFudWxhcml0eSA9IGtodG1sOjpMSU5FOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGdyYW51bGFyaXR5U3RyaW5nID09ICJwYXJncmFwaCIpCisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHlTdHJpbmcgPT0gInBhcmFncmFwaCIpCiAgICAgICAgICAg
ICAgICAgICAgIGdyYW51bGFyaXR5ID0ga2h0bWw6OlBBUkFHUkFQSDsKICAgICAgICAgICAgICAg
ICBzLm1vZGlmeShhbHRlciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICAg
ICAgcGFydC0+c2V0U2VsZWN0aW9uKHMpOwpAQCAtMjc5NywxMSArMjc4NSw4IEBAIFVTdHJpbmcg
SGlzdG9yeTo6dG9TdHJpbmcoRXhlY1N0YXRlICpleGUKIAogVmFsdWVJbXAgKkhpc3RvcnlGdW5j
OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSGlzdG9yeTo6aW5m
bykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3Ip
OwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAg
aWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSGlzdG9yeTo6aW5mbykpCisgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgSGlzdG9yeSAqaGlzdG9yeSA9IHN0YXRpY19jYXN0
PEhpc3RvcnkgKj4odGhpc09iaik7CiAKICAgaW50IHN0ZXBzOwpJbmRleDogV2ViQ29yZS9raHRt
bC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zNgpkaWZmIC1wIC11IC1yMS4zNiBXZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVl
c3QuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCTEwIEF1ZyAy
MDA1IDIyOjQ2OjA4IC0wMDAwCTEuMzYKKysrIFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVx
dWVzdC5jcHAJMTUgQXVnIDIwMDUgMDU6NTQ6MzEgLTAwMDAKQEAgLTY1NCwxMSArNjU0LDggQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVxdWVzdHMoRE9NOgogCiBWYWx1ZUltcCAqWE1M
SHR0cFJlcXVlc3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmlu
aGVyaXRzKCZYTUxIdHRwUmVxdWVzdDo6aW5mbykpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwotICAgIHJldHVybiBlcnI7Ci0gIH0KKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmWE1MSHR0
cFJlcXVlc3Q6OmluZm8pKQorICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAKICAgWE1MSHR0cFJlcXVlc3QgKnJlcXVlc3QgPSBzdGF0aWNfY2FzdDxYTUxIdHRwUmVxdWVz
dCAqPih0aGlzT2JqKTsKIApJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL3htbHNlcmlhbGl6ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEveG1s
c2VyaWFsaXplci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42
IFdlYkNvcmUva2h0bWwvZWNtYS94bWxzZXJpYWxpemVyLmNwcAotLS0gV2ViQ29yZS9raHRtbC9l
Y21hL3htbHNlcmlhbGl6ZXIuY3BwCTkgQXVnIDIwMDUgMTk6MTU6NTYgLTAwMDAJMS42CisrKyBX
ZWJDb3JlL2todG1sL2VjbWEveG1sc2VyaWFsaXplci5jcHAJMTUgQXVnIDIwMDUgMDU6NTQ6MzIg
LTAwMDAKQEAgLTcyLDExICs3Miw4IEBAIFhNTFNlcmlhbGl6ZXI6OlhNTFNlcmlhbGl6ZXIoRXhl
Y1N0YXRlICoKIAogVmFsdWVJbXAgKlhNTFNlcmlhbGl6ZXJQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZYTUxTZXJpYWxpemVyOjppbmZvKSkgewot
ICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAg
ZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQorICBpZiAoIXRo
aXNPYmotPmluaGVyaXRzKCZYTUxTZXJpYWxpemVyOjppbmZvKSkKKyAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgIHN3aXRjaCAoaWQpIHsKICAgY2FzZSBYTUxTZXJp
YWxpemVyOjpTZXJpYWxpemVUb1N0cmluZzoK
</data>
<flag name="review"
          id="373"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>