<?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>140895</bug_id>
          
          <creation_ts>2015-01-26 12:19:28 -0800</creation_ts>
          <short_desc>First argument to DOM traversal functions should be a reference</short_desc>
          <delta_ts>2015-01-26 14:36:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1064221</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-26 12:19:28 -0800</bug_when>
    <thetext>First argument to DOM traversal functions should be a reference instead of a pointer as it is dereferenced without null-check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064251</commentid>
    <comment_count>1</comment_count>
      <attachid>245371</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-26 13:57:39 -0800</bug_when>
    <thetext>Created attachment 245371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064263</commentid>
    <comment_count>2</comment_count>
      <attachid>245371</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-26 14:36:37 -0800</bug_when>
    <thetext>Comment on attachment 245371
Patch

Clearing flags on attachment: 245371

Committed r179143: &lt;http://trac.webkit.org/changeset/179143&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064264</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-26 14:36:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245371</attachid>
            <date>2015-01-26 13:57:39 -0800</date>
            <delta_ts>2015-01-26 14:36:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140895-20150126135742.patch</filename>
            <type>text/plain</type>
            <size>194588</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVmMzFlNjFkZTIzYjhl
YzIwZDhkM2QyZDE5MmExY2Q4NWZhY2NiYi4uNTdkOTFiNWFmOTcwYTE0MmUyMTcyYTI2MzBmOTA5
MmFiOGNlZDhmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTI2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3QgYXJndW1lbnQgdG8g
RE9NIHRyYXZlcnNhbCBmdW5jdGlvbnMgc2hvdWxkIGJlIGEgcmVmZXJlbmNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA4OTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXJzdCBhcmd1bWVudCB0byBE
T00gdHJhdmVyc2FsIGZ1bmN0aW9ucyBzaG91bGQgYmUgYSByZWZlcmVuY2UgaW5zdGVhZAorICAg
ICAgICBvZiBhIHBvaW50ZXIgYXMgaXQgaXMgZGVyZWZlcmVuY2VkIHdpdGhvdXQgbnVsbC1jaGVj
ay4KKwogMjAxNS0wMS0yNiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQmxhY2tsaXN0IGlCb29rcyBmb3IgV2ViS2l0J3MgZGVmYXVsdCBpbW1lZGlhdGUgYWN0aW9u
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCmluZGV4IDM5ZGU3MWUxMTZmOGY0ZmY0NjA2MGVhOTg4ZjNhMmQzYWNl
MDIyNGYuLjZkYjk4ZGIyNjU5Y2MzZjZlMTM4OGYxMWVhMDUwMzUwMDIyNGIzZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNS0wMS0yNiAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIEZpcnN0IGFyZ3VtZW50IHRvIERPTSB0cmF2ZXJzYWwg
ZnVuY3Rpb25zIHNob3VsZCBiZSBhIHJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyc3QgYXJndW1lbnQgdG8gRE9NIHRyYXZlcnNhbCBm
dW5jdGlvbnMgc2hvdWxkIGJlIGEgcmVmZXJlbmNlIGluc3RlYWQKKyAgICAgICAgb2YgYSBwb2lu
dGVyIGFzIGl0IGlzIGRlcmVmZXJlbmNlZCB3aXRob3V0IG51bGwtY2hlY2suCisKIDIwMTUtMDEt
MjYgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSBbU1ZHIC0+IE9URiBDb252ZXJ0ZXJdIEZsaXAgdGhlIHN3aXRjaCBvZmYgb24gaU9TCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggNDI2ZGU2NmQxMmY1NjU1MDgzYzc3NzM5NmUzMmM4Yzg2OGQyODRkYS4uYWVj
NDVhNDFmYzdmN2MxZjNhZDI5ZTE2NTg5NTE4YTg3OTY5NmRiYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDE1LTAxLTI2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisK
KyAgICAgICAgRmlyc3QgYXJndW1lbnQgdG8gRE9NIHRyYXZlcnNhbCBmdW5jdGlvbnMgc2hvdWxk
IGJlIGEgcmVmZXJlbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDA4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGaXJzdCBhcmd1bWVudCB0byBET00gdHJhdmVyc2FsIGZ1bmN0aW9ucyBzaG91bGQg
YmUgYSByZWZlcmVuY2UgaW5zdGVhZAorICAgICAgICBvZiBhIHBvaW50ZXIgYXMgaXQgaXMgZGVy
ZWZlcmVuY2VkIHdpdGhvdXQgbnVsbC1jaGVjay4KKwogMjAxNS0wMS0yNiAgQmV0aCBEYWtpbiAg
PGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQmxhY2tsaXN0IGlCb29rcyBmb3IgV2ViS2l0
J3MgZGVmYXVsdCBpbW1lZGlhdGUgYWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAwOGJl
M2U5YWJhM2IxYTY0YWE1OTE0ZTdkYzZmZjk1ZDAxYjk4ZmRjLi4xODE0ZWQ0MTU1OTBiY2E1MWRj
OTcwOGVlYjFhMjMzNmI3ZGVkYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMzM5LDkgKzMz
OSw5IEBAIF9fWk43V2ViQ29yZTEzTWFjaFNlbmRSaWdodDVhZG9wdEVqCiBfX1pON1dlYkNvcmUx
M01hY2hTZW5kUmlnaHQ2Y3JlYXRlRWoKIF9fWk43V2ViQ29yZTEzTWFjaFNlbmRSaWdodEQxRXYK
IF9fWk43V2ViQ29yZTEzTWFjaFNlbmRSaWdodGFTRU9TMF8KLV9fWk43V2ViQ29yZTEzTm9kZVRy
YXZlcnNhbDEzZGVlcExhc3RDaGlsZEVQTlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxM05vZGVUcmF2
ZXJzYWwxOW5leHRBbmNlc3RvclNpYmxpbmdFUEtOU180Tm9kZUUKLV9fWk43V2ViQ29yZTEzTm9k
ZVRyYXZlcnNhbDE5bmV4dEFuY2VzdG9yU2libGluZ0VQS05TXzROb2RlRVMzXworX19aTjdXZWJD
b3JlMTNOb2RlVHJhdmVyc2FsMTNkZWVwTGFzdENoaWxkRVJOU180Tm9kZUUKK19fWk43V2ViQ29y
ZTEzTm9kZVRyYXZlcnNhbDE5bmV4dEFuY2VzdG9yU2libGluZ0VSS05TXzROb2RlRQorX19aTjdX
ZWJDb3JlMTNOb2RlVHJhdmVyc2FsMTluZXh0QW5jZXN0b3JTaWJsaW5nRVJLTlNfNE5vZGVFUFMy
XwogX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBfX1pON1dlYkNvcmUx
M1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgogX19aTjdXZWJDb3JlMTNTUUxSZXN1bHREb25l
RQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAKaW5kZXggMThhNjViMzBjYjdhZmQ5YWE1ZmRkNTc2NGJlYzZjYjAxNDIzMTM1OC4u
ZDg2ZTAwMGU1MjAyZjE1MjkxMjllNDhhYTUxMGE2NTg1Y2RjYWE3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC00
NjcsMTAgKzQ2NywxMCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpmaXJzdEFjY2Vzc2libGVPYmplY3RGcm9tTm9kZShjb25zdCBObwogICAgIAogICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGFjY2Vzc2libGVPYmplY3QgPSBjYWNoZS0+Z2V0T3JDcmVhdGUobm9k
ZS0+cmVuZGVyZXIoKSk7CiAgICAgd2hpbGUgKGFjY2Vzc2libGVPYmplY3QgJiYgYWNjZXNzaWJs
ZU9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAgIG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUpOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dCgqbm9kZSk7CiAKICAgICAgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPnJlbmRlcmVyKCkpCi0g
ICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9k
ZSk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRy
ZW4oKm5vZGUpOwogCiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAppbmRleCA4MWNiNDExZjdlNjk1NDc4NDk2YTM2ZmIzMTE2MmU0MmRjYjUwYzA0Li42OTUzODZl
MjRiNDk0NTQwZWY4MjcyZDc2OTAzMjkyYWJmMTVlOGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIEpT
VmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIERvY3VtZW50KiBkb2N1bWVuCiAgICAgLy8gYmFjay9mb3J3YXJkIGNhY2hlLgogICAgIGlm
ICghZG9jdW1lbnQtPmZyYW1lKCkpIHsKICAgICAgICAgc2l6ZV90IG5vZGVDb3VudCA9IDA7Ci0g
ICAgICAgIGZvciAoTm9kZSogbiA9IGRvY3VtZW50OyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChuKSkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gZG9jdW1lbnQ7IG47IG4gPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KCpuKSkKICAgICAgICAgICAgIG5vZGVDb3VudCsrOwogICAgICAgICAKICAgICAg
ICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qobm9kZUNvdW50ICogc2l6ZW9m
KE5vZGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNjBkNTJk
NzIyYzgyNTg1OGUxMjE0MzA1ODE5YjQyZTgzNjNlMTJjZS4uODBlMzZhZjZmYTg4ODI4NzIzNDIz
MGFkNjk4YTI2N2Y3Zjc0ZDY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAKQEAgLTg3LDE5ICs4NywxOSBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzIDogcHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlYwogICAgIGJvb2wg
aGFzU2VsZWN0aW9uUHNldWRvOwogfTsKIAotc3RhdGljIGlubGluZSBib29sIGlzRmlyc3RDaGls
ZEVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zp
cnN0Q2hpbGRFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuICFF
bGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxlbWVudCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBpc0xhc3RDaGlsZEVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RDaGlsZEVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCkKIHsKICAgICByZXR1cm4gIUVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGVsZW1lbnQp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdE9mVHlwZShFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlLCBib29sIGlzUmVzb2x2aW5nU3R5bGUpCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNGaXJzdE9mVHlwZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFs
aWZpZWROYW1lJiB0eXBlLCBib29sIGlzUmVzb2x2aW5nU3R5bGUpCiB7Ci0gICAgZm9yIChFbGVt
ZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQp
OyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKHNp
YmxpbmcpKSB7CisgICAgZm9yIChFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZl
cnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewogICAgICAgICBpZiAoaXNSZXNvbHZp
bmdTdHlsZSkKICAgICAgICAgICAgIHNpYmxpbmctPnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1l
bnRTdHlsZSgpOwogICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKQEAgLTEw
OCwxOSArMTA4LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZpcnN0T2ZUeXBlKEVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUsIGJvCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RPZlR5cGUoY29uc3QgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0xh
c3RPZlR5cGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSkKIHsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0U2libGluZyhlbGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nKHNpYmxpbmcpKSB7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJs
aW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNp
YmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqc2libGluZykpIHsKICAgICAg
ICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjb3Vu
dEVsZW1lbnRzQmVmb3JlKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNSZXNvbHZpbmdTdHlsZSkK
K3N0YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNCZWZvcmUoRWxlbWVudCYgZWxlbWVudCwg
Ym9vbCBpc1Jlc29sdmluZ1N0eWxlKQogewogICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChF
bGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1l
bnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5n
KHNpYmxpbmcpKSB7CisgICAgZm9yIChFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNh
bDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRy
YXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewogICAgICAgICBpZiAoaXNSZXNv
bHZpbmdTdHlsZSkKICAgICAgICAgICAgIHNpYmxpbmctPnNldEFmZmVjdHNOZXh0U2libGluZ0Vs
ZW1lbnRTdHlsZSgpOwogCkBAIC0xMzQsMTAgKzEzNCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBj
b3VudEVsZW1lbnRzQmVmb3JlKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNSZXNvbHZpbmdTdHls
ZSkKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVu
dHNPZlR5cGVCZWZvcmUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSwgYm9vbCBpc1Jlc29sdmluZ1N0eWxlKQorc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50
c09mVHlwZUJlZm9yZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBl
LCBib29sIGlzUmVzb2x2aW5nU3R5bGUpCiB7CiAgICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3Ig
KEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxl
bWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxp
bmcoc2libGluZykpIHsKKyAgICBmb3IgKEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVy
c2FsOjpwcmV2aW91c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50
VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7CiAgICAgICAgIGlmIChpc1Jl
c29sdmluZ1N0eWxlKQogICAgICAgICAgICAgc2libGluZy0+c2V0QWZmZWN0c05leHRTaWJsaW5n
RWxlbWVudFN0eWxlKCk7CiAKQEAgLTE0NywxOCArMTQ3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50
IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtCiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjb3VudEVs
ZW1lbnRzQWZ0ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IGNv
dW50RWxlbWVudHNBZnRlcihjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGludCBjb3Vu
dCA9IDA7Ci0gICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNh
bDo6bmV4dFNpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVy
c2FsOjpuZXh0U2libGluZyhzaWJsaW5nKSkKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxp
bmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhlbGVtZW50KTsgc2libGluZzsgc2li
bGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCpzaWJsaW5nKSkKICAgICAgICAg
Kytjb3VudDsKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNvdW50
RWxlbWVudHNPZlR5cGVBZnRlcihjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiB0eXBlKQorc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c09mVHlwZUFmdGVy
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCiB7CiAg
ICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVt
ZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhlbGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVs
ZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHNpYmxpbmcpKSB7CisgICAgZm9yIChjb25zdCBF
bGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoZWxlbWVudCk7
IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqc2libGlu
ZykpIHsKICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAg
ICArK2NvdW50OwogICAgIH0KQEAgLTYyOCw3ICs2MjgsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNl
dWRvSQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZpcnN0Q2hpbGQ6CiAg
ICAgICAgICAgICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlz
IGFuIGVsZW1lbnQKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBp
c0ZpcnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0
ID0gaXNGaXJzdENoaWxkRWxlbWVudCgqZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxl
ID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENo
aWxkUnVsZXMoKTsKQEAgLTY0NCwxMyArNjQ0LDEzIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9J
CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNv
bHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0U3R5bGVJc0FmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcoKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBpc0ZpcnN0
T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCksIGNvbnRleHQucmVzb2x2aW5nTW9k
ZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzRmly
c3RPZlR5cGUoKmVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCksIGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMYXN0Q2hpbGQ6
CiAgICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBp
cyBhbiBlbGVtZW50CiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
cGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIGlzTGFzdENoaWxk
RWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHBhcmVudEVs
ZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1lbnQo
KmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0g
TW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxl
IDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxl
bWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKQEAgLTY2NywxMyAr
NjY3LDEzIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JCiAgICAgICAgICAgICAgICAgICAgIHBh
cmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVz
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaXNMYXN0T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBpc0xhc3RPZlR5cGUoKmVsZW1lbnQsIGVsZW1lbnQt
PnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzT25seUNoaWxkOgogICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBpc0ZpcnN0Q2hpbGRFbGVtZW50KGVsZW1l
bnQpOwotICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJl
bnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgaXNMYXN0Q2hpbGRFbGVt
ZW50KGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IGlzRmlyc3RD
aGlsZEVsZW1lbnQoKmVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0g
Zmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkg
JiYgaXNMYXN0Q2hpbGRFbGVtZW50KCplbGVtZW50KTsKICAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUg
PyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hp
bGRSdWxlcygpOwpAQCAtNjk1LDcgKzY5NSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNG
aW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVu
dC0+dGFnUU5hbWUoKSwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0
eWxlKSAmJiBpc0xhc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoKmVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FO
YW1lKCksIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgJiYg
aXNMYXN0T2ZUeXBlKCplbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc01hdGNoZXM6CkBAIC03NTUsNyArNzU1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBzZXVkb0kK
IAogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7CiAgICAgICAgICAgICAgICAgaWYgKGNv
bnN0IENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlz
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudCogc2libGluZyA9IEVsZW1l
bnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhlbGVtZW50KTsgc2libGluZzsgc2libGluZyA9
IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhzaWJsaW5nKSkgeworICAgICAgICAg
ICAgICAgICAgICBmb3IgKEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmcoKmVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNh
bDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5nLT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVt
ZW50U3R5bGUoKTsKIApAQCAtNzY0LDcgKzc2NCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9J
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50
ICs9IGNvdW50RWxlbWVudHNCZWZvcmUoZWxlbWVudCwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09
IE1vZGU6OlJlc29sdmluZ1N0eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gY291
bnRFbGVtZW50c0JlZm9yZSgqZWxlbWVudCwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlJlc29sdmluZ1N0eWxlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2
aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnQtPnNldENoaWxkSW5kZXgoY291bnQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTc4
MSw3ICs3ODEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSQogICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQtPnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5n
KCk7CiAKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgY291bnRFbGVtZW50c09mVHlw
ZUJlZm9yZShlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpLCBjb250ZXh0LnJlc29sdmluZ01v
ZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpOworICAgICAgICAgICAgICAgIGludCBjb3VudCA9
IDEgKyBjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKCplbGVtZW50LCBlbGVtZW50LT50YWdRTmFt
ZSgpLCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpOwogICAg
ICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTgwOSwxMyArODA5LDEzIEBA
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JCiAKICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAx
OwogICAgICAgICAgICAgICAgIGlmIChjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlz
dCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3Ig
KEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhlbGVtZW50
KTsgc2libGluZzsgc2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHNpYmxp
bmcpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudCogc2libGluZyA9IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCplbGVtZW50KTsgc2libGluZzsgc2libGluZyA9IEVs
ZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCpzaWJsaW5nKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaWdub3JlZFNwZWNpZmljaXR5OwogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1hdGNoU2VsZWN0b3JMaXN0KGNvbnRleHQsICpzaWJsaW5nLCAqc2VsZWN0b3JM
aXN0LCBpZ25vcmVkU3BlY2lmaWNpdHkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsr
Y291bnQ7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgY291bnQgKz0gY291bnRFbGVtZW50c0FmdGVyKGVsZW1lbnQpOwor
ICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBjb3VudEVsZW1lbnRzQWZ0ZXIoKmVsZW1lbnQp
OwogCiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODMwLDcgKzgzMCw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBj
b250ZXh0LCBQc2V1ZG9JCiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0Zp
bmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDEgKyBjb3VudEVsZW1lbnRzT2ZUeXBl
QWZ0ZXIoZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CisgICAgICAgICAgICAgICAgaW50
IGNvdW50ID0gMSArIGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcigqZWxlbWVudCwgZWxlbWVudC0+
dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3Vu
dCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0F0dHIuY3BwCmluZGV4IGFmYTZlYjNkYmE4MGY3NWVmN2Q4YWZhZDMyMjY1OWU1MzM0ODRmNWMu
LmQxNTU1OWYzNDU4MDI1ZjRlNTJiZDY3MWUwMTc2NDA3ZTE1OTkyODUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5j
cHAKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEF0dHI6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBD
aGlsZENoYW5nZSYpCiAgICAgaW52YWxpZGF0ZU5vZGVMaXN0QW5kQ29sbGVjdGlvbkNhY2hlc0lu
QW5jZXN0b3JzKCZxdWFsaWZpZWROYW1lKCksIG1fZWxlbWVudCk7CiAKICAgICBTdHJpbmdCdWls
ZGVyIHZhbHVlQnVpbGRlcjsKLSAgICBUZXh0Tm9kZVRyYXZlcnNhbDo6YXBwZW5kQ29udGVudHMo
dGhpcywgdmFsdWVCdWlsZGVyKTsKKyAgICBUZXh0Tm9kZVRyYXZlcnNhbDo6YXBwZW5kQ29udGVu
dHMoKnRoaXMsIHZhbHVlQnVpbGRlcik7CiAKICAgICBBdG9taWNTdHJpbmcgb2xkVmFsdWUgPSB2
YWx1ZSgpOwogICAgIEF0b21pY1N0cmluZyBuZXdWYWx1ZSA9IHZhbHVlQnVpbGRlci50b0F0b21p
Y1N0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IGI0OTNkOGI2
NTk0MjAyOTgxM2Q1YzEyMjJmMmYyYjQ0ZjA3OWM5MGEuLmE1NjIzYTBmNzNjZjFhNzI4ZTU3MjA3
ZjFhZTA2MDZhNTJlYjhkMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0
ZXJEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAg
LTk3LDggKzk3LDggQEAgdW5zaWduZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YShj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgb2Zmc2V0LAogICAgIGlmIChwYXJlbnROb2Rl
KCkpIHsKICAgICAgICAgQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFuZ2UgY2hhbmdlID0gewogICAg
ICAgICAgICAgQ29udGFpbmVyTm9kZTo6VGV4dENoYW5nZWQsCi0gICAgICAgICAgICBFbGVtZW50
VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcodGhpcyksCi0gICAgICAgICAgICBFbGVtZW50VHJh
dmVyc2FsOjpuZXh0U2libGluZyh0aGlzKSwKKyAgICAgICAgICAgIEVsZW1lbnRUcmF2ZXJzYWw6
OnByZXZpb3VzU2libGluZygqdGhpcyksCisgICAgICAgICAgICBFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0U2libGluZygqdGhpcyksCiAgICAgICAgICAgICBDb250YWluZXJOb2RlOjpDaGlsZENoYW5n
ZVNvdXJjZVBhcnNlcgogICAgICAgICB9OwogICAgICAgICBwYXJlbnROb2RlKCktPmNoaWxkcmVu
Q2hhbmdlZChjaGFuZ2UpOwpAQCAtMjE3LDE0ICsyMTcsMTQgQEAgdm9pZCBDaGFyYWN0ZXJEYXRh
OjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoY29uc3QgU3RyaW5nJiBvbGREYXRhKQogICAgICAgICBp
ZiAocGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBDb250YWluZXJOb2RlOjpDaGlsZENoYW5n
ZSBjaGFuZ2UgPSB7CiAgICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZTo6VGV4dENoYW5nZWQs
Ci0gICAgICAgICAgICAgICAgRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKHRoaXMp
LAotICAgICAgICAgICAgICAgIEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHRoaXMpLAor
ICAgICAgICAgICAgICAgIEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZygqdGhpcyks
CisgICAgICAgICAgICAgICAgRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRoaXMpLAog
ICAgICAgICAgICAgICAgIENvbnRhaW5lck5vZGU6OkNoaWxkQ2hhbmdlU291cmNlQVBJCiAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgcGFyZW50Tm9kZSgpLT5jaGlsZHJlbkNoYW5nZWQoY2hh
bmdlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUo
RG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNURU5FUikpCi0gICAgICAgICAg
ICBkaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
RE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQsIHRydWUsIDAsIG9sZERhdGEsIG1fZGF0YSkp
OworICAgICAgICAgICAgZGlzcGF0Y2hTY29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2ZW50LCB0cnVlLCBudWxscHRy
LCBvbGREYXRhLCBtX2RhdGEpKTsKICAgICAgICAgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVu
dCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IDgyYjIz
N2IzM2E4ODE3YzJmZDE2YWJkNzcyZDllMTE3MDExNTczMmEuLjFmNmE3N2ZlYTYxZWM3NjM3NWZi
YjkwMzRiM2E3NTNmMTI1YTVjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAK
QEAgLTMzMSw4ICszMzEsOCBAQCB2b2lkIENvbnRhaW5lck5vZGU6Om5vdGlmeUNoaWxkSW5zZXJ0
ZWQoTm9kZSYgY2hpbGQsIENoaWxkQ2hhbmdlU291cmNlIHNvdXJjZSkKIHsKICAgICBDaGlsZENo
YW5nZSBjaGFuZ2U7CiAgICAgY2hhbmdlLnR5cGUgPSBjaGlsZC5pc0VsZW1lbnROb2RlKCkgPyBF
bGVtZW50SW5zZXJ0ZWQgOiBjaGlsZC5pc1RleHROb2RlKCkgPyBUZXh0SW5zZXJ0ZWQgOiBOb25D
b250ZW50c0NoaWxkQ2hhbmdlZDsKLSAgICBjaGFuZ2UucHJldmlvdXNTaWJsaW5nRWxlbWVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZygmY2hpbGQpOwotICAgIGNoYW5nZS5u
ZXh0U2libGluZ0VsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygmY2hpbGQp
OworICAgIGNoYW5nZS5wcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKGNoaWxkKTsKKyAgICBjaGFuZ2UubmV4dFNpYmxpbmdFbGVtZW50ID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoY2hpbGQpOwogICAgIGNoYW5nZS5zb3VyY2Ug
PSBzb3VyY2U7CiAKICAgICBjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsKQEAgLTM0Miw4ICszNDIs
OCBAQCB2b2lkIENvbnRhaW5lck5vZGU6Om5vdGlmeUNoaWxkUmVtb3ZlZChOb2RlJiBjaGlsZCwg
Tm9kZSogcHJldmlvdXNTaWJsaW5nLCBOb2RlKgogewogICAgIENoaWxkQ2hhbmdlIGNoYW5nZTsK
ICAgICBjaGFuZ2UudHlwZSA9IGlzPEVsZW1lbnQ+KGNoaWxkKSA/IEVsZW1lbnRSZW1vdmVkIDog
aXM8VGV4dD4oY2hpbGQpID8gVGV4dFJlbW92ZWQgOiBOb25Db250ZW50c0NoaWxkQ2hhbmdlZDsK
LSAgICBjaGFuZ2UucHJldmlvdXNTaWJsaW5nRWxlbWVudCA9ICghcHJldmlvdXNTaWJsaW5nIHx8
IGlzPEVsZW1lbnQ+KCpwcmV2aW91c1NpYmxpbmcpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KHByZXZp
b3VzU2libGluZykgOiBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcocHJldmlvdXNT
aWJsaW5nKTsKLSAgICBjaGFuZ2UubmV4dFNpYmxpbmdFbGVtZW50ID0gKCFuZXh0U2libGluZyB8
fCBpczxFbGVtZW50PigqbmV4dFNpYmxpbmcpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5leHRTaWJs
aW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5leHRTaWJsaW5nKTsKKyAgICBj
aGFuZ2UucHJldmlvdXNTaWJsaW5nRWxlbWVudCA9ICghcHJldmlvdXNTaWJsaW5nIHx8IGlzPEVs
ZW1lbnQ+KCpwcmV2aW91c1NpYmxpbmcpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KHByZXZpb3VzU2li
bGluZykgOiBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoKnByZXZpb3VzU2libGlu
Zyk7CisgICAgY2hhbmdlLm5leHRTaWJsaW5nRWxlbWVudCA9ICghbmV4dFNpYmxpbmcgfHwgaXM8
RWxlbWVudD4oKm5leHRTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVtZW50PihuZXh0U2libGluZykg
OiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqbmV4dFNpYmxpbmcpOwogICAgIGNoYW5n
ZS5zb3VyY2UgPSBzb3VyY2U7CiAKICAgICBjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsKQEAgLTgw
OSw3ICs4MDksNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKE5v
ZGUmIGNoaWxkKQogCiAgICAgLy8gZGlzcGF0Y2ggdGhlIERPTU5vZGVJbnNlcnRlZEludG9Eb2N1
bWVudCBldmVudCB0byBhbGwgZGVzY2VuZGFudHMKICAgICBpZiAoYy0+aW5Eb2N1bWVudCgpICYm
IGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRElOVE9E
T0NVTUVOVF9MSVNURU5FUikpIHsKLSAgICAgICAgZm9yICg7IGM7IGMgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KGMuZ2V0KCksICZjaGlsZCkpCisgICAgICAgIGZvciAoOyBjOyBjID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqYywgJmNoaWxkKSkKICAgICAgICAgICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZl
bnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5zZXJ0ZWRJbnRv
RG9jdW1lbnRFdmVudCwgZmFsc2UpKTsKICAgICB9CiB9CkBAIC04MzUsNyArODM1LDcgQEAgc3Rh
dGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTm9kZSYgY2hpbGQpCiAKICAgICAv
LyBkaXNwYXRjaCB0aGUgRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQgZXZlbnQgdG8gYWxsIGRl
c2NlbmRhbnRzCiAgICAgaWYgKGMtPmluRG9jdW1lbnQoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVu
ZXJUeXBlKERvY3VtZW50OjpET01OT0RFUkVNT1ZFREZST01ET0NVTUVOVF9MSVNURU5FUikpIHsK
LSAgICAgICAgZm9yICg7IGM7IGMgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGMuZ2V0KCksICZjaGls
ZCkpCisgICAgICAgIGZvciAoOyBjOyBjID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqYywgJmNoaWxk
KSkKICAgICAgICAgICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0YXRpb25FdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudEV2ZW50LCBmYWxzZSkp
OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGFhNzEyMjYwZTBlYTA5N2Qw
NjE0YTk1ZWFjYmIwODMzZDY0Y2FhMmQuLmEzMjcyOTU5ZGY4ZTYzNGM1Njc4ZTVhNDBlZDMyMmQ5
NDZkMzhiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjE1NSw3ICsyMTU1LDcgQEAg
dm9pZCBEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQogICAgIGNsZWFyVG91Y2hFdmVudExpc3RlbmVycygpOwogI2VuZGlmCi0g
ICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChub2RlKSkKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkKICAgICAgICAgbm9kZS0+cmVt
b3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIH0KIApAQCAtMzI3Miw3ICszMjcyLDcgQEAgdm9pZCBE
b2N1bWVudDo6dXBkYXRlVmlld3BvcnRVbml0c09uUmVzaXplKCkKICAgICBlbnN1cmVTdHlsZVJl
c29sdmVyKCkuY2xlYXJDYWNoZWRQcm9wZXJ0aWVzQWZmZWN0ZWRCeVZpZXdwb3J0VW5pdHMoKTsK
IAogICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSBzaG91bGQgc2F2ZSB0aGUgbGlzdCBvZiBlbGVt
ZW50cyB0aGF0IGhhdmUgdmlld3BvcnQgdW5pdHMgYW5kIG9ubHkgaXRlcmF0ZSBvdmVyIHRob3Nl
LgotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0
aGluKCZyb290Tm9kZSgpKTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRJbmNsdWRpbmdQc2V1ZG8oZWxlbWVudCkpIHsKKyAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQg
PSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihyb290Tm9kZSgpKTsgZWxlbWVudDsgZWxl
bWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oKmVsZW1lbnQpKSB7
CiAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAg
aWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zdHlsZSgpLmhhc1ZpZXdwb3J0VW5pdHMoKSkKICAg
ICAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApp
bmRleCA0MWYxMjcwZGM1ZDRmZWYzMGJkZmYxM2M1MjRmMjNlNDRjMmMzZTY1Li4wOTZjMTIwNWEw
ZTIzYWZiMjQ3NzRkMTdkMjE5YzEwYjYxNjQ5NDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtNDA0LDcgKzQwNCw3IEBAIFZlY3Rv
cjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJr
ZXJzSW5SYW5nZShSYW5nZSoKICAgICBBU1NFUlQoZW5kQ29udGFpbmVyKTsKIAogICAgIE5vZGUq
IHBhc3RMYXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5v
ZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5m
aXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KCpub2RlKSkgewogICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Iobm9k
ZSkpIHsKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBl
KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjI5LDcgKzYyOSw3IEBAIHZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKFJhbmdlKiByYW5nZSwg
Ym9vbCBhY3RpdmUpCiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3RO
b2RlKCk7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUg
IT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAg
IGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAgICBpbnQgc3Rh
cnRPZmZzZXQgPSBub2RlID09IHN0YXJ0Q29udGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkg
OiAwOwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmRDb250YWluZXIgPyByYW5n
ZS0+ZW5kT2Zmc2V0KCkgOiBJTlRfTUFYOwogICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKG5vZGUs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CkBAIC02NzUsNyArNjc1LDcgQEAgYm9v
bCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFuZ2UqIHJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHkKICAgICBBU1NFUlQoZW5kQ29udGFpbmVyKTsKIAogICAgIE5v
ZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdl
LT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KCpub2RlKSkgewogICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Io
bm9kZSkpIHsKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50
eXBlKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjk5LDcgKzY5OSw3IEBAIHZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50
ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UqCiAgICAgTm9kZSogZW5kQ29udGFpbmVyID0gcmFuZ2UtPmVu
ZENvbnRhaW5lcigpOwogCiAgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0
Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAh
PSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSBzdGFydENvbnRhaW5lciA/IHJhbmdlLT5zdGFydE9mZnNl
dCgpIDogMDsKICAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmRDb250YWlu
ZXIgPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSA6IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9
IG1fbWFya2Vycy5nZXQobm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggNTFhMDc4NTMy
YWY1ZWUyNDg0NWI1NDE2OWUyMjc4NDg5NjEyZjkzYS4uMmVmYzJmMGViZDYxOWYyNTk3OTQ0MTlk
ZGY1MGM3YzNmYTgxOWM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTU1OCwxOCArMTU1
OCwxOCBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvckVtcHR5U3R5bGVDaGFuZ2UoRWxlbWVudCYgZWxl
bWVudCkKIAogZW51bSBTaWJsaW5nQ2hlY2tUeXBlIHsgRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4s
IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCwgT3RoZXIgfTsKIAotc3RhdGljIHZvaWQgY2hlY2tGb3JT
aWJsaW5nU3R5bGVDaGFuZ2VzKEVsZW1lbnQqIHBhcmVudCwgU2libGluZ0NoZWNrVHlwZSBjaGVj
a1R5cGUsIEVsZW1lbnQqIGVsZW1lbnRCZWZvcmVDaGFuZ2UsIEVsZW1lbnQqIGVsZW1lbnRBZnRl
ckNoYW5nZSkKK3N0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcyhFbGVtZW50
JiBwYXJlbnQsIFNpYmxpbmdDaGVja1R5cGUgY2hlY2tUeXBlLCBFbGVtZW50KiBlbGVtZW50QmVm
b3JlQ2hhbmdlLCBFbGVtZW50KiBlbGVtZW50QWZ0ZXJDaGFuZ2UpCiB7CiAgICAgLy8gOmVtcHR5
IHNlbGVjdG9yLgotICAgIGNoZWNrRm9yRW1wdHlTdHlsZUNoYW5nZSgqcGFyZW50KTsKKyAgICBj
aGVja0ZvckVtcHR5U3R5bGVDaGFuZ2UocGFyZW50KTsKIAotICAgIGlmIChwYXJlbnQtPnN0eWxl
Q2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5nZSkKKyAgICBpZiAocGFyZW50LnN0eWxlQ2hh
bmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5nZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
OmZpcnN0LWNoaWxkLiAgSW4gdGhlIHBhcnNlciBjYWxsYmFjayBjYXNlLCB3ZSBkb24ndCBoYXZl
IHRvIGNoZWNrIGFueXRoaW5nLCBzaW5jZSB3ZSB3ZXJlIHJpZ2h0IHRoZSBmaXJzdCB0aW1lLgog
ICAgIC8vIEluIHRoZSBET00gY2FzZSwgd2Ugb25seSBuZWVkIHRvIGRvIHNvbWV0aGluZyBpZiB8
YWZ0ZXJDaGFuZ2V8IGlzIG5vdCAwLgogICAgIC8vIHxhZnRlckNoYW5nZXwgaXMgMCBpbiB0aGUg
cGFyc2VyIGNhc2UsIHNvIGl0IHdvcmtzIG91dCB0aGF0IHdlJ2xsIHNraXAgdGhpcyBibG9jay4K
LSAgICBpZiAocGFyZW50LT5jaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKSAmJiBl
bGVtZW50QWZ0ZXJDaGFuZ2UpIHsKKyAgICBpZiAocGFyZW50LmNoaWxkcmVuQWZmZWN0ZWRCeUZp
cnN0Q2hpbGRSdWxlcygpICYmIGVsZW1lbnRBZnRlckNoYW5nZSkgewogICAgICAgICAvLyBGaW5k
IG91ciBuZXcgZmlyc3QgY2hpbGQuCiAgICAgICAgIEVsZW1lbnQqIG5ld0ZpcnN0RWxlbWVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQocGFyZW50KTsKICAgICAgICAgLy8gRmluZCB0
aGUgZmlyc3QgZWxlbWVudCBub2RlIGZvbGxvd2luZyB8YWZ0ZXJDaGFuZ2V8CkBAIC0xNTkxLDcg
KzE1OTEsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoRWxlbWVu
dCogcGFyZW50LCBTaWJsaW5nQ2hlY2tUeXBlIGNoZWNrVAogCiAgICAgLy8gOmxhc3QtY2hpbGQu
ICBJbiB0aGUgcGFyc2VyIGNhbGxiYWNrIGNhc2UsIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgYW55
dGhpbmcsIHNpbmNlIHdlIHdlcmUgcmlnaHQgdGhlIGZpcnN0IHRpbWUuCiAgICAgLy8gSW4gdGhl
IERPTSBjYXNlLCB3ZSBvbmx5IG5lZWQgdG8gZG8gc29tZXRoaW5nIGlmIHxhZnRlckNoYW5nZXwg
aXMgbm90IDAuCi0gICAgaWYgKHBhcmVudC0+Y2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVs
ZXMoKSAmJiBlbGVtZW50QmVmb3JlQ2hhbmdlKSB7CisgICAgaWYgKHBhcmVudC5jaGlsZHJlbkFm
ZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpICYmIGVsZW1lbnRCZWZvcmVDaGFuZ2UpIHsKICAgICAg
ICAgLy8gRmluZCBvdXIgbmV3IGxhc3QgY2hpbGQuCiAgICAgICAgIEVsZW1lbnQqIG5ld0xhc3RF
bGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKHBhcmVudCk7CiAKQEAgLTE2MzAs
OCArMTYzMCw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcyhFbGVt
ZW50KiBwYXJlbnQsIFNpYmxpbmdDaGVja1R5cGUgY2hlY2tUCiAgICAgLy8gfGFmdGVyQ2hhbmdl
fCBpcyAwIGluIHRoZSBwYXJzZXIgY2FsbGJhY2sgY2FzZSwgc28gd2Ugd29uJ3QgZG8gYW55IHdv
cmsgZm9yIHRoZSBmb3J3YXJkIGNhc2UgaWYgd2UgZG9uJ3QgaGF2ZSB0by4KICAgICAvLyBGb3Ig
cGVyZm9ybWFuY2UgcmVhc29ucyB3ZSBqdXN0IG1hcmsgdGhlIHBhcmVudCBub2RlIGFzIGNoYW5n
ZWQsIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gbWFrZSBjaGlsZHJlbkNoYW5nZWQgTyhuXjIpIGJ5
IGNyYXdsaW5nIGFsbCBvdXIga2lkcwogICAgIC8vIGhlcmUuICByZWNhbGNTdHlsZSB3aWxsIHRo
ZW4gZm9yY2UgYSB3YWxrIG9mIHRoZSBjaGlsZHJlbiB3aGVuIGl0IHNlZXMgdGhhdCB0aGlzIGhh
cyBoYXBwZW5lZC4KLSAgICBpZiAocGFyZW50LT5jaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBv
c2l0aW9uYWxSdWxlcygpICYmIGVsZW1lbnRCZWZvcmVDaGFuZ2UpCi0gICAgICAgIHBhcmVudC0+
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGlmIChwYXJlbnQuY2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKSAmJiBlbGVtZW50QmVmb3JlQ2hhbmdlKQorICAgICAg
ICBwYXJlbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQogCiB2b2lkIEVsZW1lbnQ6OmNoaWxk
cmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQpAQCAtMTY0MSw3ICsxNjQxLDcg
QEAgdm9pZCBFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoYW5n
ZSkKICAgICAgICAgY2hlY2tGb3JFbXB0eVN0eWxlQ2hhbmdlKCp0aGlzKTsKICAgICBlbHNlIHsK
ICAgICAgICAgU2libGluZ0NoZWNrVHlwZSBjaGVja1R5cGUgPSBjaGFuZ2UudHlwZSA9PSBFbGVt
ZW50UmVtb3ZlZCA/IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCA6IE90aGVyOwotICAgICAgICBjaGVj
a0ZvclNpYmxpbmdTdHlsZUNoYW5nZXModGhpcywgY2hlY2tUeXBlLCBjaGFuZ2UucHJldmlvdXNT
aWJsaW5nRWxlbWVudCwgY2hhbmdlLm5leHRTaWJsaW5nRWxlbWVudCk7CisgICAgICAgIGNoZWNr
Rm9yU2libGluZ1N0eWxlQ2hhbmdlcygqdGhpcywgY2hlY2tUeXBlLCBjaGFuZ2UucHJldmlvdXNT
aWJsaW5nRWxlbWVudCwgY2hhbmdlLm5leHRTaWJsaW5nRWxlbWVudCk7CiAgICAgfQogCiAgICAg
aWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0aGlzLT5zaGFkb3dSb290KCkpCkBAIC0xNjY2
LDcgKzE2NjYsNyBAQCB2b2lkIEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiB7CiAg
ICAgQ29udGFpbmVyTm9kZTo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAgICAgc2V0SXNQYXJz
aW5nQ2hpbGRyZW5GaW5pc2hlZCgpOwotICAgIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcyh0
aGlzLCBGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbiwgRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxk
KHRoaXMpLCBudWxscHRyKTsKKyAgICBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoKnRoaXMs
IEZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuLCBFbGVtZW50VHJhdmVyc2FsOjpsYXN0Q2hpbGQoKnRo
aXMpLCBudWxscHRyKTsKICAgICBpZiAoYXV0byBzdHlsZVJlc29sdmVyID0gZG9jdW1lbnQoKS5z
dHlsZVJlc29sdmVySWZFeGlzdHMoKSkKICAgICAgICAgc3R5bGVSZXNvbHZlci0+cG9wUGFyZW50
RWxlbWVudCh0aGlzKTsKIH0KQEAgLTIzNzUsMjIgKzIzNzUsMjIgQEAgdm9pZCBFbGVtZW50Ojpj
bGVhckFmdGVyUHNldWRvRWxlbWVudCgpCiAvLyBFbGVtZW50VHJhdmVyc2FsIEFQSQogRWxlbWVu
dCogRWxlbWVudDo6Zmlyc3RFbGVtZW50Q2hpbGQoKSBjb25zdAogewotICAgIHJldHVybiBFbGVt
ZW50VHJhdmVyc2FsOjpmaXJzdENoaWxkKHRoaXMpOworICAgIHJldHVybiBFbGVtZW50VHJhdmVy
c2FsOjpmaXJzdENoaWxkKCp0aGlzKTsKIH0KIAogRWxlbWVudCogRWxlbWVudDo6bGFzdEVsZW1l
bnRDaGlsZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RDaGls
ZCh0aGlzKTsKKyAgICByZXR1cm4gRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKCp0aGlzKTsK
IH0KIAogRWxlbWVudCogRWxlbWVudDo6cHJldmlvdXNFbGVtZW50U2libGluZygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyh0aGlzKTsKKyAg
ICByZXR1cm4gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCp0aGlzKTsKIH0KIAog
RWxlbWVudCogRWxlbWVudDo6bmV4dEVsZW1lbnRTaWJsaW5nKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcodGhpcyk7CisgICAgcmV0dXJuIEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCp0aGlzKTsKIH0KIAogdW5zaWduZWQgRWxlbWVudDo6
Y2hpbGRFbGVtZW50Q291bnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRDaGlsZEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudENoaWxk
SXRlcmF0b3IuaAppbmRleCAxNzBhZjg2MWM3OGQxOTMxMjg5MmMyMjhiZTFlMTg3MGMyNzgzOTgy
Li44ODk4Y2ZjYzM0YjFhMzAzOTE1NjZjZTRhNzU3ODUyMDA3NWIzZThlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudENoaWxkSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudENoaWxkSXRlcmF0b3IuaApAQCAtMTMyLDcgKzEzMiw3IEBAIGlubGlu
ZSBFbGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+OjpFbGVtZW50Q2hpbGRJ
dGVyYXRvckFkYXB0ZXIoQ29uCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxp
bmUgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+IEVsZW1lbnRDaGlsZEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50VHlwZT46OmJlZ2luKCkKIHsKLSAgICByZXR1cm4gRWxlbWVudENoaWxk
SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcGFyZW50LCBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+Ojpm
aXJzdENoaWxkKCZtX3BhcmVudCkpOworICAgIHJldHVybiBFbGVtZW50Q2hpbGRJdGVyYXRvcjxF
bGVtZW50VHlwZT4obV9wYXJlbnQsIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0Q2hpbGQo
bV9wYXJlbnQpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgpAQCAtMTQ0
LDEzICsxNDQsMTMgQEAgaW5saW5lIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBF
bGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGUKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBFbGVtZW50VHlwZT4KIGlubGluZSBFbGVtZW50VHlwZSogRWxlbWVudENoaWxkSXRlcmF0b3JB
ZGFwdGVyPEVsZW1lbnRUeXBlPjo6Zmlyc3QoKQogewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxl
bWVudFR5cGU+OjpmaXJzdENoaWxkKCZtX3BhcmVudCk7CisgICAgcmV0dXJuIFRyYXZlcnNhbDxF
bGVtZW50VHlwZT46OmZpcnN0Q2hpbGQobV9wYXJlbnQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgRWxlbWVudFR5cGUqIEVsZW1lbnRDaGlsZEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50VHlwZT46Omxhc3QoKQogewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxl
bWVudFR5cGU+OjpsYXN0Q2hpbGQoJm1fcGFyZW50KTsKKyAgICByZXR1cm4gVHJhdmVyc2FsPEVs
ZW1lbnRUeXBlPjo6bGFzdENoaWxkKG1fcGFyZW50KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IEVsZW1lbnRUeXBlPgpAQCAtMTcxLDcgKzE3MSw3IEBAIGlubGluZSBFbGVtZW50Q2hpbGRDb25z
dEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OkVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JB
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgRWxlbWVudENoaWxkQ29u
c3RJdGVyYXRvcjxFbGVtZW50VHlwZT4gRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvckFkYXB0ZXI8
RWxlbWVudFR5cGU+OjpiZWdpbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEVsZW1lbnRDaGlsZENv
bnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcGFyZW50LCBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+
OjpmaXJzdENoaWxkKCZtX3BhcmVudCkpOworICAgIHJldHVybiBFbGVtZW50Q2hpbGRDb25zdEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3BhcmVudCwgVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmly
c3RDaGlsZChtX3BhcmVudCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+
CkBAIC0xODMsMTMgKzE4MywxMyBAQCBpbmxpbmUgRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvcjxF
bGVtZW50VHlwZT4gRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvckFkYXB0ZXI8RQogdGVtcGxhdGUg
PHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogaW5saW5lIGNvbnN0IEVsZW1lbnRUeXBlKiBFbGVtZW50
Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OmZpcnN0KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZCgmbV9wYXJlbnQp
OworICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdENoaWxkKG1fcGFyZW50
KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogaW5saW5lIGNvbnN0IEVs
ZW1lbnRUeXBlKiBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46
Omxhc3QoKSBjb25zdAogewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpsYXN0
Q2hpbGQoJm1fcGFyZW50KTsKKyAgICByZXR1cm4gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bGFz
dENoaWxkKG1fcGFyZW50KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREZXNjZW5kYW50SXRlcmF0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgKaW5kZXgg
NzU4ZTQyNzFjMzk2YWNlMThhODFiZGJjYzc0ZTUxNjRjOGU3ZWZiMS4uODY2YjBiN2RiNjczMjFh
MDg1ZDE5ZTMyODJjZDZhMTQ4MzExMzhhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudERlc2NlbmRhbnRJdGVyYXRvci5oCkBAIC0xMjEsOCArMTIxLDggQEAgQUxXQVlTX0lOTElO
RSBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yJiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yOjpv
cGVyYXRvcisrKCkKICAgICBBU1NFUlQobV9jdXJyZW50KTsKICAgICBBU1NFUlQoIW1fYXNzZXJ0
aW9ucy5kb21UcmVlSGFzTXV0YXRlZCgpKTsKIAotICAgIEVsZW1lbnQqIGZpcnN0Q2hpbGQgPSBF
bGVtZW50VHJhdmVyc2FsOjpmaXJzdENoaWxkKG1fY3VycmVudCk7Ci0gICAgRWxlbWVudCogbmV4
dFNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhtX2N1cnJlbnQpOworICAg
IEVsZW1lbnQqIGZpcnN0Q2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdENoaWxkKCptX2N1
cnJlbnQpOworICAgIEVsZW1lbnQqIG5leHRTaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4
dFNpYmxpbmcoKm1fY3VycmVudCk7CiAKICAgICBpZiAoZmlyc3RDaGlsZCkgewogICAgICAgICBp
ZiAobmV4dFNpYmxpbmcpCkBAIC0xNTIsNyArMTUyLDcgQEAgQUxXQVlTX0lOTElORSBFbGVtZW50
RGVzY2VuZGFudEl0ZXJhdG9yJiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yOjpvcGVyYXRvci0t
KCkKICAgICBBU1NFUlQobV9jdXJyZW50KTsKICAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5kb21U
cmVlSGFzTXV0YXRlZCgpKTsKIAotICAgIEVsZW1lbnQqIHByZXZpb3VzU2libGluZyA9IEVsZW1l
bnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhtX2N1cnJlbnQpOworICAgIEVsZW1lbnQqIHBy
ZXZpb3VzU2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZygqbV9jdXJy
ZW50KTsKIAogICAgIGlmICghcHJldmlvdXNTaWJsaW5nKSB7CiAgICAgICAgIG1fY3VycmVudCA9
IG1fY3VycmVudC0+cGFyZW50RWxlbWVudCgpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIEFMV0FZU19J
TkxJTkUgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciYgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
cjo6b3BlcmF0b3ItLSgpCiAgICAgfQogCiAgICAgRWxlbWVudCogZGVlcGVzdFNpYmxpbmcgPSBw
cmV2aW91c1NpYmxpbmc7Ci0gICAgd2hpbGUgKEVsZW1lbnQqIGxhc3RDaGlsZCA9IEVsZW1lbnRU
cmF2ZXJzYWw6Omxhc3RDaGlsZChkZWVwZXN0U2libGluZykpCisgICAgd2hpbGUgKEVsZW1lbnQq
IGxhc3RDaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RDaGlsZCgqZGVlcGVzdFNpYmxpbmcp
KQogICAgICAgICBkZWVwZXN0U2libGluZyA9IGxhc3RDaGlsZDsKICAgICBBU1NFUlQoZGVlcGVz
dFNpYmxpbmcpOwogCkBAIC0yMjQsOCArMjI0LDggQEAgQUxXQVlTX0lOTElORSBFbGVtZW50RGVz
Y2VuZGFudENvbnN0SXRlcmF0b3ImIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcjo6b3AK
ICAgICBBU1NFUlQobV9jdXJyZW50KTsKICAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5kb21UcmVl
SGFzTXV0YXRlZCgpKTsKIAotICAgIEVsZW1lbnQqIGZpcnN0Q2hpbGQgPSBFbGVtZW50VHJhdmVy
c2FsOjpmaXJzdENoaWxkKG1fY3VycmVudCk7Ci0gICAgRWxlbWVudCogbmV4dFNpYmxpbmcgPSBF
bGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhtX2N1cnJlbnQpOworICAgIEVsZW1lbnQqIGZp
cnN0Q2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdENoaWxkKCptX2N1cnJlbnQpOworICAg
IEVsZW1lbnQqIG5leHRTaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKm1f
Y3VycmVudCk7CiAKICAgICBpZiAoZmlyc3RDaGlsZCkgewogICAgICAgICBpZiAobmV4dFNpYmxp
bmcpCkBAIC0yODQsNyArMjg0LDcgQEAgaW5saW5lIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JB
ZGFwdGVyOjpFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcihDb250YWkKIAogaW5saW5l
IEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0
ZXI6OmJlZ2luKCkKIHsKLSAgICByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcihFbGVt
ZW50VHJhdmVyc2FsOjpmaXJzdENoaWxkKCZtX3Jvb3QpKTsKKyAgICByZXR1cm4gRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvcihFbGVtZW50VHJhdmVyc2FsOjpmaXJzdENoaWxkKG1fcm9vdCkpOwog
fQogCiBpbmxpbmUgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciBFbGVtZW50RGVzY2VuZGFudEl0
ZXJhdG9yQWRhcHRlcjo6ZW5kKCkKQEAgLTI5NCw3ICsyOTQsNyBAQCBpbmxpbmUgRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvciBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjo6ZW5kKCkK
IAogaW5saW5lIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IgRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvckFkYXB0ZXI6Omxhc3QoKQogewotICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yKEVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RXaXRoaW4oJm1fcm9vdCkpOworICAgIHJldHVybiBF
bGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yKEVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RXaXRoaW4obV9y
b290KSk7CiB9CiAKIC8vIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0ZXIKQEAg
LTMwNiw3ICszMDYsNyBAQCBpbmxpbmUgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRh
cHRlcjo6RWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcAogCiBpbmxpbmUgRWxlbWVu
dERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFk
YXB0ZXI6OmJlZ2luKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRDb25z
dEl0ZXJhdG9yKEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQoJm1fcm9vdCkpOworICAgIHJl
dHVybiBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IoRWxlbWVudFRyYXZlcnNhbDo6Zmly
c3RDaGlsZChtX3Jvb3QpKTsKIH0KIAogaW5saW5lIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVy
YXRvciBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyOjplbmQoKSBjb25zdApA
QCAtMzE2LDcgKzMxNiw3IEBAIGlubGluZSBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3Ig
RWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjo6ZW5kCiAKIGlubGluZSBFbGVt
ZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9y
QWRhcHRlcjo6bGFzdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50Q29u
c3RJdGVyYXRvcihFbGVtZW50VHJhdmVyc2FsOjpsYXN0V2l0aGluKCZtX3Jvb3QpKTsKKyAgICBy
ZXR1cm4gRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yKEVsZW1lbnRUcmF2ZXJzYWw6Omxh
c3RXaXRoaW4obV9yb290KSk7CiB9CiAKIC8vIFN0YW5kYWxvbmUgZnVuY3Rpb25zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudEl0ZXJhdG9yLmgKaW5kZXggNzYwM2FkNTU2YTg1ZDAwYjU4Y2YzM2U5OWMz
OTUxYzQxYThhNjA3MS4uNGNhNGE2MDIyNjNiNWYwYzk4MWUwZWQ5ZjJiNjFiNTA2OThmY2ExZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRJdGVyYXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50SXRlcmF0b3IuaApAQCAtMTE0LDcgKzExNCw3IEBAIGlu
bGluZSBFbGVtZW50SXRlcmF0b3I8RWxlbWVudFR5cGU+JiBFbGVtZW50SXRlcmF0b3I8RWxlbWVu
dFR5cGU+Ojp0cmF2ZXJzZU5leHQoCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudCk7CiAgICAgQVNT
RVJUKCFtX2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQoKSk7Ci0gICAgbV9jdXJyZW50ID0g
VHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4dChtX2N1cnJlbnQsIG1fcm9vdCk7CisgICAgbV9j
dXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4dCgqbV9jdXJyZW50LCBtX3Jvb3Qp
OwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAvLyBEcm9wIHRoZSBhc3NlcnRpb24gd2hlbiB0
aGUgaXRlcmF0b3IgcmVhY2hlcyB0aGUgZW5kLgogICAgIGlmICghbV9jdXJyZW50KQpAQCAtMTI4
LDcgKzEyOCw3IEBAIGlubGluZSBFbGVtZW50SXRlcmF0b3I8RWxlbWVudFR5cGU+JiBFbGVtZW50
SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojp0cmF2ZXJzZVByZXZpCiB7CiAgICAgQVNTRVJUKG1fY3Vy
cmVudCk7CiAgICAgQVNTRVJUKCFtX2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQoKSk7Ci0g
ICAgbV9jdXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6cHJldmlvdXMobV9jdXJyZW50
LCBtX3Jvb3QpOworICAgIG1fY3VycmVudCA9IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OnByZXZp
b3VzKCptX2N1cnJlbnQsIG1fcm9vdCk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIC8vIERy
b3AgdGhlIGFzc2VydGlvbiB3aGVuIHRoZSBpdGVyYXRvciByZWFjaGVzIHRoZSBlbmQuCiAgICAg
aWYgKCFtX2N1cnJlbnQpCkBAIC0xNDIsNyArMTQyLDcgQEAgaW5saW5lIEVsZW1lbnRJdGVyYXRv
cjxFbGVtZW50VHlwZT4mIEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT46OnRyYXZlcnNlTmV4
dFMKIHsKICAgICBBU1NFUlQobV9jdXJyZW50KTsKICAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5k
b21UcmVlSGFzTXV0YXRlZCgpKTsKLSAgICBtX2N1cnJlbnQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5
cGU+OjpuZXh0U2libGluZyhtX2N1cnJlbnQpOworICAgIG1fY3VycmVudCA9IFRyYXZlcnNhbDxF
bGVtZW50VHlwZT46Om5leHRTaWJsaW5nKCptX2N1cnJlbnQpOwogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAvLyBEcm9wIHRoZSBhc3NlcnRpb24gd2hlbiB0aGUgaXRlcmF0b3IgcmVhY2hlcyB0
aGUgZW5kLgogICAgIGlmICghbV9jdXJyZW50KQpAQCAtMTU2LDcgKzE1Niw3IEBAIGlubGluZSBF
bGVtZW50SXRlcmF0b3I8RWxlbWVudFR5cGU+JiBFbGVtZW50SXRlcmF0b3I8RWxlbWVudFR5cGU+
Ojp0cmF2ZXJzZVByZXZpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudCk7CiAgICAgQVNTRVJUKCFt
X2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQoKSk7Ci0gICAgbV9jdXJyZW50ID0gVHJhdmVy
c2FsPEVsZW1lbnRUeXBlPjo6cHJldmlvdXNTaWJsaW5nKG1fY3VycmVudCk7CisgICAgbV9jdXJy
ZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6cHJldmlvdXNTaWJsaW5nKCptX2N1cnJlbnQp
OwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAvLyBEcm9wIHRoZSBhc3NlcnRpb24gd2hlbiB0
aGUgaXRlcmF0b3IgcmVhY2hlcyB0aGUgZW5kLgogICAgIGlmICghbV9jdXJyZW50KQpAQCAtMTcw
LDcgKzE3MCw3IEBAIGlubGluZSBFbGVtZW50SXRlcmF0b3I8RWxlbWVudFR5cGU+JiBFbGVtZW50
SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojp0cmF2ZXJzZU5leHRTCiB7CiAgICAgQVNTRVJUKG1fY3Vy
cmVudCk7CiAgICAgQVNTRVJUKCFtX2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQoKSk7Ci0g
ICAgbV9jdXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4dFNraXBwaW5nQ2hpbGRy
ZW4obV9jdXJyZW50LCBtX3Jvb3QpOworICAgIG1fY3VycmVudCA9IFRyYXZlcnNhbDxFbGVtZW50
VHlwZT46Om5leHRTa2lwcGluZ0NoaWxkcmVuKCptX2N1cnJlbnQsIG1fcm9vdCk7CiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgIC8vIERyb3AgdGhlIGFzc2VydGlvbiB3aGVuIHRoZSBpdGVyYXRv
ciByZWFjaGVzIHRoZSBlbmQuCiAgICAgaWYgKCFtX2N1cnJlbnQpCkBAIC0yNjQsNyArMjY0LDcg
QEAgaW5saW5lIEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiYgRWxlbWVudENvbnN0
SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojp0cmEKIHsKICAgICBBU1NFUlQobV9jdXJyZW50KTsKICAg
ICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5kb21UcmVlSGFzTXV0YXRlZCgpKTsKLSAgICBtX2N1cnJl
bnQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KG1fY3VycmVudCwgbV9yb290KTsKKyAg
ICBtX2N1cnJlbnQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KCptX2N1cnJlbnQsIG1f
cm9vdCk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIC8vIERyb3AgdGhlIGFzc2VydGlvbiB3
aGVuIHRoZSBpdGVyYXRvciByZWFjaGVzIHRoZSBlbmQuCiAgICAgaWYgKCFtX2N1cnJlbnQpCkBA
IC0yNzgsNyArMjc4LDcgQEAgaW5saW5lIEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBl
PiYgRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojp0cmEKIHsKICAgICBBU1NFUlQo
bV9jdXJyZW50KTsKICAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5kb21UcmVlSGFzTXV0YXRlZCgp
KTsKLSAgICBtX2N1cnJlbnQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpwcmV2aW91cyhtX2N1
cnJlbnQsIG1fcm9vdCk7CisgICAgbV9jdXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6
cHJldmlvdXMoKm1fY3VycmVudCwgbV9yb290KTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
Ly8gRHJvcCB0aGUgYXNzZXJ0aW9uIHdoZW4gdGhlIGl0ZXJhdG9yIHJlYWNoZXMgdGhlIGVuZC4K
ICAgICBpZiAoIW1fY3VycmVudCkKQEAgLTI5Miw3ICsyOTIsNyBAQCBpbmxpbmUgRWxlbWVudENv
bnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+JiBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlw
ZT46OnRyYQogewogICAgIEFTU0VSVChtX2N1cnJlbnQpOwogICAgIEFTU0VSVCghbV9hc3NlcnRp
b25zLmRvbVRyZWVIYXNNdXRhdGVkKCkpOwotICAgIG1fY3VycmVudCA9IFRyYXZlcnNhbDxFbGVt
ZW50VHlwZT46Om5leHRTaWJsaW5nKG1fY3VycmVudCk7CisgICAgbV9jdXJyZW50ID0gVHJhdmVy
c2FsPEVsZW1lbnRUeXBlPjo6bmV4dFNpYmxpbmcoKm1fY3VycmVudCk7CiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgIC8vIERyb3AgdGhlIGFzc2VydGlvbiB3aGVuIHRoZSBpdGVyYXRvciByZWFj
aGVzIHRoZSBlbmQuCiAgICAgaWYgKCFtX2N1cnJlbnQpCkBAIC0zMDYsNyArMzA2LDcgQEAgaW5s
aW5lIEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiYgRWxlbWVudENvbnN0SXRlcmF0
b3I8RWxlbWVudFR5cGU+Ojp0cmEKIHsKICAgICBBU1NFUlQobV9jdXJyZW50KTsKICAgICBBU1NF
UlQoIW1fYXNzZXJ0aW9ucy5kb21UcmVlSGFzTXV0YXRlZCgpKTsKLSAgICBtX2N1cnJlbnQgPSBU
cmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpwcmV2aW91c1NpYmxpbmcobV9jdXJyZW50KTsKKyAgICBt
X2N1cnJlbnQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpwcmV2aW91c1NpYmxpbmcoKm1fY3Vy
cmVudCk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIC8vIERyb3AgdGhlIGFzc2VydGlvbiB3
aGVuIHRoZSBpdGVyYXRvciByZWFjaGVzIHRoZSBlbmQuCiAgICAgaWYgKCFtX2N1cnJlbnQpCkBA
IC0zMjAsNyArMzIwLDcgQEAgaW5saW5lIEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBl
PiYgRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojp0cmEKIHsKICAgICBBU1NFUlQo
bV9jdXJyZW50KTsKICAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5kb21UcmVlSGFzTXV0YXRlZCgp
KTsKLSAgICBtX2N1cnJlbnQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihtX2N1cnJlbnQsIG1fcm9vdCk7CisgICAgbV9jdXJyZW50ID0gVHJhdmVyc2FsPEVs
ZW1lbnRUeXBlPjo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm1fY3VycmVudCwgbV9yb290KTsKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLy8gRHJvcCB0aGUgYXNzZXJ0aW9uIHdoZW4gdGhlIGl0
ZXJhdG9yIHJlYWNoZXMgdGhlIGVuZC4KICAgICBpZiAoIW1fY3VycmVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2FsLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudFRyYXZlcnNhbC5oCmluZGV4IGM1Yzk5OTRlN2ExMzQ1NDM4NGUyOTRkMDdlMGRj
ZTVlYjM5YjhiMGUuLjFkNTc2ODE0ZDFiYWM2MjU3NTEwMjExMGFhYzBhMDc1MjAwMmRkMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2FsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRUcmF2ZXJzYWwuaApAQCAtMzQsODggKzM0LDg4IEBAIHRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KIGNsYXNzIFRyYXZlcnNhbCB7CiBwdWJsaWM6
CiAgICAgLy8gRmlyc3Qgb3IgbGFzdCBFbGVtZW50VHlwZSBjaGlsZCBvZiB0aGUgbm9kZS4KLSAg
ICBzdGF0aWMgRWxlbWVudFR5cGUqIGZpcnN0Q2hpbGQoY29uc3QgTm9kZSopOwotICAgIHN0YXRp
YyBFbGVtZW50VHlwZSogZmlyc3RDaGlsZChjb25zdCBDb250YWluZXJOb2RlKik7Ci0gICAgc3Rh
dGljIEVsZW1lbnRUeXBlKiBsYXN0Q2hpbGQoY29uc3QgTm9kZSopOwotICAgIHN0YXRpYyBFbGVt
ZW50VHlwZSogbGFzdENoaWxkKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKKyAgICBzdGF0aWMgRWxl
bWVudFR5cGUqIGZpcnN0Q2hpbGQoY29uc3QgTm9kZSYpOworICAgIHN0YXRpYyBFbGVtZW50VHlw
ZSogZmlyc3RDaGlsZChjb25zdCBDb250YWluZXJOb2RlJik7CisgICAgc3RhdGljIEVsZW1lbnRU
eXBlKiBsYXN0Q2hpbGQoY29uc3QgTm9kZSYpOworICAgIHN0YXRpYyBFbGVtZW50VHlwZSogbGFz
dENoaWxkKGNvbnN0IENvbnRhaW5lck5vZGUmKTsKIAogICAgIC8vIEZpcnN0IG9yIGxhc3QgRWxl
bWVudFR5cGUgZGVzY2VuZGFudCBvZiB0aGUgbm9kZS4gRm9yIEVsZW1lbnRzIGZpcnN0V2l0aGlu
IGlzIGFsd2F5cyB0aGUgc2FtZSBhcyBmaXJzdCBjaGlsZC4KLSAgICBzdGF0aWMgRWxlbWVudFR5
cGUqIGZpcnN0V2l0aGluKGNvbnN0IE5vZGUqKTsKLSAgICBzdGF0aWMgRWxlbWVudFR5cGUqIGZp
cnN0V2l0aGluKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKLSAgICBzdGF0aWMgRWxlbWVudFR5cGUq
IGxhc3RXaXRoaW4oY29uc3QgTm9kZSopOwotICAgIHN0YXRpYyBFbGVtZW50VHlwZSogbGFzdFdp
dGhpbihjb25zdCBDb250YWluZXJOb2RlKik7CisgICAgc3RhdGljIEVsZW1lbnRUeXBlKiBmaXJz
dFdpdGhpbihjb25zdCBOb2RlJik7CisgICAgc3RhdGljIEVsZW1lbnRUeXBlKiBmaXJzdFdpdGhp
bihjb25zdCBDb250YWluZXJOb2RlJik7CisgICAgc3RhdGljIEVsZW1lbnRUeXBlKiBsYXN0V2l0
aGluKGNvbnN0IE5vZGUmKTsKKyAgICBzdGF0aWMgRWxlbWVudFR5cGUqIGxhc3RXaXRoaW4oY29u
c3QgQ29udGFpbmVyTm9kZSYpOwogCiAgICAgLy8gUHJlLW9yZGVyIHRyYXZlcnNhbCBza2lwcGlu
ZyBub24tRWxlbWVudFR5cGUgbm9kZXMuCi0gICAgc3RhdGljIEVsZW1lbnRUeXBlKiBuZXh0KGNv
bnN0IE5vZGUqKTsKLSAgICBzdGF0aWMgRWxlbWVudFR5cGUqIG5leHQoY29uc3QgTm9kZSosIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pOwotICAgIHN0YXRpYyBFbGVtZW50VHlwZSogbmV4dChjb25z
dCBDb250YWluZXJOb2RlKik7Ci0gICAgc3RhdGljIEVsZW1lbnRUeXBlKiBuZXh0KGNvbnN0IENv
bnRhaW5lck5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKLSAgICBzdGF0aWMgRWxlbWVu
dFR5cGUqIHByZXZpb3VzKGNvbnN0IE5vZGUqKTsKLSAgICBzdGF0aWMgRWxlbWVudFR5cGUqIHBy
ZXZpb3VzKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKKyAgICBzdGF0aWMg
RWxlbWVudFR5cGUqIG5leHQoY29uc3QgTm9kZSYpOworICAgIHN0YXRpYyBFbGVtZW50VHlwZSog
bmV4dChjb25zdCBOb2RlJiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CisgICAgc3RhdGljIEVs
ZW1lbnRUeXBlKiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUmKTsKKyAgICBzdGF0aWMgRWxlbWVu
dFR5cGUqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSYsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4p
OworICAgIHN0YXRpYyBFbGVtZW50VHlwZSogcHJldmlvdXMoY29uc3QgTm9kZSYpOworICAgIHN0
YXRpYyBFbGVtZW50VHlwZSogcHJldmlvdXMoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUqIHN0YXlX
aXRoaW4pOwogCiAgICAgLy8gTmV4dCBvciBwcmV2aW91cyBFbGVtZW50VHlwZSBzaWJsaW5nIGlm
IHRoZXJlIGlzIG9uZS4KLSAgICBzdGF0aWMgRWxlbWVudFR5cGUqIG5leHRTaWJsaW5nKGNvbnN0
IE5vZGUqKTsKLSAgICBzdGF0aWMgRWxlbWVudFR5cGUqIHByZXZpb3VzU2libGluZyhjb25zdCBO
b2RlKik7CisgICAgc3RhdGljIEVsZW1lbnRUeXBlKiBuZXh0U2libGluZyhjb25zdCBOb2RlJik7
CisgICAgc3RhdGljIEVsZW1lbnRUeXBlKiBwcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSYpOwog
CiAgICAgLy8gTGlrZSBuZXh0LCBidXQgc2tpcHMgY2hpbGRyZW4uCi0gICAgc3RhdGljIEVsZW1l
bnRUeXBlKiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKik7Ci0gICAgc3RhdGljIEVs
ZW1lbnRUeXBlKiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKiwgY29uc3QgTm9kZSog
c3RheVdpdGhpbik7CisgICAgc3RhdGljIEVsZW1lbnRUeXBlKiBuZXh0U2tpcHBpbmdDaGlsZHJl
bihjb25zdCBOb2RlJik7CisgICAgc3RhdGljIEVsZW1lbnRUeXBlKiBuZXh0U2tpcHBpbmdDaGls
ZHJlbihjb25zdCBOb2RlJiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CiAKIHByaXZhdGU6Ci0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEN1cnJlbnRUeXBlPiBzdGF0aWMgRWxlbWVudFR5cGUqIGZp
cnN0Q2hpbGRUZW1wbGF0ZShDdXJyZW50VHlwZSopOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBD
dXJyZW50VHlwZT4gc3RhdGljIEVsZW1lbnRUeXBlKiBsYXN0Q2hpbGRUZW1wbGF0ZShDdXJyZW50
VHlwZSopOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDdXJyZW50VHlwZT4gc3RhdGljIEVsZW1l
bnRUeXBlKiBmaXJzdFdpdGhpblRlbXBsYXRlKEN1cnJlbnRUeXBlKik7Ci0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEN1cnJlbnRUeXBlPiBzdGF0aWMgRWxlbWVudFR5cGUqIGxhc3RXaXRoaW5UZW1w
bGF0ZShDdXJyZW50VHlwZSopOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDdXJyZW50VHlwZT4g
c3RhdGljIEVsZW1lbnRUeXBlKiBuZXh0VGVtcGxhdGUoQ3VycmVudFR5cGUqKTsKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ3VycmVudFR5cGU+IHN0YXRpYyBFbGVtZW50VHlwZSogbmV4dFRlbXBs
YXRlKEN1cnJlbnRUeXBlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEN1cnJlbnRUeXBlPiBzdGF0aWMgRWxlbWVudFR5cGUqIGZpcnN0Q2hpbGRUZW1w
bGF0ZShDdXJyZW50VHlwZSYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDdXJyZW50VHlwZT4g
c3RhdGljIEVsZW1lbnRUeXBlKiBsYXN0Q2hpbGRUZW1wbGF0ZShDdXJyZW50VHlwZSYpOworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDdXJyZW50VHlwZT4gc3RhdGljIEVsZW1lbnRUeXBlKiBmaXJz
dFdpdGhpblRlbXBsYXRlKEN1cnJlbnRUeXBlJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEN1
cnJlbnRUeXBlPiBzdGF0aWMgRWxlbWVudFR5cGUqIGxhc3RXaXRoaW5UZW1wbGF0ZShDdXJyZW50
VHlwZSYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDdXJyZW50VHlwZT4gc3RhdGljIEVsZW1l
bnRUeXBlKiBuZXh0VGVtcGxhdGUoQ3VycmVudFR5cGUmKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ3VycmVudFR5cGU+IHN0YXRpYyBFbGVtZW50VHlwZSogbmV4dFRlbXBsYXRlKEN1cnJlbnRU
eXBlJiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CiB9OwogCiBjbGFzcyBFbGVtZW50VHJhdmVy
c2FsIDogcHVibGljIFRyYXZlcnNhbDxFbGVtZW50PiB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6
IFRoZXNlIHNob3VsZCBnbyBzb21ld2hlcmUgZWxzZS4KICAgICAvLyBQcmUtb3JkZXIgdHJhdmVy
c2FsIGluY2x1ZGluZyB0aGUgcHNldWRvLWVsZW1lbnRzLgotICAgIHN0YXRpYyBFbGVtZW50KiBw
cmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogPSAwKTsKLSAg
ICBzdGF0aWMgRWxlbWVudCogbmV4dEluY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiwgY29uc3Qg
Tm9kZSogPSAwKTsKLSAgICBzdGF0aWMgRWxlbWVudCogbmV4dEluY2x1ZGluZ1BzZXVkb1NraXBw
aW5nQ2hpbGRyZW4oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqID0gMCk7CisgICAgc3RhdGljIEVs
ZW1lbnQqIHByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlKiA9
IG51bGxwdHIpOworICAgIHN0YXRpYyBFbGVtZW50KiBuZXh0SW5jbHVkaW5nUHNldWRvKGNvbnN0
IE5vZGUmLCBjb25zdCBOb2RlKiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBFbGVtZW50KiBuZXh0
SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlJiwgY29uc3QgTm9kZSog
PSBudWxscHRyKTsKIAogICAgIC8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gdHJhdmVyc2Ugb25seSB0
aGUgZWxlbWVudCBhbmQgcHNldWRvLWVsZW1lbnQgc2libGluZ3Mgb2YgYSBub2RlLgotICAgIHN0
YXRpYyBFbGVtZW50KiBwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKik7Cisg
ICAgc3RhdGljIEVsZW1lbnQqIHBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUm
KTsKIH07CiAKIC8vIFNwZWNpYWxpemVkIGZvciBwdXJlIEVsZW1lbnQgdG8gZXhwbG9pdCB0aGUg
ZmFjdCB0aGF0IEVsZW1lbnRzIHBhcmVudCBpcyBhbHdheXMgZWl0aGVyIGFub3RoZXIgRWxlbWVu
dCBvciB0aGUgcm9vdC4KIHRlbXBsYXRlIDw+CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ3VycmVudFR5
cGU+Ci1pbmxpbmUgRWxlbWVudCogVHJhdmVyc2FsPEVsZW1lbnQ+OjpmaXJzdFdpdGhpblRlbXBs
YXRlKEN1cnJlbnRUeXBlKiBjdXJyZW50KQoraW5saW5lIEVsZW1lbnQqIFRyYXZlcnNhbDxFbGVt
ZW50Pjo6Zmlyc3RXaXRoaW5UZW1wbGF0ZShDdXJyZW50VHlwZSYgY3VycmVudCkKIHsKICAgICBy
ZXR1cm4gZmlyc3RDaGlsZFRlbXBsYXRlKGN1cnJlbnQpOwogfQogCiB0ZW1wbGF0ZSA8PgogdGVt
cGxhdGUgPHR5cGVuYW1lIEN1cnJlbnRUeXBlPgotaW5saW5lIEVsZW1lbnQqIFRyYXZlcnNhbDxF
bGVtZW50Pjo6bmV4dFRlbXBsYXRlKEN1cnJlbnRUeXBlKiBjdXJyZW50KQoraW5saW5lIEVsZW1l
bnQqIFRyYXZlcnNhbDxFbGVtZW50Pjo6bmV4dFRlbXBsYXRlKEN1cnJlbnRUeXBlJiBjdXJyZW50
KQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJlbnQpOwogICAg
IHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pigqbm9kZSkpCi0gICAgICAgIG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlKTsKKyAgICAgICAgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2RlKTsKICAgICByZXR1cm4gZG93
bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKIHRlbXBsYXRlIDw+CiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ3VycmVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudCogVHJhdmVyc2FsPEVsZW1lbnQ+OjpuZXh0
VGVtcGxhdGUoQ3VycmVudFR5cGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCitp
bmxpbmUgRWxlbWVudCogVHJhdmVyc2FsPEVsZW1lbnQ+OjpuZXh0VGVtcGxhdGUoQ3VycmVudFR5
cGUmIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAgTm9kZSogbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoY3VycmVudCwgc3RheVdpdGhpbik7CiAgICAgd2hpbGUgKG5v
ZGUgJiYgIWlzPEVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUsIHN0YXlXaXRoaW4pOworICAgICAgICBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUsIHN0YXlXaXRoaW4pOwog
ICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KIAogLy8gR2VuZXJpYyB2ZXJz
aW9ucy4KIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDdXJyZW50VHlwZT4KLWlubGluZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBl
Pjo6Zmlyc3RDaGlsZFRlbXBsYXRlKEN1cnJlbnRUeXBlKiBjdXJyZW50KQoraW5saW5lIEVsZW1l
bnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdENoaWxkVGVtcGxhdGUoQ3VycmVu
dFR5cGUmIGN1cnJlbnQpCiB7Ci0gICAgTm9kZSogbm9kZSA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQo
KTsKKyAgICBOb2RlKiBub2RlID0gY3VycmVudC5maXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKG5v
ZGUgJiYgIWlzPEVsZW1lbnRUeXBlPigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5uZXh0
U2libGluZygpOwogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50VHlwZT4obm9kZSk7CkBAIC0x
MjMsOSArMTIzLDkgQEAgaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+
OjpmaXJzdENoaWxkVGVtcGxhdGUoQ3VycmVudFR5cGUqIGN1cnIKIAogdGVtcGxhdGUgPHR5cGVu
YW1lIEVsZW1lbnRUeXBlPgogdGVtcGxhdGUgPHR5cGVuYW1lIEN1cnJlbnRUeXBlPgotaW5saW5l
IEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpsYXN0Q2hpbGRUZW1wbGF0ZShD
dXJyZW50VHlwZSogY3VycmVudCkKK2lubGluZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVsZW1l
bnRUeXBlPjo6bGFzdENoaWxkVGVtcGxhdGUoQ3VycmVudFR5cGUmIGN1cnJlbnQpCiB7Ci0gICAg
Tm9kZSogbm9kZSA9IGN1cnJlbnQtPmxhc3RDaGlsZCgpOworICAgIE5vZGUqIG5vZGUgPSBjdXJy
ZW50Lmxhc3RDaGlsZCgpOwogICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50VHlwZT4oKm5v
ZGUpKQogICAgICAgICBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnRUeXBlPihub2RlKTsKQEAgLTEzMywxNTUgKzEzMywxNTUgQEAgaW5s
aW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpsYXN0Q2hpbGRUZW1wbGF0
ZShDdXJyZW50VHlwZSogY3VycmUKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgog
dGVtcGxhdGUgPHR5cGVuYW1lIEN1cnJlbnRUeXBlPgotaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2
ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhpblRlbXBsYXRlKEN1cnJlbnRUeXBlKiBjdXJy
ZW50KQoraW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdp
dGhpblRlbXBsYXRlKEN1cnJlbnRUeXBlJiBjdXJyZW50KQogewotICAgIE5vZGUqIG5vZGUgPSBj
dXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgTm9kZSogbm9kZSA9IGN1cnJlbnQuZmlyc3RDaGls
ZCgpOwogICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50VHlwZT4oKm5vZGUpKQotICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBjdXJyZW50KTsKKyAgICAgICAgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsICZjdXJyZW50KTsKICAgICByZXR1cm4gZG93
bmNhc3Q8RWxlbWVudFR5cGU+KG5vZGUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dFR5cGU+CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ3VycmVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudFR5
cGUqIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Omxhc3RXaXRoaW5UZW1wbGF0ZShDdXJyZW50VHlw
ZSogY3VycmVudCkKK2lubGluZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6
bGFzdFdpdGhpblRlbXBsYXRlKEN1cnJlbnRUeXBlJiBjdXJyZW50KQogewogICAgIE5vZGUqIG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpsYXN0KGN1cnJlbnQpOwogICAgIHdoaWxlIChub2RlICYmICFp
czxFbGVtZW50VHlwZT4oKm5vZGUpKQotICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJl
dmlvdXMobm9kZSwgY3VycmVudCk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2
aW91cygqbm9kZSwgJmN1cnJlbnQpOwogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50VHlwZT4o
bm9kZSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KIHRlbXBsYXRlIDx0
eXBlbmFtZSBDdXJyZW50VHlwZT4KLWlubGluZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVsZW1l
bnRUeXBlPjo6bmV4dFRlbXBsYXRlKEN1cnJlbnRUeXBlKiBjdXJyZW50KQoraW5saW5lIEVsZW1l
bnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0VGVtcGxhdGUoQ3VycmVudFR5cGUm
IGN1cnJlbnQpCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoY3VycmVu
dCk7CiAgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnRUeXBlPigqbm9kZSkpCi0gICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOworICAgICAgICBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dCgqbm9kZSk7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnRUeXBlPihu
b2RlKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogdGVtcGxhdGUgPHR5
cGVuYW1lIEN1cnJlbnRUeXBlPgotaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVu
dFR5cGU+OjpuZXh0VGVtcGxhdGUoQ3VycmVudFR5cGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pCitpbmxpbmUgRWxlbWVudFR5cGUqIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5l
eHRUZW1wbGF0ZShDdXJyZW50VHlwZSYgY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikK
IHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBzdGF5V2l0
aGluKTsKICAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudFR5cGU+KCpub2RlKSkKLSAgICAg
ICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgc3RheVdpdGhpbik7CisgICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCBzdGF5V2l0aGluKTsKICAgICByZXR1
cm4gZG93bmNhc3Q8RWxlbWVudFR5cGU+KG5vZGUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudFR5cGUqIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46
OnByZXZpb3VzKGNvbnN0IE5vZGUqIGN1cnJlbnQpCitpbmxpbmUgRWxlbWVudFR5cGUqIFRyYXZl
cnNhbDxFbGVtZW50VHlwZT46OnByZXZpb3VzKGNvbnN0IE5vZGUmIGN1cnJlbnQpCiB7CiAgICAg
Tm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKGN1cnJlbnQpOwogICAgIHdoaWxl
IChub2RlICYmICFpczxFbGVtZW50VHlwZT4oKm5vZGUpKQotICAgICAgICBub2RlID0gTm9kZVRy
YXZlcnNhbDo6cHJldmlvdXMobm9kZSk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpw
cmV2aW91cygqbm9kZSk7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnRUeXBlPihub2RlKTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRUeXBl
KiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpwcmV2aW91cyhjb25zdCBOb2RlKiBjdXJyZW50LCBj
b25zdCBOb2RlKiBzdGF5V2l0aGluKQoraW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxl
bWVudFR5cGU+OjpwcmV2aW91cyhjb25zdCBOb2RlJiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5
V2l0aGluKQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhjdXJy
ZW50LCBzdGF5V2l0aGluKTsKICAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudFR5cGU+KCpu
b2RlKSkKLSAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG5vZGUsIHN0YXlX
aXRoaW4pOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoKm5vZGUsIHN0
YXlXaXRoaW4pOwogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50VHlwZT4obm9kZSk7CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50VHlwZSogVHJh
dmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4dFNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCkKK2lu
bGluZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4dFNpYmxpbmcoY29u
c3QgTm9kZSYgY3VycmVudCkKIHsKLSAgICBOb2RlKiBub2RlID0gY3VycmVudC0+bmV4dFNpYmxp
bmcoKTsKKyAgICBOb2RlKiBub2RlID0gY3VycmVudC5uZXh0U2libGluZygpOwogICAgIHdoaWxl
IChub2RlICYmICFpczxFbGVtZW50VHlwZT4oKm5vZGUpKQogICAgICAgICBub2RlID0gbm9kZS0+
bmV4dFNpYmxpbmcoKTsKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudFR5cGU+KG5vZGUpOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudFR5cGUq
IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OnByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKiBjdXJy
ZW50KQoraW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpwcmV2aW91
c1NpYmxpbmcoY29uc3QgTm9kZSYgY3VycmVudCkKIHsKLSAgICBOb2RlKiBub2RlID0gY3VycmVu
dC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgTm9kZSogbm9kZSA9IGN1cnJlbnQucHJldmlvdXNT
aWJsaW5nKCk7CiAgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnRUeXBlPigqbm9kZSkpCiAg
ICAgICAgIG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICByZXR1cm4gZG93bmNh
c3Q8RWxlbWVudFR5cGU+KG5vZGUpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5
cGU+Ci1pbmxpbmUgRWxlbWVudFR5cGUqIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5leHRTa2lw
cGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQpCitpbmxpbmUgRWxlbWVudFR5cGUqIFRy
YXZlcnNhbDxFbGVtZW50VHlwZT46Om5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUmIGN1
cnJlbnQpCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKGN1cnJlbnQpOwogICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50VHlwZT4oKm5v
ZGUpKQotICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4o
bm9kZSk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bigqbm9kZSk7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnRUeXBlPihub2RlKTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2
ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKiBjdXJy
ZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoraW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJz
YWw8RWxlbWVudFR5cGU+OjpuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlJiBjdXJyZW50
LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihjdXJyZW50LCBzdGF5V2l0aGluKTsKICAgICB3aGls
ZSAobm9kZSAmJiAhaXM8RWxlbWVudFR5cGU+KCpub2RlKSkKLSAgICAgICAgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUsIHN0YXlXaXRoaW4pOworICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUsIHN0YXlX
aXRoaW4pOwogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50VHlwZT4obm9kZSk7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50VHlwZSogVHJhdmVy
c2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZChjb25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50
KSB7IHJldHVybiBmaXJzdENoaWxkVGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBFbGVtZW50
VHlwZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZChjb25zdCBDb250YWluZXJO
b2RlJiBjdXJyZW50KSB7IHJldHVybiBmaXJzdENoaWxkVGVtcGxhdGUoY3VycmVudCk7IH0KIHRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50VHlwZSogVHJhdmVy
c2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZChjb25zdCBOb2RlKiBjdXJyZW50KSB7IHJldHVy
biBmaXJzdENoaWxkVGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBFbGVtZW50VHlwZSogVHJh
dmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZChjb25zdCBOb2RlJiBjdXJyZW50KSB7IHJl
dHVybiBmaXJzdENoaWxkVGVtcGxhdGUoY3VycmVudCk7IH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBF
bGVtZW50VHlwZT4KIAotaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+
OjpsYXN0Q2hpbGQoY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCkgeyByZXR1cm4gbGFzdENo
aWxkVGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVs
ZW1lbnRUeXBlPjo6bGFzdENoaWxkKGNvbnN0IENvbnRhaW5lck5vZGUmIGN1cnJlbnQpIHsgcmV0
dXJuIGxhc3RDaGlsZFRlbXBsYXRlKGN1cnJlbnQpOyB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxl
bWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudFR5cGUqIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Omxh
c3RDaGlsZChjb25zdCBOb2RlKiBjdXJyZW50KSB7IHJldHVybiBsYXN0Q2hpbGRUZW1wbGF0ZShj
dXJyZW50KTsgfQoraW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+Ojps
YXN0Q2hpbGQoY29uc3QgTm9kZSYgY3VycmVudCkgeyByZXR1cm4gbGFzdENoaWxkVGVtcGxhdGUo
Y3VycmVudCk7IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVs
ZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhpbihjb25zdCBDb250
YWluZXJOb2RlKiBjdXJyZW50KSB7IHJldHVybiBmaXJzdFdpdGhpblRlbXBsYXRlKGN1cnJlbnQp
OyB9CitpbmxpbmUgRWxlbWVudFR5cGUqIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0V2l0
aGluKGNvbnN0IENvbnRhaW5lck5vZGUmIGN1cnJlbnQpIHsgcmV0dXJuIGZpcnN0V2l0aGluVGVt
cGxhdGUoY3VycmVudCk7IH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGlu
ZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RXaXRoaW4oY29uc3Qg
Tm9kZSogY3VycmVudCkgeyByZXR1cm4gZmlyc3RXaXRoaW5UZW1wbGF0ZShjdXJyZW50KTsgfQor
aW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhpbihj
b25zdCBOb2RlJiBjdXJyZW50KSB7IHJldHVybiBmaXJzdFdpdGhpblRlbXBsYXRlKGN1cnJlbnQp
OyB9CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiAKLWlubGluZSBFbGVtZW50VHlw
ZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bGFzdFdpdGhpbihjb25zdCBDb250YWluZXJOb2Rl
KiBjdXJyZW50KSB7IHJldHVybiBsYXN0V2l0aGluVGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGlu
ZSBFbGVtZW50VHlwZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bGFzdFdpdGhpbihjb25zdCBD
b250YWluZXJOb2RlJiBjdXJyZW50KSB7IHJldHVybiBsYXN0V2l0aGluVGVtcGxhdGUoY3VycmVu
dCk7IH0KIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50VHlw
ZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bGFzdFdpdGhpbihjb25zdCBOb2RlKiBjdXJyZW50
KSB7IHJldHVybiBsYXN0V2l0aGluVGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBFbGVtZW50
VHlwZSogVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bGFzdFdpdGhpbihjb25zdCBOb2RlJiBjdXJy
ZW50KSB7IHJldHVybiBsYXN0V2l0aGluVGVtcGxhdGUoY3VycmVudCk7IH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxl
bWVudFR5cGU+OjpuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnQpIHsgcmV0dXJuIG5l
eHRUZW1wbGF0ZShjdXJyZW50KTsgfQoraW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxl
bWVudFR5cGU+OjpuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUmIGN1cnJlbnQpIHsgcmV0dXJuIG5l
eHRUZW1wbGF0ZShjdXJyZW50KTsgfQogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgot
aW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KGNvbnN0IE5v
ZGUqIGN1cnJlbnQpIHsgcmV0dXJuIG5leHRUZW1wbGF0ZShjdXJyZW50KTsgfQoraW5saW5lIEVs
ZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KGNvbnN0IE5vZGUmIGN1cnJl
bnQpIHsgcmV0dXJuIG5leHRUZW1wbGF0ZShjdXJyZW50KTsgfQogdGVtcGxhdGUgPHR5cGVuYW1l
IEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+
OjpuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4pIHsgcmV0dXJuIG5leHRUZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQoraW5saW5l
IEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KGNvbnN0IENvbnRhaW5l
ck5vZGUmIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIG5leHRUZW1w
bGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRU
eXBlPgotaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KGNv
bnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIG5leHRU
ZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQoraW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2
ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KGNvbnN0IE5vZGUmIGN1cnJlbnQsIGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4pIHsgcmV0dXJuIG5leHRUZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsg
fQogCiAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGdvIHNvbWV3aGVyZSBlbHNlLgotaW5saW5lIEVs
ZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNvbnN0IE5v
ZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCitpbmxpbmUgRWxlbWVudCogRWxl
bWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSYgY3VycmVu
dCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKIHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZl
cnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgc3RheVdpdGhpbik7CiAgICAg
d2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKG5vZGUsIHN0YXlXaXRoaW4pOworICAg
ICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oKm5vZGUs
IHN0YXlXaXRoaW4pOwogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KIAot
aW5saW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY29u
c3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK2lubGluZSBFbGVtZW50
KiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKGNvbnN0IE5vZGUmIGN1cnJl
bnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3VycmVudCwgc3RheVdpdGhpbik7CiAgICAgd2hp
bGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8obm9kZSwgc3RheVdpdGhpbik7CisgICAgICAgIG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKCpub2RlLCBzdGF5V2l0aGlu
KTsKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKLWlubGluZSBFbGVt
ZW50KiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJl
bihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoraW5saW5lIEVs
ZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxk
cmVuKGNvbnN0IE5vZGUmIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAg
Tm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0No
aWxkcmVuKGN1cnJlbnQsIHN0YXlXaXRoaW4pOwogICAgIHdoaWxlIChub2RlICYmICFpczxFbGVt
ZW50Pigqbm9kZSkpCi0gICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5n
UHNldWRvU2tpcHBpbmdDaGlsZHJlbihub2RlLCBzdGF5V2l0aGluKTsKKyAgICAgICAgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKCpub2Rl
LCBzdGF5V2l0aGluKTsKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAK
LWlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2li
bGluZyhjb25zdCBOb2RlKiBjdXJyZW50KQoraW5saW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJz
YWw6OnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUmIGN1cnJlbnQpCiB7Ci0g
ICAgTm9kZSogbm9kZSA9IGN1cnJlbnQtPnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKCk7Cisg
ICAgTm9kZSogbm9kZSA9IGN1cnJlbnQucHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKTsKICAg
ICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICBub2RlID0gbm9k
ZS0+cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKTsKICAgICByZXR1cm4gZG93bmNhc3Q8RWxl
bWVudD4obm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVT
aGVldE93bmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIu
Y3BwCmluZGV4IDVjMzYzODQyYjY5MTQ2NTllMTM0MGEzODE2N2FlN2NjY2M2Y2ZmMmEuLmVjNzc2
OGI4M2FkYzQ3MGZhN2UxMGQxNmNlNzUyYzg1M2EwNDA4Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgSW5s
aW5lU3R5bGVTaGVldE93bmVyOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oRWxlbWVudCYgZWxlbWVu
dCkKIAogdm9pZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0RnJvbVRleHRDb250
ZW50cyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIGNyZWF0ZVNoZWV0KGVsZW1lbnQsIFRleHRO
b2RlVHJhdmVyc2FsOjpjb250ZW50c0FzU3RyaW5nKCZlbGVtZW50KSk7CisgICAgY3JlYXRlU2hl
ZXQoZWxlbWVudCwgVGV4dE5vZGVUcmF2ZXJzYWw6OmNvbnRlbnRzQXNTdHJpbmcoZWxlbWVudCkp
OwogfQogCiB2b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6Y2xlYXJTaGVldCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKaW5kZXggYjBhMzdlMDBiZGIwNDA4NjBjY2QxYTM2MTI3YzRjOWJmNTViYTgyMy4uOWNj
M2FiZTU3Mjg1MzljODVhZGFjOWUyZmQ1MDQ3YWIxMjdkYjgwNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApA
QCAtNDc2LDcgKzQ3Niw3IEBAIHZvaWQgTm9kZTo6bm9ybWFsaXplKCkKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGlmICh0eXBlICE9IFRFWFRfTk9ERSkgewotICAgICAgICAgICAgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRQb3N0T3JkZXIobm9kZS5nZXQoKSk7CisgICAgICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFBvc3RPcmRlcigqbm9kZSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00ODUsNyArNDg1LDcgQEAgdm9pZCBOb2RlOjpu
b3JtYWxpemUoKQogICAgICAgICAvLyBSZW1vdmUgZW1wdHkgdGV4dCBub2Rlcy4KICAgICAgICAg
aWYgKCF0ZXh0LT5sZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gQ2FyZSBtdXN0IGJlIHRha2Vu
IHRvIGdldCB0aGUgbmV4dCBub2RlIGJlZm9yZSByZW1vdmluZyB0aGUgY3VycmVudCBub2RlLgot
ICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRQb3N0T3JkZXIobm9kZS5nZXQo
KSk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFBvc3RPcmRlcigqbm9k
ZSk7CiAgICAgICAgICAgICB0ZXh0LT5yZW1vdmUoSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgTm9kZTo6
bm9ybWFsaXplKCkKICAgICAgICAgICAgIG5leHRUZXh0LT5yZW1vdmUoSUdOT1JFX0VYQ0VQVElP
Tik7CiAgICAgICAgIH0KIAotICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFBvc3RP
cmRlcihub2RlLmdldCgpKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRQb3N0
T3JkZXIoKm5vZGUpOwogICAgIH0KIH0KIApAQCAtMTU5Nyw3ICsxNTk3LDcgQEAgdm9pZCBOb2Rl
OjpzaG93Tm9kZVBhdGhGb3JUaGlzKCkgY29uc3QKIAogc3RhdGljIHZvaWQgdHJhdmVyc2VUcmVl
QW5kTWFyayhjb25zdCBTdHJpbmcmIGJhc2VJbmRlbnQsIGNvbnN0IE5vZGUqIHJvb3ROb2RlLCBj
b25zdCBOb2RlKiBtYXJrZWROb2RlMSwgY29uc3QgY2hhciogbWFya2VkTGFiZWwxLCBjb25zdCBO
b2RlKiBtYXJrZWROb2RlMiwgY29uc3QgY2hhciogbWFya2VkTGFiZWwyKQogewotICAgIGZvciAo
Y29uc3QgTm9kZSogbm9kZSA9IHJvb3ROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlKSkgeworICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9IHJvb3ROb2RlOyBub2Rl
OyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUg
PT0gbWFya2VkTm9kZTEpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgbWFya2Vk
TGFiZWwxKTsKICAgICAgICAgaWYgKG5vZGUgPT0gbWFya2VkTm9kZTIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlSXRlcmF0b3IuY3BwCmluZGV4IDhiNmExNDg0MjQ3ZTM4MDBlNjU4M2I3ZjEzYjUxMGMwMWY1
ZDAzNWQuLjU4YjJiOWY2NGM3NmU3ZWM2OGE3NGZjZTZlZWM0NTc3NjhjNWZmYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgTm9kZUl0ZXJh
dG9yOjpOb2RlUG9pbnRlcjo6bW92ZVRvTmV4dChOb2RlKiByb290KQogICAgICAgICBpc1BvaW50
ZXJCZWZvcmVOb2RlID0gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpLCByb290KTsKKyAgICBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgcm9vdCk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAK
QEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBOb2RlSXRlcmF0b3I6Ok5vZGVQb2ludGVyOjptb3ZlVG9Q
cmV2aW91cyhOb2RlKiByb290KQogICAgICAgICBub2RlID0gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KLSAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9k
ZS5nZXQoKSk7CisgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKCpub2RlKTsKICAg
ICByZXR1cm4gbm9kZTsKIH0KIApAQCAtMTc1LDIyICsxNzUsMjIgQEAgdm9pZCBOb2RlSXRlcmF0
b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKE5vZGUmIHJlbW92ZWROb2RlLCBOb2RlUG9pbnRlciYg
cmVmZXJlbmMKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHJlZmVyZW5jZU5vZGUuaXNQb2lu
dGVyQmVmb3JlTm9kZSkgewotICAgICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dCgmcmVtb3ZlZE5vZGUsIHJvb3QoKSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KHJlbW92ZWROb2RlLCByb290KCkpOwogICAgICAgICBpZiAobm9kZSkgewogICAg
ICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlm
IHRoZSBuZXcgcmVmZXJlbmNlCiAgICAgICAgICAgICAvLyBub2RlIGlzIGEgZGVzY2VuZGFudCBv
ZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgogICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9k
ZS0+aXNEZXNjZW5kYW50T2YoJnJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCByb290KCkpOworICAgICAgICAgICAgICAgIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCByb290KCkpOwogICAgICAgICAgICAgaWYgKG5v
ZGUpCiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5ub2RlID0gbm9kZTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cygmcmVt
b3ZlZE5vZGUpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKHJl
bW92ZWROb2RlKTsKICAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICAgLy8g
TW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVu
Y2Ugbm9kZSBpcwogICAgICAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBi
ZWluZyByZW1vdmVkLgogICAgICAgICAgICAgICAgIGlmICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9k
ZUFuY2VzdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlz
RGVzY2VuZGFudE9mKCZyZW1vdmVkTm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoKm5vZGUpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBS
ZW1vdmluZyBsYXN0IG5vZGUuCkBAIC0yMDIsMjQgKzIwMiwyNCBAQCB2b2lkIE5vZGVJdGVyYXRv
cjo6dXBkYXRlRm9yTm9kZVJlbW92YWwoTm9kZSYgcmVtb3ZlZE5vZGUsIE5vZGVQb2ludGVyJiBy
ZWZlcmVuYwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
Tm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKCZyZW1vdmVkTm9kZSk7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhyZW1vdmVkTm9kZSk7CiAg
ICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAvLyBNb3ZlIG91dCBmcm9tIHVuZGVyIHRo
ZSBub2RlIGJlaW5nIHJlbW92ZWQgaWYgdGhlIHJlZmVyZW5jZSBub2RlIGlzCiAgICAgICAgICAg
ICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZC4KICAgICAgICAgICAg
IGlmICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKSB7CiAgICAgICAgICAgICAgICAg
d2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2YoJnJlbW92ZWROb2RlKSkKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoKm5vZGUpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAgICAgICAgcmVm
ZXJlbmNlTm9kZS5ub2RlID0gbm9kZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGJyYW5jaCBkb2Vzbid0IGFwcGVhciB0byBoYXZlIGFueSBMYXlvdXRUZXN0
cy4KLSAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCZyZW1vdmVkTm9kZSwg
cm9vdCgpKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHJlbW92ZWRO
b2RlLCByb290KCkpOwogICAgICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9k
ZSBiZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVuY2Ugbm9kZSBpcwogICAgICAgICAgICAgLy8g
YSBkZXNjZW5kYW50IG9mIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQuCiAgICAgICAgICAgICBpZiAo
d2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3RvcikgewogICAgICAgICAgICAgICAgIHdoaWxl
IChub2RlICYmIG5vZGUtPmlzRGVzY2VuZGFudE9mKCZyZW1vdmVkTm9kZSkpCi0gICAgICAgICAg
ICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhub2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKCpub2RlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlKQogICAgICAgICAgICAgICAgIHJlZmVyZW5j
ZU5vZGUubm9kZSA9IG5vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRy
YXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAKaW5kZXgg
ODUyOThiMDE2NWUzYTEyODc4Y2YwNjE3NTQyNWZlMGZmZDFmNzJlZS4uODMwMWU0YTM2MTY5YWNi
ZDYwODM1NzkwMzIxZmYyZWE3YTY0YmYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGVUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2Fs
LmNwcApAQCAtMzEsODEgKzMxLDgxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNl
IE5vZGVUcmF2ZXJzYWwgewogCi1Ob2RlKiBwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjb25zdCBO
b2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQorTm9kZSogcHJldmlvdXNJbmNs
dWRpbmdQc2V1ZG8oY29uc3QgTm9kZSYgY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikK
IHsKICAgICBOb2RlKiBwcmV2aW91czsKLSAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQor
ICAgIGlmICgmY3VycmVudCA9PSBzdGF5V2l0aGluKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAoKHByZXZpb3VzID0gY3VycmVudC0+cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmco
KSkpIHsKKyAgICBpZiAoKHByZXZpb3VzID0gY3VycmVudC5wc2V1ZG9Bd2FyZVByZXZpb3VzU2li
bGluZygpKSkgewogICAgICAgICB3aGlsZSAocHJldmlvdXMtPnBzZXVkb0F3YXJlTGFzdENoaWxk
KCkpCiAgICAgICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzLT5wc2V1ZG9Bd2FyZUxhc3RDaGls
ZCgpOwogICAgICAgICByZXR1cm4gcHJldmlvdXM7CiAgICAgfQotICAgIHJldHVybiBpczxQc2V1
ZG9FbGVtZW50PigqY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3VycmVudCku
aG9zdEVsZW1lbnQoKSA6IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICByZXR1cm4gaXM8UHNl
dWRvRWxlbWVudD4oY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PihjdXJyZW50KS5o
b3N0RWxlbWVudCgpIDogY3VycmVudC5wYXJlbnROb2RlKCk7CiB9CiAKLU5vZGUqIG5leHRJbmNs
dWRpbmdQc2V1ZG8oY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikK
K05vZGUqIG5leHRJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSYgY3VycmVudCwgY29uc3QgTm9k
ZSogc3RheVdpdGhpbikKIHsKICAgICBOb2RlKiBuZXh0OwotICAgIGlmICgobmV4dCA9IGN1cnJl
bnQtPnBzZXVkb0F3YXJlRmlyc3RDaGlsZCgpKSkKKyAgICBpZiAoKG5leHQgPSBjdXJyZW50LnBz
ZXVkb0F3YXJlRmlyc3RDaGlsZCgpKSkKICAgICAgICAgcmV0dXJuIG5leHQ7Ci0gICAgaWYgKGN1
cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICBpZiAoJmN1cnJlbnQgPT0gc3RheVdpdGhpbikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKChuZXh0ID0gY3VycmVudC0+cHNldWRvQXdh
cmVOZXh0U2libGluZygpKSkKKyAgICBpZiAoKG5leHQgPSBjdXJyZW50LnBzZXVkb0F3YXJlTmV4
dFNpYmxpbmcoKSkpCiAgICAgICAgIHJldHVybiBuZXh0OwotICAgIGN1cnJlbnQgPSBpczxQc2V1
ZG9FbGVtZW50PigqY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqY3VycmVudCku
aG9zdEVsZW1lbnQoKSA6IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKLSAgICBmb3IgKDsgY3VycmVu
dDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoY3VycmVu
dCA9PSBzdGF5V2l0aGluKQorICAgIGNvbnN0IE5vZGUqIGFuY2VzdG9yID0gaXM8UHNldWRvRWxl
bWVudD4oY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PihjdXJyZW50KS5ob3N0RWxl
bWVudCgpIDogY3VycmVudC5wYXJlbnROb2RlKCk7CisgICAgZm9yICg7IGFuY2VzdG9yOyBhbmNl
c3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yID09
IHN0YXlXaXRoaW4pCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKChu
ZXh0ID0gY3VycmVudC0+cHNldWRvQXdhcmVOZXh0U2libGluZygpKSkKKyAgICAgICAgaWYgKChu
ZXh0ID0gYW5jZXN0b3ItPnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gbmV4dDsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLU5vZGUqIG5leHRJ
bmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4pCitOb2RlKiBuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGls
ZHJlbihjb25zdCBOb2RlJiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQogewogICAg
IE5vZGUqIG5leHQ7Ci0gICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICBpZiAoJmN1
cnJlbnQgPT0gc3RheVdpdGhpbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKChu
ZXh0ID0gY3VycmVudC0+cHNldWRvQXdhcmVOZXh0U2libGluZygpKSkKKyAgICBpZiAoKG5leHQg
PSBjdXJyZW50LnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSkpCiAgICAgICAgIHJldHVybiBuZXh0
OwotICAgIGN1cnJlbnQgPSBpczxQc2V1ZG9FbGVtZW50PigqY3VycmVudCkgPyBkb3duY2FzdDxQ
c2V1ZG9FbGVtZW50PigqY3VycmVudCkuaG9zdEVsZW1lbnQoKSA6IGN1cnJlbnQtPnBhcmVudE5v
ZGUoKTsKLSAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUo
KSkgewotICAgICAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgIGNvbnN0IE5vZGUq
IGFuY2VzdG9yID0gaXM8UHNldWRvRWxlbWVudD4oY3VycmVudCkgPyBkb3duY2FzdDxQc2V1ZG9F
bGVtZW50PihjdXJyZW50KS5ob3N0RWxlbWVudCgpIDogY3VycmVudC5wYXJlbnROb2RlKCk7Cisg
ICAgZm9yICg7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsK
KyAgICAgICAgaWYgKGFuY2VzdG9yID09IHN0YXlXaXRoaW4pCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgaWYgKChuZXh0ID0gY3VycmVudC0+cHNldWRvQXdhcmVOZXh0U2li
bGluZygpKSkKKyAgICAgICAgaWYgKChuZXh0ID0gYW5jZXN0b3ItPnBzZXVkb0F3YXJlTmV4dFNp
YmxpbmcoKSkpCiAgICAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLU5vZGUqIG5leHRBbmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVu
dCkKK05vZGUqIG5leHRBbmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSYgY3VycmVudCkKIHsKLSAg
ICBBU1NFUlQoIWN1cnJlbnQtPm5leHRTaWJsaW5nKCkpOwotICAgIGZvciAoY3VycmVudCA9IGN1
cnJlbnQtPnBhcmVudE5vZGUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5v
ZGUoKSkgewotICAgICAgICBpZiAoY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAg
IHJldHVybiBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIEFTU0VSVCghY3VycmVudC5uZXh0
U2libGluZygpKTsKKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gY3VycmVudC5wYXJlbnROb2Rl
KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKGFuY2VzdG9yLT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGFuY2Vz
dG9yLT5uZXh0U2libGluZygpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50
LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQorTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25z
dCBOb2RlJiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQogewotICAgIEFTU0VSVCgh
Y3VycmVudC0+bmV4dFNpYmxpbmcoKSk7Ci0gICAgQVNTRVJUKGN1cnJlbnQgIT0gc3RheVdpdGhp
bik7Ci0gICAgZm9yIChjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50ID09
IHN0YXlXaXRoaW4pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKGN1cnJlbnQt
Pm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxpbmco
KTsKKyAgICBBU1NFUlQoIWN1cnJlbnQubmV4dFNpYmxpbmcoKSk7CisgICAgQVNTRVJUKCZjdXJy
ZW50ICE9IHN0YXlXaXRoaW4pOworICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSBjdXJyZW50LnBh
cmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkg
eworICAgICAgICBpZiAoYW5jZXN0b3IgPT0gc3RheVdpdGhpbikKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICBpZiAoYW5jZXN0b3ItPm5leHRTaWJsaW5nKCkpCisgICAgICAg
ICAgICByZXR1cm4gYW5jZXN0b3ItPm5leHRTaWJsaW5nKCk7CiAgICAgfQotICAgIHJldHVybiAw
OworICAgIHJldHVybiBudWxscHRyOwogfQogCi1Ob2RlKiBsYXN0KGNvbnN0IENvbnRhaW5lck5v
ZGUqIGN1cnJlbnQpCitOb2RlKiBsYXN0KGNvbnN0IENvbnRhaW5lck5vZGUmIGN1cnJlbnQpCiB7
Ci0gICAgTm9kZSogbm9kZSA9IGN1cnJlbnQtPmxhc3RDaGlsZCgpOworICAgIE5vZGUqIG5vZGUg
PSBjdXJyZW50Lmxhc3RDaGlsZCgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgd2hpbGUgKG5vZGUtPmxhc3RDaGlsZCgpKQpAQCAtMTEzLDY5ICsxMTMsNzAg
QEAgTm9kZSogbGFzdChjb25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50KQogICAgIHJldHVybiBu
b2RlOwogfQogCi1Ob2RlKiBkZWVwTGFzdENoaWxkKE5vZGUqIG5vZGUpCitOb2RlKiBkZWVwTGFz
dENoaWxkKE5vZGUmIG5vZGUpCiB7Ci0gICAgd2hpbGUgKG5vZGUtPmxhc3RDaGlsZCgpKQotICAg
ICAgICBub2RlID0gbm9kZS0+bGFzdENoaWxkKCk7Ci0gICAgcmV0dXJuIG5vZGU7CisgICAgTm9k
ZSogbGFzdENoaWxkID0gJm5vZGU7CisgICAgd2hpbGUgKGxhc3RDaGlsZC0+bGFzdENoaWxkKCkp
CisgICAgICAgIGxhc3RDaGlsZCA9IGxhc3RDaGlsZC0+bGFzdENoaWxkKCk7CisgICAgcmV0dXJu
IGxhc3RDaGlsZDsKIH0KIAotTm9kZSogcHJldmlvdXNTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5v
ZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCitOb2RlKiBwcmV2aW91c1NraXBw
aW5nQ2hpbGRyZW4oY29uc3QgTm9kZSYgY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikK
IHsKLSAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICAgIHJldHVybiBjdXJyZW50
LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRO
b2RlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAg
ICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBpZiAoY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4g
Y3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgaWYgKCZjdXJyZW50ID09IHN0YXlXaXRo
aW4pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChjdXJyZW50LnByZXZpb3VzU2li
bGluZygpKQorICAgICAgICByZXR1cm4gY3VycmVudC5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBm
b3IgKGF1dG8qIGFuY2VzdG9yID0gY3VycmVudC5wYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNl
c3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yID09
IHN0YXlXaXRoaW4pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKGFu
Y2VzdG9yLT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBhbmNlc3Rvci0+
cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1Ob2RlKiBuZXh0UG9zdE9yZGVyKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4pCitOb2RlKiBuZXh0UG9zdE9yZGVyKGNvbnN0IE5vZGUmIGN1cnJl
bnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7Ci0gICAgaWYgKGN1cnJlbnQgPT0gc3RheVdp
dGhpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFjdXJyZW50LT5uZXh0U2libGluZygp
KQotICAgICAgICByZXR1cm4gY3VycmVudC0+cGFyZW50Tm9kZSgpOwotICAgIE5vZGUqIG5leHQg
PSBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIGlmICgmY3VycmVudCA9PSBzdGF5V2l0aGlu
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWN1cnJlbnQubmV4dFNpYmxpbmco
KSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQucGFyZW50Tm9kZSgpOworICAgIE5vZGUqIG5leHQg
PSBjdXJyZW50Lm5leHRTaWJsaW5nKCk7CiAgICAgd2hpbGUgKG5leHQtPmZpcnN0Q2hpbGQoKSkK
ICAgICAgICAgbmV4dCA9IG5leHQtPmZpcnN0Q2hpbGQoKTsKICAgICByZXR1cm4gbmV4dDsKIH0K
IAotc3RhdGljIE5vZGUqIHByZXZpb3VzQW5jZXN0b3JTaWJsaW5nUG9zdE9yZGVyKGNvbnN0IE5v
ZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCitzdGF0aWMgTm9kZSogcHJldmlv
dXNBbmNlc3RvclNpYmxpbmdQb3N0T3JkZXIoY29uc3QgTm9kZSYgY3VycmVudCwgY29uc3QgTm9k
ZSogc3RheVdpdGhpbikKIHsKLSAgICBBU1NFUlQoIWN1cnJlbnQtPnByZXZpb3VzU2libGluZygp
KTsKLSAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7IGN1cnJlbnQ7IGN1
cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQgPT0g
c3RheVdpdGhpbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoY3VycmVudC0+
cHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudC0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgQVNTRVJUKCFjdXJyZW50LnByZXZpb3VzU2libGluZygpKTsKKyAgICBm
b3IgKGF1dG8qIGFuY2VzdG9yID0gY3VycmVudC5wYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNl
c3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yID09
IHN0YXlXaXRoaW4pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKGFu
Y2VzdG9yLT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBhbmNlc3Rvci0+
cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1Ob2RlKiBwcmV2aW91c1Bvc3RPcmRlcihjb25zdCBOb2RlKiBjdXJyZW50LCBj
b25zdCBOb2RlKiBzdGF5V2l0aGluKQorTm9kZSogcHJldmlvdXNQb3N0T3JkZXIoY29uc3QgTm9k
ZSYgY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKIHsKLSAgICBpZiAoY3VycmVudC0+
bGFzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBjdXJyZW50LT5sYXN0Q2hpbGQoKTsKLSAgICBp
ZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoY3Vy
cmVudC0+cHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICAgIHJldHVybiBjdXJyZW50LT5wcmV2aW91
c1NpYmxpbmcoKTsKKyAgICBpZiAoY3VycmVudC5sYXN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJu
IGN1cnJlbnQubGFzdENoaWxkKCk7CisgICAgaWYgKCZjdXJyZW50ID09IHN0YXlXaXRoaW4pCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChjdXJyZW50LnByZXZpb3VzU2libGluZygp
KQorICAgICAgICByZXR1cm4gY3VycmVudC5wcmV2aW91c1NpYmxpbmcoKTsKICAgICByZXR1cm4g
cHJldmlvdXNBbmNlc3RvclNpYmxpbmdQb3N0T3JkZXIoY3VycmVudCwgc3RheVdpdGhpbik7CiB9
CiAKLU5vZGUqIHByZXZpb3VzU2tpcHBpbmdDaGlsZHJlblBvc3RPcmRlcihjb25zdCBOb2RlKiBj
dXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQorTm9kZSogcHJldmlvdXNTa2lwcGluZ0No
aWxkcmVuUG9zdE9yZGVyKGNvbnN0IE5vZGUmIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4pCiB7Ci0gICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKQotICAgICAgICByZXR1cm4gY3Vy
cmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgaWYgKCZjdXJyZW50ID09IHN0YXlXaXRoaW4p
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChjdXJyZW50LnByZXZpb3VzU2libGlu
ZygpKQorICAgICAgICByZXR1cm4gY3VycmVudC5wcmV2aW91c1NpYmxpbmcoKTsKICAgICByZXR1
cm4gcHJldmlvdXNBbmNlc3RvclNpYmxpbmdQb3N0T3JkZXIoY3VycmVudCwgc3RheVdpdGhpbik7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCmluZGV4IGZiMTJmYTg5MDg5MzE1MDZj
NjZiNjNlMjVkZTk0ZjVmOTBkNWVlOGUuLjJjNDRiOGExMjNiMzc2M2IxZDNhOWMwZjg4ZjdmM2Y5
YzM5MWU1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuaApAQCAtMzUsOTYgKzM1LDk2
IEBAIG5hbWVzcGFjZSBOb2RlVHJhdmVyc2FsIHsKIC8vIFRoaXMgdXNlcyB0aGUgc2FtZSBvcmRl
ciB0aGF0IHRhZ3MgYXBwZWFyIGluIHRoZSBzb3VyY2UgZmlsZS4gSWYgdGhlIHN0YXlXaXRoaW4K
IC8vIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB0aGUgdHJhdmVyc2FsIHdpbGwgc3RvcCBvbmNlIHRo
ZSBzcGVjaWZpZWQgbm9kZSBpcyByZWFjaGVkLgogLy8gVGhpcyBjYW4gYmUgdXNlZCB0byByZXN0
cmljdCB0cmF2ZXJzYWwgdG8gYSBwYXJ0aWN1bGFyIHN1Yi10cmVlLgotTm9kZSogbmV4dChjb25z
dCBOb2RlKik7Ci1Ob2RlKiBuZXh0KGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGlu
KTsKLU5vZGUqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSopOwotTm9kZSogbmV4dChjb25zdCBD
b250YWluZXJOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7Ci1Ob2RlKiBuZXh0KGNvbnN0
IFRleHQqKTsKLU5vZGUqIG5leHQoY29uc3QgVGV4dCosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4p
OworTm9kZSogbmV4dChjb25zdCBOb2RlJik7CitOb2RlKiBuZXh0KGNvbnN0IE5vZGUmLCBjb25z
dCBOb2RlKiBzdGF5V2l0aGluKTsKK05vZGUqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSYpOwor
Tm9kZSogbmV4dChjb25zdCBDb250YWluZXJOb2RlJiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7
CitOb2RlKiBuZXh0KGNvbnN0IFRleHQmKTsKK05vZGUqIG5leHQoY29uc3QgVGV4dCYsIGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4pOwogCiAvLyBMaWtlIG5leHQsIGJ1dCBza2lwcyBjaGlsZHJlbiBh
bmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2libGluZy4KLU5vZGUqIG5leHRTa2lwcGluZ0NoaWxk
cmVuKGNvbnN0IE5vZGUqKTsKLU5vZGUqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUq
LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKK05vZGUqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNv
bnN0IE5vZGUmKTsKK05vZGUqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUmLCBjb25z
dCBOb2RlKiBzdGF5V2l0aGluKTsKIAogLy8gRG9lcyBhIHJldmVyc2UgcHJlLW9yZGVyIHRyYXZl
cnNhbCB0byBmaW5kIHRoZSBub2RlIHRoYXQgY29tZXMgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSBp
biBkb2N1bWVudCBvcmRlcgotTm9kZSogbGFzdChjb25zdCBDb250YWluZXJOb2RlKik7Ci1Ob2Rl
KiBwcmV2aW91cyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApOworTm9k
ZSogbGFzdChjb25zdCBDb250YWluZXJOb2RlJik7CitOb2RlKiBwcmV2aW91cyhjb25zdCBOb2Rl
JiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IG51bGxwdHIpOwogCiAvLyBMaWtlIHByZXZpb3Vz
LCBidXQgc2tpcHMgY2hpbGRyZW4gYW5kIHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHNpYmxpbmcuCi1O
b2RlKiBwcmV2aW91c1NraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4gPSAwKTsKK05vZGUqIHByZXZpb3VzU2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2Rl
JiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IG51bGxwdHIpOwogCiAvLyBMaWtlIG5leHQsIGJ1
dCB2aXNpdHMgcGFyZW50cyBhZnRlciB0aGVpciBjaGlsZHJlbi4KLU5vZGUqIG5leHRQb3N0T3Jk
ZXIoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsKK05vZGUqIG5leHRQ
b3N0T3JkZXIoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSBudWxscHRyKTsK
IAogLy8gTGlrZSBwcmV2aW91cy9wcmV2aW91c1NraXBwaW5nQ2hpbGRyZW4sIGJ1dCB2aXNpdHMg
cGFyZW50cyBiZWZvcmUgdGhlaXIgY2hpbGRyZW4uCi1Ob2RlKiBwcmV2aW91c1Bvc3RPcmRlcihj
b25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApOwotTm9kZSogcHJldmlvdXNT
a2lwcGluZ0NoaWxkcmVuUG9zdE9yZGVyKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0
aGluID0gMCk7CitOb2RlKiBwcmV2aW91c1Bvc3RPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9k
ZSogc3RheVdpdGhpbiA9IG51bGxwdHIpOworTm9kZSogcHJldmlvdXNTa2lwcGluZ0NoaWxkcmVu
UG9zdE9yZGVyKGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gbnVsbHB0cik7
CiAKIC8vIFByZS1vcmRlciB0cmF2ZXJzYWwgaW5jbHVkaW5nIHRoZSBwc2V1ZG8tZWxlbWVudHMu
Ci1Ob2RlKiBwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSog
PSAwKTsKLU5vZGUqIG5leHRJbmNsdWRpbmdQc2V1ZG8oY29uc3QgTm9kZSosIGNvbnN0IE5vZGUq
ID0gMCk7Ci1Ob2RlKiBuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihjb25zdCBO
b2RlKiwgY29uc3QgTm9kZSogPSAwKTsKK05vZGUqIHByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNv
bnN0IE5vZGUmLCBjb25zdCBOb2RlKiA9IG51bGxwdHIpOworTm9kZSogbmV4dEluY2x1ZGluZ1Bz
ZXVkbyhjb25zdCBOb2RlJiwgY29uc3QgTm9kZSogPSBudWxscHRyKTsKK05vZGUqIG5leHRJbmNs
dWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlKiA9IG51
bGxwdHIpOwogCiB9CiAKIG5hbWVzcGFjZSBOb2RlVHJhdmVyc2FsIHsKIAotV0VCQ09SRV9FWFBP
UlQgTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKik7Ci1XRUJDT1JFX0VYUE9S
VCBOb2RlKiBuZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5
V2l0aGluKTsKLVdFQkNPUkVfRVhQT1JUIE5vZGUqIGRlZXBMYXN0Q2hpbGQoTm9kZSopOworV0VC
Q09SRV9FWFBPUlQgTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlJik7CitXRUJD
T1JFX0VYUE9SVCBOb2RlKiBuZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUmLCBjb25zdCBO
b2RlKiBzdGF5V2l0aGluKTsKK1dFQkNPUkVfRVhQT1JUIE5vZGUqIGRlZXBMYXN0Q2hpbGQoTm9k
ZSYpOwogCiB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+Ci1pbmxpbmUgTm9kZSogdHJhdmVyc2VO
ZXh0VGVtcGxhdGUoTm9kZVR5cGUqIGN1cnJlbnQpCitpbmxpbmUgTm9kZSogdHJhdmVyc2VOZXh0
VGVtcGxhdGUoTm9kZVR5cGUmIGN1cnJlbnQpCiB7Ci0gICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hp
bGQoKSkKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICBpZiAoY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQtPm5leHRTaWJsaW5n
KCk7CisgICAgaWYgKGN1cnJlbnQuZmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gY3VycmVu
dC5maXJzdENoaWxkKCk7CisgICAgaWYgKGN1cnJlbnQubmV4dFNpYmxpbmcoKSkKKyAgICAgICAg
cmV0dXJuIGN1cnJlbnQubmV4dFNpYmxpbmcoKTsKICAgICByZXR1cm4gbmV4dEFuY2VzdG9yU2li
bGluZyhjdXJyZW50KTsKIH0KLWlubGluZSBOb2RlKiBuZXh0KGNvbnN0IE5vZGUqIGN1cnJlbnQp
IHsgcmV0dXJuIHRyYXZlcnNlTmV4dFRlbXBsYXRlKGN1cnJlbnQpOyB9Ci1pbmxpbmUgTm9kZSog
bmV4dChjb25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50KSB7IHJldHVybiB0cmF2ZXJzZU5leHRU
ZW1wbGF0ZShjdXJyZW50KTsgfQoraW5saW5lIE5vZGUqIG5leHQoY29uc3QgTm9kZSYgY3VycmVu
dCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0VGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBOb2Rl
KiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUmIGN1cnJlbnQpIHsgcmV0dXJuIHRyYXZlcnNlTmV4
dFRlbXBsYXRlKGN1cnJlbnQpOyB9CiAKIHRlbXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4KLWlubGlu
ZSBOb2RlKiB0cmF2ZXJzZU5leHRUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCwgY29uc3QgTm9k
ZSogc3RheVdpdGhpbikKK2lubGluZSBOb2RlKiB0cmF2ZXJzZU5leHRUZW1wbGF0ZShOb2RlVHlw
ZSYgY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKIHsKLSAgICBpZiAoY3VycmVudC0+
Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwotICAg
IGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChj
dXJyZW50LT5uZXh0U2libGluZygpKQotICAgICAgICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxp
bmcoKTsKKyAgICBpZiAoY3VycmVudC5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBjdXJy
ZW50LmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoJmN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGN1cnJlbnQubmV4dFNpYmxpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIGN1cnJlbnQubmV4dFNpYmxpbmcoKTsKICAgICByZXR1cm4gbmV4dEFuY2VzdG9y
U2libGluZyhjdXJyZW50LCBzdGF5V2l0aGluKTsKIH0KLWlubGluZSBOb2RlKiBuZXh0KGNvbnN0
IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNl
TmV4dFRlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9Ci1pbmxpbmUgTm9kZSogbmV4dChj
b25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7IHJl
dHVybiB0cmF2ZXJzZU5leHRUZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQoraW5saW5l
IE5vZGUqIG5leHQoY29uc3QgTm9kZSYgY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikg
eyByZXR1cm4gdHJhdmVyc2VOZXh0VGVtcGxhdGUoY3VycmVudCwgc3RheVdpdGhpbik7IH0KK2lu
bGluZSBOb2RlKiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUmIGN1cnJlbnQsIGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dFRlbXBsYXRlKGN1cnJlbnQsIHN0YXlX
aXRoaW4pOyB9CiAKLWlubGluZSBOb2RlKiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2Rl
KiBjdXJyZW50KQoraW5saW5lIE5vZGUqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUm
IGN1cnJlbnQpCiB7Ci0gICAgaWYgKGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHJl
dHVybiBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIGlmIChjdXJyZW50Lm5leHRTaWJsaW5n
KCkpCisgICAgICAgIHJldHVybiBjdXJyZW50Lm5leHRTaWJsaW5nKCk7CiAgICAgcmV0dXJuIG5l
eHRBbmNlc3RvclNpYmxpbmcoY3VycmVudCk7CiB9CiAKLWlubGluZSBOb2RlKiBuZXh0U2tpcHBp
bmdDaGlsZHJlbihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQor
aW5saW5lIE5vZGUqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUmIGN1cnJlbnQsIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7Ci0gICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIHJldHVybiBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIGlmICgmY3VycmVudCA9PSBz
dGF5V2l0aGluKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoY3VycmVudC5uZXh0
U2libGluZygpKQorICAgICAgICByZXR1cm4gY3VycmVudC5uZXh0U2libGluZygpOwogICAgIHJl
dHVybiBuZXh0QW5jZXN0b3JTaWJsaW5nKGN1cnJlbnQsIHN0YXlXaXRoaW4pOwogfQogCi1pbmxp
bmUgTm9kZSogbmV4dChjb25zdCBUZXh0KiBjdXJyZW50KSB7IHJldHVybiBuZXh0U2tpcHBpbmdD
aGlsZHJlbihjdXJyZW50KTsgfQotaW5saW5lIE5vZGUqIG5leHQoY29uc3QgVGV4dCogY3VycmVu
dCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gbmV4dFNraXBwaW5nQ2hpbGRyZW4o
Y3VycmVudCwgc3RheVdpdGhpbik7IH0KK2lubGluZSBOb2RlKiBuZXh0KGNvbnN0IFRleHQmIGN1
cnJlbnQpIHsgcmV0dXJuIG5leHRTa2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQpOyB9CitpbmxpbmUg
Tm9kZSogbmV4dChjb25zdCBUZXh0JiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7
IHJldHVybiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjdXJyZW50LCBzdGF5V2l0aGluKTsgfQogCi1p
bmxpbmUgTm9kZSogcHJldmlvdXMoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3Rh
eVdpdGhpbikKK2lubGluZSBOb2RlKiBwcmV2aW91cyhjb25zdCBOb2RlJiBjdXJyZW50LCBjb25z
dCBOb2RlKiBzdGF5V2l0aGluKQogewotICAgIGlmIChOb2RlKiBwcmV2aW91cyA9IGN1cnJlbnQt
PnByZXZpb3VzU2libGluZygpKQotICAgICAgICByZXR1cm4gZGVlcExhc3RDaGlsZChwcmV2aW91
cyk7Ci0gICAgaWYgKGN1cnJlbnQtPnBhcmVudE5vZGUoKSA9PSBzdGF5V2l0aGluKQorICAgIGlm
IChOb2RlKiBwcmV2aW91cyA9IGN1cnJlbnQucHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgIHJl
dHVybiBkZWVwTGFzdENoaWxkKCpwcmV2aW91cyk7CisgICAgaWYgKGN1cnJlbnQucGFyZW50Tm9k
ZSgpID09IHN0YXlXaXRoaW4pCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBj
dXJyZW50LT5wYXJlbnROb2RlKCk7CisgICAgcmV0dXJuIGN1cnJlbnQucGFyZW50Tm9kZSgpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCBlZjYzYzlkYjk0MWE2M2IxYWNmYjY0ZjE0MGI5
ZTdlMDhmYzQxZTFkLi40Y2UxMDJkNjg2YWQ4NGU4MDk3YzMzOWUyMDEyZTY3Y2YwMzM4OWEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5jcHAKQEAgLTEwNzEsNyArMTA3MSw3IEBAIFN0cmluZyBSYW5nZTo6dG9T
dHJpbmcoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwogCiAgICAgTm9kZSogcGFzdExhc3QgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUq
IG4gPSBmaXJzdE5vZGUoKTsgbiAhPSBwYXN0TGFzdDsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bikpIHsKKyAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdE5vZGUoKTsgbiAhPSBwYXN0TGFzdDsgbiA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm4pKSB7CiAgICAgICAgIGlmIChuLT5ub2RlVHlwZSgpID09
IE5vZGU6OlRFWFRfTk9ERSB8fCBuLT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05f
Tk9ERSkgewogICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q2hh
cmFjdGVyRGF0YSo+KG4pLT5kYXRhKCk7CiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gZGF0YS5s
ZW5ndGgoKTsKQEAgLTE1MTMsNyArMTUxMyw3IEBAIHZvaWQgUmFuZ2U6OmNoZWNrRGVsZXRlRXh0
cmFjdChFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBO
b2RlKiBwYXN0TGFzdCA9IHBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbiA9IGZpcnN0
Tm9kZSgpOyBuICE9IHBhc3RMYXN0OyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuKSkgeworICAg
IGZvciAoTm9kZSogbiA9IGZpcnN0Tm9kZSgpOyBuICE9IHBhc3RMYXN0OyBuID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqbikpIHsKICAgICAgICAgaWYgKG4tPmlzUmVhZE9ubHlOb2RlKCkpIHsKICAg
ICAgICAgICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTU0NiwxNCArMTU0NiwxNCBAQCBib29sIFJhbmdlOjpjb250YWluZWRCeVJl
YWRPbmx5KCkgY29uc3QKIE5vZGUqIFJhbmdlOjpmaXJzdE5vZGUoKSBjb25zdAogewogICAgIGlm
ICghbV9zdGFydC5jb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIGlmIChtX3N0YXJ0LmNvbnRhaW5lcigpLT5vZmZzZXRJbkNoYXJhY3Rl
cnMoKSkKICAgICAgICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyKCk7CiAgICAgaWYgKE5vZGUq
IGNoaWxkID0gbV9zdGFydC5jb250YWluZXIoKS0+dHJhdmVyc2VUb0NoaWxkQXQobV9zdGFydC5v
ZmZzZXQoKSkpCiAgICAgICAgIHJldHVybiBjaGlsZDsKICAgICBpZiAoIW1fc3RhcnQub2Zmc2V0
KCkpCiAgICAgICAgIHJldHVybiBtX3N0YXJ0LmNvbnRhaW5lcigpOwotICAgIHJldHVybiBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3N0YXJ0LmNvbnRhaW5lcigpKTsKKyAg
ICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm1fc3RhcnQuY29u
dGFpbmVyKCkpOwogfQogCiBTaGFkb3dSb290KiBSYW5nZTo6c2hhZG93Um9vdCgpIGNvbnN0CkBA
IC0xNTY0LDEyICsxNTY0LDEyIEBAIFNoYWRvd1Jvb3QqIFJhbmdlOjpzaGFkb3dSb290KCkgY29u
c3QKIE5vZGUqIFJhbmdlOjpwYXN0TGFzdE5vZGUoKSBjb25zdAogewogICAgIGlmICghbV9zdGFy
dC5jb250YWluZXIoKSB8fCAhbV9lbmQuY29udGFpbmVyKCkpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAobV9lbmQuY29udGFpbmVyKCktPm9mZnNl
dEluQ2hhcmFjdGVycygpKQotICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4obV9lbmQuY29udGFpbmVyKCkpOworICAgICAgICByZXR1cm4gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm1fZW5kLmNvbnRhaW5lcigpKTsKICAgICBpZiAo
Tm9kZSogY2hpbGQgPSBtX2VuZC5jb250YWluZXIoKS0+dHJhdmVyc2VUb0NoaWxkQXQobV9lbmQu
b2Zmc2V0KCkpKQogICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgcmV0dXJuIE5vZGVUcmF2ZXJz
YWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fZW5kLmNvbnRhaW5lcigpKTsKKyAgICByZXR1cm4g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm1fZW5kLmNvbnRhaW5lcigpKTsK
IH0KIAogSW50UmVjdCBSYW5nZTo6Ym91bmRpbmdCb3goKSBjb25zdApAQCAtMTU5OCw3ICsxNTk4
LDcgQEAgdm9pZCBSYW5nZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGJvb2wg
dXNlU2VsZWN0aW9uSGVpZ2h0LCBSYW5nZUluRmkKICAgICBib29sIHNvbWVGaXhlZCA9IGZhbHNl
OwogCiAgICAgTm9kZSogc3RvcE5vZGUgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9k
ZSAhPSBzdG9wTm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBp
ZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNjM0LDcgKzE2MzQsNyBA
QCB2b2lkIFJhbmdlOjp0ZXh0UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHVz
ZVNlbGVjdGlvbkhlaWdodCwgUmFuZ2VJbgogICAgIGJvb2wgc29tZUZpeGVkID0gZmFsc2U7CiAK
ICAgICBOb2RlKiBzdG9wTm9kZSA9IHBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9
IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICgh
cmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE3MTUsNyArMTcxNSw3IEBAIHZv
aWQgUmFuZ2U6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mIHJl
Y3RzKQogICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2RlKCk7CiAgICAgYm9vbCBoYXNG
bGlwcGVkV3JpdGluZ01vZGUgPSBzdGFydENvbnRhaW5lci0+cmVuZGVyZXIoKSAmJiBzdGFydENv
bnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
OwogICAgIGJvb2wgY29udGFpbnNEaWZmZXJlbnRXcml0aW5nTW9kZXMgPSBmYWxzZTsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAmJiBub2RlICE9IHN0b3BOb2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9
IGZpcnN0Tm9kZSgpOyBub2RlICYmIG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KCpub2RlKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKICAgICAgICAgLy8gT25seSBhc2sgbGVhZiByZW5kZXIgb2JqZWN0cyBm
b3IgdGhlaXIgbGluZSBib3ggcmVjdHMuCiAgICAgICAgIGlmIChyZW5kZXJlciAmJiAhcmVuZGVy
ZXItPmZpcnN0Q2hpbGRTbG93KCkgJiYgcmVuZGVyZXItPnN0eWxlKCkudXNlclNlbGVjdCgpICE9
IFNFTEVDVF9OT05FKSB7CkBAIC0yMTk3LDcgKzIxOTcsNyBAQCB2b2lkIFJhbmdlOjpnZXRCb3Jk
ZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKSBjb25zdAogICAgIE5vZGUq
IHN0b3BOb2RlID0gcGFzdExhc3ROb2RlKCk7CiAKICAgICBIYXNoU2V0PE5vZGUqPiBzZWxlY3Rl
ZEVsZW1lbnRzU2V0OwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9
IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAgIGZvciAo
Tm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUo
KSkKICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNTZXQuYWRkKG5vZGUpOwogICAgIH0KQEAg
LTIyMDcsNyArMjIwNyw3IEBAIHZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYgcXVhZHMpIGNvbnN0CiAgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBsYXN0
Tm9kZS0+cGFyZW50Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgp
KQogICAgICAgICBzZWxlY3RlZEVsZW1lbnRzU2V0LnJlbW92ZShwYXJlbnQpOwogCi0gICAgZm9y
IChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2Rl
KCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkg
ewogICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpICYmIHNlbGVjdGVkRWxlbWVudHNTZXQu
Y29udGFpbnMobm9kZSkgJiYgIXNlbGVjdGVkRWxlbWVudHNTZXQuY29udGFpbnMobm9kZS0+cGFy
ZW50Tm9kZSgpKSkgewogICAgICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5k
ZXJCb3hNb2RlbE9iamVjdCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5yZW5kZXJCb3hNb2Rl
bE9iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gZWxlbWVudFF1
YWRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IGY4ZGM3MGE4MDQ0NzBj
NzU2YjM5ZjVkMDAxZmQxZDIyY2Y1YzAwZDEuLmM3MzFiODc0ZmI2ZGYwNDgyMDUzMzFhYzczNmY5
ODBhNDQ0MTZlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKQEAgLTM3Nyw3
ICszNzcsNyBAQCBib29sIFNjcmlwdEVsZW1lbnQ6OmlzU2NyaXB0Rm9yRXZlbnRTdXBwb3J0ZWQo
KSBjb25zdAogCiBTdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0Q29udGVudCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFRleHROb2RlVHJhdmVyc2FsOjpjb250ZW50c0FzU3RyaW5nKCZtX2VsZW1l
bnQpOworICAgIHJldHVybiBUZXh0Tm9kZVRyYXZlcnNhbDo6Y29udGVudHNBc1N0cmluZyhtX2Vs
ZW1lbnQpOwogfQogCiBTY3JpcHRFbGVtZW50KiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKEVs
ZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9v
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKaW5kZXggZWJmYTRjYWM5
NjliNDQwODdmNjBkMWU5ZjgwMmEwMTViMWE4ZDQ0OC4uZTkzZmRiZjI3ZGRkYWY2ZmQzOTYzNzhj
NDAzY2VlYTkyODlmNzRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jv
b3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcApAQCAtMTM5LDcg
KzEzOSw3IEBAIFJlZlB0cjxOb2RlPiBTaGFkb3dSb290OjpjbG9uZU5vZGVJbnRlcm5hbChEb2N1
bWVudCYsIENsb25pbmdPcGVyYXRpb24pCiB2b2lkIFNoYWRvd1Jvb3Q6OnJlbW92ZUFsbEV2ZW50
TGlzdGVuZXJzKCkKIHsKICAgICBEb2N1bWVudEZyYWdtZW50OjpyZW1vdmVBbGxFdmVudExpc3Rl
bmVycygpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpCisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RD
aGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpCiAgICAgICAg
IG5vZGUtPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRl
eCBhMWUwY2FiY2E1YzBiYzZjOWY0ZDExZGU2ZDdkNGI3YTUwYjRjNGUzLi5mOTBmMDNmYjFlZDlk
YzBjNmU2MTkwNjRkMDM3NWI3OGU4MmFiMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC0xMTEsMTAg
KzExMSwxMSBAQCBTdHJpbmcgVGV4dDo6d2hvbGVUZXh0KCkgY29uc3QKIHsKICAgICBjb25zdCBU
ZXh0KiBzdGFydFRleHQgPSBlYXJsaWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUodGhpcyk7
CiAgICAgY29uc3QgVGV4dCogZW5kVGV4dCA9IGxhdGVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5v
ZGUodGhpcyk7Ci0gICAgY29uc3QgTm9kZSogb25lUGFzdEVuZFRleHQgPSBUZXh0Tm9kZVRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcoZW5kVGV4dCk7CisgICAgQVNTRVJUKGVuZFRleHQpOworICAgIGNv
bnN0IE5vZGUqIG9uZVBhc3RFbmRUZXh0ID0gVGV4dE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5n
KCplbmRUZXh0KTsKIAogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIGZvciAoY29uc3Qg
VGV4dCogdGV4dCA9IHN0YXJ0VGV4dDsgdGV4dCAhPSBvbmVQYXN0RW5kVGV4dDsgdGV4dCA9IFRl
eHROb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyh0ZXh0KSkKKyAgICBmb3IgKGNvbnN0IFRleHQq
IHRleHQgPSBzdGFydFRleHQ7IHRleHQgIT0gb25lUGFzdEVuZFRleHQ7IHRleHQgPSBUZXh0Tm9k
ZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRleHQpKQogICAgICAgICByZXN1bHQuYXBwZW5kKHRl
eHQtPmRhdGEoKSk7CiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNhbC5jcHAKaW5kZXggYWUyM2IzMTkyNTgwYmNmMTczOTc1
OGUyNGYzOTAzMGZhYjBjMmQzOC4uMTEyYTI4NDg2MmRiODk0NGQ1YTBhMTI1MmUwY2RlMjhkZDNi
NmU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dE5vZGVUcmF2ZXJzYWwuY3BwCkBAIC0zMiwy
NSArMzIsMjQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBUZXh0Tm9kZVRyYXZl
cnNhbCB7CiAKLXZvaWQgYXBwZW5kQ29udGVudHMoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCwg
U3RyaW5nQnVpbGRlciYgcmVzdWx0KQordm9pZCBhcHBlbmRDb250ZW50cyhjb25zdCBDb250YWlu
ZXJOb2RlJiByb290LCBTdHJpbmdCdWlsZGVyJiByZXN1bHQpCiB7Ci0gICAgZm9yIChUZXh0KiB0
ZXh0ID0gVGV4dE5vZGVUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHJvb3QpOyB0ZXh0OyB0ZXh0ID0g
VGV4dE5vZGVUcmF2ZXJzYWw6Om5leHQodGV4dCwgcm9vdCkpCisgICAgZm9yIChUZXh0KiB0ZXh0
ID0gVGV4dE5vZGVUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHJvb3QpOyB0ZXh0OyB0ZXh0ID0gVGV4
dE5vZGVUcmF2ZXJzYWw6Om5leHQoKnRleHQsICZyb290KSkKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh0ZXh0LT5kYXRhKCkpOwogfQogCi1TdHJpbmcgY29udGVudHNBc1N0cmluZyhjb25zdCBDb250
YWluZXJOb2RlKiByb290KQorU3RyaW5nIGNvbnRlbnRzQXNTdHJpbmcoY29uc3QgQ29udGFpbmVy
Tm9kZSYgcm9vdCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBhcHBlbmRDb250
ZW50cyhyb290LCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAot
U3RyaW5nIGNvbnRlbnRzQXNTdHJpbmcoY29uc3QgTm9kZSogcm9vdCkKK1N0cmluZyBjb250ZW50
c0FzU3RyaW5nKGNvbnN0IE5vZGUmIHJvb3QpCiB7Ci0gICAgQVNTRVJUKHJvb3QpOwotICAgIGlm
IChpczxUZXh0Pigqcm9vdCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxUZXh0Pigqcm9vdCku
ZGF0YSgpOwotICAgIGlmIChpczxDb250YWluZXJOb2RlPigqcm9vdCkpCisgICAgaWYgKGlzPFRl
eHQ+KHJvb3QpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dD4ocm9vdCkuZGF0YSgpOwor
ICAgIGlmIChpczxDb250YWluZXJOb2RlPihyb290KSkKICAgICAgICAgcmV0dXJuIGNvbnRlbnRz
QXNTdHJpbmcoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocm9vdCkpOwogICAgIHJldHVybiBTdHJp
bmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0Tm9kZVRyYXZlcnNh
bC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2FsLmgKaW5kZXggOGJhYjdi
MWU2Njk2MzM5OWEwZWJmMjYwZGE1NzUwNGUxMWFjNTcyNy4uMzk3YzgwNjIxN2ZjOGY0ZmFhMDdk
NDQ0ZDU1MWE1OWMzZTkxNDBjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHRO
b2RlVHJhdmVyc2FsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHROb2RlVHJhdmVyc2Fs
LmgKQEAgLTM3LDc4ICszNyw3OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgVGV4
dE5vZGVUcmF2ZXJzYWwgewogCiAvLyBGaXJzdCB0ZXh0IGNoaWxkIG9mIHRoZSBub2RlLgotVGV4
dCogZmlyc3RDaGlsZChjb25zdCBOb2RlKik7Ci1UZXh0KiBmaXJzdENoaWxkKGNvbnN0IENvbnRh
aW5lck5vZGUqKTsKK1RleHQqIGZpcnN0Q2hpbGQoY29uc3QgTm9kZSYpOworVGV4dCogZmlyc3RD
aGlsZChjb25zdCBDb250YWluZXJOb2RlJik7CiAKIC8vIEZpcnN0IHRleHQgZGVzY2VuZGFudCBv
ZiB0aGUgbm9kZS4KLVRleHQqIGZpcnN0V2l0aGluKGNvbnN0IE5vZGUqKTsKLVRleHQqIGZpcnN0
V2l0aGluKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKK1RleHQqIGZpcnN0V2l0aGluKGNvbnN0IE5v
ZGUmKTsKK1RleHQqIGZpcnN0V2l0aGluKGNvbnN0IENvbnRhaW5lck5vZGUmKTsKIAogLy8gUHJl
LW9yZGVyIHRyYXZlcnNhbCBza2lwcGluZyBub24tdGV4dCBub2Rlcy4KLVRleHQqIG5leHQoY29u
c3QgTm9kZSopOwotVGV4dCogbmV4dChjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhp
bik7Ci1UZXh0KiBuZXh0KGNvbnN0IFRleHQqKTsKLVRleHQqIG5leHQoY29uc3QgVGV4dCosIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pOworVGV4dCogbmV4dChjb25zdCBOb2RlJik7CitUZXh0KiBu
ZXh0KGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKK1RleHQqIG5leHQoY29u
c3QgVGV4dCYpOworVGV4dCogbmV4dChjb25zdCBUZXh0JiwgY29uc3QgTm9kZSogc3RheVdpdGhp
bik7CiAKIC8vIE5leHQgdGV4dCBzaWJsaW5nLgotVGV4dCogbmV4dFNpYmxpbmcoY29uc3QgTm9k
ZSopOworVGV4dCogbmV4dFNpYmxpbmcoY29uc3QgTm9kZSYpOwogCiAvLyBDb25jYXRlbmF0ZWQg
dGV4dCBjb250ZW50cyBvZiBhIHN1YnRyZWUuCi1TdHJpbmcgY29udGVudHNBc1N0cmluZyhjb25z
dCBOb2RlKik7Ci1TdHJpbmcgY29udGVudHNBc1N0cmluZyhjb25zdCBDb250YWluZXJOb2RlKik7
Ci12b2lkIGFwcGVuZENvbnRlbnRzKGNvbnN0IENvbnRhaW5lck5vZGUqLCBTdHJpbmdCdWlsZGVy
JiByZXN1bHQpOworU3RyaW5nIGNvbnRlbnRzQXNTdHJpbmcoY29uc3QgTm9kZSYpOworU3RyaW5n
IGNvbnRlbnRzQXNTdHJpbmcoY29uc3QgQ29udGFpbmVyTm9kZSYpOwordm9pZCBhcHBlbmRDb250
ZW50cyhjb25zdCBDb250YWluZXJOb2RlJiwgU3RyaW5nQnVpbGRlciYgcmVzdWx0KTsKIAogfQog
CiBuYW1lc3BhY2UgVGV4dE5vZGVUcmF2ZXJzYWwgewogCiB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5
cGU+Ci1pbmxpbmUgVGV4dCogZmlyc3RUZXh0Q2hpbGRUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVu
dCkKK2lubGluZSBUZXh0KiBmaXJzdFRleHRDaGlsZFRlbXBsYXRlKE5vZGVUeXBlJiBjdXJyZW50
KQogewotICAgIE5vZGUqIG5vZGUgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgTm9kZSog
bm9kZSA9IGN1cnJlbnQuZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0
Pigqbm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgIHJldHVy
biBkb3duY2FzdDxUZXh0Pihub2RlKTsKIH0KLWlubGluZSBUZXh0KiBmaXJzdENoaWxkKGNvbnN0
IE5vZGUqIGN1cnJlbnQpIHsgcmV0dXJuIGZpcnN0VGV4dENoaWxkVGVtcGxhdGUoY3VycmVudCk7
IH0KLWlubGluZSBUZXh0KiBmaXJzdENoaWxkKGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnQp
IHsgcmV0dXJuIGZpcnN0VGV4dENoaWxkVGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBUZXh0
KiBmaXJzdENoaWxkKGNvbnN0IE5vZGUmIGN1cnJlbnQpIHsgcmV0dXJuIGZpcnN0VGV4dENoaWxk
VGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBUZXh0KiBmaXJzdENoaWxkKGNvbnN0IENvbnRh
aW5lck5vZGUmIGN1cnJlbnQpIHsgcmV0dXJuIGZpcnN0VGV4dENoaWxkVGVtcGxhdGUoY3VycmVu
dCk7IH0KIAogdGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgotaW5saW5lIFRleHQqIGZpcnN0VGV4
dFdpdGhpblRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQoraW5saW5lIFRleHQqIGZpcnN0VGV4
dFdpdGhpblRlbXBsYXRlKE5vZGVUeXBlJiBjdXJyZW50KQogewotICAgIE5vZGUqIG5vZGUgPSBj
dXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgTm9kZSogbm9kZSA9IGN1cnJlbnQuZmlyc3RDaGls
ZCgpOwogICAgIHdoaWxlIChub2RlICYmICFpczxUZXh0Pigqbm9kZSkpCi0gICAgICAgIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGN1cnJlbnQpOworICAgICAgICBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgJmN1cnJlbnQpOwogICAgIHJldHVybiBkb3duY2FzdDxU
ZXh0Pihub2RlKTsKIH0KLWlubGluZSBUZXh0KiBmaXJzdFdpdGhpbihjb25zdCBOb2RlKiBjdXJy
ZW50KSB7IHJldHVybiBmaXJzdFRleHRXaXRoaW5UZW1wbGF0ZShjdXJyZW50KTsgfQotaW5saW5l
IFRleHQqIGZpcnN0V2l0aGluKGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnQpIHsgcmV0dXJu
IGZpcnN0VGV4dFdpdGhpblRlbXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUgVGV4dCogZmlyc3RX
aXRoaW4oY29uc3QgTm9kZSYgY3VycmVudCkgeyByZXR1cm4gZmlyc3RUZXh0V2l0aGluVGVtcGxh
dGUoY3VycmVudCk7IH0KK2lubGluZSBUZXh0KiBmaXJzdFdpdGhpbihjb25zdCBDb250YWluZXJO
b2RlJiBjdXJyZW50KSB7IHJldHVybiBmaXJzdFRleHRXaXRoaW5UZW1wbGF0ZShjdXJyZW50KTsg
fQogCiB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+Ci1pbmxpbmUgVGV4dCogdHJhdmVyc2VOZXh0
VGV4dFRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQoraW5saW5lIFRleHQqIHRyYXZlcnNlTmV4
dFRleHRUZW1wbGF0ZShOb2RlVHlwZSYgY3VycmVudCkKIHsKICAgICBOb2RlKiBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50KTsKICAgICB3aGlsZSAobm9kZSAmJiAhaXM8VGV4dD4o
Km5vZGUpKQotICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKKyAgICAg
ICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpOwogICAgIHJldHVybiBkb3duY2Fz
dDxUZXh0Pihub2RlKTsKIH0KLWlubGluZSBUZXh0KiBuZXh0KGNvbnN0IE5vZGUqIGN1cnJlbnQp
IHsgcmV0dXJuIHRyYXZlcnNlTmV4dFRleHRUZW1wbGF0ZShjdXJyZW50KTsgfQotaW5saW5lIFRl
eHQqIG5leHQoY29uc3QgVGV4dCogY3VycmVudCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0VGV4dFRl
bXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUgVGV4dCogbmV4dChjb25zdCBOb2RlJiBjdXJyZW50
KSB7IHJldHVybiB0cmF2ZXJzZU5leHRUZXh0VGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBU
ZXh0KiBuZXh0KGNvbnN0IFRleHQmIGN1cnJlbnQpIHsgcmV0dXJuIHRyYXZlcnNlTmV4dFRleHRU
ZW1wbGF0ZShjdXJyZW50KTsgfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+Ci1pbmxpbmUg
VGV4dCogdHJhdmVyc2VOZXh0VGV4dFRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50LCBjb25zdCBO
b2RlKiBzdGF5V2l0aGluKQoraW5saW5lIFRleHQqIHRyYXZlcnNlTmV4dFRleHRUZW1wbGF0ZShO
b2RlVHlwZSYgY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKIHsKICAgICBOb2RlKiBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBzdGF5V2l0aGluKTsKICAgICB3aGls
ZSAobm9kZSAmJiAhaXM8VGV4dD4oKm5vZGUpKQotICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlLCBzdGF5V2l0aGluKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQoKm5vZGUsIHN0YXlXaXRoaW4pOwogICAgIHJldHVybiBkb3duY2FzdDxUZXh0Pihub2Rl
KTsKIH0KLWlubGluZSBUZXh0KiBuZXh0KGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dFRleHRUZW1wbGF0ZShjdXJyZW50LCBz
dGF5V2l0aGluKTsgfQotaW5saW5lIFRleHQqIG5leHQoY29uc3QgVGV4dCogY3VycmVudCwgY29u
c3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVyc2VOZXh0VGV4dFRlbXBsYXRlKGN1
cnJlbnQsIHN0YXlXaXRoaW4pOyB9CitpbmxpbmUgVGV4dCogbmV4dChjb25zdCBOb2RlJiBjdXJy
ZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7IHJldHVybiB0cmF2ZXJzZU5leHRUZXh0VGVt
cGxhdGUoY3VycmVudCwgc3RheVdpdGhpbik7IH0KK2lubGluZSBUZXh0KiBuZXh0KGNvbnN0IFRl
eHQmIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4
dFRleHRUZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQogCi1pbmxpbmUgVGV4dCogbmV4
dFNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCkKK2lubGluZSBUZXh0KiBuZXh0U2libGluZyhj
b25zdCBOb2RlJiBjdXJyZW50KQogewotICAgIE5vZGUqIG5vZGUgPSBjdXJyZW50LT5uZXh0U2li
bGluZygpOworICAgIE5vZGUqIG5vZGUgPSBjdXJyZW50Lm5leHRTaWJsaW5nKCk7CiAgICAgd2hp
bGUgKG5vZGUgJiYgIWlzPFRleHQ+KCpub2RlKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHRT
aWJsaW5nKCk7CiAgICAgcmV0dXJuIGRvd25jYXN0PFRleHQ+KG5vZGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCmluZGV4IDBmMTc1Mjc3ZWMwOWFkOWYyMzgzZDk5OTg0
ZGRiMjc0ZDM1NjY0OWUuLjRmZjBjNmY3Yzc1NDk5NGMxNTU1MzdmYmVhMmYzOWJkNjgyMmZkNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAKQEAgLTQ5LDcgKzQ5LDcg
QEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcGUoTm9kZSogcm9vdCkg
Y29uc3QKICAgICAgICAgb2xkRG9jdW1lbnQuaW5jRE9NVHJlZVZlcnNpb24oKTsKICAgICB9CiAK
LSAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlLCByb290KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCByb290KSkgewogICAgICAgICB1cGRhdGVU
cmVlU2NvcGUobm9kZSk7CiAKICAgICAgICAgaWYgKHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkKQEAg
LTgyLDcgKzgyLDcgQEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcGUo
Tm9kZSogcm9vdCkgY29uc3QKIAogdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlU2hhZG93VHJl
ZVRvTmV3RG9jdW1lbnQoU2hhZG93Um9vdCogc2hhZG93Um9vdCwgRG9jdW1lbnQqIG9sZERvY3Vt
ZW50LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpIGNvbnN0CiB7Ci0gICAgZm9yIChOb2RlKiBub2Rl
ID0gc2hhZG93Um9vdDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgc2hh
ZG93Um9vdCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaGFkb3dSb290OyBub2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgc2hhZG93Um9vdCkpIHsKICAgICAgICAgbW92
ZU5vZGVUb05ld0RvY3VtZW50KG5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CiAgICAg
ICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3cgPSBub2RlLT5zaGFkb3dSb290KCkpCiAgICAgICAg
ICAgICBtb3ZlU2hhZG93VHJlZVRvTmV3RG9jdW1lbnQoc2hhZG93LCBvbGREb2N1bWVudCwgbmV3
RG9jdW1lbnQpOwpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVT
aGFkb3dUcmVlVG9OZXdEb2N1bWVudChTaGFkb3dSb290KiBzaGFkb3dSb290LCBEb2N1bQogCiAj
aWZuZGVmIE5ERUJVRwogc3RhdGljIGJvb2wgZGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQg
PSBmYWxzZTsKLXN0YXRpYyBEb2N1bWVudCogb2xkRG9jdW1lbnREaWRNb3ZlVG9OZXdEb2N1bWVu
dFdhc0NhbGxlZFdpdGggPSAwOworc3RhdGljIERvY3VtZW50KiBvbGREb2N1bWVudERpZE1vdmVU
b05ld0RvY3VtZW50V2FzQ2FsbGVkV2l0aCA9IG51bGxwdHI7CiAKIHZvaWQgVHJlZVNjb3BlQWRv
cHRlcjo6ZW5zdXJlRGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQoRG9jdW1lbnQqIG9sZERv
Y3VtZW50KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCmluZGV4IDE3NThhYjI0NGZkNGIz
ZDRiOTQxYmZlM2MyOTI0ZDVmMTg4OWIzMTEuLjRjYjJlYmI4MWMyY2UyN2MxYzYwOGJmOGE5Zjhm
YWJmN2FlMzk4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKQEAgLTI1NywyMyArMjU3
LDIzIEBAIENoaWxkcmVuOgogICAgICAgICBub2RlID0gZmlyc3RDaGlsZDsKICAgICAgICAgc2hv
cnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOwogICAg
ICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaWYgKGFjY2VwdE5v
ZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVy
biBzZXRDdXJyZW50KG5vZGUucmVsZWFzZSgpKTsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1
bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVCkKICAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICB3aGlsZSAoTm9kZSogbmV4dFNpYmxpbmcgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbihub2RlLmdldCgpLCByb290KCkpKSB7CisgICAgd2hpbGUgKE5vZGUqIG5l
eHRTaWJsaW5nID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUsIHJv
b3QoKSkpIHsKICAgICAgICAgbm9kZSA9IG5leHRTaWJsaW5nOwogICAgICAgICBzaG9ydCBhY2Nl
cHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CiAgICAgICAgIGlm
IChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3Vs
dCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIHNldEN1
cnJlbnQobm9kZS5yZWxlYXNlKCkpOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBO
b2RlRmlsdGVyOjpGSUxURVJfU0tJUCkKICAgICAgICAgICAgIGdvdG8gQ2hpbGRyZW47CiAgICAg
fQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHlwZWRFbGVtZW50RGVz
Y2VuZGFudEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHlwZWRFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yLmgKaW5kZXggOTRlZTNjMDk0OTVhZWQ3OTk1Y2NhNDFjNzBhM2FhNmIxMGJm
MjFjZS4uMGUyMjUxZTZmN2NiMDk0YzU1NWIyYTllNTBkMzhiNmQxMDhmYzhjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaApA
QCAtMTMzLDcgKzEzMyw3IEBAIGlubGluZSBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JB
ZGFwdGVyPEVsZW1lbnRUeXBlPjo6VHlwZWRFbGVtZW50RGVzY2VuZGFuCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9y
PEVsZW1lbnRUeXBlPiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1l
bnRUeXBlPjo6YmVnaW4oKQogewotICAgIHJldHVybiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRl
cmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RX
aXRoaW4oJm1fcm9vdCkpOworICAgIHJldHVybiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0
b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RXaXRo
aW4obV9yb290KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KQEAgLTE1
NSwyMCArMTU1LDIwIEBAIGlubGluZSBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxl
bWVudFR5cGU+IFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvCiAgICAgQVNTRVJUKGRlc2Nl
bmRhbnQuaXNEZXNjZW5kYW50T2YoJm1fcm9vdCkpOwogICAgIGlmIChpczxFbGVtZW50VHlwZT4o
ZGVzY2VuZGFudCkpCiAgICAgICAgIHJldHVybiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0
b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgZG93bmNhc3Q8RWxlbWVudFR5cGU+KCZkZXNjZW5kYW50
KSk7Ci0gICAgRWxlbWVudFR5cGUqIG5leHQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0
KCZkZXNjZW5kYW50LCAmbV9yb290KTsKKyAgICBFbGVtZW50VHlwZSogbmV4dCA9IFRyYXZlcnNh
bDxFbGVtZW50VHlwZT46Om5leHQoZGVzY2VuZGFudCwgJm1fcm9vdCk7CiAgICAgcmV0dXJuIFR5
cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBuZXh0KTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogaW5saW5lIEVsZW1lbnRUeXBl
KiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6Zmly
c3QoKQogewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhpbigm
bV9yb290KTsKKyAgICByZXR1cm4gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RXaXRoaW4o
bV9yb290KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogaW5saW5lIEVs
ZW1lbnRUeXBlKiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRU
eXBlPjo6bGFzdCgpCiB7Ci0gICAgcmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Omxhc3RX
aXRoaW4oJm1fcm9vdCk7CisgICAgcmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Omxhc3RX
aXRoaW4obV9yb290KTsKIH0KIAogLy8gVHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0
b3JBZGFwdGVyCkBAIC0xODIsNyArMTgyLDcgQEAgaW5saW5lIFR5cGVkRWxlbWVudERlc2NlbmRh
bnRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OlR5cGVkRWxlbWVudERlc2MKIHRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KIGlubGluZSBUeXBlZEVsZW1lbnREZXNjZW5k
YW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4gVHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0
SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6YmVnaW4oKSBjb25zdAogewotICAgIHJldHVy
biBUeXBlZEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9yb290
LCBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhpbigmbV9yb290KSk7CisgICAgcmV0
dXJuIFR5cGVkRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jv
b3QsIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0V2l0aGluKG1fcm9vdCkpOwogfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CkBAIC0yMDQsMjAgKzIwNCwyMCBAQCBpbmxp
bmUgVHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IFR5cGVk
RWxlbWVudERlc2NlbmRhbnRDbwogICAgIEFTU0VSVChkZXNjZW5kYW50LmlzRGVzY2VuZGFudE9m
KCZtX3Jvb3QpKTsKICAgICBpZiAoaXM8RWxlbWVudFR5cGU+KGRlc2NlbmRhbnQpKQogICAgICAg
ICByZXR1cm4gVHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+
KG1fcm9vdCwgZG93bmNhc3Q8RWxlbWVudFR5cGU+KCZkZXNjZW5kYW50KSk7Ci0gICAgY29uc3Qg
RWxlbWVudFR5cGUqIG5leHQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KCZkZXNjZW5k
YW50LCAmbV9yb290KTsKKyAgICBjb25zdCBFbGVtZW50VHlwZSogbmV4dCA9IFRyYXZlcnNhbDxF
bGVtZW50VHlwZT46Om5leHQoZGVzY2VuZGFudCwgJm1fcm9vdCk7CiAgICAgcmV0dXJuIFR5cGVk
RWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIG5leHQp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgY29uc3QgRWxl
bWVudFR5cGUqIFR5cGVkRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVt
ZW50VHlwZT46OmZpcnN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gVHJhdmVyc2FsPEVsZW1lbnRU
eXBlPjo6Zmlyc3RXaXRoaW4oJm1fcm9vdCk7CisgICAgcmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50
VHlwZT46OmZpcnN0V2l0aGluKG1fcm9vdCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVt
ZW50VHlwZT4KIGlubGluZSBjb25zdCBFbGVtZW50VHlwZSogVHlwZWRFbGVtZW50RGVzY2VuZGFu
dENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6bGFzdCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Omxhc3RXaXRoaW4oJm1fcm9vdCk7CisgICAg
cmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Omxhc3RXaXRoaW4obV9yb290KTsKIH0KIAog
Ly8gU3RhbmRhbG9uZSBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKaW5kZXggNWNjZjkyZGE1OWQ5OTMyZTA2N2ZhMjE0M2Y1YTkxOTIwYTJj
Nzk0NS4uYWQzZDk1NDNlZGY5NDUwYzgyZTc4YTgzYTQzMjc0ZDFjOTdhOWJjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTM1OSwyNiArMzU5
LDI2IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFu
Z2UoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAvLyBhbiBhbmNlc3RvciBvZiB0aGUgc3RhcnQg
bm9kZSksIHdlIGdhdGhlciBub2RlcyB1cCB0byB0aGUgbmV4dCBzaWJsaW5nIG9mIHRoZSBlbmQg
bm9kZQogICAgIE5vZGUgKmJleW9uZEVuZDsKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KS0+aXNEZXNjZW5kYW50T2YoZW5kLmRlcHJlY2F0ZWROb2RlKCkpKQotICAgICAgICBiZXlvbmRF
bmQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihlbmQuZGVwcmVjYXRlZE5v
ZGUoKSk7CisgICAgICAgIGJleW9uZEVuZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKCplbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgZWxzZQotICAgICAgICBiZXlvbmRF
bmQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGVuZC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAg
YmV5b25kRW5kID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqZW5kLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgIAogICAgIHN0YXJ0ID0gc3RhcnQudXBzdHJlYW0oKTsgLy8gTW92ZSB1cHN0cmVhbSB0byBl
bnN1cmUgd2UgZG8gbm90IGFkZCByZWR1bmRhbnQgc3BhbnMuCiAgICAgTm9kZSogc3RhcnROb2Rl
ID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2Rl
KCkgJiYgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChz
dGFydE5vZGUpKSAvLyBNb3ZlIG91dCBvZiB0ZXh0IG5vZGUgaWYgcmFuZ2UgZG9lcyBub3QgaW5j
bHVkZSBpdHMgY2hhcmFjdGVycy4KLSAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChzdGFydE5vZGUpOworICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KCpzdGFydE5vZGUpOwogCiAgICAgLy8gU3RvcmUgYXdheSBmb250IHNpemUgYmVmb3JlIG1ha2lu
ZyBhbnkgY2hhbmdlcyB0byB0aGUgZG9jdW1lbnQuCiAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQg
Y2hhbmdlcyB0byBvbmUgbm9kZSB3b24ndCBlZmZlY3QgYW5vdGhlci4KICAgICBIYXNoTWFwPE5v
ZGUqLCBmbG9hdD4gc3RhcnRpbmdGb250U2l6ZXM7Ci0gICAgZm9yIChOb2RlICpub2RlID0gc3Rh
cnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZSkpCisgICAgZm9yIChOb2RlICpub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKQogICAgICAgICBzdGFydGluZ0ZvbnRT
aXplcy5zZXQobm9kZSwgY29tcHV0ZWRGb250U2l6ZShub2RlKSk7CiAKICAgICAvLyBUaGVzZSBz
cGFucyB3ZXJlIGFkZGVkIGJ5IHVzLiBJZiBlbXB0eSBhZnRlciBmb250IHNpemUgY2hhbmdlcywg
dGhleSBjYW4gYmUgcmVtb3ZlZC4KICAgICBWZWN0b3I8UmVmUHRyPEhUTUxFbGVtZW50Pj4gdW5z
dHlsZWRTcGFuczsKICAgICAKICAgICBOb2RlKiBsYXN0U3R5bGVkTm9kZSA9IDA7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7
IG5vZGUgIT0gYmV5b25kRW5kOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsK
ICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50OwogICAgICAgICBpZiAoaXM8SFRN
TEVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICAgICAgLy8gT25seSB3b3JrIG9uIGZ1bGx5IHNl
bGVjdGVkIG5vZGVzLgpAQCAtNjgzLDE5ICs2ODMsMTkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0
IFAKICAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAg
aWYgKHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChzdGFydE5vZGUpOworICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KCpzdGFydE5vZGUpOwogICAgICAgICBpZiAoIXN0YXJ0Tm9kZSB8fCBjb21wYXJlUG9zaXRp
b25zKGVuZCwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0Tm9kZSkpIDwgMCkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBOb2RlKiBwYXN0RW5kTm9kZSA9IGVuZC5k
ZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+
PSBjYXJldE1heE9mZnNldChlbmQuZGVwcmVjYXRlZE5vZGUoKSkpCi0gICAgICAgIHBhc3RFbmRO
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZW5kLmRlcHJlY2F0ZWRO
b2RlKCkpOworICAgICAgICBwYXN0RW5kTm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGlu
Z0NoaWxkcmVuKCplbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAKICAgICAvLyBGSVhNRTogQ2FsbGVy
cyBzaG91bGQgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBvbiBhIFJhbmdlIHRoYXQgaW5jbHVkZXMg
dGhlIGJyCiAgICAgLy8gaWYgdGhleSB3YW50IHN0eWxlIGFwcGxpZWQgdG8gdGhlIGVtcHR5IGxp
bmUuCiAgICAgaWYgKHN0YXJ0ID09IGVuZCAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5oYXNU
YWdOYW1lKGJyVGFnKSkKLSAgICAgICAgcGFzdEVuZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICBwYXN0RW5kTm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogCiAgICAgLy8gU3RhcnQgZnJv
bSB0aGUgaGlnaGVzdCBmdWxseSBzZWxlY3RlZCBhbmNlc3RvciBzbyB0aGF0IHdlIGNhbiBtb2Rp
ZnkgdGhlIGZ1bGx5IHNlbGVjdGVkIG5vZGUuCiAgICAgLy8gZS5nLiBXaGVuIGFwcGx5aW5nIGZv
bnQtc2l6ZTogbGFyZ2Ugb24gPGZvbnQgY29sb3I9ImJsdWUiPmhlbGxvPC9mb250Piwgd2UgbmVl
ZCB0byBpbmNsdWRlIHRoZSBmb250IGVsZW1lbnQgaW4gb3VyIHJ1bgpAQCAtNzEwLDE0ICs3MTAs
MTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxl
KEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFAKICAgICBhcHBseUlubGluZVN0eWxlVG9Ob2Rl
UmFuZ2Uoc3R5bGUsIHN0YXJ0Tm9kZSwgcGFzdEVuZE5vZGUpOwogfQogCi1zdGF0aWMgYm9vbCBj
b250YWluc05vbkVkaXRhYmxlUmVnaW9uKE5vZGUqIG5vZGUpCitzdGF0aWMgYm9vbCBjb250YWlu
c05vbkVkaXRhYmxlUmVnaW9uKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5oYXNFZGl0
YWJsZVN0eWxlKCkpCisgICAgaWYgKCFub2RlLmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBOb2RlKiBzaWJsaW5nID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNr
aXBwaW5nQ2hpbGRyZW4obm9kZSk7Ci0gICAgZm9yIChOb2RlKiBkZXNjZW5kZW50ID0gbm9kZS0+
Zmlyc3RDaGlsZCgpOyBkZXNjZW5kZW50ICYmIGRlc2NlbmRlbnQgIT0gc2libGluZzsgZGVzY2Vu
ZGVudCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoZGVzY2VuZGVudCkpIHsKLSAgICAgICAgaWYgKCFk
ZXNjZW5kZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCisgICAgZm9yIChOb2RlKiBkZXNjZW5kYW50
ID0gbm9kZS5maXJzdENoaWxkKCk7IGRlc2NlbmRhbnQgJiYgZGVzY2VuZGFudCAhPSBzaWJsaW5n
OyBkZXNjZW5kYW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqZGVzY2VuZGFudCkpIHsKKyAgICAg
ICAgaWYgKCFkZXNjZW5kYW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc1Niw3ICs3NTYsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjphcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgUGFz
c1JlZgogICAgIFZlY3RvcjxJbmxpbmVSdW5Ub0FwcGx5U3R5bGU+IHJ1bnM7CiAgICAgUmVmUHRy
PE5vZGU+IG5vZGUgPSBzdGFydE5vZGU7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbmV4dDsgbm9k
ZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gbmV4dCkgewotICAgICAgICBuZXh0ID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpKTsKKyAgICAgICAgbmV4dCA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm5vZGUpOwogCiAgICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAh
bm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC03NzMs
NyArNzczLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9k
ZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWYKICAgICAgICAgICAgIGlmIChNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzKiBvdGhlclN0eWxlID0gc3R5bGUtPnN0eWxlKCkpCiAgICAgICAg
ICAgICAgICAgaW5saW5lU3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KCpvdGhlclN0
eWxlKTsKICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIHN0eWxlQXR0ciwg
aW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKLSAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLmdldCgpKTsKKyAgICAgICAgICAgIG5leHQgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTc4MSwxMCArNzgxLDEwIEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5
bGUqIHN0eWxlLCBQYXNzUmVmCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVzKCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5j
b250YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkgfHwgY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbihu
b2RlLmdldCgpKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCisg
ICAgICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUuZ2V0KCkpIHx8IGNvbnRh
aW5zTm9uRWRpdGFibGVSZWdpb24oKm5vZGUpIHx8ICFub2RlLT5wYXJlbnROb2RlKCktPmhhc0Vk
aXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlm
IChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBu
ZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KCpub2RlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtNzkyLDE1ICs3OTIsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWYKICAgICAg
ICAgTm9kZSogcnVuU3RhcnQgPSBub2RlLmdldCgpOwogICAgICAgICBOb2RlKiBydW5FbmQgPSBu
b2RlLmdldCgpOwogICAgICAgICBOb2RlKiBzaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsK
LSAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgc2libGluZyAhPSBwYXN0RW5kTm9kZSAmJiAhc2li
bGluZy0+Y29udGFpbnMocGFzdEVuZE5vZGUuZ2V0KCkpCi0gICAgICAgICAgICAgICAmJiAoIWlz
QmxvY2soc2libGluZykgfHwgc2libGluZy0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgICAg
ICAgICAmJiAhY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbihzaWJsaW5nKSkgeworICAgICAgICB3
aGlsZSAoc2libGluZyAmJiBzaWJsaW5nICE9IHBhc3RFbmROb2RlICYmICFzaWJsaW5nLT5jb250
YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkgJiYgKCFpc0Jsb2NrKHNpYmxpbmcpIHx8IHNpYmxpbmct
Pmhhc1RhZ05hbWUoYnJUYWcpKSAmJiAhY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbigqc2libGlu
ZykpIHsKICAgICAgICAgICAgIHJ1bkVuZCA9IHNpYmxpbmc7CiAgICAgICAgICAgICBzaWJsaW5n
ID0gcnVuRW5kLT5uZXh0U2libGluZygpOwogICAgICAgICB9Ci0gICAgICAgIG5leHQgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihydW5FbmQpOworICAgICAgICBuZXh0ID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKnJ1bkVuZCk7CiAKLSAgICAgICAg
Tm9kZSogcGFzdEVuZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihy
dW5FbmQpOworICAgICAgICBOb2RlKiBwYXN0RW5kTm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuKCpydW5FbmQpOwogICAgICAgICBpZiAoIXNob3VsZEFwcGx5SW5saW5l
U3R5bGVUb1J1bihzdHlsZSwgcnVuU3RhcnQsIHBhc3RFbmROb2RlKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCkBAIC04MzcsNyArODM1LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hv
dWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5vZGUqIHIKIHsK
ICAgICBBU1NFUlQoc3R5bGUgJiYgcnVuU3RhcnQpOwogCi0gICAgZm9yIChOb2RlKiBub2RlID0g
cnVuU3RhcnQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBydW5TdGFydDsgbm9kZSAm
JiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkp
IHsKICAgICAgICAgaWYgKG5vZGUtPmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAvLyBXZSBkb24ndCBjb25zaWRlciBtX2lzSW5saW5lRWxlbWVudFRvUmVt
b3ZlRnVuY3Rpb24gaGVyZSBiZWNhdXNlIHdlIG5ldmVyIGFwcGx5IHN0eWxlIHdoZW4gbV9pc0lu
bGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uIGlzIHNwZWNpZmllZApAQCAtODU2LDkgKzg1NCw5
IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVG
cm9tUnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsCiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9
IG5leHQ7IG5vZGUgJiYgbm9kZS0+aW5Eb2N1bWVudCgpICYmIG5vZGUgIT0gcGFzdEVuZE5vZGU7
IG5vZGUgPSBuZXh0KSB7CiAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZS5n
ZXQoKSkpIHsKICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUu
Z2V0KCkpKTsKLSAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihub2RlLmdldCgpKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
bmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7CisgICAgICAgICAgICBuZXh0
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7CiAKICAgICAgICAgaWYgKCFpczxIVE1MRWxl
bWVudD4oKm5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMTE5LDMwICsxMTE3LDMw
IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHls
ZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uICZzCiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Owog
ICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQobm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSB8fCAhbm9kZS0+Y29udGFp
bnMoZW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKLSAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLmdldCgpKTsKKyAgICAgICAgICAgIG5leHQg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7CiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7
CisgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7CiAKICAgICAg
ICAgaWYgKGlzPEhUTUxFbGVtZW50Pigqbm9kZSkgJiYgbm9kZUZ1bGx5U2VsZWN0ZWQobm9kZS5n
ZXQoKSwgc3RhcnQsIGVuZCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxl
bSA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlLmdldCgpKTsKLSAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBwcmV2ID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNQb3N0T3JkZXIoZWxlbS5nZXQo
KSk7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
ZWxlbS5nZXQoKSk7CisgICAgICAgICAgICBSZWY8SFRNTEVsZW1lbnQ+IGVsZW0gPSBkb3duY2Fz
dDxIVE1MRWxlbWVudD4oKm5vZGUpOworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHByZXYgPSBO
b2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihlbGVtKTsKKyAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChlbGVtKTsKICAgICAgICAgICAgIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlVG9QdXNoRG93bjsKICAgICAgICAgICAgIFJlZlB0cjxO
b2RlPiBjaGlsZE5vZGU7Ci0gICAgICAgICAgICBpZiAoaXNTdHlsZWRJbmxpbmVFbGVtZW50VG9S
ZW1vdmUoZWxlbS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc1N0eWxlZElubGluZUVsZW1l
bnRUb1JlbW92ZShlbGVtLnB0cigpKSkgewogICAgICAgICAgICAgICAgIHN0eWxlVG9QdXNoRG93
biA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0g
ZWxlbS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZW1vdmVJ
bmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBlbGVtLmdldCgpLCBSZW1vdmVJZk5lZWRlZCwg
c3R5bGVUb1B1c2hEb3duLmdldCgpKTsKKyAgICAgICAgICAgIHJlbW92ZUlubGluZVN0eWxlRnJv
bUVsZW1lbnQoc3R5bGUsIGVsZW0ucHRyKCksIFJlbW92ZUlmTmVlZGVkLCBzdHlsZVRvUHVzaERv
d24uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKCFlbGVtLT5pbkRvY3VtZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAocy5kZXByZWNhdGVkTm9kZSgpID09IGVsZW0pIHsKKyAgICAgICAgICAg
ICAgICBpZiAocy5kZXByZWNhdGVkTm9kZSgpID09IGVsZW0ucHRyKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gU2luY2UgZWxlbSBtdXN0IGhhdmUgYmVlbiBmdWxseSBzZWxlY3RlZCwgYW5k
IGl0IGlzIGF0IHRoZSBzdGFydAogICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgc2VsZWN0
aW9uLCBpdCBpcyBjbGVhciB3ZSBjYW4gc2V0IHRoZSBuZXcgcyBvZmZzZXQgdG8gMC4KICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHMuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlv
bklzQmVmb3JlQW5jaG9yIHx8IHMub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPD0gMCk7CiAgICAg
ICAgICAgICAgICAgICAgIHMgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobmV4dC5nZXQo
KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlLmRlcHJlY2F0ZWRO
b2RlKCkgPT0gZWxlbSkgeworICAgICAgICAgICAgICAgIGlmIChlLmRlcHJlY2F0ZWROb2RlKCkg
PT0gZWxlbS5wdHIoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3Qg
aGF2ZSBiZWVuIGZ1bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIGVuZAogICAgICAgICAg
ICAgICAgICAgICAvLyBvZiB0aGUgc2VsZWN0aW9uLCBpdCBpcyBjbGVhciB3ZSBjYW4gc2V0IHRo
ZSBuZXcgZSBvZmZzZXQgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1heCByYW5nZSBv
ZmZzZXQgb2YgcHJldi4KQEAgLTE1MjUsNyArMTUyMyw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmpvaW5DaGlsZFRleHROb2RlcyhOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQs
IGNvCiAgICAgUG9zaXRpb24gbmV3RW5kID0gZW5kOwogCiAgICAgVmVjdG9yPFJlZlB0cjxUZXh0
Pj4gdGV4dE5vZGVzOwotICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNh
bDo6Zmlyc3RDaGlsZChub2RlKTsgdGV4dE5vZGU7IHRleHROb2RlID0gVGV4dE5vZGVUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nKHRleHROb2RlKSkKKyAgICBmb3IgKFRleHQqIHRleHROb2RlID0gVGV4
dE5vZGVUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQoKm5vZGUpOyB0ZXh0Tm9kZTsgdGV4dE5vZGUgPSBU
ZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRleHROb2RlKSkKICAgICAgICAgdGV4dE5v
ZGVzLmFwcGVuZCh0ZXh0Tm9kZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRleHRO
b2Rlcy5zaXplKCk7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9C
cmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtC
bG9ja3F1b3RlQ29tbWFuZC5jcHAKaW5kZXggZjZmYjRhYWZmNjc2OTg1YmJjMWUwY2QyMzVkODZj
ODJkNzdkZTliOC4uNTE1ZjFhMDExOWY0MDIxMzM1YTg1ZjRjOWNhZGRmNTE1ZGMxNjQ5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3Bw
CkBAIC0xMDksMTMgKzEwOSwxMyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBw
bHkoKQogICAgIGlmIChpczxUZXh0Pigqc3RhcnROb2RlKSkgewogICAgICAgICBUZXh0JiB0ZXh0
Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpzdGFydE5vZGUpOwogICAgICAgICBpZiAoKHVuc2lnbmVk
KXBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IHRleHROb2RlLmxlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7Cisg
ICAgICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpzdGFydE5vZGUpOwog
ICAgICAgICAgICAgQVNTRVJUKHN0YXJ0Tm9kZSk7CiAgICAgICAgIH0gZWxzZSBpZiAocG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwKQogICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSgm
dGV4dE5vZGUsIHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICB9IGVsc2UgaWYg
KHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCkgewogICAgICAgICBOb2RlKiBjaGls
ZEF0T2Zmc2V0ID0gc3RhcnROb2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChwb3MuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSk7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IGNoaWxkQXRPZmZzZXQgPyBjaGls
ZEF0T2Zmc2V0IDogTm9kZVRyYXZlcnNhbDo6bmV4dChzdGFydE5vZGUpOworICAgICAgICBzdGFy
dE5vZGUgPSBjaGlsZEF0T2Zmc2V0ID8gY2hpbGRBdE9mZnNldCA6IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoKnN0YXJ0Tm9kZSk7CiAgICAgICAgIEFTU0VSVChzdGFydE5vZGUpOwogICAgIH0KICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5k
ZXggNmUwMzNiOWE5MzFlZjU3NjYxZGI3ZWM0Njc1ZDdjNzdhYjM3YzkxYS4uOWRjMTMwODg5M2U4
NTFkMTA0NmRjNGQ2NmJiZDA2N2Q5MjYxZjllNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTg1OSw3ICs4NTksNyBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dChjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxSZWZQdHI8VGV4
dD4+IG5vZGVzOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7
IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CisgICAgZm9yIChOb2Rl
KiBub2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChpczxUZXh0Pigqbm9kZSkpCiAgICAgICAg
ICAgICBub2Rlcy5hcHBlbmQoZG93bmNhc3Q8VGV4dD4obm9kZSkpOwogICAgICAgICBpZiAobm9k
ZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSkKQEAgLTEwNzEsNyArMTA3MSw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0cjxOb2RlPiBzdGFydE5v
ZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICBmb3IgKFJlZlB0cjxOb2RlPiBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oc3RhcnROb2RlLmdldCgp
LCBvdXRlck5vZGUuZ2V0KCkpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4obm9kZS5nZXQoKSwgb3V0ZXJOb2RlLmdldCgpKSkgeworICAgICAgICBmb3Ig
KFJlZlB0cjxOb2RlPiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4o
KnN0YXJ0Tm9kZSwgb3V0ZXJOb2RlLmdldCgpKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2RlLCBvdXRlck5vZGUuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICAvLyBNb3ZlIGxhc3ROb2RlIHVwIGluIHRoZSB0cmVlIGFzIG11Y2ggYXMgbm9kZSB3YXMg
bW92ZWQgdXAgaW4gdGhlCiAgICAgICAgICAgICAvLyB0cmVlIGJ5IE5vZGVUcmF2ZXJzYWw6Om5l
eHRTa2lwcGluZ0NoaWxkcmVuLCBzbyB0aGF0IHRoZSByZWxhdGl2ZSBkZXB0aCBiZXR3ZWVuCiAg
ICAgICAgICAgICAvLyBub2RlIGFuZCB0aGUgb3JpZ2luYWwgc3RhcnQgbm9kZSBpcyBtYWludGFp
bmVkIGluIHRoZSBjbG9uZS4KQEAgLTEzNTAsOCArMTM1MCw4IEBAIGJvb2wgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCkKICAgICBpZiAoIW5ld0Jsb2NrKQog
ICAgICAgICBuZXdCbG9jayA9IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50KGRvY3VtZW50
KCkpOwogCi0gICAgUmVmUHRyPE5vZGU+IHByZXZpb3VzTGlzdE5vZGUgPSBlbXB0eUxpc3RJdGVt
LT5pc0VsZW1lbnROb2RlKCkgPyBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZW1w
dHlMaXN0SXRlbS5nZXQoKSk6IGVtcHR5TGlzdEl0ZW0tPnByZXZpb3VzU2libGluZygpOwotICAg
IFJlZlB0cjxOb2RlPiBuZXh0TGlzdE5vZGUgPSBlbXB0eUxpc3RJdGVtLT5pc0VsZW1lbnROb2Rl
KCkgPyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhlbXB0eUxpc3RJdGVtLmdldCgpKTog
ZW1wdHlMaXN0SXRlbS0+bmV4dFNpYmxpbmcoKTsKKyAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNM
aXN0Tm9kZSA9IGVtcHR5TGlzdEl0ZW0tPmlzRWxlbWVudE5vZGUoKSA/IEVsZW1lbnRUcmF2ZXJz
YWw6OnByZXZpb3VzU2libGluZygqZW1wdHlMaXN0SXRlbSk6IGVtcHR5TGlzdEl0ZW0tPnByZXZp
b3VzU2libGluZygpOworICAgIFJlZlB0cjxOb2RlPiBuZXh0TGlzdE5vZGUgPSBlbXB0eUxpc3RJ
dGVtLT5pc0VsZW1lbnROb2RlKCkgPyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqZW1w
dHlMaXN0SXRlbSk6IGVtcHR5TGlzdEl0ZW0tPm5leHRTaWJsaW5nKCk7CiAgICAgaWYgKGlzTGlz
dEl0ZW0obmV4dExpc3ROb2RlLmdldCgpKSB8fCBpc0xpc3RFbGVtZW50KG5leHRMaXN0Tm9kZS5n
ZXQoKSkpIHsKICAgICAgICAgLy8gSWYgZW1wdHlMaXN0SXRlbSBmb2xsb3dzIGFub3RoZXIgbGlz
dCBpdGVtIG9yIG5lc3RlZCBsaXN0LCBzcGxpdCB0aGUgbGlzdCBub2RlLgogICAgICAgICBpZiAo
aXNMaXN0SXRlbShwcmV2aW91c0xpc3ROb2RlLmdldCgpKSB8fCBpc0xpc3RFbGVtZW50KHByZXZp
b3VzTGlzdE5vZGUuZ2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNWJiYzMxMmNhNTQzZDc2MGM3NDcxNDdjZGM5ZDc1
MTllNGI2NGVjMy4uMmJiYzZlZGYyZWM3ZTk5YTE5ZTRjYzg3MzM5YzU2NjQ5MWE0ODBhMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CkBAIC0zNDQsNyArMzQ0LDcgQEAgc3RhdGljIFBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlv
bkluTm9kZShOb2RlKiBub2RlKQogICAgIEFTU0VSVChub2RlKTsKICAgICBOb2RlKiBuZXh0ID0g
bm9kZTsKICAgICB3aGlsZSAobmV4dCAmJiAhbmV4dC0+aGFzRWRpdGFibGVTdHlsZSgpKQotICAg
ICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuZXh0LCBub2RlKTsKKyAgICAgICAgbmV4
dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5leHQsIG5vZGUpOwogICAgIHJldHVybiBuZXh0ID8g
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5leHQpIDogUG9zaXRpb24oKTsKIH0KIApAQCAt
NDM2LDkgKzQzNiw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZVN0eWxpbmdF
bGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByCiAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBS
ZWZQdHI8Tm9kZT4gbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsKICAgICB3aGlsZSAobm9kZSAm
JiBub2RlICE9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4g
bmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkpOworICAgICAgICBSZWZQ
dHI8Tm9kZT4gbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKTsKICAgICAgICAg
aWYgKChpczxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkgJiYgIWRvd25jYXN0PEhUTUxTdHlsZUVs
ZW1lbnQ+KCpub2RlKS5oYXNBdHRyaWJ1dGUoc2NvcGVkQXR0cikpIHx8IGlzPEhUTUxMaW5rRWxl
bWVudD4oKm5vZGUpKSB7Ci0gICAgICAgICAgICBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgbmV4dE5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7CiAgICAgICAgICAgICBS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUtPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKICAgICAgICAgICAgIGlmIChyb290RWRpdGFibGVFbGVtZW50KSB7CiAg
ICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKQEAgLTQ2Miw3ICs0NjIsNyBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgIC8vIE5l
dmVyIHJlbW92ZSB0aGUgc3RhcnQgYmxvY2sgdW5sZXNzIGl0J3MgYSB0YWJsZSwgaW4gd2hpY2gg
Y2FzZSB3ZSB3b24ndCBtZXJnZSBjb250ZW50IGluLgogICAgIGlmIChzdGFydE5vZGUgPT0gbV9z
dGFydEJsb2NrICYmICFzdGFydE9mZnNldCAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHN0
YXJ0Tm9kZSkgJiYgIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAg
IHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChzdGFydE5vZGUpOworICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpz
dGFydE5vZGUpOwogICAgICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpo
YW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICB9CiAKICAgICBpZiAoc3RhcnRPZmZzZXQgPj0gbGFz
dE9mZnNldEZvckVkaXRpbmcoc3RhcnROb2RlKSkgewotICAgICAgICBzdGFydE5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihzdGFydE5vZGUpOworICAgICAgICBzdGFy
dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqc3RhcnROb2RlKTsK
ICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgIH0KIApAQCAtNTA4LDcgKzUwOCw3IEBAIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAg
ICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCiAgICAg
ICAgICAgICAgICAgVGV4dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCpub2RlKTsKICAgICAgICAg
ICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHQsIHN0YXJ0T2Zmc2V0LCB0ZXh0Lmxlbmd0
aCgpIC0gc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KCpub2RlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbm9k
ZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQoc3RhcnRPZmZzZXQpOwogICAgICAgICAg
ICAgfQpAQCAtNTIxLDkgKzUyMSw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0gbV9kb3du
c3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChjb21wYXJlUG9z
aXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlLmdldCgpKSwgbV9kb3duc3Ry
ZWFtRW5kKSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gTm9kZVRyYXZlcnNhbDo6bmV4dFNr
aXBwaW5nQ2hpbGRyZW4ganVzdCBibGV3IHBhc3QgdGhlIGVuZCBwb3NpdGlvbiwgc28gc3RvcCBk
ZWxldGluZwotICAgICAgICAgICAgICAgIG5vZGUgPSAwOworICAgICAgICAgICAgICAgIG5vZGUg
PSBudWxscHRyOwogICAgICAgICAgICAgfSBlbHNlIGlmICghbV9kb3duc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hp
bGRyZW4obm9kZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICAg
ICAgICAgIC8vIGlmIHdlIGp1c3QgcmVtb3ZlZCBhIG5vZGUgZnJvbSB0aGUgZW5kIGNvbnRhaW5l
ciwgdXBkYXRlIGVuZCBwb3NpdGlvbiBzbyB0aGUKICAgICAgICAgICAgICAgICAvLyBjaGVjayBh
Ym92ZSB3aWxsIHdvcmsKICAgICAgICAgICAgICAgICB1cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1v
dmFsKG1fZG93bnN0cmVhbUVuZCwgKm5vZGUpOwpAQCAtNTMzLDkgKzUzMyw5IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgICAgICAg
ICAgTm9kZSogbiA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CiAgICAgICAgICAgICAgICAgaWYg
KG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpID09IG4gJiYgbV9kb3duc3RyZWFtRW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQobikpIHsKICAgICAg
ICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBudWxscHRyOwogICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm5vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAppbmRleCA1ZjcyNDI2NzBhODVhOTNi
ZmQ3NDA4ZmNmOWY2MGUyYmZmZTlkNDI3Li44ZjU2NTMyY2NlOWQ0NjA0ODNmNjFmODQ0YjA5MTEz
Y2Q1M2I2ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcApAQCAtMTIw
LDcgKzEyMCw3IEBAIHZvaWQgU2ltcGxlRWRpdENvbW1hbmQ6OmRvUmVhcHBseSgpCiAjaWZuZGVm
IE5ERUJVRwogdm9pZCBTaW1wbGVFZGl0Q29tbWFuZDo6YWRkTm9kZUFuZERlc2NlbmRhbnRzKE5v
ZGUqIHN0YXJ0Tm9kZSwgSGFzaFNldDxOb2RlKj4mIG5vZGVzKQogewotICAgIGZvciAoTm9kZSog
bm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwg
c3RhcnROb2RlKSkKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCBzdGFydE5vZGUpKQogICAgICAgICBub2Rlcy5h
ZGQobm9kZSk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAppbmRleCBlZjFjNDRmNjU4OTgzZDllOTc2NTQ3ZDQwYThlMzE1MTJkOWFhMjc2Li44YTcxMjBi
ZGZiYjUzNjBjMTYyZTkwZWViODQ3OTYxMjA0OTg1MmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nU3R5bGUuY3BwCkBAIC02NzQsNyArNjc0LDcgQEAgVHJpU3RhdGUgRWRpdGluZ1N0
eWxlOjp0cmlTdGF0ZU9mU3R5bGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBj
b25zdAogCiAgICAgVHJpU3RhdGUgc3RhdGUgPSBGYWxzZVRyaVN0YXRlOwogICAgIGJvb2wgbm9k
ZUlzU3RhcnQgPSB0cnVlOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHNlbGVjdGlvbi5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUp
KSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5v
ZGUoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAg
IGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAg
ICAgICAgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlKG5vZGUpOwogICAg
ICAgICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKGNvbXB1dGVkU3R5
bGUsIG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRpbmdTdHlsZTo6RG9Ob3RJZ25vcmVUZXh0T25s
eVByb3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Oklnbm9yZVRleHRPbmx5UHJvcGVydGllcyk7CkBA
IC0xMzA2LDcgKzEzMDYsNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6dGV4dERp
cmVjdGlvbkZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogICAgICAgICBlbmQg
PSBzZWxlY3Rpb24uZW5kKCkudXBzdHJlYW0oKTsKIAogICAgICAgICBOb2RlKiBwYXN0TGFzdCA9
IFJhbmdlOjpjcmVhdGUoKmVuZC5kb2N1bWVudCgpLCBwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKSwgZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKS0+cGFzdExhc3ROb2Rl
KCk7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4gJiYgbiAhPSBwYXN0TGFzdDsgbiA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobikpIHsKKyAgICAgICAgZm9yIChOb2RlKiBuID0gbm9kZTsg
biAmJiBuICE9IHBhc3RMYXN0OyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbikpIHsKICAgICAg
ICAgICAgIGlmICghbi0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCBmYWY3NzBkYWQ1MjkxMWYwOGRk
ZmNmNWJiNWE5ODE3ZjI2NWM5ZTU5Li40YTU1ZmY5YjEzNDQxM2RhOTA5ZmYyZjkwMWQ3OGNhZWJh
MWViYWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xMzI0LDEyICsxMzI0LDEy
IEBAIHZvaWQgRWRpdG9yOjpzaW1wbGlmeU1hcmt1cChOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGVu
ZE5vZGUpCiAgICAgICAgIC8vIGNoZWNrIGlmIHN0YXJ0IG5vZGUgaXMgYmVmb3JlIGVuZE5vZGUK
ICAgICAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICAgICAgd2hpbGUgKG5vZGUgJiYg
bm9kZSAhPSBlbmROb2RlKQotICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZSk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7CiAg
ICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
YXBwbHlDb21tYW5kKFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHN0
YXJ0Tm9kZSwgKGVuZE5vZGUpID8gTm9kZVRyYXZlcnNhbDo6bmV4dChlbmROb2RlKSA6IDApKTsK
KyAgICBhcHBseUNvbW1hbmQoU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQo
KSwgc3RhcnROb2RlLCBlbmROb2RlID8gTm9kZVRyYXZlcnNhbDo6bmV4dCgqZW5kTm9kZSkgOiBu
dWxscHRyKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb3B5VVJMKGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRl
bnRPdXRkZW50Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRl
bnRDb21tYW5kLmNwcAppbmRleCBhN2M3YzcxYWIzZWIzYjVkNTU3ZTYwNmM4NDY3Y2NkOTljMjBi
NTI5Li5iMjM4Zjg3OTMxNTZjNzI5NzJlNWE3Y2RlM2FhY2RlMzljZTAxYjBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcApAQCAtNzAsOCAr
NzAsOCBAQCBib29sIEluZGVudE91dGRlbnRDb21tYW5kOjp0cnlJbmRlbnRpbmdBc0xpc3RJdGVt
KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUAogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgLy8gRklYTUU6IHByZXZpb3VzRWxlbWVudFNpYmxpbmcgZG9lcyBub3QgaWdub3Jl
IG5vbi1yZW5kZXJlZCBjb250ZW50IGxpa2UgPHNwYW4+PC9zcGFuPi4gIFNob3VsZCB3ZT8KLSAg
ICBSZWZQdHI8RWxlbWVudD4gcHJldmlvdXNMaXN0ID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNTaWJsaW5nKHNlbGVjdGVkTGlzdEl0ZW0uZ2V0KCkpOwotICAgIFJlZlB0cjxFbGVtZW50PiBu
ZXh0TGlzdCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHNlbGVjdGVkTGlzdEl0ZW0u
Z2V0KCkpOworICAgIFJlZlB0cjxFbGVtZW50PiBwcmV2aW91c0xpc3QgPSBFbGVtZW50VHJhdmVy
c2FsOjpwcmV2aW91c1NpYmxpbmcoKnNlbGVjdGVkTGlzdEl0ZW0pOworICAgIFJlZlB0cjxFbGVt
ZW50PiBuZXh0TGlzdCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCpzZWxlY3RlZExp
c3RJdGVtKTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdMaXN0ID0gZG9jdW1lbnQoKS5jcmVh
dGVFbGVtZW50KGxpc3ROb2RlLT50YWdRTmFtZSgpLCBmYWxzZSk7CiAgICAgaW5zZXJ0Tm9kZUJl
Zm9yZShuZXdMaXN0LCBzZWxlY3RlZExpc3RJdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKaW5kZXggNjE2MjZjMGQwNmE1ZTFhN2VmZDA4ZTJjNzYy
YjU0MDk1MzQ3YjgwYS4uNmNkMWM1YzhlMmIzZDM1YTM3N2U3MWE2NmE4MDEyNDFiNTYxZDM4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKQEAgLTcz
LDcgKzczLDcgQEAgUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bWVyZ2VX
aXRoTmVpZ2hib3JpbmdMaXN0cyhQYXNzUmVmUHRyPEhUTUwKIAogICAgIGlmICghbGlzdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgRWxlbWVudCogc2libGluZyA9IEVsZW1lbnRUcmF2
ZXJzYWw6Om5leHRTaWJsaW5nKGxpc3QuZ2V0KCkpOworICAgIEVsZW1lbnQqIHNpYmxpbmcgPSBF
bGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqbGlzdCk7CiAgICAgaWYgKCFpczxIVE1MRWxl
bWVudD4oc2libGluZykpCiAgICAgICAgIHJldHVybiBsaXN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNw
cAppbmRleCA4MmVjNTM0OWNmNTFmMTUxMWZkNzI4NTBjMjk5NGIwMWNkZjEyOWEwLi4yMTI4Mjlj
NDQ5Mzk2NDRkMzUwZmFiMDkwNmE5NTMzODIyMDhhNzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAK
QEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6
OmRvQXBwbHkoKQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIE5vZGUqIHNwbGl0VG8gPSBp
bnNlcnRpb25Qb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CiAgICAgICAgICAgICBpZiAoc3BsaXRU
by0+aXNUZXh0Tm9kZSgpICYmIGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpID49IGNhcmV0TWF4T2Zmc2V0KHNwbGl0VG8pKQotICAgICAgICAgICAgICAgIHNwbGl0VG8g
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KHNwbGl0VG8sIHN0YXJ0QmxvY2suZ2V0KCkpOworICAgICAg
ICAgICAgICAgIHNwbGl0VG8gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpzcGxpdFRvLCBzdGFydEJs
b2NrLmdldCgpKTsKICAgICAgICAgICAgIEFTU0VSVChzcGxpdFRvKTsKICAgICAgICAgICAgIHNw
bGl0VHJlZVRvTm9kZShzcGxpdFRvLCBzdGFydEJsb2NrLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA5NWE0
YzQ2NDU0NWYwNGE0ZWFmZTY5Mjc1NDI4ZGQxNGVjNmY3YjIxLi5mYjM4ODBjNTEwYzQ0Yjc1NzJi
MzYxNGEwNWZhNDEwYjYxMzNmYzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMjc5LDkgKzI3OSwxMCBAQCB2b2lkIFJl
cGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZVVucmVuZGVyZWROb2RlcyhOb2RlKiBob2xkZXIpCiB7
CiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPj4gdW5yZW5kZXJlZDsKIAotICAgIGZvciAoTm9kZSog
bm9kZSA9IGhvbGRlci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlLCBob2xkZXIpKQorICAgIGZvciAoTm9kZSogbm9kZSA9IGhvbGRlci0+Zmlyc3RD
aGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgaG9sZGVyKSkg
ewogICAgICAgICBpZiAoIWlzTm9kZVJlbmRlcmVkKG5vZGUpICYmICFpc1RhYmxlU3RydWN0dXJl
Tm9kZShub2RlKSkKICAgICAgICAgICAgIHVucmVuZGVyZWQuYXBwZW5kKG5vZGUpOworICAgIH0K
IAogICAgIHNpemVfdCBuID0gdW5yZW5kZXJlZC5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBuOyArK2kpCkBAIC0zMjAsOSArMzIxLDkgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdt
ZW50OjpyZW1vdmVJbnRlcmNoYW5nZU5vZGVzKE5vZGUqIGNvbnRhaW5lcikKICAgICAKICAgICBu
b2RlID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAg
ICAgUmVmUHRyPE5vZGU+IG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOworICAgICAg
ICBSZWZQdHI8Tm9kZT4gbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpOwogICAgICAg
ICBpZiAoaXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihub2RlKSkgewotICAgICAgICAg
ICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUpOworICAg
ICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2Rl
KTsKICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZSk7CiAgICAg
ICAgIH0KICAgICAgICAgbm9kZSA9IG5leHQuZ2V0KCk7CkBAIC0zNDMsOSArMzQ0LDkgQEAgaW5s
aW5lIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVkTm9kZXM6OnJlc3BvbmRU
b05vZGVJbnNlcnRpb24oTm9kZSoKIGlubGluZSB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpJbnNlcnRlZE5vZGVzOjp3aWxsUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihOb2RlKiBu
b2RlKQogewogICAgIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkID09IG5vZGUpCi0gICAgICAgIG1f
Zmlyc3ROb2RlSW5zZXJ0ZWQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOworICAgICAgICBt
X2ZpcnN0Tm9kZUluc2VydGVkID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7CiAgICAgaWYg
KG1fbGFzdE5vZGVJbnNlcnRlZCA9PSBub2RlKQotICAgICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQg
PSBub2RlLT5sYXN0Q2hpbGQoKSA/IG5vZGUtPmxhc3RDaGlsZCgpIDogTm9kZVRyYXZlcnNhbDo6
bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9
IG5vZGUtPmxhc3RDaGlsZCgpID8gbm9kZS0+bGFzdENoaWxkKCkgOiBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7CiB9CiAKIGlubGluZSB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxsUmVtb3ZlTm9kZShOb2RlKiBub2RlKQpA
QCAtMzU0LDkgKzM1NSw5IEBAIGlubGluZSB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJ
bnNlcnRlZE5vZGVzOjp3aWxsUmVtb3ZlTm9kZShOb2RlKiBub2RlKQogICAgICAgICBtX2ZpcnN0
Tm9kZUluc2VydGVkID0gMDsKICAgICAgICAgbV9sYXN0Tm9kZUluc2VydGVkID0gMDsKICAgICB9
IGVsc2UgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPT0gbm9kZSkKLSAgICAgICAgbV9maXJzdE5v
ZGVJbnNlcnRlZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fZmlyc3RO
b2RlSW5zZXJ0ZWQuZ2V0KCkpOworICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gTm9kZVRy
YXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm1fZmlyc3ROb2RlSW5zZXJ0ZWQpOwogICAg
IGVsc2UgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCA9PSBub2RlKQotICAgICAgICBtX2xhc3ROb2Rl
SW5zZXJ0ZWQgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1NraXBwaW5nQ2hpbGRyZW4obV9sYXN0
Tm9kZUluc2VydGVkLmdldCgpKTsKKyAgICAgICAgbV9sYXN0Tm9kZUluc2VydGVkID0gTm9kZVRy
YXZlcnNhbDo6cHJldmlvdXNTa2lwcGluZ0NoaWxkcmVuKCptX2xhc3ROb2RlSW5zZXJ0ZWQpOwog
fQogCiBpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6
ZGlkUmVwbGFjZU5vZGUoTm9kZSogbm9kZSwgTm9kZSogbmV3Tm9kZSkKQEAgLTQ3OSw3ICs0ODAs
NyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNB
bmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydAogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUg
PSBpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2VydGVkKCk7IG5vZGUgJiYgbm9kZSAhPSBwYXN0
RW5kTm9kZTsgbm9kZSA9IG5leHQpIHsKICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxl
bS81MzcxNTM2PiBTdHlsZSBydWxlcyB0aGF0IG1hdGNoIHBhc3RlZCBjb250ZW50IGNhbiBjaGFu
Z2UgaXQncyBhcHBlYXJhbmNlCiAKLSAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZS5nZXQoKSk7CisgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKTsK
ICAgICAgICAgaWYgKCFpczxTdHlsZWRFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApAQCAtNjI0LDcgKzYyNSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
Om1ha2VJbnNlcnRlZENvbnRlbnRSb3VuZFRyaXBwYWJsZVdpdGhIVE1MVHJlZUJ1aWxkCiAgICAg
UmVmUHRyPE5vZGU+IHBhc3RFbmROb2RlID0gaW5zZXJ0ZWROb2Rlcy5wYXN0TGFzdExlYWYoKTsK
ICAgICBSZWZQdHI8Tm9kZT4gbmV4dDsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gaW5z
ZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZE5v
ZGU7IG5vZGUgPSBuZXh0KSB7Ci0gICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUuZ2V0KCkpOworICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7CiAK
ICAgICAgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC03NzYsNyArNzc3LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlU3R5bGVTcGFucyhJbnNlcnRlZE5vZGVzJiBpbnNlcnRlZE5vZGVzKQogICAgIC8vIFRoZSBz
dHlsZSBzcGFuIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBkb2N1bWVudCdzIGRlZmF1bHQgc3R5
bGUgc2hvdWxkIGJlIGF0CiAgICAgLy8gdGhlIHRvcCBvZiB0aGUgZnJhZ21lbnQsIGJ1dCBNYWls
IHNvbWV0aW1lcyBhZGRzIGEgd3JhcHBlciAoZm9yIFBhc3RlIEFzIFF1b3RhdGlvbiksCiAgICAg
Ly8gc28gc2VhcmNoIGZvciB0aGUgdG9wIGxldmVsIHN0eWxlIHNwYW4gaW5zdGVhZCBvZiBhc3N1
bWluZyBpdCdzIGF0IHRoZSB0b3AuCi0gICAgZm9yIChOb2RlKiBub2RlID0gaW5zZXJ0ZWROb2Rl
cy5maXJzdE5vZGVJbnNlcnRlZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5z
ZXJ0ZWQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAg
ICAgIGlmIChpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAgICAgICAgICB3cmFw
cGluZ1N0eWxlU3BhbiA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKTsKICAgICAgICAgICAg
IGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5oCmluZGV4IDU2MzZkNGI1ZmFiNTgxZTVlMWI4YjgwMTgzYjcxZTY5Y2I4YWM3NmUuLmQ4
N2MzZmY1MzVkNTBlZmVmMzBmMTQ4NTE4ZWY1NDMzNzk2YmRhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgKQEAgLTY4LDcgKzY4LDE0
IEBAIHByaXZhdGU6CiAKICAgICAgICAgTm9kZSogZmlyc3ROb2RlSW5zZXJ0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2ZpcnN0Tm9kZUluc2VydGVkLmdldCgpOyB9CiAgICAgICAgIE5vZGUqIGxhc3RM
ZWFmSW5zZXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmxhc3REZXNj
ZW5kYW50KCk7IH0KLSAgICAgICAgTm9kZSogcGFzdExhc3RMZWFmKCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0Tm9kZUluc2VydGVkID8gTm9kZVRyYXZlcnNhbDo6bmV4dChsYXN0TGVhZkluc2VydGVk
KCkpIDogMDsgfQorICAgICAgICBOb2RlKiBwYXN0TGFzdExlYWYoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV9sYXN0Tm9kZUluc2VydGVkKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGxhc3RMZWFmSW5zZXJ0ZWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVU
cmF2ZXJzYWw6Om5leHQoKmxhc3RMZWFmSW5zZXJ0ZWQoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgUmVmUHRyPE5vZGU+IG1fZmlyc3ROb2RlSW5zZXJ0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAKaW5kZXggNWFiOWMxYTU5ZGY0OTI4
OTRmYzFiNzA0NDdiZDE2MmZhOWE2MDk2ZS4uOWVhNWNlYWJlYTJkNmM2M2Y3ZGYxMTNhMzgyYzc4
YTVkNzM3OGEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1h
cmt1cENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJr
dXBDb21tYW5kLmNwcApAQCAtNTIsNyArNTIsNyBAQCB2b2lkIFNpbXBsaWZ5TWFya3VwQ29tbWFu
ZDo6ZG9BcHBseSgpCiAgICAgLy8gd2l0aG91dCBhZmZlY3RpbmcgdGhlIHN0eWxlLiBUaGUgZ29h
bCBpcyB0byBwcm9kdWNlIGxlYW5lciBtYXJrdXAgZXZlbiB3aGVuIHN0YXJ0aW5nCiAgICAgLy8g
ZnJvbSBhIHZlcmJvc2UgZnJhZ21lbnQuCiAgICAgLy8gV2UgbG9vayBhdCBpbmxpbmUgZWxlbWVu
dHMgYXMgd2VsbCBhcyBub24gdG9wIGxldmVsIGRpdnMgdGhhdCBkb24ndCBoYXZlIGF0dHJpYnV0
ZXMuIAotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZmlyc3ROb2RlLmdldCgpOyBub2RlICYmIG5v
ZGUgIT0gbV9ub2RlQWZ0ZXJMYXN0OyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkg
eworICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZmlyc3ROb2RlLmdldCgpOyBub2RlICYmIG5vZGUg
IT0gbV9ub2RlQWZ0ZXJMYXN0OyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsK
ICAgICAgICAgaWYgKG5vZGUtPmZpcnN0Q2hpbGQoKSB8fCAobm9kZS0+aXNUZXh0Tm9kZSgpICYm
IG5vZGUtPm5leHRTaWJsaW5nKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGM5ZWUyNmYzM2M5NDlh
YmVmMjEyZjJiYjE1NmQ1Mzc0YjM2ZDU5ZWIuLjM0NjVjNzEyOTc2MzJiMTJmYzE5NzVhOTUzY2Uz
ZTljMzI0ZGM2YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAg
LTQ0OSw3ICs0NDksNyBAQCB2b2lkIFRleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgIGlm
ICghbmV4dCkgewogICAgICAgICAgICAgbmV4dCA9IG1fbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAg
ICAgICAgICAgIGlmICghbmV4dCkgewotICAgICAgICAgICAgICAgIGJvb2wgcGFzdEVuZCA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobV9ub2RlKSA9PSBtX3Bhc3RFbmROb2RlOworICAgICAgICAgICAg
ICAgIGJvb2wgcGFzdEVuZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm1fbm9kZSkgPT0gbV9wYXN0
RW5kTm9kZTsKICAgICAgICAgICAgICAgICBOb2RlKiBwYXJlbnROb2RlID0gbV9ub2RlLT5wYXJl
bnRPclNoYWRvd0hvc3ROb2RlKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKCFuZXh0ICYmIHBh
cmVudE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChwYXN0RW5kICYmIHBhcmVudE5v
ZGUgPT0gbV9lbmRDb250YWluZXIpIHx8IG1fZW5kQ29udGFpbmVyLT5pc0Rlc2NlbmRhbnRPZihw
YXJlbnROb2RlKSkKQEAgLTg2MSw3ICs4NjEsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRFbWl0TmV3
bGluZUFmdGVyTm9kZShOb2RlJiBub2RlKQogICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIHZl
cnkgbGFzdCByZW5kZXJlciBpbiB0aGUgZG9jdW1lbnQuCiAgICAgLy8gSWYgc28sIHRoZW4gd2Ug
c2hvdWxkIG5vdCBlbWl0IGEgbmV3bGluZS4KICAgICBOb2RlKiBzdWJzZXF1ZW50Tm9kZSA9ICZu
b2RlOwotICAgIHdoaWxlICgoc3Vic2VxdWVudE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbihzdWJzZXF1ZW50Tm9kZSkpKSB7CisgICAgd2hpbGUgKChzdWJzZXF1ZW50
Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpzdWJzZXF1ZW50Tm9k
ZSkpKSB7CiAgICAgICAgIGlmIChzdWJzZXF1ZW50Tm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVVuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRz
LmNwcAppbmRleCBlNTk4NGQ5MjliNTQ2NWQ2MTE1YTFiN2YwYmRiZmU5YjgyNDNjZWUxLi4zNzVj
MzI5NmIwNTkxZTY4Njk5YzcwODgyMzFiZWVhZTYwOGI5OTcwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuY3BwCkBAIC0xMTI0LDE4ICsxMTI0LDE4IEBAIFZpc2libGVQb3Np
dGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgRWRpdGluZ0Jv
dW5kYXJ5Q3Jvc3NpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jv
c3NpbmdSdWxlID09IENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICB3
aGlsZSAobiAmJiBuLT5oYXNFZGl0YWJsZVN0eWxlKCkgIT0gc3RhcnROb2RlLT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCi0gICAgICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9z
dE9yZGVyKG4sIHN0YXJ0QmxvY2spOworICAgICAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2Fs
OjpwcmV2aW91c1Bvc3RPcmRlcigqbiwgc3RhcnRCbG9jayk7CiAgICAgICAgICAgICBpZiAoIW4g
fHwgIW4tPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBSZW5kZXJPYmplY3QqIHIgPSBuLT5yZW5kZXJlcigpOwog
ICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91
c1Bvc3RPcmRlcihuLCBzdGFydEJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2Fs
OjpwcmV2aW91c1Bvc3RPcmRlcigqbiwgc3RhcnRCbG9jayk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByLT5zdHls
ZSgpOwogICAgICAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpIHsKLSAgICAg
ICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJsb2Nr
KTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcigqbiwg
c3RhcnRCbG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTExNTgsMTMgKzExNTgsMTMgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFZGl0aW5nQm91bmRhcnlDcm9zc2kKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgb2Zmc2V0ID0gMDsKLSAg
ICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJs
b2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcigq
biwgc3RhcnRCbG9jayk7CiAgICAgICAgIH0gZWxzZSBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50
KG4pIHx8IGlzUmVuZGVyZWRUYWJsZShuKSkgewogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAg
ICAgICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3I7Ci0gICAgICAg
ICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkgPyBuLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5v
ZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKG4sIHN0YXJ0QmxvY2spOworICAgICAgICAg
ICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpID8gbi0+cHJldmlvdXNTaWJsaW5nKCkgOiBOb2Rl
VHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcigqbiwgc3RhcnRCbG9jayk7CiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKG4s
IHN0YXJ0QmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9z
dE9yZGVyKCpuLCBzdGFydEJsb2NrKTsKICAgICB9CiAKICAgICBpZiAodHlwZSA9PSBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSB7CkBAIC0xMjA0LDE5ICsxMjA0LDE5IEBAIFZp
c2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEVk
aXRpbmdCb3VuZGFyeUNyb3NzaW5nCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGJv
dW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSB7CiAgICAg
ICAgICAgICB3aGlsZSAobiAmJiBuLT5oYXNFZGl0YWJsZVN0eWxlKCkgIT0gc3RhcnROb2RlLT5o
YXNFZGl0YWJsZVN0eWxlKCkpCi0gICAgICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobiwgc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNh
bDo6bmV4dCgqbiwgc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+
aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiByID0gbi0+cmVuZGVyZXIoKTsKICAgICAg
ICAgaWYgKCFyKSB7Ci0gICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBzdGF5
SW5zaWRlQmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm4sIHN0
YXlJbnNpZGVCbG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByLT5zdHlsZSgpOwogICAgICAgICBpZiAoc3R5
bGUudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpIHsKLSAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CisgICAgICAgICAgICBuID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqbiwgc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMTIzOSwxMyArMTIzOSwxMyBAQCBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFZGl0aW5nQm91bmRh
cnlDcm9zc2luZwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAg
ICAgICBvZmZzZXQgPSByLT5jYXJldE1heE9mZnNldCgpOwotICAgICAgICAgICAgbiA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobiwgc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KCpuLCBzdGF5SW5zaWRlQmxvY2spOwogICAgICAgICB9IGVsc2UgaWYg
KGVkaXRpbmdJZ25vcmVzQ29udGVudChuKSB8fCBpc1JlbmRlcmVkVGFibGUobikpIHsKICAgICAg
ICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklz
QWZ0ZXJBbmNob3I7Ci0gICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4obiwgc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbiwgc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBzdGF5SW5zaWRl
QmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm4sIHN0YXlJbnNp
ZGVCbG9jayk7CiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQppbmRleCAwMWZlOTA2ZmZjNWJlMzUzYTc1NjIzY2M2MzlhYmNhZjYwMGUyZWVjLi5l
YTQ0NGEzYjcwOWEwZTQ1MWFmZTg3Y2JjNGE4OWJjMWIxZTM3OTg0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCkBAIC0xODA1LDcgKzE4MDUsNyBA
QCB2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzSGVhZEVsZW1lbnQoRWxlbWVudCYgZWxlbWVu
dCkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIGdhdGhlciBkYXRhIGZyb20gb3RoZXIgc291cmNl
cyBlLmcuIFdvcmQsIGJ1dCBmb3IgdGhhdCB3ZSB3b3VsZCBuZWVkIHRvIGJlIGFibGUgdG8gZ2V0
IGNvbW1lbnRzIGZyb20gRE9NCiAgICAgCi0gICAgZm9yIChIVE1MTWV0YUVsZW1lbnQqIGNoaWxk
ID0gVHJhdmVyc2FsPEhUTUxNZXRhRWxlbWVudD46OmZpcnN0Q2hpbGQoJmVsZW1lbnQpOyBjaGls
ZDsgY2hpbGQgPSBUcmF2ZXJzYWw8SFRNTE1ldGFFbGVtZW50Pjo6bmV4dFNpYmxpbmcoY2hpbGQp
KSB7CisgICAgZm9yIChIVE1MTWV0YUVsZW1lbnQqIGNoaWxkID0gVHJhdmVyc2FsPEhUTUxNZXRh
RWxlbWVudD46OmZpcnN0Q2hpbGQoZWxlbWVudCk7IGNoaWxkOyBjaGlsZCA9IFRyYXZlcnNhbDxI
VE1MTWV0YUVsZW1lbnQ+OjpuZXh0U2libGluZygqY2hpbGQpKSB7CiAgICAgICAgIE5TU3RyaW5n
ICpuYW1lID0gY2hpbGQtPm5hbWUoKTsKICAgICAgICAgTlNTdHJpbmcgKmNvbnRlbnQgPSBjaGls
ZC0+Y29udGVudCgpOwogICAgICAgICBpZiAobmFtZSAmJiBjb250ZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCA2N2Q0MmU2NmMyZDJmZDFhOTI4ZWZlNmEzZmJm
ZmU2ZWEzOTMyMGI1Li44N2M5ZGU5NjgxOGViMzAwYTg4YWQ5NmI2OTA0MGIyMTE3ZGU2Yjc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtNjA0LDEyICs2MDQsMTIg
QEAgc3RhdGljIGJvb2wgaGFzQVJlbmRlcmVkRGVzY2VuZGFudChOb2RlKiBub2RlLCBOb2RlKiBl
eGNsdWRlZE5vZGUpCiB7CiAgICAgZm9yIChOb2RlKiBuID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBu
OykgewogICAgICAgICBpZiAobiA9PSBleGNsdWRlZE5vZGUpIHsKLSAgICAgICAgICAgIG4gPSBO
b2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihuLCBub2RlKTsKKyAgICAgICAgICAg
IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbiwgbm9kZSk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAobi0+cmVuZGVyZXIoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChuLCBub2RlKTsKKyAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm4sIG5vZGUpOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KaW5kZXggZjFlZTI5OTljYmQyMzU4OGUzNTRjNmFjODBjOTBlYzU4NjkxNzZlNi4u
YjExNzA2YmZjMDZiNzE0YmI2ODZjMGRmOWY0NzE4ZWY5OGU2MzFlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMjMwLDcgKzIzMCw3IEBAIGNvbnN0IEZvbnQq
IEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAog
ICAgICAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwogICAgICAgICAv
LyBJbiB0aGUgbG9vcCBiZWxvdywgbiBzaG91bGQgZXZlbnR1YWxseSBtYXRjaCBwYXN0RW5kIGFu
ZCBub3QgYmVjb21lIG5pbCwgYnV0IHdlJ3ZlIHNlZW4gYXQgbGVhc3Qgb25lCiAgICAgICAgIC8v
IHVucmVwcm9kdWNpYmxlIGNhc2Ugd2hlcmUgdGhpcyBkaWRuJ3QgaGFwcGVuLCBzbyBjaGVjayBm
b3IgbnVsbCBhbHNvLgotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUg
JiYgbm9kZSAhPSBwYXN0RW5kOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewor
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgJiYgbm9kZSAhPSBwYXN0
RW5kOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAgICAgIGF1
dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKCFyZW5kZXJl
cikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQppbmRleCBkM2VjZjNhMzFiMGU0ZDNmYTAyM2M3ODIxMzdmZTg5YTYwNmRjMmZl
Li4zMzgyNzQ0ZDQ0NDQ2MDUwM2JiNjNmNWUzYzc3Y2NlNTc4ZTUyMThhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC0xMzAsNyArMTMwLDcgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0
CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgICAg
IC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQg
YW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKICAgICAgICAg
Ly8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNr
IGZvciBudWxsIGFsc28uCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9k
ZSAmJiBub2RlICE9IHBhc3RFbmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7
CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAmJiBub2RlICE9IHBh
c3RFbmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAgICAgICAg
YXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAoIXJlbmRl
cmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CmluZGV4IGJiZTJhNjI0NTEwNWY2NWE1NWZmNjQ4NjcxZGU5MGQ1OWUwZDgzNGQuLjdiNDM5ZDBm
ZWYzODEyMzAzNGVkZTU4YmM0NzY2MmYxODg5NWY2MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAKQEAgLTM2Nyw3ICszNjcsNyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24oTm9kZSogc3RhcnROb2RlLCBObwogICAgIGNv
bnN0IGJvb2wgc2hvdWxkRW1pdCA9IHRyYXZlcnNhbE1vZGUgPT0gRW1pdFN0cmluZzsKICAgICBW
ZWN0b3I8Tm9kZSo+IGFuY2VzdG9yc1RvQ2xvc2U7CiAgICAgTm9kZSogbmV4dDsKLSAgICBOb2Rl
KiBsYXN0Q2xvc2VkID0gMDsKKyAgICBOb2RlKiBsYXN0Q2xvc2VkID0gbnVsbHB0cjsKICAgICBm
b3IgKE5vZGUqIG4gPSBzdGFydE5vZGU7IG4gIT0gcGFzdEVuZDsgbiA9IG5leHQpIHsKICAgICAg
ICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS81NzMwNjY4PiwgaXQgaXMgcG9zc2li
bGUgZm9yIG4gdG8gYmxvdwogICAgICAgICAvLyBwYXN0IHBhc3RFbmQgYW5kIGJlY29tZSBudWxs
IGhlcmUuIFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlLgpAQCAtMzc3LDcgKzM3Nyw3IEBAIE5v
ZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU5vZGVzRm9yU2VyaWFsaXphdGlv
bihOb2RlKiBzdGFydE5vZGUsIE5vCiAgICAgICAgIGlmICghbikKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAKLSAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobik7CisgICAg
ICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpuKTsKICAgICAgICAgYm9vbCBvcGVuZWRU
YWcgPSBmYWxzZTsKIAogICAgICAgICBpZiAoaXNCbG9jayhuKSAmJiBjYW5IYXZlQ2hpbGRyZW5G
b3JFZGl0aW5nKG4pICYmIG5leHQgPT0gcGFzdEVuZCkKQEAgLTM4NSw3ICszODUsNyBAQCBOb2Rl
KiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24o
Tm9kZSogc3RhcnROb2RlLCBObwogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYg
KCFuLT5yZW5kZXJlcigpICYmICFlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUobiksIHNlbGVjdFRhZykpIHsKLSAgICAgICAgICAgIG5leHQgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihuKTsKKyAgICAgICAgICAgIG5leHQgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbik7CiAgICAgICAgICAgICAvLyBE
b24ndCBza2lwIG92ZXIgcGFzdEVuZC4KICAgICAgICAgICAgIGlmIChwYXN0RW5kICYmIHBhc3RF
bmQtPmlzRGVzY2VuZGFudE9mKG4pKQogICAgICAgICAgICAgICAgIG5leHQgPSBwYXN0RW5kOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCAzZjc0ZDM4ODIyZmVhZmM3
NmE1YWQ5ODcxMzM3OGQ0OTkxYWFmZjBjLi4zYjRiNjJmNzI2YmM0NTAzOGNiMzkzMTE2MDRmODU3
NTMwYjY4MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMjM1
LDcgKzIzNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc01hdGNoaW5nRWxlbWVudChjb25zdCBI
VE1MQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgRWxlbWVudCYKIAogc3RhdGljIGlubGluZSBFbGVt
ZW50KiBwcmV2aW91c0VsZW1lbnQoQ29udGFpbmVyTm9kZSYgYmFzZSwgRWxlbWVudCYgZWxlbWVu
dCwgYm9vbCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKQogewotICAgIHJldHVybiBvbmx5SW5j
bHVkZURpcmVjdENoaWxkcmVuID8gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCZl
bGVtZW50KSA6IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzKCZlbGVtZW50LCAmYmFzZSk7Cisg
ICAgcmV0dXJuIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4gPyBFbGVtZW50VHJhdmVyc2FsOjpw
cmV2aW91c1NpYmxpbmcoZWxlbWVudCkgOiBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91cyhlbGVt
ZW50LCAmYmFzZSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgRWxlbWVudCogSFRNTENvbGxlY3Rpb246
Oml0ZXJhdGVGb3JQcmV2aW91c0VsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKQEAgLTI1
MSw5ICsyNTEsOSBAQCBBTFdBWVNfSU5MSU5FIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjppdGVy
YXRlRm9yUHJldmlvdXNFbGVtZW50KEVsZW1lbnQqIGVsZW1lbgogCiBzdGF0aWMgaW5saW5lIEVs
ZW1lbnQqIGZpcnN0TWF0Y2hpbmdFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBjb2xsZWN0
aW9uLCBDb250YWluZXJOb2RlJiByb290KQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVt
ZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbigmcm9vdCk7CisgICAgRWxlbWVudCogZWxlbWVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHJvb3QpOwogICAgIHdoaWxlIChlbGVtZW50
ICYmICFpc01hdGNoaW5nRWxlbWVudChjb2xsZWN0aW9uLCAqZWxlbWVudCkpCi0gICAgICAgIGVs
ZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsICZyb290KTsKKyAgICAgICAg
ZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoKmVsZW1lbnQsICZyb290KTsKICAgICBy
ZXR1cm4gZWxlbWVudDsKIH0KIApAQCAtMjYxLDcgKzI2MSw3IEBAIHN0YXRpYyBpbmxpbmUgRWxl
bWVudCogbmV4dE1hdGNoaW5nRWxlbWVudChjb25zdCBIVE1MQ29sbGVjdGlvbiYgY29sbGVjdGlv
biwgRWxlCiB7CiAgICAgRWxlbWVudCogbmV4dCA9ICZlbGVtZW50OwogICAgIGRvIHsKLSAgICAg
ICAgbmV4dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQobmV4dCwgJnJvb3QpOworICAgICAgICBu
ZXh0ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dCgqbmV4dCwgJnJvb3QpOwogICAgIH0gd2hpbGUg
KG5leHQgJiYgIWlzTWF0Y2hpbmdFbGVtZW50KGNvbGxlY3Rpb24sICpuZXh0KSk7CiAgICAgcmV0
dXJuIG5leHQ7CiB9CkBAIC0yOTYsOSArMjk2LDkgQEAgc3RhdGljIGlubGluZSBib29sIG5hbWVT
aG91bGRCZVZpc2libGVJbkRvY3VtZW50QWxsKEVsZW1lbnQmIGVsZW1lbnQpCiAKIHN0YXRpYyBp
bmxpbmUgRWxlbWVudCogZmlyc3RNYXRjaGluZ0NoaWxkRWxlbWVudChjb25zdCBIVE1MQ29sbGVj
dGlvbiYgbm9kZUxpc3QsIENvbnRhaW5lck5vZGUmIHJvb3QpCiB7Ci0gICAgRWxlbWVudCogZWxl
bWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKCZyb290KTsKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4ocm9vdCk7CiAgICAgd2hp
bGUgKGVsZW1lbnQgJiYgIWlzTWF0Y2hpbmdFbGVtZW50KG5vZGVMaXN0LCAqZWxlbWVudCkpCi0g
ICAgICAgIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhlbGVtZW50KTsK
KyAgICAgICAgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCplbGVtZW50
KTsKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIApAQCAtMzA2LDcgKzMwNiw3IEBAIHN0YXRpYyBp
bmxpbmUgRWxlbWVudCogbmV4dE1hdGNoaW5nU2libGluZ0VsZW1lbnQoY29uc3QgSFRNTENvbGxl
Y3Rpb24mIG5vZGVMaXN0CiB7CiAgICAgRWxlbWVudCogbmV4dCA9ICZlbGVtZW50OwogICAgIGRv
IHsKLSAgICAgICAgbmV4dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5leHQpOwor
ICAgICAgICBuZXh0ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKm5leHQpOwogICAg
IH0gd2hpbGUgKG5leHQgJiYgIWlzTWF0Y2hpbmdFbGVtZW50KG5vZGVMaXN0LCAqbmV4dCkpOwog
ICAgIHJldHVybiBuZXh0OwogfQpAQCAtMzU5LDcgKzM1OSw3IEBAIEVsZW1lbnQqIEhUTUxDb2xs
ZWN0aW9uOjpjb2xsZWN0aW9uTGFzdCgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIG9wdGltaXplZCBzaW1pbGFybHkgdG8gdGhlIGZvcndhcmQgY2FzZS4KICAgICBhdXRv
JiByb290ID0gcm9vdE5vZGUoKTsKLSAgICBFbGVtZW50KiBsYXN0ID0gbV9zaG91bGRPbmx5SW5j
bHVkZURpcmVjdENoaWxkcmVuID8gRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKCZyb290KSA6
IEVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RXaXRoaW4oJnJvb3QpOworICAgIEVsZW1lbnQqIGxhc3Qg
PSBtX3Nob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4gPyBFbGVtZW50VHJhdmVyc2FsOjps
YXN0Q2hpbGQocm9vdCkgOiBFbGVtZW50VHJhdmVyc2FsOjpsYXN0V2l0aGluKHJvb3QpOwogICAg
IHJldHVybiBpdGVyYXRlRm9yUHJldmlvdXNFbGVtZW50KGxhc3QpOwogfQogCkBAIC0zNzMsMTIg
KzM3MywxMiBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjpjb2xsZWN0aW9uVHJhdmVyc2VCYWNrd2Fy
ZChFbGVtZW50KiYgY3VycmVudCwgdW5zaWduZWQgY291bgogICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBvcHRpbWl6ZWQgc2ltaWxhcmx5IHRvIHRoZSBmb3J3YXJkIGNhc2UuCiAgICAgaWYg
KG1fc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbikgewogICAgICAgICBmb3IgKDsgY291
bnQgJiYgY3VycmVudDsgLS1jb3VudCkKLSAgICAgICAgICAgIGN1cnJlbnQgPSBpdGVyYXRlRm9y
UHJldmlvdXNFbGVtZW50KEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhjdXJyZW50
KSk7CisgICAgICAgICAgICBjdXJyZW50ID0gaXRlcmF0ZUZvclByZXZpb3VzRWxlbWVudChFbGVt
ZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoKmN1cnJlbnQpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBhdXRvJiByb290ID0gcm9vdE5vZGUoKTsKICAgICBmb3IgKDsgY291bnQg
JiYgY3VycmVudDsgLS1jb3VudCkKLSAgICAgICAgY3VycmVudCA9IGl0ZXJhdGVGb3JQcmV2aW91
c0VsZW1lbnQoRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXMoY3VycmVudCwgJnJvb3QpKTsKKyAg
ICAgICAgY3VycmVudCA9IGl0ZXJhdGVGb3JQcmV2aW91c0VsZW1lbnQoRWxlbWVudFRyYXZlcnNh
bDo6cHJldmlvdXMoKmN1cnJlbnQsICZyb290KSk7CiB9CiAKIHZvaWQgSFRNTENvbGxlY3Rpb246
OmludmFsaWRhdGVDYWNoZShEb2N1bWVudCYgZG9jdW1lbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuY3BwCmluZGV4IDRkNDgyMGRlMGZmODJjYTI5YTViOTkyN2E0MTM0YTI5NWU2
ZTJhYTIuLmExZjcyZWQyMDhhYWE2ZWQ3NjA2ZmQ5NWY1OGQ5NWYzNGUwOTkzYTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC04MjcsMTMgKzgyNywxMyBAQCBzdGF0aWMgdm9p
ZCBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KE5vZGUqIGZpcnN0Tm9kZSwgYm9vbCBmbGFn
LCBOb2RlKiBsYXN0TgogICAgICAgICBpZiAoZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eSgq
bm9kZSkpIHsKICAgICAgICAgICAgIGlmIChub2RlID09IGxhc3ROb2RlKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbihub2RlLCBmaXJzdE5vZGUpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2RlLCBmaXJzdE5vZGUpOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgbm9kZS0+c2V0U2VsZk9yQW5jZXN0b3JI
YXNEaXJBdXRvQXR0cmlidXRlKGZsYWcpOwogICAgICAgICBpZiAobm9kZSA9PSBsYXN0Tm9kZSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZSwgZmlyc3ROb2RlKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5v
ZGUsIGZpcnN0Tm9kZSk7CiAgICAgfQogfQogCkBAIC04NzYsNyArODc2LDcgQEAgVGV4dERpcmVj
dGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlvbmFs
aXR5VGV4dE5vZGUpIGMKICAgICAgICAgLy8gU2tpcCBiZGksIHNjcmlwdCwgc3R5bGUgYW5kIHRl
eHQgZm9ybSBjb250cm9scy4KICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5vZGUtPm5v
ZGVOYW1lKCksICJiZGkiKSB8fCBub2RlLT5oYXNUYWdOYW1lKHNjcmlwdFRhZykgfHwgbm9kZS0+
aGFzVGFnTmFtZShzdHlsZVRhZykgCiAgICAgICAgICAgICB8fCAoaXM8RWxlbWVudD4oKm5vZGUp
ICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1RleHRGb3JtQ29udHJvbCgpKSkgewotICAg
ICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUs
IHRoaXMpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKCpub2RlLCB0aGlzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
QEAgLTg4NCw3ICs4ODQsNyBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25h
bGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkgYwogICAgICAgICBpZiAo
aXM8RWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgZGlyQXR0cmli
dXRlVmFsdWUgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZmFzdEdldEF0dHJpYnV0ZShkaXJB
dHRyKTsKICAgICAgICAgICAgIGlmIChpc0xUUk9yUlRMSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0
ZVZhbHVlKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShkaXJBdHRyaWJ1dGVWYWx1ZSwgImF1dG8iKSkg
ewotICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGls
ZHJlbihub2RlLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUsIHRoaXMpOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04OTgsNyArODk4LDcgQEAgVGV4dERp
cmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlv
bmFsaXR5VGV4dE5vZGUpIGMKICAgICAgICAgICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24g
PT0gVV9MRUZUX1RPX1JJR0hUKSA/IExUUiA6IFJUTDsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKTsKKyAgICAg
ICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsIHRoaXMpOwogICAgIH0KICAgICBp
ZiAoc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkKICAgICAgICAgKnN0cm9uZ0RpcmVjdGlv
bmFsaXR5VGV4dE5vZGUgPSBudWxscHRyOwpAQCAtOTUwLDcgKzk1MCw3IEBAIHZvaWQgSFRNTEVs
ZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZChF
bGVtZW50KiBiZWZvCiAKICAgICBOb2RlKiBvbGRNYXJrZWROb2RlID0gbnVsbHB0cjsKICAgICBp
ZiAoYmVmb3JlQ2hhbmdlKQotICAgICAgICBvbGRNYXJrZWROb2RlID0gY2hhbmdlVHlwZSA9PSBF
bGVtZW50SW5zZXJ0ZWQgPyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhiZWZvcmVDaGFu
Z2UpIDogYmVmb3JlQ2hhbmdlLT5uZXh0U2libGluZygpOworICAgICAgICBvbGRNYXJrZWROb2Rl
ID0gY2hhbmdlVHlwZSA9PSBFbGVtZW50SW5zZXJ0ZWQgPyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0
U2libGluZygqYmVmb3JlQ2hhbmdlKSA6IGJlZm9yZUNoYW5nZS0+bmV4dFNpYmxpbmcoKTsKIAog
ICAgIHdoaWxlIChvbGRNYXJrZWROb2RlICYmIGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHko
Km9sZE1hcmtlZE5vZGUpKQogICAgICAgICBvbGRNYXJrZWROb2RlID0gb2xkTWFya2VkTm9kZS0+
bmV4dFNpYmxpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxk
U2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCmluZGV4IGRkZjE2NmFjNWQwN2E1ZWU0NGM5MDY3NWJiNjhlNzkwOGI2MjEwYzguLjk0NDE3
MjBkMjNmNzk4N2RkYWE5YTUzMjNjOTgzMjVjYjRhNDU5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcApAQCAtNjEsMTQgKzYxLDE0IEBAIHN0YXRpYyB2
b2lkIHVwZGF0ZUZyb21Db250cm9sRWxlbWVudHNBbmNlc3RvckRpc2FibGVkU3RhdGVVbmRlcihI
VE1MRWxlbWVudCYgc3RhCiAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KHN0YXJ0
Tm9kZSkpCiAgICAgICAgIGNvbnRyb2wgPSAmZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4oc3RhcnROb2RlKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnRyb2wgPSBUcmF2ZXJzYWw8SFRN
TEZvcm1Db250cm9sRWxlbWVudD46OmZpcnN0V2l0aGluKCZzdGFydE5vZGUpOworICAgICAgICBj
b250cm9sID0gVHJhdmVyc2FsPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+OjpmaXJzdFdpdGhpbihz
dGFydE5vZGUpOwogICAgIHdoaWxlIChjb250cm9sKSB7CiAgICAgICAgIGNvbnRyb2wtPnNldEFu
Y2VzdG9yRGlzYWJsZWQoaXNEaXNhYmxlZCk7CiAgICAgICAgIC8vIERvbid0IGNhbGwgc2V0QW5j
ZXN0b3JEaXNhYmxlZChmYWxzZSkgb24gZm9ybSBjb250b3JscyBpbnNpZGUgZGlzYWJsZWQgZmll
bGRzZXRzLgogICAgICAgICBpZiAoaXM8SFRNTEZpZWxkU2V0RWxlbWVudD4oKmNvbnRyb2wpICYm
IGNvbnRyb2wtPmZhc3RIYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkKLSAgICAgICAgICAgIGNv
bnRyb2wgPSBUcmF2ZXJzYWw8SFRNTEZvcm1Db250cm9sRWxlbWVudD46Om5leHRTa2lwcGluZ0No
aWxkcmVuKGNvbnRyb2wsICZzdGFydE5vZGUpOworICAgICAgICAgICAgY29udHJvbCA9IFRyYXZl
cnNhbDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pjo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKmNvbnRy
b2wsICZzdGFydE5vZGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250cm9sID0gVHJh
dmVyc2FsPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+OjpuZXh0KGNvbnRyb2wsICZzdGFydE5vZGUp
OworICAgICAgICAgICAgY29udHJvbCA9IFRyYXZlcnNhbDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Pjo6bmV4dCgqY29udHJvbCwgJnN0YXJ0Tm9kZSk7CiAgICAgfQogfQogCkBAIC05Miw3ICs5Miw3
IEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKQogCiAg
ICAgYm9vbCB0aGlzRmllbGRzZXRJc0Rpc2FibGVkID0gZmFzdEhhc0F0dHJpYnV0ZShkaXNhYmxl
ZEF0dHIpOwogICAgIGJvb2wgaGFzU2VlbkZpcnN0TGVnZW5kRWxlbWVudCA9IGZhbHNlOwotICAg
IGZvciAoSFRNTEVsZW1lbnQqIGNvbnRyb2wgPSBUcmF2ZXJzYWw8SFRNTEVsZW1lbnQ+OjpmaXJz
dENoaWxkKHRoaXMpOyBjb250cm9sOyBjb250cm9sID0gVHJhdmVyc2FsPEhUTUxFbGVtZW50Pjo6
bmV4dFNpYmxpbmcoY29udHJvbCkpIHsKKyAgICBmb3IgKEhUTUxFbGVtZW50KiBjb250cm9sID0g
VHJhdmVyc2FsPEhUTUxFbGVtZW50Pjo6Zmlyc3RDaGlsZCgqdGhpcyk7IGNvbnRyb2w7IGNvbnRy
b2wgPSBUcmF2ZXJzYWw8SFRNTEVsZW1lbnQ+OjpuZXh0U2libGluZygqY29udHJvbCkpIHsKICAg
ICAgICAgaWYgKCFoYXNTZWVuRmlyc3RMZWdlbmRFbGVtZW50ICYmIGlzPEhUTUxMZWdlbmRFbGVt
ZW50PigqY29udHJvbCkpIHsKICAgICAgICAgICAgIGhhc1NlZW5GaXJzdExlZ2VuZEVsZW1lbnQg
PSB0cnVlOwogICAgICAgICAgICAgdXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50c0FuY2VzdG9yRGlz
YWJsZWRTdGF0ZVVuZGVyKCpjb250cm9sLCBmYWxzZSAvKiBpc0Rpc2FibGVkICovKTsKQEAgLTEw
OCwxMyArMTA4LDEzIEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KGNvbnN0IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCiAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGRp
c2FibGVkQXR0cikpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxMZWdlbmRFbGVtZW50KiBs
ZWdlbmQgPSBUcmF2ZXJzYWw8SFRNTExlZ2VuZEVsZW1lbnQ+OjpmaXJzdENoaWxkKHRoaXMpOwor
ICAgIEhUTUxMZWdlbmRFbGVtZW50KiBsZWdlbmQgPSBUcmF2ZXJzYWw8SFRNTExlZ2VuZEVsZW1l
bnQ+OjpmaXJzdENoaWxkKCp0aGlzKTsKICAgICBpZiAoIWxlZ2VuZCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSBmaXJzdCBsZWdlbmQgZWxlbWVudCAo
aW4gd2hpY2ggZm9ybSBjb250b3JscyBhcmUgbm90IGRpc2FibGVkIGJ5IHRoaXMgZWxlbWVudCkg
Y2hhbmdpbmcgaGVyZS4KICAgICB1cGRhdGVGcm9tQ29udHJvbEVsZW1lbnRzQW5jZXN0b3JEaXNh
YmxlZFN0YXRlVW5kZXIoKmxlZ2VuZCwgZmFsc2UgLyogaXNEaXNhYmxlZCAqLyk7Ci0gICAgd2hp
bGUgKChsZWdlbmQgPSBUcmF2ZXJzYWw8SFRNTExlZ2VuZEVsZW1lbnQ+OjpuZXh0U2libGluZyhs
ZWdlbmQpKSkKKyAgICB3aGlsZSAoKGxlZ2VuZCA9IFRyYXZlcnNhbDxIVE1MTGVnZW5kRWxlbWVu
dD46Om5leHRTaWJsaW5nKCpsZWdlbmQpKSkKICAgICAgICAgdXBkYXRlRnJvbUNvbnRyb2xFbGVt
ZW50c0FuY2VzdG9yRGlzYWJsZWRTdGF0ZVVuZGVyKCpsZWdlbmQsIHRydWUpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCmluZGV4IGZkYjkyODZiYjlhODQw
YjRjNjM5ZTg2ZDdkZTdjZTAxYzU4ODlhZmMuLjY5YzA1OWU1ZWNjNGQ4ODI2OWVkZGRkZDQ0NTNm
ODQ5NTU0NGYzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3Bw
CkBAIC0zNDIsOSArMzQyLDkgQEAgU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0
aW9uSW5uZXJUZXh0KCkgY29uc3QKICAgICAgICAgICAgIHRleHQuYXBwZW5kKG5vZGUtPm5vZGVW
YWx1ZSgpKTsKICAgICAgICAgLy8gVGV4dCBub2RlcyBpbnNpZGUgc2NyaXB0IGVsZW1lbnRzIGFy
ZSBub3QgcGFydCBvZiB0aGUgb3B0aW9uIHRleHQuCiAgICAgICAgIGlmIChpczxFbGVtZW50Pigq
bm9kZSkgJiYgdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShkb3duY2FzdDxFbGVtZW50Pihub2Rl
KSkpCi0gICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRy
ZW4obm9kZSwgdGhpcyk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNr
aXBwaW5nQ2hpbGRyZW4oKm5vZGUsIHRoaXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKTsKKyAgICAgICAgICAgIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCB0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIHRl
eHQudG9TdHJpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAKaW5kZXggNGQwMjkwYWRjNjBiNjE3NDg3ZTE5YTJjOTgwMTFiOGUwMzNlZmM5Yy4uZDFlYzk2
N2MzODJkY2VhODVhMGE5YmNkYWMwNGRhY2I2MWNlZDhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKQEAgLTc4NSw5ICs3ODUsOSBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoYm9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcykgY29u
c3QKIAogICAgIEhUTUxPcHRpb25FbGVtZW50KiBmb3VuZFNlbGVjdGVkID0gMDsKICAgICBIVE1M
T3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwotICAgIGZvciAoRWxlbWVudCogY3VycmVu
dEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgY3VycmVudEVs
ZW1lbnQ7ICkgeworICAgIGZvciAoRWxlbWVudCogY3VycmVudEVsZW1lbnQgPSBFbGVtZW50VHJh
dmVyc2FsOjpmaXJzdFdpdGhpbigqdGhpcyk7IGN1cnJlbnRFbGVtZW50OyApIHsKICAgICAgICAg
aWYgKCFpczxIVE1MRWxlbWVudD4oKmN1cnJlbnRFbGVtZW50KSkgewotICAgICAgICAgICAgY3Vy
cmVudEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihjdXJy
ZW50RWxlbWVudCwgdGhpcyk7CisgICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IEVsZW1lbnRU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpjdXJyZW50RWxlbWVudCwgdGhpcyk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBIVE1MRWxlbWVudCYgY3Vy
cmVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PigqY3VycmVudEVsZW1lbnQpOwpAQCAtNzk3LDcg
Kzc5Nyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyhib29sIHVw
ZGF0ZVNlbGVjdGVkU3RhdGVzKSBjb25zdAogICAgICAgICAvLyAoaHR0cDovL3d3dy53My5vcmcv
VFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuNikKICAgICAgICAgaWYgKGlzPEhU
TUxPcHRHcm91cEVsZW1lbnQ+KGN1cnJlbnQpKSB7CiAgICAgICAgICAgICBtX2xpc3RJdGVtcy5h
cHBlbmQoJmN1cnJlbnQpOwotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIG5leHRFbGVtZW50ID0g
RWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oJmN1cnJlbnQpKSB7CisgICAgICAgICAgICBp
ZiAoRWxlbWVudCogbmV4dEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihj
dXJyZW50KSkgewogICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC04MzAsNyArODMw
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKGJvb2wgdXBkYXRl
U2VsZWN0ZWRTdGF0ZXMpIGNvbnN0CiAgICAgICAgIC8vIHdpdGggdGhlIGNhc2Ugd2hlcmUgb2Rk
IHRhZ3MgbGlrZSBhIDxkaXY+IGhhdmUgYmVlbiBhZGRlZCBidXQgd2UKICAgICAgICAgLy8gaGFu
ZGxlIHRoaXMgYmVjYXVzZSBzdWNoIHRhZ3MgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9t
IHRoZQogICAgICAgICAvLyA8c2VsZWN0PidzIHN1YnRyZWUgYXQgdGhpcyBwb2ludC4KLSAgICAg
ICAgY3VycmVudEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihjdXJyZW50RWxlbWVudCwgdGhpcyk7CisgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gRWxlbWVu
dFRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKmN1cnJlbnRFbGVtZW50LCB0aGlzKTsK
ICAgICB9CiAKICAgICBpZiAoIWZvdW5kU2VsZWN0ZWQgJiYgbV9zaXplIDw9IDEgJiYgZmlyc3RP
cHRpb24gJiYgIWZpcnN0T3B0aW9uLT5zZWxlY3RlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlRWxlbWVudC5jcHAKaW5kZXggYWQzODhhNzViMDExNDU0MmU2NGI3NmE3NjUzMDc4ZmZh
MGUzZmQzYi4uZGMwOTA3MzhjODljNTMxMjMxNzhjZWExNDQxNjg4OTJhMDVjYzUwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCkBAIC0xOTUsMTAgKzE5NSwxMCBA
QCBSZWZQdHI8SFRNTEVsZW1lbnQ+IEhUTUxUYWJsZUVsZW1lbnQ6Omluc2VydFJvdyhpbnQgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIFJlZlB0cjxIVE1MVGFibGVSb3dFbGVtZW50PiBs
YXN0Um93ID0gMDsKICAgICBSZWZQdHI8SFRNTFRhYmxlUm93RWxlbWVudD4gcm93ID0gMDsKICAg
ICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICAgIGxhc3RSb3cgPSBIVE1MVGFibGVSb3dzQ29sbGVj
dGlvbjo6bGFzdFJvdyh0aGlzKTsKKyAgICAgICAgbGFzdFJvdyA9IEhUTUxUYWJsZVJvd3NDb2xs
ZWN0aW9uOjpsYXN0Um93KCp0aGlzKTsKICAgICBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPD0gaW5kZXg7ICsraSkgewotICAgICAgICAgICAgcm93ID0gSFRNTFRhYmxlUm93c0Nv
bGxlY3Rpb246OnJvd0FmdGVyKHRoaXMsIGxhc3RSb3cuZ2V0KCkpOworICAgICAgICAgICAgcm93
ID0gSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246OnJvd0FmdGVyKCp0aGlzLCBsYXN0Um93LmdldCgp
KTsKICAgICAgICAgICAgIGlmICghcm93KSB7CiAgICAgICAgICAgICAgICAgaWYgKGkgIT0gaW5k
ZXgpIHsKICAgICAgICAgICAgICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKQEAgLTIzMywx
MCArMjMzLDEwIEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6ZGVsZXRlUm93KGludCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSFRNTFRhYmxlUm93RWxlbWVudCogcm93ID0gMDsK
ICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICAgIHJvdyA9IEhUTUxUYWJsZVJvd3NDb2xsZWN0
aW9uOjpsYXN0Um93KHRoaXMpOworICAgICAgICByb3cgPSBIVE1MVGFibGVSb3dzQ29sbGVjdGlv
bjo6bGFzdFJvdygqdGhpcyk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDw9IGluZGV4OyArK2kpIHsKLSAgICAgICAgICAgIHJvdyA9IEhUTUxUYWJsZVJvd3NDb2xsZWN0
aW9uOjpyb3dBZnRlcih0aGlzLCByb3cpOworICAgICAgICAgICAgcm93ID0gSFRNTFRhYmxlUm93
c0NvbGxlY3Rpb246OnJvd0FmdGVyKCp0aGlzLCByb3cpOwogICAgICAgICAgICAgaWYgKCFyb3cp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAKaW5kZXggZmUwZDY1MTdkY2ZkNzIwZDdm
NDA5NTZhNjc3N2RmN2QxYzllNWUxOC4uYmZhNWY2ZDc4ZDBmYmNhNzNiODNlYmUzYTJlMDFjMmE0
MTM2MGEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29s
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVj
dGlvbi5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0Um93SXNJblRh
YmxlKEhUTUxUYWJsZUVsZW1lbnQqIHRhYmxlLCBIVE1MVGFibGVSb3dFbGVtZW50KiByb3cpCitz
dGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0Um93SXNJblRhYmxlKEhUTUxUYWJsZUVsZW1lbnQmIHRh
YmxlLCBIVE1MVGFibGVSb3dFbGVtZW50KiByb3cpCiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgIFVOVVNFRF9QQVJBTSh0YWJsZSk7CkBAIC00NiwxMSArNDYsMTEgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGFzc2VydFJvd0lzSW5UYWJsZShIVE1MVGFibGVFbGVtZW50KiB0YWJsZSwgSFRNTFRh
YmxlUm93RWxlbWUKICNlbHNlCiAgICAgaWYgKCFyb3cpCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAocm93LT5wYXJlbnROb2RlKCkgPT0gdGFibGUpCisgICAgaWYgKHJvdy0+cGFyZW50Tm9kZSgp
ID09ICZ0YWJsZSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChyb3ctPnBhcmVudE5vZGUo
KSk7CiAgICAgQVNTRVJUKHJvdy0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKHRoZWFkVGFnKSB8
fCByb3ctPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwgcm93LT5wYXJlbnRO
b2RlKCktPmhhc1RhZ05hbWUodGZvb3RUYWcpKTsKLSAgICBBU1NFUlQocm93LT5wYXJlbnROb2Rl
KCktPnBhcmVudE5vZGUoKSA9PSB0YWJsZSk7CisgICAgQVNTRVJUKHJvdy0+cGFyZW50Tm9kZSgp
LT5wYXJlbnROb2RlKCkgPT0gJnRhYmxlKTsKICNlbmRpZgogfQogCkBAIC02MSwxNCArNjEsMTQg
QEAgc3RhdGljIGlubGluZSBib29sIGlzSW5TZWN0aW9uKEhUTUxUYWJsZVJvd0VsZW1lbnQmIHJv
dywgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEVsZW1l
bnQ+KCpyb3cucGFyZW50Tm9kZSgpKS5oYXNUYWdOYW1lKHNlY3Rpb25UYWcpOwogfQogCi1IVE1M
VGFibGVSb3dFbGVtZW50KiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6cm93QWZ0ZXIoSFRNTFRh
YmxlRWxlbWVudCogdGFibGUsIEhUTUxUYWJsZVJvd0VsZW1lbnQqIHByZXZpb3VzKQorSFRNTFRh
YmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246OnJvd0FmdGVyKEhUTUxUYWJs
ZUVsZW1lbnQmIHRhYmxlLCBIVE1MVGFibGVSb3dFbGVtZW50KiBwcmV2aW91cykKIHsKICAgICAv
LyBUaGUgSFRNTENvbGxlY3Rpb24gY2FjaGluZyBtZWNoYW5pc20sIGFsb25nIHdpdGggdGhlIGNv
ZGUgaW4gdGhpcyBjbGFzcywgd2lsbCBndWFyYW50ZWUgdGhhdCB0aGUgcHJldmlvdXMgcm93CiAg
ICAgLy8gaXMgYW4gaW1tZWRpYXRlIGNoaWxkIG9mIGVpdGhlciB0aGUgdGFibGUsIG9yIGEgdGFi
bGUgc2VjdGlvbiB0aGF0IGlzIGl0c2VsZiBhbiBpbW1lZGlhdGUgY2hpbGQgb2YgdGhlIHRhYmxl
LgogICAgIGFzc2VydFJvd0lzSW5UYWJsZSh0YWJsZSwgcHJldmlvdXMpOwogCiAgICAgLy8gU3Rh
cnQgYnkgbG9va2luZyBmb3IgdGhlIG5leHQgcm93IGluIHRoaXMgc2VjdGlvbi4gQ29udGludWUg
b25seSBpZiB0aGVyZSBpcyBub25lLgotICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy0+cGFy
ZW50Tm9kZSgpICE9IHRhYmxlKSB7CisgICAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzLT5wYXJl
bnROb2RlKCkgIT0gJnRhYmxlKSB7CiAgICAgICAgIGF1dG8gY2hpbGRSb3dzID0gY2hpbGRyZW5P
ZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVudD4oKnByZXZpb3VzLT5wYXJlbnROb2RlKCkpOwogICAg
ICAgICBhdXRvIHJvdyA9IGNoaWxkUm93cy5iZWdpbkF0KCpwcmV2aW91cyk7CiAgICAgICAgIGlm
ICgrK3JvdyAhPSBjaGlsZFJvd3MuZW5kKCkpCkBAIC04MSw4ICs4MSw4IEBAIEhUTUxUYWJsZVJv
d0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpyb3dBZnRlcihIVE1MVGFibGVFbGVt
ZW50KiB0YWJsZSwKICAgICBpZiAoIXByZXZpb3VzKQogICAgICAgICBjaGlsZCA9IEVsZW1lbnRU
cmF2ZXJzYWw6OmZpcnN0Q2hpbGQodGFibGUpOwogICAgIGVsc2UgaWYgKGlzSW5TZWN0aW9uKCpw
cmV2aW91cywgdGhlYWRUYWcpKQotICAgICAgICBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nKHByZXZpb3VzLT5wYXJlbnROb2RlKCkpOwotICAgIGZvciAoOyBjaGlsZDsgY2hp
bGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhjaGlsZCkpIHsKKyAgICAgICAgY2hp
bGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqcHJldmlvdXMtPnBhcmVudE5vZGUo
KSk7CisgICAgZm9yICg7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJs
aW5nKCpjaGlsZCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRoZWFkVGFnKSkg
ewogICAgICAgICAgICAgaWYgKGF1dG8gcm93ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRhYmxlUm93
RWxlbWVudD4oKmNoaWxkKS5maXJzdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiByb3c7CkBA
IC05MiwxMSArOTIsMTEgQEAgSFRNTFRhYmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxl
Y3Rpb246OnJvd0FmdGVyKEhUTUxUYWJsZUVsZW1lbnQqIHRhYmxlLAogICAgIC8vIElmIHN0aWxs
IGxvb2tpbmcgYXQgdG9wIGxldmVsIGFuZCBib2RpZXMsIGZpbmQgdGhlIG5leHQgcm93IGluIHRv
cCBsZXZlbCBvciB0aGUgZmlyc3QgaW4gdGhlIG5leHQgYm9keSBzZWN0aW9uLgogICAgIGlmICgh
cHJldmlvdXMgfHwgaXNJblNlY3Rpb24oKnByZXZpb3VzLCB0aGVhZFRhZykpCiAgICAgICAgIGNo
aWxkID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RDaGlsZCh0YWJsZSk7Ci0gICAgZWxzZSBpZiAo
cHJldmlvdXMtPnBhcmVudE5vZGUoKSA9PSB0YWJsZSkKLSAgICAgICAgY2hpbGQgPSBFbGVtZW50
VHJhdmVyc2FsOjpuZXh0U2libGluZyhwcmV2aW91cyk7CisgICAgZWxzZSBpZiAocHJldmlvdXMt
PnBhcmVudE5vZGUoKSA9PSAmdGFibGUpCisgICAgICAgIGNoaWxkID0gRWxlbWVudFRyYXZlcnNh
bDo6bmV4dFNpYmxpbmcoKnByZXZpb3VzKTsKICAgICBlbHNlIGlmIChpc0luU2VjdGlvbigqcHJl
dmlvdXMsIHRib2R5VGFnKSkKLSAgICAgICAgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0
U2libGluZyhwcmV2aW91cy0+cGFyZW50Tm9kZSgpKTsKLSAgICBmb3IgKDsgY2hpbGQ7IGNoaWxk
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoY2hpbGQpKSB7CisgICAgICAgIGNoaWxk
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnByZXZpb3VzLT5wYXJlbnROb2RlKCkp
OworICAgIGZvciAoOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGlu
ZygqY2hpbGQpKSB7CiAgICAgICAgIGlmIChpczxIVE1MVGFibGVSb3dFbGVtZW50PigqY2hpbGQp
KQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNoaWxk
KTsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewpAQCAtMTA5LDgg
KzEwOSw4IEBAIEhUTUxUYWJsZVJvd0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpy
b3dBZnRlcihIVE1MVGFibGVFbGVtZW50KiB0YWJsZSwKICAgICBpZiAoIXByZXZpb3VzIHx8ICFp
c0luU2VjdGlvbigqcHJldmlvdXMsIHRmb290VGFnKSkKICAgICAgICAgY2hpbGQgPSBFbGVtZW50
VHJhdmVyc2FsOjpmaXJzdENoaWxkKHRhYmxlKTsKICAgICBlbHNlCi0gICAgICAgIGNoaWxkID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcocHJldmlvdXMtPnBhcmVudE5vZGUoKSk7Ci0g
ICAgZm9yICg7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGNo
aWxkKSkgeworICAgICAgICBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKCpw
cmV2aW91cy0+cGFyZW50Tm9kZSgpKTsKKyAgICBmb3IgKDsgY2hpbGQ7IGNoaWxkID0gRWxlbWVu
dFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKmNoaWxkKSkgewogICAgICAgICBpZiAoY2hpbGQtPmhh
c1RhZ05hbWUodGZvb3RUYWcpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byByb3cgPSBjaGlsZHJl
bk9mVHlwZTxIVE1MVGFibGVSb3dFbGVtZW50PigqY2hpbGQpLmZpcnN0KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJvdzsKQEAgLTEyMCwxNiArMTIwLDE2IEBAIEhUTUxUYWJsZVJvd0VsZW1l
bnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpyb3dBZnRlcihIVE1MVGFibGVFbGVtZW50KiB0
YWJsZSwKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotSFRNTFRhYmxlUm93RWxlbWVudCogSFRN
TFRhYmxlUm93c0NvbGxlY3Rpb246Omxhc3RSb3coSFRNTFRhYmxlRWxlbWVudCogdGFibGUpCitI
VE1MVGFibGVSb3dFbGVtZW50KiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6bGFzdFJvdyhIVE1M
VGFibGVFbGVtZW50JiB0YWJsZSkKIHsKLSAgICBmb3IgKGF1dG8qIGNoaWxkID0gRWxlbWVudFRy
YXZlcnNhbDo6bGFzdENoaWxkKHRhYmxlKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZlcnNh
bDo6cHJldmlvdXNTaWJsaW5nKGNoaWxkKSkgeworICAgIGZvciAoYXV0byogY2hpbGQgPSBFbGVt
ZW50VHJhdmVyc2FsOjpsYXN0Q2hpbGQodGFibGUpOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJh
dmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoKmNoaWxkKSkgewogICAgICAgICBpZiAoY2hpbGQtPmhh
c1RhZ05hbWUodGZvb3RUYWcpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcm93ID0gY2hpbGRy
ZW5PZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVudD4oKmNoaWxkKS5sYXN0KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJvdzsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoYXV0byogY2hp
bGQgPSBFbGVtZW50VHJhdmVyc2FsOjpsYXN0Q2hpbGQodGFibGUpOyBjaGlsZDsgY2hpbGQgPSBF
bGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoY2hpbGQpKSB7CisgICAgZm9yIChhdXRv
KiBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RDaGlsZCh0YWJsZSk7IGNoaWxkOyBjaGls
ZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZygqY2hpbGQpKSB7CiAgICAgICAg
IGlmIChpczxIVE1MVGFibGVSb3dFbGVtZW50PigqY2hpbGQpKQogICAgICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnQ+KGNoaWxkKTsKICAgICAgICAgaWYgKGNoaWxk
LT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewpAQCAtMTM4LDcgKzEzOCw3IEBAIEhUTUxUYWJsZVJv
d0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpsYXN0Um93KEhUTUxUYWJsZUVsZW1l
bnQqIHRhYmxlKQogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChhdXRvKiBjaGlsZCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6Omxhc3RDaGlsZCh0YWJsZSk7IGNoaWxkOyBjaGlsZCA9IEVsZW1lbnRU
cmF2ZXJzYWw6OnByZXZpb3VzU2libGluZyhjaGlsZCkpIHsKKyAgICBmb3IgKGF1dG8qIGNoaWxk
ID0gRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKHRhYmxlKTsgY2hpbGQ7IGNoaWxkID0gRWxl
bWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpjaGlsZCkpIHsKICAgICAgICAgaWYgKGNo
aWxkLT5oYXNUYWdOYW1lKHRoZWFkVGFnKSkgewogICAgICAgICAgICAgaWYgKGF1dG8qIHJvdyA9
IGNoaWxkcmVuT2ZUeXBlPEhUTUxUYWJsZVJvd0VsZW1lbnQ+KCpjaGlsZCkubGFzdCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiByb3c7CkBAIC0xNjEsNyArMTYxLDcgQEAgUmVmPEhUTUxUYWJs
ZVJvd3NDb2xsZWN0aW9uPiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6Y3JlYXRlKEhUTUxUYWJs
ZUVsZW1lbnQmIHQKIAogRWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246OmN1c3RvbUVs
ZW1lbnRBZnRlcihFbGVtZW50KiBwcmV2aW91cykgY29uc3QKIHsKLSAgICByZXR1cm4gcm93QWZ0
ZXIoY29uc3RfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4oJnRhYmxlRWxlbWVudCgpKSwgZG93bmNh
c3Q8SFRNTFRhYmxlUm93RWxlbWVudD4ocHJldmlvdXMpKTsKKyAgICByZXR1cm4gcm93QWZ0ZXIo
Y29uc3RfY2FzdDxIVE1MVGFibGVFbGVtZW50Jj4odGFibGVFbGVtZW50KCkpLCBkb3duY2FzdDxI
VE1MVGFibGVSb3dFbGVtZW50PihwcmV2aW91cykpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgKaW5kZXggZjE3YTMwYjk2ZmZjZDBmOGI5
OTg5ODcwNDQ0YzczOWIzNDNjMzZkMi4uOWViNWZhNmE3YTI5ODE0ZjIzZTE0ZTM3YWE5OTUzNmRk
ZWRhZjk0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29s
bGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rp
b24uaApAQCAtNDMsOCArNDMsOCBAQCBwdWJsaWM6CiAgICAgSFRNTFRhYmxlRWxlbWVudCYgdGFi
bGVFbGVtZW50KCkgeyByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4ob3duZXJOb2Rl
KCkpOyB9CiAgICAgY29uc3QgSFRNTFRhYmxlRWxlbWVudCYgdGFibGVFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gZG93bmNhc3Q8SFRNTFRhYmxlRWxlbWVudD4ob3duZXJOb2RlKCkpOyB9CiAKLSAg
ICBzdGF0aWMgSFRNTFRhYmxlUm93RWxlbWVudCogcm93QWZ0ZXIoSFRNTFRhYmxlRWxlbWVudCos
IEhUTUxUYWJsZVJvd0VsZW1lbnQqKTsKLSAgICBzdGF0aWMgSFRNTFRhYmxlUm93RWxlbWVudCog
bGFzdFJvdyhIVE1MVGFibGVFbGVtZW50Kik7CisgICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1l
bnQqIHJvd0FmdGVyKEhUTUxUYWJsZUVsZW1lbnQmLCBIVE1MVGFibGVSb3dFbGVtZW50Kik7Cisg
ICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQqIGxhc3RSb3coSFRNTFRhYmxlRWxlbWVudCYp
OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uKEhUTUxU
YWJsZUVsZW1lbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
Y3BwCmluZGV4IDIyNGVhZDMxYTRkNzc3ZTA2NTMwY2RjZjY4ZTE4MGVjNDkyNjQzMzUuLjE3ZDRh
MzJhMjRiNzhjNGNjZTMwODhmZTUwNzk2MGNlNGZhMDYyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgSFRN
TFRleHRBcmVhRWxlbWVudDo6c2V0VmFsdWVDb21tb24oY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSkK
IAogU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRWYWx1ZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFRleHROb2RlVHJhdmVyc2FsOjpjb250ZW50c0FzU3RyaW5nKHRoaXMpOworICAg
IHJldHVybiBUZXh0Tm9kZVRyYXZlcnNhbDo6Y29udGVudHNBc1N0cmluZygqdGhpcyk7CiB9CiAK
IHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYg
ZGVmYXVsdFZhbHVlKQpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVu
dDo6c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlKQogCiAgICAgLy8g
VG8gcHJlc2VydmUgY29tbWVudHMsIHJlbW92ZSBvbmx5IHRoZSB0ZXh0IG5vZGVzLCB0aGVuIGFk
ZCBhIHNpbmdsZSB0ZXh0IG5vZGUuCiAgICAgVmVjdG9yPFJlZlB0cjxUZXh0Pj4gdGV4dE5vZGVz
OwotICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGls
ZCh0aGlzKTsgdGV4dE5vZGU7IHRleHROb2RlID0gVGV4dE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJs
aW5nKHRleHROb2RlKSkKKyAgICBmb3IgKFRleHQqIHRleHROb2RlID0gVGV4dE5vZGVUcmF2ZXJz
YWw6OmZpcnN0Q2hpbGQoKnRoaXMpOyB0ZXh0Tm9kZTsgdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcoKnRleHROb2RlKSkKICAgICAgICAgdGV4dE5vZGVzLmFwcGVuZCh0
ZXh0Tm9kZSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IHRleHROb2Rlcy5zaXplKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4
IGNmMDUwMjNkOGM3ZDI0NDRjNGQ1NDhhMzNmNzQzYjM5ODlhOTBmNDkuLjUyMzk0ODJjNjZjZDgy
Nzk4NWQ3OWFhNWQ4Y2E3YmQ0MzJjZGYxNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC00MzEsNyArNDMxLDcgQEAgc3Rh
dGljIGlubGluZSB2b2lkIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKE5vZGUqIG5vZGUs
IGludCBvZmZzZXQsIE5vZGUqJgogUGFzc1JlZlB0cjxSYW5nZT4gSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFp
c1RleHRGb3JtQ29udHJvbCgpIHx8ICFoYXNDYWNoZWRTZWxlY3Rpb24oKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaW50IHN0YXJ0ID0gbV9jYWNo
ZWRTZWxlY3Rpb25TdGFydDsKICAgICBpbnQgZW5kID0gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7CkBA
IC00MzksMTUgKzQzOSwxNSBAQCBQYXNzUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6c2VsZWN0aW9uKCkgY29uc3QKICAgICBBU1NFUlQoc3RhcnQgPD0gZW5kKTsKICAg
ICBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1l
bnQoKTsKICAgICBpZiAoIWlubmVyVGV4dCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgaWYgKCFpbm5lclRleHQtPmZpcnN0Q2hpbGQoKSkKICAgICAg
ICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgaW5uZXJUZXh0LCAwLCBpbm5lclRl
eHQsIDApOwogCiAgICAgaW50IG9mZnNldCA9IDA7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gMDsK
LSAgICBOb2RlKiBlbmROb2RlID0gMDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQt
PmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgaW5u
ZXJUZXh0KSkgeworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG51bGxwdHI7CisgICAgTm9kZSogZW5k
Tm9kZSA9IG51bGxwdHI7CisgICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0LT5maXJzdENo
aWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCBpbm5lclRleHQp
KSB7CiAgICAgICAgIEFTU0VSVCghbm9kZS0+Zmlyc3RDaGlsZCgpKTsKICAgICAgICAgQVNTRVJU
KG5vZGUtPmlzVGV4dE5vZGUoKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSk7CiAgICAgICAg
IGludCBsZW5ndGggPSBub2RlLT5pc1RleHROb2RlKCkgPyBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUp
IDogMTsKQEAgLTQ2NCw3ICs0NjQsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkgY29uc3QKICAgICB9CiAKICAgICBpZiAoIXN0YXJ0
Tm9kZSB8fCAhZW5kTm9kZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnROb2RlLCBz
dGFydCwgZW5kTm9kZSwgZW5kKTsKIH0KQEAgLTUzMiw3ICs1MzIsNyBAQCBzdGF0aWMgdm9pZCBz
dHJpcFRyYWlsaW5nTmV3bGluZShTdHJpbmdCdWlsZGVyJiByZXN1bHQpCiBzdGF0aWMgU3RyaW5n
IGlubmVyVGV4dFZhbHVlRnJvbShUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQmIGlubmVyVGV4
dCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBp
bm5lclRleHQuZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlLCAmaW5uZXJUZXh0KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC5maXJz
dENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCAmaW5uZXJU
ZXh0KSkgewogICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oKm5vZGUpKQogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVyKTsKICAgICAgICAgZWxzZSBpZiAoaXM8
VGV4dD4oKm5vZGUpKQpAQCAtNTc0LDcgKzU3NCw3IEBAIHN0YXRpYyBQb3NpdGlvbiBwb3NpdGlv
bkZvckluZGV4KFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0LCB1bnNpZ25l
CiB7CiAgICAgdW5zaWduZWQgcmVtYWluaW5nQ2hhcmFjdGVyc1RvTW92ZUZvcndhcmQgPSBpbmRl
eDsKICAgICBOb2RlKiBsYXN0QnJPclRleHQgPSBpbm5lclRleHQ7Ci0gICAgZm9yIChOb2RlKiBu
b2RlID0gaW5uZXJUZXh0OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBp
bm5lclRleHQpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0OyBub2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgaW5uZXJUZXh0KSkgewogICAgICAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShiclRhZykpIHsKICAgICAgICAgICAgIGlmICghcmVtYWluaW5nQ2hh
cmFjdGVyc1RvTW92ZUZvcndhcmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVm
b3JlTm9kZShub2RlKTsKQEAgLTYwNyw3ICs2MDcsNyBAQCB1bnNpZ25lZCBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6aW5kZXhGb3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcGFzc2VkUG9z
aQogICAgIEFTU0VSVChzdGFydE5vZGUpOwogICAgIEFTU0VSVChpbm5lclRleHQtPmNvbnRhaW5z
KHN0YXJ0Tm9kZSkpOwogCi0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSwgaW5uZXJUZXh0KSkgeworICAgIGZv
ciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnBy
ZXZpb3VzKCpub2RlLCBpbm5lclRleHQpKSB7CiAgICAgICAgIGlmIChpczxUZXh0Pigqbm9kZSkp
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGRvd25jYXN0PFRleHQ+KCpub2RlKS5s
ZW5ndGgoKTsKICAgICAgICAgICAgIGlmIChub2RlID09IHBhc3NlZFBvc2l0aW9uLmNvbnRhaW5l
ck5vZGUoKSkKQEAgLTY4NSw3ICs2ODUsNyBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnZhbHVlV2l0aEhhcmRMaW5lQnJlYWtzKCkgY29uc3QKICAgICBnZXROZXh0U29mdEJy
ZWFrKGxpbmUsIGJyZWFrTm9kZSwgYnJlYWtPZmZzZXQpOwogCiAgICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0LT5maXJzdENoaWxkKCk7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGlubmVyVGV4dCkpIHsKKyAgICBm
b3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsIGlubmVyVGV4dCkpIHsKICAgICAgICAgaWYgKGlzPEhU
TUxCUkVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3bGluZUNo
YXJhY3Rlcik7CiAgICAgICAgIGVsc2UgaWYgKGlzPFRleHQ+KCpub2RlKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKaW5kZXggNjZjZTg5NWE2YzdhZDI3ZmY0NzZi
NDJlMzhiY2Q0MzBiNmY4YmE2Zi4uN2Q1OGQ5NzI5OTVhMzljYWE0ODczZTcwNzM5OTE3Nzk5OWU1
MDNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCkBAIC03OCw3
ICs3OCw3IEBAIHZvaWQgSFRNTFRpdGxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENo
aWxkQ2hhbmdlJiBjaGFuZ2UpCiAKIFN0cmluZyBIVE1MVGl0bGVFbGVtZW50Ojp0ZXh0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gVGV4dE5vZGVUcmF2ZXJzYWw6OmNvbnRlbnRzQXNTdHJpbmcodGhp
cyk7CisgICAgcmV0dXJuIFRleHROb2RlVHJhdmVyc2FsOjpjb250ZW50c0FzU3RyaW5nKCp0aGlz
KTsKIH0KIAogU3RyaW5nV2l0aERpcmVjdGlvbiBIVE1MVGl0bGVFbGVtZW50Ojp0ZXh0V2l0aERp
cmVjdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCmluZGV4IGVlYWQx
MzQ2Y2JkZGY5MWJmZWI4ZDM1YWYzNjRlYTBlZDFiYTliZjUuLjhmMjc2ZTc4NjkxNjQ4YzE3YzRk
OWZjMjFiOTBkN2I1ZjdjMjIwNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFk
aW9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUu
Y3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25F
dmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAvLyBXZSBjYW4gb25seSBzdGF5IHdpdGhp
biB0aGUgZm9ybSdzIGNoaWxkcmVuIGlmIHRoZSBmb3JtIGhhc24ndCBiZWVuIGRlbW90ZWQgdG8g
YSBsZWFmIGJlY2F1c2UKICAgICAvLyBvZiBtYWxmb3JtZWQgSFRNTC4KICAgICBOb2RlKiBub2Rl
ID0gJmVsZW1lbnQoKTsKLSAgICB3aGlsZSAoKG5vZGUgPSAoZm9yd2FyZCA/IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSkgOiBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhub2RlKSkpKSB7CisgICAg
d2hpbGUgKChub2RlID0gKGZvcndhcmQgPyBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSA6IE5v
ZGVUcmF2ZXJzYWw6OnByZXZpb3VzKCpub2RlKSkpKSB7CiAgICAgICAgIC8vIE9uY2Ugd2UgZW5j
b3VudGVyIGEgZm9ybSBlbGVtZW50LCB3ZSBrbm93IHdlJ3JlIHRocm91Z2guCiAgICAgICAgIGlm
IChpczxIVE1MRm9ybUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IGJmZTNmNGYxYzlkM2Mz
Y2JlZmI1MmI0MzRhMzM0ODZmNjkxNDIzOGIuLmRmZmU0YjJjMWNkYWY4MDMyY2JhZmY0NWE0Mzcz
NWZiNTU1MjJhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHAKQEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OmlzRW1wdHlWYWx1
ZSgpIGNvbnN0CiAgICAgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KiBpbm5lclRleHQgPSBp
bm5lclRleHRFbGVtZW50KCk7CiAgICAgQVNTRVJUKGlubmVyVGV4dCk7CiAKLSAgICBmb3IgKFRl
eHQqIHRleHQgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oaW5uZXJUZXh0KTsgdGV4
dDsgdGV4dCA9IFRleHROb2RlVHJhdmVyc2FsOjpuZXh0KHRleHQsIGlubmVyVGV4dCkpIHsKKyAg
ICBmb3IgKFRleHQqIHRleHQgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oKmlubmVy
VGV4dCk7IHRleHQ7IHRleHQgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dCgqdGV4dCwgaW5uZXJU
ZXh0KSkgewogICAgICAgICBpZiAodGV4dC0+bGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRD
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCmluZGV4IGE2NjAx
NWI1Yzk4NzZjNDUwYmQ2ZmY3YjM3YTRmN2VkYzdjYTQ1MjEuLmNjNTM0OWEzMmJhYmUxYTU0ZGQ5
OTZlNzEwNTc0YmQyNmYzOTYzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVlRUQ3VlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAK
QEAgLTYxNCw3ICs2MTQsNyBAQCB2b2lkIFZUVEN1ZTo6ZGV0ZXJtaW5lVGV4dERpcmVjdGlvbigp
CiAgICAgLy8gcHJlLW9yZGVyLCBkZXB0aC1maXJzdCB0cmF2ZXJzYWwsIGV4Y2x1ZGluZyBXZWJW
VFQgUnVieSBUZXh0IE9iamVjdHMgYW5kCiAgICAgLy8gdGhlaXIgZGVzY2VuZGFudHMuCiAgICAg
U3RyaW5nQnVpbGRlciBwYXJhZ3JhcGhCdWlsZGVyOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1f
d2ViVlRUTm9kZVRyZWUtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQobm9kZSwgbV93ZWJWVFROb2RlVHJlZS5nZXQoKSkpIHsKKyAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBtX3dlYlZUVE5vZGVUcmVlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KCpub2RlLCBtX3dlYlZUVE5vZGVUcmVlLmdldCgpKSkgewogICAgICAgICAv
LyBGSVhNRTogVGhlIGNvZGUgZG9lcyBub3QgbWF0Y2ggdGhlIGNvbW1lbnQgYWJvdmUuIFRoaXMg
ZG9lcyBub3QgYWN0dWFsbHkgZXhjbHVkZSBSdWJ5IFRleHQgT2JqZWN0IGRlc2NlbmRhbnQuCiAg
ICAgICAgIGlmICghbm9kZS0+aXNUZXh0Tm9kZSgpIHx8IG5vZGUtPmxvY2FsTmFtZSgpID09IHJ0
VGFnKQogICAgICAgICAgICAgY29udGludWU7CkBAIC03NTUsNyArNzU1LDcgQEAgdm9pZCBWVFRD
dWU6Om1hcmtGdXR1cmVBbmRQYXN0Tm9kZXMoQ29udGFpbmVyTm9kZSogcm9vdCwgY29uc3QgTWVk
aWFUaW1lJiBwcmV2aW8KICAgICBpZiAoY3VycmVudFRpbWVzdGFtcCA+IG1vdmllVGltZSkKICAg
ICAgICAgaXNQYXN0Tm9kZSA9IGZhbHNlOwogICAgIAotICAgIGZvciAoTm9kZSogY2hpbGQgPSBy
b290LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoY2hp
bGQsIHJvb3QpKSB7CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqY2hpbGQsIHJvb3QpKSB7CiAgICAg
ICAgIGlmIChjaGlsZC0+bm9kZU5hbWUoKSA9PSB0aW1lc3RhbXBUYWcpIHsKICAgICAgICAgICAg
IE1lZGlhVGltZSBjdXJyZW50VGltZXN0YW1wOwogICAgICAgICAgICAgYm9vbCBjaGVjayA9IFdl
YlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChjaGlsZC0+bm9kZVZhbHVlKCksIGN1cnJlbnRU
aW1lc3RhbXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck5vZGVGaW5kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck5vZGVG
aW5kZXIuY3BwCmluZGV4IDBlNjAyOGFiMDE0NDg5NGMzMWZkZDI5MTYyMWY2MzVlMjdlYjI5YTYu
LjYwMGE5YmIzMjMxZDg5NmZlZTA1OWRhODc4NmU3ZTkxZmEyZjk5MGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTm9kZUZpbmRlci5jcHAKQEAgLTc1LDcgKzc1
LDcgQEAgdm9pZCBJbnNwZWN0b3JOb2RlRmluZGVyOjpwZXJmb3JtU2VhcmNoKE5vZGUqIHBhcmVu
dE5vZGUpCiB2b2lkIEluc3BlY3Rvck5vZGVGaW5kZXI6OnNlYXJjaFVzaW5nRE9NVHJlZVRyYXZl
cnNhbChOb2RlKiBwYXJlbnROb2RlKQogewogICAgIC8vIE1hbnVhbCBwbGFpbiB0ZXh0IHNlYXJj
aC4KLSAgICBmb3IgKGF1dG8qIG5vZGUgPSBwYXJlbnROb2RlOyBub2RlOyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlLCBwYXJlbnROb2RlKSkgeworICAgIGZvciAoYXV0byogbm9kZSA9
IHBhcmVudE5vZGU7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCBwYXJl
bnROb2RlKSkgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBOb2RlOjpURVhUX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IDM2NTM4MjRjYzIyNzVh
ZDJhMGFjNDM5MTgzNGYxODQzMDkwNDNhYzMuLjc3YzA3ZmVhNmJlNjUxOWIyZDlhNTM0Y2UwYWRk
MjZhNzJlMzA3NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAg
LTc1Niw5ICs3NTYsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVk
KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYQogICAgICAgICBjbG9zZXN0
ID0gY2FuZGlkYXRlOwogfQogCi12b2lkIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzQ2FuZGlk
YXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBMYXlvdXRSZWN0JiBzdGFydGlu
Z1JlY3QsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQsIEZv
Y3VzQ2FuZGlkYXRlJiBjbG9zZXN0KQordm9pZCBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c0Nh
bmRpZGF0ZUluQ29udGFpbmVyKE5vZGUmIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYgc3Rh
cnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50
LCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCkKIHsKLSAgICBBU1NFUlQoY29udGFpbmVyKTsKICAg
ICBOb2RlKiBmb2N1c2VkTm9kZSA9IChmb2N1c2VkRnJhbWUoKSAmJiBmb2N1c2VkRnJhbWUoKS0+
ZG9jdW1lbnQoKSkgPyBmb2N1c2VkRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQo
KSA6IDA7CiAKICAgICBFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RX
aXRoaW4oY29udGFpbmVyKTsKQEAgLTc2OSw4ICs3NjgsOCBAQCB2b2lkIEZvY3VzQ29udHJvbGxl
cjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBM
YXlvdQogCiAgICAgdW5zaWduZWQgY2FuZGlkYXRlQ291bnQgPSAwOwogICAgIGZvciAoOyBlbGVt
ZW50OyBlbGVtZW50ID0gKGVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8fCBjYW5TY3Jv
bGxJbkRpcmVjdGlvbihlbGVtZW50LCBkaXJlY3Rpb24pKQotICAgICAgICA/IEVsZW1lbnRUcmF2
ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKGVsZW1lbnQsIGNvbnRhaW5lcikKLSAgICAgICAg
OiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsIGNvbnRhaW5lcikpIHsKKyAgICAgICAg
PyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqZWxlbWVudCwgJmNvbnRh
aW5lcikKKyAgICAgICAgOiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KCplbGVtZW50LCAmY29udGFp
bmVyKSkgewogICAgICAgICBpZiAoZWxlbWVudCA9PSBmb2N1c2VkTm9kZSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCkBAIC03ODUsNyArNzg0LDcgQEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6OmZp
bmRGb2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgTGF5b3UK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGNhbmRpZGF0ZUNvdW50Kys7Ci0gICAg
ICAgIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94ID0gY29udGFpbmVyOworICAgICAg
ICBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCA9ICZjb250YWluZXI7CiAgICAgICAg
IHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoZGlyZWN0aW9uLCBjdXJyZW50LCBjYW5kaWRh
dGUsIGNsb3Nlc3QpOwogICAgIH0KIApAQCAtODA5LDcgKzgwOCw3IEBAIGJvb2wgRm9jdXNDb250
cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5SW5Db250YWluZXIoTm9kZSogY29udGFp
bmVyLCBjb25zCiAKICAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IG5vZGUgd2l0aGluIGN1cnJlbnQg
Y29udGFpbmVyIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCiAgICAgRm9jdXND
YW5kaWRhdGUgZm9jdXNDYW5kaWRhdGU7Ci0gICAgZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWlu
ZXIoY29udGFpbmVyLCBuZXdTdGFydGluZ1JlY3QsIGRpcmVjdGlvbiwgZXZlbnQsIGZvY3VzQ2Fu
ZGlkYXRlKTsKKyAgICBmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcigqY29udGFpbmVyLCBu
ZXdTdGFydGluZ1JlY3QsIGRpcmVjdGlvbiwgZXZlbnQsIGZvY3VzQ2FuZGlkYXRlKTsKIAogICAg
IGlmIChmb2N1c0NhbmRpZGF0ZS5pc051bGwoKSkgewogICAgICAgICAvLyBOb3RoaW5nIHRvIGZv
Y3VzLCBzY3JvbGwgaWYgcG9zc2libGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZvY3VzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
aAppbmRleCAyZmIxZmE1NDAyYzU2ZTlkMWE4MzM4ZDlmY2IyMGVhNmM4Y2MyNmRjLi5mODBkZmY0
ZDQzYzAyMzkzNjk4ODI0YmRlZTc1MjlmM2U4MzQxM2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9j
dXNDb250cm9sbGVyLmgKQEAgLTExOCw3ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIEVsZW1lbnQq
IGZpbmRFbGVtZW50V2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwg
S2V5Ym9hcmRFdmVudCosIEZvY3VzRGlyZWN0aW9uKTsKIAogICAgIGJvb2wgYWR2YW5jZUZvY3Vz
RGlyZWN0aW9uYWxseUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVj
dCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCopOwotICAgIHZv
aWQgZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBM
YXlvdXRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kiwg
Rm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpOworICAgIHZvaWQgZmluZEZvY3VzQ2FuZGlkYXRlSW5D
b250YWluZXIoTm9kZSYgY29udGFpbmVyLCBjb25zdCBMYXlvdXRSZWN0JiBzdGFydGluZ1JlY3Qs
IEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3Qp
OwogCiAgICAgdm9pZCBmb2N1c1JlcGFpbnRUaW1lckZpcmVkKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAKaW5kZXggNTdkN2VhNTZjNTFmMTFkYzhlOGNhZmEwNWRiMDUwMDg5ODcxMzhmMi4uOGVkYWZi
Zjc3Zjg5N2ZjMDZmMjhlNjY3ODc0ZGZkYjA2ZDkwODI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
QEAgLTM0OCw3ICszNDgsNyBAQCBTdHJpbmcgRnJhbWU6OnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2Vs
bChjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiByZWdFeAogICAgIGlmIChhYm92
ZUNlbGwpIHsKICAgICAgICAgLy8gc2VhcmNoIHdpdGhpbiB0aGUgYWJvdmUgY2VsbCB3ZSBmb3Vu
ZCBmb3IgYSBtYXRjaAogICAgICAgICBzaXplX3QgbGVuZ3RoU2VhcmNoZWQgPSAwOyAgICAKLSAg
ICAgICAgZm9yIChUZXh0KiB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVyc2FsOjpmaXJzdFdpdGhp
bihhYm92ZUNlbGwpOyB0ZXh0Tm9kZTsgdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4
dCh0ZXh0Tm9kZSwgYWJvdmVDZWxsKSkgeworICAgICAgICBmb3IgKFRleHQqIHRleHROb2RlID0g
VGV4dE5vZGVUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKCphYm92ZUNlbGwpOyB0ZXh0Tm9kZTsgdGV4
dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dCgqdGV4dE5vZGUsIGFib3ZlQ2VsbCkpIHsK
ICAgICAgICAgICAgIGlmICghdGV4dE5vZGUtPnJlbmRlcmVyKCkgfHwgdGV4dE5vZGUtPnJlbmRl
cmVyKCktPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNodW5rLCBydW4gdGhlIHJl
Z2V4cApAQCAtMzY5LDggKzM2OSwxMCBAQCBTdHJpbmcgRnJhbWU6OnNlYXJjaEZvckxhYmVsc0Fi
b3ZlQ2VsbChjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiByZWdFeAogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIHRha2UgYW4gRWxlbWVu
dCYuCiBTdHJpbmcgRnJhbWU6OnNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGxhYmVscywgRWxlbWVudCogZWxlbWVudCwgc2l6ZV90KiByZXN1bHREaXN0
YW5jZSwgYm9vbCogcmVzdWx0SXNJbkNlbGxBYm92ZSkKIHsKKyAgICBBU1NFUlQoZWxlbWVudCk7
CiAgICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiByZWdFeHAgPSBjcmVhdGVSZWdFeHBG
b3JMYWJlbHMobGFiZWxzKTsKICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyBhZnRlciB3ZSd2ZSBz
ZWVuIHRoaXMgbWFueSBjaGFycwogICAgIGNvbnN0IHVuc2lnbmVkIGludCBjaGFyc1NlYXJjaGVk
VGhyZXNob2xkID0gNTAwOwpAQCAtMzg5LDcgKzM5MSw3IEBAIFN0cmluZyBGcmFtZTo6c2VhcmNo
Rm9yTGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVt
ZW50CiAgICAgLy8gd2FsayBiYWNrd2FyZHMgaW4gdGhlIG5vZGUgdHJlZSwgdW50aWwgYW5vdGhl
ciBlbGVtZW50LCBvciBmb3JtLCBvciBlbmQgb2YgdHJlZQogICAgIGludCB1bnNpZ25lZCBsZW5n
dGhTZWFyY2hlZCA9IDA7CiAgICAgTm9kZSogbjsKLSAgICBmb3IgKG4gPSBOb2RlVHJhdmVyc2Fs
OjpwcmV2aW91cyhlbGVtZW50KTsgbiAmJiBsZW5ndGhTZWFyY2hlZCA8IGNoYXJzU2VhcmNoZWRU
aHJlc2hvbGQ7IG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhuKSkgeworICAgIGZvciAobiA9
IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKCplbGVtZW50KTsgbiAmJiBsZW5ndGhTZWFyY2hlZCA8
IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7IG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cygqbikp
IHsKICAgICAgICAgLy8gV2UgaGl0IGFub3RoZXIgZm9ybSBlbGVtZW50IG9yIHRoZSBzdGFydCBv
ZiB0aGUgZm9ybSAtIGJhaWwgb3V0CiAgICAgICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KCpu
KSB8fCBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbikpCiAgICAgICAgICAgICBicmVhazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggZmNlZjdlYWUzYzJiOWQwMmE5NzBk
NWNiNDczZmI2YTM2Nzk1OTg5Ni4uOTBhM2Y2YWM1OTUzZGZlZWU4NzQwNTNjZWRmNzQzOGNjZDBl
ODllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTc2OCw3ICs3NjgsNyBA
QCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAog
ICAgIHVuc2lnbmVkIGNvbWJpbmF0aW9uc1NvRmFyID0gMTsKIAogICAgIE5vZGUqIHBhc3RMYXN0
Tm9kZSA9IHJhbmdlT2ZSb290Q29udGVudHMtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJhbmdlT2ZSb290Q29udGVudHMtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RM
YXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKKyAgICBmb3IgKE5v
ZGUqIG5vZGUgPSByYW5nZU9mUm9vdENvbnRlbnRzLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0
TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAgICBm
b3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUs
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyhEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlcykpKSB7CiAgICAgICAgICAgICAvLyBGaXJzdCwgYWRkIHRleHQg
dGhhdCBwcmVjZWRlIHRoZSBtYXJrZXIuCiAgICAgICAgICAgICBpZiAocHJlY2VkaW5nVGV4dFN0
YXJ0UG9zaXRpb24gIT0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+
c3RhcnRPZmZzZXQoKSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcAppbmRleCBiNDZjZGE5M2JkMGQyNWMxNTJkZGNlNjUyNmMzZjczZmRhOGVkM2E4Li5mYjFj
ZmE1OGI0ZTg2ZWEzYzRmOWZiZThkNTU2OTg2NzIzNzkwY2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCkBAIC01OCw5ICs1OCwxMCBAQCBzdGF0aWMgQ291
bnRlck1hcHMmIGNvdW50ZXJNYXBzKCkKIC8vIGluY2x1ZGluZyBwc2V1ZG8gZWxlbWVudHMgYXMg
ZGVmaW5lZCBpbiBDU1MgMi4xLgogc3RhdGljIFJlbmRlckVsZW1lbnQqIHByZXZpb3VzSW5QcmVP
cmRlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBFbGVtZW50KiBwcmV2
aW91cyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKHJlbmRlcmVy
LmVsZW1lbnQoKSk7CisgICAgQVNTRVJUKHJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgRWxlbWVu
dCogcHJldmlvdXMgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbygq
cmVuZGVyZXIuZWxlbWVudCgpKTsKICAgICB3aGlsZSAocHJldmlvdXMgJiYgIXByZXZpb3VzLT5y
ZW5kZXJlcigpKQotICAgICAgICBwcmV2aW91cyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3Vz
SW5jbHVkaW5nUHNldWRvKHByZXZpb3VzKTsKKyAgICAgICAgcHJldmlvdXMgPSBFbGVtZW50VHJh
dmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbygqcHJldmlvdXMpOwogICAgIHJldHVybiBw
cmV2aW91cyA/IHByZXZpb3VzLT5yZW5kZXJlcigpIDogMDsKIH0KIApAQCAtNzUsOSArNzYsMTAg
QEAgc3RhdGljIGlubGluZSBFbGVtZW50KiBwYXJlbnRPclBzZXVkb0hvc3RFbGVtZW50KGNvbnN0
IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogLy8gaW5jbHVkaW5nIHBzZXVkbyBlbGVtZW50cyBh
cyBkZWZpbmVkIGluIENTUyAyLjEuCiBzdGF0aWMgUmVuZGVyRWxlbWVudCogcHJldmlvdXNTaWJs
aW5nT3JQYXJlbnQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgRWxlbWVu
dCogcHJldmlvdXMgPSBFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGlu
ZyhyZW5kZXJlci5lbGVtZW50KCkpOworICAgIEFTU0VSVChyZW5kZXJlci5lbGVtZW50KCkpOwor
ICAgIEVsZW1lbnQqIHByZXZpb3VzID0gRWxlbWVudFRyYXZlcnNhbDo6cHNldWRvQXdhcmVQcmV2
aW91c1NpYmxpbmcoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CiAgICAgd2hpbGUgKHByZXZpb3VzICYm
ICFwcmV2aW91cy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcHJldmlvdXMgPSBFbGVtZW50VHJhdmVy
c2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyhwcmV2aW91cyk7CisgICAgICAgIHByZXZp
b3VzID0gRWxlbWVudFRyYXZlcnNhbDo6cHNldWRvQXdhcmVQcmV2aW91c1NpYmxpbmcoKnByZXZp
b3VzKTsKICAgICBpZiAocHJldmlvdXMpCiAgICAgICAgIHJldHVybiBwcmV2aW91cy0+cmVuZGVy
ZXIoKTsKICAgICBwcmV2aW91cyA9IHBhcmVudE9yUHNldWRvSG9zdEVsZW1lbnQocmVuZGVyZXIp
OwpAQCAtOTMsMTEgKzk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmVSZW5kZXJlcnNFbGVt
ZW50c1NpYmxpbmdzKGNvbnN0IFJlbmRlckVsZW1lbnQmIGZpcnN0LCBjb25zCiAvLyBpbmNsdWRp
bmcgcHNldWRvIGVsZW1lbnRzIGFzIGRlZmluZWQgaW4gQ1NTIDIuMS4KIHN0YXRpYyBSZW5kZXJF
bGVtZW50KiBuZXh0SW5QcmVPcmRlcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRWxlbWVudCogc3RheVdpdGhpbiwgYm9vbCBza2lwRGVzY2VuZGFudHMgPSBmYWxzZSkKIHsK
LSAgICBFbGVtZW50KiBzZWxmID0gcmVuZGVyZXIuZWxlbWVudCgpOworICAgIEFTU0VSVChyZW5k
ZXJlci5lbGVtZW50KCkpOworICAgIEVsZW1lbnQmIHNlbGYgPSAqcmVuZGVyZXIuZWxlbWVudCgp
OwogICAgIEVsZW1lbnQqIG5leHQgPSBza2lwRGVzY2VuZGFudHMgPyBFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihzZWxmLCBzdGF5V2l0aGluKSA6
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oc2VsZiwgc3RheVdpdGhpbik7
CiAgICAgd2hpbGUgKG5leHQgJiYgIW5leHQtPnJlbmRlcmVyKCkpCi0gICAgICAgIG5leHQgPSBz
a2lwRGVzY2VuZGFudHMgPyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvU2tp
cHBpbmdDaGlsZHJlbihuZXh0LCBzdGF5V2l0aGluKSA6IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJ
bmNsdWRpbmdQc2V1ZG8obmV4dCwgc3RheVdpdGhpbik7Ci0gICAgcmV0dXJuIG5leHQgPyBuZXh0
LT5yZW5kZXJlcigpIDogMDsKKyAgICAgICAgbmV4dCA9IHNraXBEZXNjZW5kYW50cyA/IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKCpuZXh0LCBz
dGF5V2l0aGluKSA6IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oKm5leHQs
IHN0YXlXaXRoaW4pOworICAgIHJldHVybiBuZXh0ID8gbmV4dC0+cmVuZGVyZXIoKSA6IG51bGxw
dHI7CiB9CiAKIHN0YXRpYyBib29sIHBsYW5Db3VudGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wmIGlzUmVzZXQsIGludCYgdmFs
dWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAppbmRleCBk
MmU3ZDQwNTRlOTViZmViMGI1NjVlNzRmNDIzMjYxZmQ0YzdhOTZkLi44ZDhmYWJhMjQ5Mjg4Y2I5
OTYyMDYyYWQ0YjRlMDNmYjNjM2NlM2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0SXRlbS5jcHAKQEAgLTEyNiwxOCArMTI2LDE4IEBAIHN0YXRpYyBFbGVtZW50KiBl
bmNsb3NpbmdMaXN0KGNvbnN0IFJlbmRlckxpc3RJdGVtJiBsaXN0SXRlbSkKIC8vIFJldHVybnMg
dGhlIG5leHQgbGlzdCBpdGVtIHdpdGggcmVzcGVjdCB0byB0aGUgRE9NIG9yZGVyLgogc3RhdGlj
IFJlbmRlckxpc3RJdGVtKiBuZXh0TGlzdEl0ZW0oY29uc3QgRWxlbWVudCYgbGlzdE5vZGUsIGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgZm9yIChjb25zdCBFbGVtZW50KiBuZXh0ID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbygmZWxlbWVudCwgJmxpc3ROb2Rl
KTsgbmV4dDsgKSB7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBuZXh0ID0gRWxlbWVudFRyYXZl
cnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhlbGVtZW50LCAmbGlzdE5vZGUpOyBuZXh0OyApIHsK
ICAgICAgICAgYXV0byogcmVuZGVyZXIgPSBuZXh0LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAo
IXJlbmRlcmVyIHx8IGlzSFRNTExpc3RFbGVtZW50KCpuZXh0KSkgewogICAgICAgICAgICAgLy8g
V2UndmUgZm91bmQgYSBuZXN0ZWQsIGluZGVwZW5kZW50IGxpc3Qgb3IgYW4gdW5yZW5kZXJlZCBF
bGVtZW50IDogbm90aGluZyB0byBkbyBoZXJlLgotICAgICAgICAgICAgbmV4dCA9IEVsZW1lbnRU
cmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKG5leHQsICZsaXN0
Tm9kZSk7CisgICAgICAgICAgICBuZXh0ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGlu
Z1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4oKm5leHQsICZsaXN0Tm9kZSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpczxSZW5kZXJMaXN0SXRlbT4oKnJl
bmRlcmVyKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0SXRlbT4ocmVu
ZGVyZXIpOwogCi0gICAgICAgIG5leHQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5n
UHNldWRvKG5leHQsICZsaXN0Tm9kZSk7CisgICAgICAgIG5leHQgPSBFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0SW5jbHVkaW5nUHNldWRvKCpuZXh0LCAmbGlzdE5vZGUpOwogICAgIH0KIAogICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMTU2LDcgKzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyTGlz
dEl0ZW0qIG5leHRMaXN0SXRlbShjb25zdCBFbGVtZW50JiBsaXN0Tm9kZSkKIC8vIFJldHVybnMg
dGhlIHByZXZpb3VzIGxpc3QgaXRlbSB3aXRoIHJlc3BlY3QgdG8gdGhlIERPTSBvcmRlci4KIHN0
YXRpYyBSZW5kZXJMaXN0SXRlbSogcHJldmlvdXNMaXN0SXRlbShjb25zdCBFbGVtZW50KiBsaXN0
Tm9kZSwgY29uc3QgUmVuZGVyTGlzdEl0ZW0mIGl0ZW0pCiB7Ci0gICAgZm9yIChjb25zdCBFbGVt
ZW50KiBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8o
Jml0ZW0uZWxlbWVudCgpLCBsaXN0Tm9kZSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBFbGVtZW50VHJh
dmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50LCBsaXN0Tm9kZSkpIHsKKyAg
ICBmb3IgKGNvbnN0IEVsZW1lbnQqIGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91
c0luY2x1ZGluZ1BzZXVkbyhpdGVtLmVsZW1lbnQoKSwgbGlzdE5vZGUpOyBjdXJyZW50OyBjdXJy
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8oKmN1cnJlbnQs
IGxpc3ROb2RlKSkgewogICAgICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGN1cnJlbnQt
PnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghaXM8UmVuZGVyTGlzdEl0ZW0+KHJlbmRlcmVyKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBSZW5kZXJM
aXN0SXRlbSogcHJldmlvdXNMaXN0SXRlbShjb25zdCBFbGVtZW50KiBsaXN0Tm9kZSwgY29uc3Qg
UmVuZGVyTGlzCiAgICAgICAgIC8vIGJlIGEgbGlzdCBpdGVtIGl0c2VsZi4gV2UgbmVlZCB0byBl
eGFtaW5lIGl0LCBzbyB3ZSBkbyB0aGlzIHRvIGNvdW50ZXJhY3QKICAgICAgICAgLy8gdGhlIHBy
ZXZpb3VzSW5jbHVkaW5nUHNldWRvKCkgdGhhdCB3aWxsIGJlIGRvbmUgYnkgdGhlIGxvb3AuCiAg
ICAgICAgIGlmIChvdGhlckxpc3QpCi0gICAgICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZl
cnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhvdGhlckxpc3QpOworICAgICAgICAgICAgY3VycmVu
dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oKm90aGVyTGlzdCk7CiAg
ICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAppbmRleCA0Mzk3MDBhMjFkMDc1MjYxOWE2
NWY2ZjEyMzQ1NzFkMGZjMWU3Y2JlLi43M2QzOTg3NjlmMjhlMzQwZTM2YjE4MGQ3YmFlZTA3YjE3
MTE2Y2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmNwcApAQCAtNjE0LDEyICs2MTQsMTEgQEAgc3RhdGljIGJvb2wgYm94SW50ZXJz
ZWN0c1JlZ2lvbihMYXlvdXRVbml0IGxvZ2ljYWxUb3BGb3JCb3gsIExheW91dFVuaXQgbG9naWNh
bEIKIH0KIAogLy8gUmV0cmlldmUgdGhlIG5leHQgbm9kZSB0byBiZSB2aXNpdGVkIHdoaWxlIGNv
bXB1dGluZyB0aGUgcmFuZ2VzIGluc2lkZSBhIHJlZ2lvbi4KLXN0YXRpYyBOb2RlKiBuZXh0Tm9k
ZUluc2lkZUNvbnRlbnRFbGVtZW50KGNvbnN0IE5vZGUqIGN1cnJOb2RlLCBjb25zdCBFbGVtZW50
KiBjb250ZW50RWxlbWVudCkKK3N0YXRpYyBOb2RlKiBuZXh0Tm9kZUluc2lkZUNvbnRlbnRFbGVt
ZW50KGNvbnN0IE5vZGUmIGN1cnJOb2RlLCBjb25zdCBFbGVtZW50KiBjb250ZW50RWxlbWVudCkK
IHsKLSAgICBBU1NFUlQoY3Vyck5vZGUpOwogICAgIEFTU0VSVChjb250ZW50RWxlbWVudCAmJiBj
b250ZW50RWxlbWVudC0+aXNOYW1lZEZsb3dDb250ZW50Tm9kZSgpKTsKIAotICAgIGlmIChjdXJy
Tm9kZS0+cmVuZGVyZXIoKSAmJiBjdXJyTm9kZS0+cmVuZGVyZXIoKS0+aXNTVkdSb290KCkpCisg
ICAgaWYgKGN1cnJOb2RlLnJlbmRlcmVyKCkgJiYgY3Vyck5vZGUucmVuZGVyZXIoKS0+aXNTVkdS
b290KCkpCiAgICAgICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihjdXJyTm9kZSwgY29udGVudEVsZW1lbnQpOwogCiAgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6
Om5leHQoY3Vyck5vZGUsIGNvbnRlbnRFbGVtZW50KTsKQEAgLTY2MCw3ICs2NTksNyBAQCB2b2lk
IFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYg
cmFuZ2VPYmplY3RzLCBjb25zdAogICAgICAgICBib29sIHNraXBPdmVyT3V0c2lkZU5vZGVzID0g
ZmFsc2U7CiAgICAgICAgIE5vZGUqIGxhc3RFbmROb2RlID0gbnVsbHB0cjsKIAotICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgPSBjb250ZW50RWxlbWVudDsgbm9kZTsgbm9kZSA9IG5leHROb2RlSW5z
aWRlQ29udGVudEVsZW1lbnQobm9kZSwgY29udGVudEVsZW1lbnQpKSB7CisgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA9IGNvbnRlbnRFbGVtZW50OyBub2RlOyBub2RlID0gbmV4dE5vZGVJbnNpZGVD
b250ZW50RWxlbWVudCgqbm9kZSwgY29udGVudEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmICgh
cmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5jcHAKaW5kZXggODkxYzBjMjRiMTZmMDUwMzdiZTdkZWE5OGVlYTRlOGQw
ZGU1MTA3MC4uNGEzNWEwMTBkOWM5MTBhMTU3ZDgwM2ZkMjdiNTY2OTg5ODA1YjFkOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtODkwLDkgKzg5MCwxMCBAQCB2
b2lkIFJlbmRlclZpZXc6OnNwbGl0U2VsZWN0aW9uQmV0d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRl
ck9iamVjdCogc3RhcnQsIGludCBzdAogICAgIGlmIChzdGFydCAmJiBlbmQpIHsKICAgICAgICAg
Tm9kZSogc3RhcnROb2RlID0gc3RhcnQtPm5vZGUoKTsKICAgICAgICAgTm9kZSogZW5kTm9kZSA9
IGVuZC0+bm9kZSgpOwotICAgICAgICBOb2RlKiBzdG9wTm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHRTa2lwcGluZ0NoaWxkcmVuKGVuZE5vZGUpOworICAgICAgICBBU1NFUlQoZW5kTm9kZSk7Cisg
ICAgICAgIE5vZGUqIHN0b3BOb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRy
ZW4oKmVuZE5vZGUpOwogCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9k
ZSAhPSBzdG9wTm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKKyAgICAg
ICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aE5vZGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5jcHAK
aW5kZXggMDMzMmZkZWNmN2E1MzlhYmM5NDdmYzMwNDgxMGM0NzVhM2I2NzY1My4uYjFmMjI2NDE4
ZDgyNTYyYzQ5N2U2OTRmYTNhYjhjODYxMTRlMjIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoTm9kZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9k
ZVNldC5jcHAKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIE5vZGVTZXQ6OnRyYXZlcnNhbFNvcnQo
KSBjb25zdAogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4+IHNvcnRlZE5vZGVzOwogICAgIHNvcnRl
ZE5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZUNvdW50KTsKIAotICAgIGZvciAoTm9k
ZSogbm9kZSA9IGZpbmRSb290Tm9kZShtX25vZGVzLmZpcnN0KCkuZ2V0KCkpOyBub2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZp
bmRSb290Tm9kZShtX25vZGVzLmZpcnN0KCkuZ2V0KCkpOyBub2RlOyBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGVzLmNvbnRhaW5zKG5vZGUpKQog
ICAgICAgICAgICAgc29ydGVkTm9kZXMuYXBwZW5kKG5vZGUpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0
ZXAuY3BwCmluZGV4IGM0Y2ZkNWE2YmQ5NDdkODBkZDI0ZmMyNGNmOGVjNDkwZWY0MDIzZTkuLjVh
MWMwMjk4NDRmNDUwOGVhMGY5MjkyN2QyODEwZmJlYjMxMWFjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aFN0ZXAuY3BwCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2Rl
JiBjb250ZXh0LCBOb2RlU2V0JiBub2RlcykgY29uc3QKICAgICAgICAgY2FzZSBEZXNjZW5kYW50
QXhpczoKICAgICAgICAgICAgIGlmIChjb250ZXh0LmlzQXR0cmlidXRlTm9kZSgpKSAvLyBJbiBY
UGF0aCBtb2RlbCwgYXR0cmlidXRlIG5vZGVzIGRvIG5vdCBoYXZlIGNoaWxkcmVuLgogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnRleHQu
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCAmY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnRleHQuZmlyc3RDaGls
ZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgJmNvbnRleHQpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKCpub2RlLCBEZXNjZW5kYW50QXhpcywg
bV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChub2RlKTsKICAg
ICAgICAgICAgIH0KQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5v
ZGUmIGNvbnRleHQsIE5vZGVTZXQmIG5vZGVzKSBjb25zdAogICAgICAgICBjYXNlIEZvbGxvd2lu
Z0F4aXM6CiAgICAgICAgICAgICBpZiAoY29udGV4dC5pc0F0dHJpYnV0ZU5vZGUoKSkgewogICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxBdHRyJj4oY29udGV4dCkub3du
ZXJFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlKSkpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KCpub2RlKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKCpub2RlLCBGb2xsb3dpbmdBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChub2RlKTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTksNyAr
MzE5LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlJiBjb250ZXh0LCBOb2RlU2V0JiBu
b2RlcykgY29uc3QKICAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcGFyZW50
LT5uZXh0U2libGluZygpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKCpub2RlLCBGb2xsb3dpbmdBeGlz
LCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQo
bm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gbm9kZS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGNoaWxkLCBu
b2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUt
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqY2hpbGQs
IG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKCpj
aGlsZCwgRm9sbG93aW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVzLmFwcGVuZChjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlJiBjb250ZXh0
LCBOb2RlU2V0JiBub2RlcykgY29uc3QKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBub2RlID0gJmNvbnRleHQ7CiAgICAgICAgICAgICB3aGlsZSAoQ29udGFpbmVyTm9kZSogcGFy
ZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChub2RlID0g
Tm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSk7IG5vZGUgIT0gcGFyZW50OyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cygqbm9kZSk7IG5vZGUgIT0gcGFyZW50OyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoKm5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlTWF0Y2hlcygqbm9kZSwgUHJlY2VkaW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobm9kZSk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSYgY29udGV4dCwg
Tm9kZVNldCYgbm9kZXMpIGNvbnN0CiAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKCZjb250
ZXh0KTsKICAgICAgICAgICAgIGlmIChjb250ZXh0LmlzQXR0cmlidXRlTm9kZSgpKSAvLyBJbiBY
UGF0aCBtb2RlbCwgYXR0cmlidXRlIG5vZGVzIGRvIG5vdCBoYXZlIGNoaWxkcmVuLgogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnRleHQu
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCAmY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnRleHQuZmlyc3RDaGls
ZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgJmNvbnRleHQpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKCpub2RlLCBEZXNjZW5kYW50T3JTZWxm
QXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChub2Rl
KTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0
aWwuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoVXRpbC5jcHAKaW5kZXggNjBiNGE2OGJl
MmNkNjVlMTVlMzY4ZmIzZTgyZDgwNTgxODQyMWFlMS4uZGFhZjlmMjIxNjU4N2U5ZTllNzRhOTkw
NjFjMjAwYmZmMTJiYTM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoVXRp
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoVXRpbC5jcHAKQEAgLTUxLDcgKzUx
LDcgQEAgU3RyaW5nIHN0cmluZ1ZhbHVlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICByZXR1cm4g
bm9kZS0+bm9kZVZhbHVlKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoaXNS
b290RG9tTm9kZShub2RlKSB8fCBub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFRleHROb2RlVHJhdmVyc2FsOjpjb250ZW50c0FzU3RyaW5nKG5vZGUpOworICAg
ICAgICAgICAgICAgIHJldHVybiBUZXh0Tm9kZVRyYXZlcnNhbDo6Y29udGVudHNBc1N0cmluZygq
bm9kZSk7CiAgICAgfQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCmluZGV4IDkxN2I4NTQ0MmMyNGQ0M2Y1OWNkOGJiMDFmZTFmYmM4Yjkw
OTU2M2YuLjYzMTE0MzY0MTljYTUyYWNkZDU0ZDAzN2FlNDZjY2M4NGYwMzkzMTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtMTc2Myw3ICsxNzYzLDcgQEAgc3RhdGlj
IFdlYkZyYW1lTG9hZFR5cGUgdG9XZWJGcmFtZUxvYWRUeXBlKEZyYW1lTG9hZFR5cGUgZnJhbWVM
b2FkVHlwZSkKICAgICBET01SYW5nZSAqcHJldmlvdXNET01SYW5nZSA9IG5pbDsKICAgICBpZCBw
cmV2aW91c01ldGFkYXRhID0gbmlsOwogICAgIAotICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7
IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CisgICAgZm9yIChOb2Rl
KiBub2RlID0gcm9vdDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7
CiAgICAgICAgIGF1dG8gbWFya2VycyA9IGRvY3VtZW50LT5tYXJrZXJzKCkubWFya2Vyc0Zvcihu
b2RlKTsKICAgICAgICAgZm9yIChhdXRvIG1hcmtlciA6IG1hcmtlcnMpIHsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCBj
NDUwNmU4YjE1NWVmNjc0YWQzMDZjYjg5M2EyMmZlNDkzNjRiNDRiLi5iNjk4ODcyM2IwNzQ0YmE2
ZDQ5NTMzMmUyZDQyMWUyYjg4YjUwYzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQpAQCAtNDI0LDggKzQyNCwxMCBAQCBzdGF0
aWMgUmVndWxhckV4cHJlc3Npb24qIHJlZ0V4cEZvckxhYmVscyhOU0FycmF5ICpsYWJlbHMpCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIHRha2UgYW4gRWxl
bWVudCYuCiBzdGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoRnJh
bWUqIGZyYW1lLCBOU0FycmF5KiBsYWJlbHMsIEVsZW1lbnQqIGVsZW1lbnQsIHNpemVfdCogcmVz
dWx0RGlzdGFuY2UsIGJvb2wqIHJlc3VsdElzSW5DZWxsQWJvdmUpCiB7CisgICAgQVNTRVJUKGVs
ZW1lbnQpOwogICAgIFJlZ3VsYXJFeHByZXNzaW9uKiByZWdFeHAgPSByZWdFeHBGb3JMYWJlbHMo
bGFiZWxzKTsKICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyBhZnRlciB3ZSd2ZSBzZWVuIHRoaXMg
bWFueSBjaGFycwogICAgIGNvbnN0IHVuc2lnbmVkIGludCBjaGFyc1NlYXJjaGVkVGhyZXNob2xk
ID0gNTAwOwpAQCAtNDQ0LDkgKzQ0Niw3IEBAIHN0YXRpYyBOU1N0cmluZyogc2VhcmNoRm9yTGFi
ZWxzQmVmb3JlRWxlbWVudChGcmFtZSogZnJhbWUsIE5TQXJyYXkqIGxhYmVscywgRWxlCiAgICAg
Ly8gd2FsayBiYWNrd2FyZHMgaW4gdGhlIG5vZGUgdHJlZSwgdW50aWwgYW5vdGhlciBlbGVtZW50
LCBvciBmb3JtLCBvciBlbmQgb2YgdHJlZQogICAgIHVuc2lnbmVkIGxlbmd0aFNlYXJjaGVkID0g
MDsKICAgICBOb2RlKiBuOwotICAgIGZvciAobiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKGVs
ZW1lbnQpOwotICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRocmVz
aG9sZDsKLSAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG4pKSB7CisgICAgZm9y
IChuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoKmVsZW1lbnQpOyBuICYmIGxlbmd0aFNlYXJj
aGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9sZDsgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3Vz
KCpuKSkgewogICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50PigqbikgfHwgaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oKm4pKSB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgYW5vdGhlciBm
b3JtIGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIC0gYmFpbCBvdXQKICAgICAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAKaW5kZXggZmM0ZWMwMmQ1OGM0NWEwOTE3MjM4NTdjZjAxYzhiZDhmMDFkNmVmMy4uYjA1
NDYwYTk4MzcxNjgxMzllOGI1OTdmY2YyMjBmNWY0ZTk2N2U5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC02MTMsNyArNjEzLDcgQEAg
Ym9vbCBXZWJGcmFtZTo6Y29udGFpbnNBbnlGb3JtRWxlbWVudHMoKSBjb25zdAogICAgIGlmICgh
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9
IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQobm9kZSkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAg
ICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50Pigqbm9kZSkpCkBAIC02MzEsNyArNjMxLDcgQEAg
Ym9vbCBXZWJGcmFtZTo6Y29udGFpbnNBbnlGb3JtQ29udHJvbHMoKSBjb25zdAogICAgIGlmICgh
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9
IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQobm9kZSkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAg
ICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxTZWxlY3RFbGVt
ZW50Pigqbm9kZSkgfHwgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>