<?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>5688</bug_id>
          
          <creation_ts>2005-11-09 08:55:32 -0800</creation_ts>
          <short_desc>speed up JavaScript parsing by not creating a UString just to parse</short_desc>
          <delta_ts>2005-12-16 00:05:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>23870</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-09 08:55:32 -0800</bug_when>
    <thetext> </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23871</commentid>
    <comment_count>1</comment_count>
      <attachid>4651</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-09 08:55:59 -0800</bug_when>
    <thetext>Created attachment 4651
remove unnecessary use of UString in parsing code path</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23874</commentid>
    <comment_count>2</comment_count>
      <attachid>4651</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-11-09 09:23:45 -0800</bug_when>
    <thetext>Comment on attachment 4651
remove unnecessary use of UString in parsing code path

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25767</commentid>
    <comment_count>3</comment_count>
      <attachid>5017</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-10 08:13:41 -0800</bug_when>
    <thetext>Created attachment 5017
patch that includes WebCore changes too</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4651</attachid>
            <date>2005-11-09 08:55:59 -0800</date>
            <delta_ts>2005-12-10 08:08:25 -0800</delta_ts>
            <desc>remove unnecessary use of UString in parsing code path</desc>
            <filename>EvalQStringToUStringPatch.txt</filename>
            <type>text/plain</type>
            <size>9606</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNzYKZGlmZiAtcCAtdSAtcjEuNzYgSmF2YVNjcmlwdENvcmUva2pzL2ludGVy
bmFsLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAk0IE9jdCAyMDA1IDAx
OjQzOjU4IC0wMDAwCTEuNzYKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJMjUg
T2N0IDIwMDUgMTU6Mjg6MjkgLTAwMDAKQEAgLTY2MSw2NSArNjYxLDUwIEBAIGJvb2wgSW50ZXJw
cmV0ZXJJbXA6OmNoZWNrU3ludGF4KGNvbnN0IFUKICAgSW50ZXJwcmV0ZXJMb2NrIGxvY2s7CiAK
ICAgLy8gUGFyc2VyOjpwYXJzZSgpIHJldHVybnMgMCBpbiBhIHN5bnRheCBlcnJvciBvY2N1cnMs
IHNvIHdlIGp1c3QgY2hlY2sgZm9yIHRoYXQKLSAgU2hhcmVkUHRyPFByb2dyYW1Ob2RlPiBwcm9n
Tm9kZSA9IFBhcnNlcjo6cGFyc2UoVVN0cmluZygpLCAwLCBjb2RlLmRhdGEoKSxjb2RlLnNpemUo
KSwwLDAsMCk7CisgIFNoYXJlZFB0cjxQcm9ncmFtTm9kZT4gcHJvZ05vZGUgPSBQYXJzZXI6OnBh
cnNlKFVTdHJpbmcoKSwgMCwgY29kZS5kYXRhKCksIGNvZGUuc2l6ZSgpLCAwLCAwLCAwKTsKICAg
cmV0dXJuIHByb2dOb2RlOwogfQogCi1Db21wbGV0aW9uIEludGVycHJldGVySW1wOjpldmFsdWF0
ZShjb25zdCBVU3RyaW5nICZjb2RlLCBWYWx1ZUltcCAqdGhpc1YsIGNvbnN0IFVTdHJpbmcgJnNv
dXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcikKK0NvbXBsZXRpb24gSW50ZXJwcmV0ZXJJ
bXA6OmV2YWx1YXRlKGNvbnN0IFVDaGFyICpjb2RlLCBpbnQgY29kZUxlbmd0aCwgVmFsdWVJbXAg
KnRoaXNWLCBjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIp
CiB7CiAgIEludGVycHJldGVyTG9jayBsb2NrOwogCiAgIC8vIHByZXZlbnQgYWdhaW5zdCBpbmZp
bml0ZSByZWN1cnNpb24KLSAgaWYgKHJlY3Vyc2lvbiA+PSAyMCkgewotI2lmIEFQUExFX0NIQU5H
RVMKLSAgICBDb21wbGV0aW9uIHJlc3VsdCA9IENvbXBsZXRpb24oVGhyb3csIEVycm9yOjpjcmVh
dGUoJmdsb2JFeGVjLCBHZW5lcmFsRXJyb3IsICJSZWN1cnNpb24gdG9vIGRlZXAiKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csRXJyb3I6
OmNyZWF0ZSgmZ2xvYkV4ZWMsIEdlbmVyYWxFcnJvciwgIlJlY3Vyc2lvbiB0b28gZGVlcCIpKTsK
LSNlbmRpZgotICB9CisgIGlmIChyZWN1cnNpb24gPj0gMjApCisgICAgcmV0dXJuIENvbXBsZXRp
b24oVGhyb3csIEVycm9yOjpjcmVhdGUoJmdsb2JFeGVjLCBHZW5lcmFsRXJyb3IsICJSZWN1cnNp
b24gdG9vIGRlZXAiKSk7CiAKICAgLy8gcGFyc2UgdGhlIHNvdXJjZSBjb2RlCiAgIGludCBzaWQ7
CiAgIGludCBlcnJMaW5lOwogICBVU3RyaW5nIGVyck1zZzsKLSAgU2hhcmVkUHRyPFByb2dyYW1O
b2RlPiBwcm9nTm9kZSA9IFBhcnNlcjo6cGFyc2Uoc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1i
ZXIsIGNvZGUuZGF0YSgpLGNvZGUuc2l6ZSgpLCZzaWQsJmVyckxpbmUsJmVyck1zZyk7CisgIFNo
YXJlZFB0cjxQcm9ncmFtTm9kZT4gcHJvZ05vZGUgPSBQYXJzZXI6OnBhcnNlKHNvdXJjZVVSTCwg
c3RhcnRpbmdMaW5lTnVtYmVyLCBjb2RlLCBjb2RlTGVuZ3RoLCAmc2lkLCAmZXJyTGluZSwgJmVy
ck1zZyk7CiAKICAgLy8gbm90aWZ5IGRlYnVnZ2VyIHRoYXQgc291cmNlIGhhcyBiZWVuIHBhcnNl
ZAogICBpZiAoZGJnKSB7Ci0gICAgYm9vbCBjb250ID0gZGJnLT5zb3VyY2VQYXJzZWQoJmdsb2JF
eGVjLCBzaWQsIHNvdXJjZVVSTCwgY29kZSwgZXJyTGluZSk7CisgICAgYm9vbCBjb250ID0gZGJn
LT5zb3VyY2VQYXJzZWQoJmdsb2JFeGVjLCBzaWQsIHNvdXJjZVVSTCwgVVN0cmluZyhjb2RlLCBj
b2RlTGVuZ3RoKSwgZXJyTGluZSk7CiAgICAgaWYgKCFjb250KQogICAgICAgcmV0dXJuIENvbXBs
ZXRpb24oQnJlYWspOwogICB9CiAgIAogICAvLyBubyBwcm9ncmFtIG5vZGUgbWVhbnMgYSBzeW50
YXggZXJyb3Igb2NjdXJyZWQKLSAgaWYgKCFwcm9nTm9kZSkgewotICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZSgmZ2xvYkV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUs
IHNpZCwgJnNvdXJjZVVSTCk7Ci0gICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csZXJyKTsKLSAg
fQorICBpZiAoIXByb2dOb2RlKQorICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LCBFcnJvcjo6
Y3JlYXRlKCZnbG9iRXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc2lkLCAmc291
cmNlVVJMKSk7CiAKICAgZ2xvYkV4ZWMuY2xlYXJFeGNlcHRpb24oKTsKIAogICByZWN1cnNpb24r
KzsKIAogICBPYmplY3RJbXAgKmdsb2JhbE9iaiA9IGdsb2JhbE9iamVjdCgpOwotICBPYmplY3RJ
bXAgKnRoaXNPYmogPSBnbG9iYWxPYmplY3QoKTsKKyAgT2JqZWN0SW1wICp0aGlzT2JqID0gZ2xv
YmFsT2JqOwogCi0gIGlmICh0aGlzVikgewotICAgIC8vICJ0aGlzIiBtdXN0IGJlIGFuIG9iamVj
dC4uLiB1c2Ugc2FtZSBydWxlcyBhcyBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkoKQotICAgIGlm
ICh0aGlzVi0+aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgIHRoaXNPYmogPSBnbG9iYWxPYmpl
Y3QoKTsKLSAgICBlbHNlIHsKKyAgLy8gInRoaXMiIG11c3QgYmUgYW4gb2JqZWN0Li4uIHVzZSBz
YW1lIHJ1bGVzIGFzIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSgpCisgIGlmICh0aGlzViAmJiAh
dGhpc1YtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICB0aGlzT2JqID0gdGhpc1YtPnRvT2Jq
ZWN0KCZnbG9iRXhlYyk7Ci0gICAgfQotICB9CiAKICAgQ29tcGxldGlvbiByZXM7Ci0gIGlmIChn
bG9iRXhlYy5oYWRFeGNlcHRpb24oKSkgewotICAgIC8vIHRoZSB0aGlzQXJnLT50b09iamVjdCgp
IGNvbnZlcnNpb24gYWJvdmUgbWlnaHQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uIC0gaWYgc28s
Ci0gICAgLy8gcHJvcGFnYXRlIGl0IGJhY2sKKyAgaWYgKGdsb2JFeGVjLmhhZEV4Y2VwdGlvbigp
KQorICAgIC8vIHRoZSB0aGlzVi0+dG9PYmplY3QoKSBjb252ZXJzaW9uIGFib3ZlIG1pZ2h0IGhh
dmUgdGhyb3duIGFuIGV4Y2VwdGlvbiAtIGlmIHNvLCBwcm9wYWdhdGUgaXQKICAgICByZXMgPSBD
b21wbGV0aW9uKFRocm93LCBnbG9iRXhlYy5leGNlcHRpb24oKSk7Ci0gIH0KICAgZWxzZSB7CiAg
ICAgLy8gZXhlY3V0ZSB0aGUgY29kZQogICAgIENvbnRleHRJbXAgY3R4KGdsb2JhbE9iaiwgdGhp
cywgdGhpc09iaik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNDMKZGlmZiAtcCAtdSAtcjEuNDMgSmF2YVNjcmlwdENvcmUv
a2pzL2ludGVybmFsLmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCTYgT2N0IDIw
MDUgMDE6MTM6MTcgLTAwMDAJMS40MworKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmgJ
MjUgT2N0IDIwMDUgMTU6Mjg6MjkgLTAwMDAKQEAgLTI2NCw3ICsyNjQsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICAgIEV4ZWNTdGF0ZSAqZ2xvYmFsRXhlYygpIHsgcmV0dXJuICZnbG9iRXhlYzsg
fQogICAgIGJvb2wgY2hlY2tTeW50YXgoY29uc3QgVVN0cmluZyAmY29kZSk7Ci0gICAgQ29tcGxl
dGlvbiBldmFsdWF0ZShjb25zdCBVU3RyaW5nICZjb2RlLCBWYWx1ZUltcCAqdGhpc1YsIGNvbnN0
IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgQ29tcGxl
dGlvbiBldmFsdWF0ZShjb25zdCBVQ2hhciAqY29kZSwgaW50IGNvZGVMZW5ndGgsIFZhbHVlSW1w
ICp0aGlzViwgY29uc3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVy
KTsKICAgICBEZWJ1Z2dlciAqZGVidWdnZXIoKSBjb25zdCB7IHJldHVybiBkYmc7IH0KICAgICB2
b2lkIHNldERlYnVnZ2VyKERlYnVnZ2VyICpkKSB7IGRiZyA9IGQ7IH0KIApJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zMQpkaWZmIC1wIC11IC1yMS4zMSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIu
Y3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCTMgT2N0IDIwMDUgMjE6
MTE6NDkgLTAwMDAJMS4zMQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAky
NSBPY3QgMjAwNSAxNToyODoyOSAtMDAwMApAQCAtMTI0LDE2ICsxMjQsMTUgQEAgYm9vbCBJbnRl
cnByZXRlcjo6Y2hlY2tTeW50YXgoY29uc3QgVVN0cgogICByZXR1cm4gcmVwLT5jaGVja1N5bnRh
eChjb2RlKTsKIH0KIAotQ29tcGxldGlvbiBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoY29uc3QgVVN0
cmluZyAmY29kZSwgVmFsdWVJbXAgKnRoaXNWLCBjb25zdCBVU3RyaW5nICYpCitDb21wbGV0aW9u
IEludGVycHJldGVyOjpldmFsdWF0ZShjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFy
dGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcmIGNvZGUsIFZhbHVlSW1wICp0aGlzVikKIHsK
LSAgcmV0dXJuIGV2YWx1YXRlKFVTdHJpbmcoKSwgMCwgY29kZSwgdGhpc1YpOworICAgIHJldHVy
biBldmFsdWF0ZShzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlciwgY29kZS5kYXRhKCksIGNv
ZGUuc2l6ZSgpKTsKIH0KIAotQ29tcGxldGlvbiBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoY29uc3Qg
VVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVU3RyaW5n
ICZjb2RlLCBWYWx1ZUltcCAqdGhpc1YpCitDb21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0
ZShjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0
IFVDaGFyICpjb2RlLCBpbnQgY29kZUxlbmd0aCwgVmFsdWVJbXAgKnRoaXNWKQogewotICBDb21w
bGV0aW9uIGNvbXAgPSByZXAtPmV2YWx1YXRlKGNvZGUsdGhpc1YsIHNvdXJjZVVSTCwgc3RhcnRp
bmdMaW5lTnVtYmVyKTsKKyAgQ29tcGxldGlvbiBjb21wID0gcmVwLT5ldmFsdWF0ZShjb2RlLCBj
b2RlTGVuZ3RoLCB0aGlzViwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIpOwogCi0jaWYg
QVBQTEVfQ0hBTkdFUwogICBpZiAoc2hvdWxkUHJpbnRFeGNlcHRpb25zKCkgJiYgY29tcC5jb21w
bFR5cGUoKSA9PSBUaHJvdykgewogICAgIEludGVycHJldGVyTG9jayBsb2NrOwogICAgIEV4ZWNT
dGF0ZSAqZXhlYyA9IHJlcC0+Z2xvYmFsRXhlYygpOwpAQCAtMTQzLDcgKzE0Miw2IEBAIENvbXBs
ZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGNvbnN0IFUKIAogICAgIGZyZWUoZik7CiAgIH0K
LSNlbmRpZgogCiAgIHJldHVybiBjb21wOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2lu
dGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3Jl
L2tqcy9pbnRlcnByZXRlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI4CmRpZmYgLXAgLXUg
LXIxLjI4IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5oCi0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvaW50ZXJwcmV0ZXIuaAkxOSBTZXAgMjAwNSAwNjo1NzoyNyAtMDAwMAkxLjI4CisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAkyNSBPY3QgMjAwNSAxNToyODoyOSAtMDAw
MApAQCAtMjA3LDEwICsyMDcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBleGVjdXRpb24u
IFRoaXMgc2hvdWxkIGVpdGhlciBiZSBOdWxsKCkgb3IgYW4gT2JqZWN0LgogICAgICAqIEByZXR1
cm4gQSBjb21wbGV0aW9uIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgZXhl
Y3V0aW9uLgogICAgICAqLwotICAgIENvbXBsZXRpb24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyAm
c291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVU3RyaW5nICZjb2RlLCBW
YWx1ZUltcCAqdGhpc1YgPSBOVUxMKTsKLQotCS8vIE92ZXJsb2FkIG9mIGV2YWx1YXRlIHRvIGtl
ZXAgSmF2YVNjcmlwdEdsdWUgYm90aCBzb3VyY2UgYW5kIGJpbmFyeSBjb21wYXRpYmxlLgotCUNv
bXBsZXRpb24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyAmY29kZSwgVmFsdWVJbXAgKnRoaXNWID0g
TlVMTCwgY29uc3QgVVN0cmluZyAmc291cmNlRmlsZW5hbWUgPSBVU3RyaW5nKCkpOworICAgIENv
bXBsZXRpb24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdM
aW5lTnVtYmVyLCBjb25zdCBVU3RyaW5nJiBjb2RlLCBWYWx1ZUltcCAqdGhpc1YgPSAwKTsKKyAg
ICBDb21wbGV0aW9uIGV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0
aW5nTGluZU51bWJlciwgY29uc3QgVUNoYXIgKmNvZGUsIGludCBjb2RlTGVuZ3RoLCBWYWx1ZUlt
cCAqdGhpc1YgPSAwKTsKIAogICAgIC8qKgogICAgICAqIEBpbnRlcm5hbApAQCAtMzYzLDE1ICsz
NjEsMTIgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIHZvaWQgZmluYWxDaGVjaygpOwog
I2VuZGlmCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkUHJpbnRF
eGNlcHRpb25zKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zKGJv
b2wpOwotI2VuZGlmCiAKICAgICB2b2lkIHNhdmVCdWlsdGlucyAoU2F2ZWRCdWlsdGlucyAmKSBj
b25zdDsKICAgICB2b2lkIHJlc3RvcmVCdWlsdGlucyAoY29uc3QgU2F2ZWRCdWlsdGlucyAmKTsK
IAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAvKioKICAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIHZh
bHVlIGlzIGEgZ2xvYmFsIG9iamVjdCAoZm9yIGFueSBpbnRlcnByZXRlcikuICBUaGlzIG1heQog
ICAgICAqIGJlIGRpZmZpY3VsdCB0byBkZXRlcm1pbmUgZm9yIG11bHRpcGxlIHVzZXMgb2YgSlND
IGluIGEgcHJvY2VzcyB0aGF0IGFyZQpAQCAtMzk5LDcgKzM5NCw2IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIHZpcnR1YWwgYm9vbCBpc1NhZmVTY3JpcHQgKGNvbnN0IEludGVycHJldGVyICp0YXJn
ZXQpIHsgcmV0dXJuIHRydWU7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgKmNyZWF0ZUxhbmd1
YWdlSW5zdGFuY2VGb3JWYWx1ZSAoRXhlY1N0YXRlICpleGVjLCBpbnQgbGFuZ3VhZ2UsIE9iamVj
dEltcCAqdmFsdWUsIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IEJp
bmRpbmdzOjpSb290T2JqZWN0ICpjdXJyZW50KTsKLSNlbmRpZgogCiAgICAgLy8gVGhpcyBpcyBh
IHdvcmthcm91bmQgdG8gYXZvaWQgYWNjZXNzaW5nIHRoZSBnbG9iYWwgdmFyaWFibGVzIGZvciB0
aGVzZSBpZGVudGlmaWVycyBpbgogICAgIC8vIGltcG9ydGFudCBwcm9wZXJ0eSBsb29rdXAgZnVu
Y3Rpb25zLCB0byBhdm9pZCB0YWtpbmcgUElDIGJyYW5jaGVzIGluIE1hY2gtTyBiaW5hcmllcwpA
QCAtNDM4LDkgKzQzMiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBFeGVjU3RhdGUgewog
ICAgIGZyaWVuZCBjbGFzcyBJbnRlcnByZXRlckltcDsKICAgICBmcmllbmQgY2xhc3MgRnVuY3Rp
b25JbXA7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIGZyaWVuZCBjbGFzcyBSdW50aW1lTWV0aG9k
SW1wOwotI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgR2xvYmFsRnVuY0ltcDsKICAgcHVibGlj
OgpJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW0s
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IFdlYkNvcmUva3dxL1dl
YkNvcmVTY3JpcHREZWJ1Z2dlci5tbQotLS0gV2ViQ29yZS9rd3EvV2ViQ29yZVNjcmlwdERlYnVn
Z2VyLm1tCTMgT2N0IDIwMDUgMjE6MTM6MTIgLTAwMDAJMS40CisrKyBXZWJDb3JlL2t3cS9XZWJD
b3JlU2NyaXB0RGVidWdnZXIubW0JMjUgT2N0IDIwMDUgMTU6Mjk6MjEgLTAwMDAKQEAgLTI3LDE0
ICsyNywxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZVNjcmlwdERlYnVnZ2VyLmg+CisjaW1wb3J0ICJXZWJDb3JlU2NyaXB0RGVidWdnZXIu
aCIKKwogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oPgog
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvZGVidWdnZXIuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL2NvbnRleHQuaD4KIAotdXNpbmcgbmFtZXNwYWNlIEtKUzsKLQorI2ltcG9ydCAiS1dRU3Ry
aW5nLmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEBpbnRlcmZhY2UgV2ViQ29yZVNjcmlw
dERlYnVnZ2VyIChXZWJDb3JlU2NyaXB0RGVidWdnZXJJbnRlcm5hbCkKIApAQCAtMzExLDcgKzMx
Miw3IEBAIGNsYXNzIFdlYkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKIAogLSAoaWQp
ZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0CiB7Ci0gICAgVVN0cmluZyBjb2Rl
KFtzY3JpcHQgVVRGOFN0cmluZ10pOworICAgIFVTdHJpbmcgY29kZShRU3RyaW5nOjpmcm9tTlNT
dHJpbmcoc2NyaXB0KSk7CiAKICAgICBFeGVjU3RhdGUgICAqc3RhdGUgICA9IF9zdGF0ZTsKICAg
ICBJbnRlcnByZXRlciAqaW50ZXJwICA9IHN0YXRlLT5pbnRlcnByZXRlcigpOwpAQCAtMzQzLDcg
KzM0NCw3IEBAIGNsYXNzIFdlYkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKICAgICB9
CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIG5vICJldmFsIiwgb3Igbm8gY29udGV4dCAoaS5lLiBn
bG9iYWwgc2NvcGUpIC0gdXNlIGdsb2JhbCBmYWxsYmFjawotICAgICAgICByZXN1bHQgPSBpbnRl
cnAtPmltcCgpLT5ldmFsdWF0ZShjb2RlLCBnbG9iT2JqLCBVU3RyaW5nKCksIDApLnZhbHVlKCk7
CisgICAgICAgIHJlc3VsdCA9IGludGVycC0+aW1wKCktPmV2YWx1YXRlKGNvZGUuZGF0YSgpLCBj
b2RlLnNpemUoKSwgZ2xvYk9iaiwgVVN0cmluZygpLCAwKS52YWx1ZSgpOwogICAgIH0KIAogICAg
IGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5017</attachid>
            <date>2005-12-10 08:13:41 -0800</date>
            <delta_ts>2005-12-13 22:04:20 -0800</delta_ts>
            <desc>patch that includes WebCore changes too</desc>
            <filename>StringCopyPatch.txt</filename>
            <type>text/plain</type>
            <size>93752</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9j
YWwvaG9tZS9jdnMvTGFieXJpbnRoL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZyx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xNwpkaWZmIC1wIC11IC1yMS4xNyBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VM
b2cKLS0tIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkyMDA1LzEyLzA2IDAyOjM1OjU0CTEuMTcK
KysrIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkyMDA1LzEyLzEwIDE2OjA2OjAxCkBAIC0xLDMg
KzEsOSBAQAorMjAwNS0xMi0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKU1J1bi5jcHA6
IChKU1J1bjo6RXZhbHVhdGUpOiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8gSW50ZXJwcmV0ZXI6OmV2
YWx1YXRlLgorCiAyMDA1LTEyLTA1ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+
CiAKICAgICAgICAgLSBhZGRlZCBuZXcgZm9yd2FyZGluZyBoZWFkZXJzCkBAIC02LDggKzEyLDYg
QEAKICAgICAgICAgKiBreG1sY29yZS9SZWZQdHIuaDogQWRkZWQuCiAKIDIwMDUtMTItMDUgIE1h
Y2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KIAogICAgICAgICAqIGt4bWxjb3JlL1Bhc3NSZWZQdHIuaDogQWRkZWQu
CiAKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
bG9jYWwvaG9tZS9jdnMvTGFieXJpbnRoL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMgSmF2YVNjcmlwdEdsdWUvSlNSdW4u
Y3BwCi0tLSBKYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAJMjAwNS8xMC8xMCAyMzozMjozNAkxLjMK
KysrIEphdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkyMDA1LzEyLzEwIDE2OjA2OjAxCkBAIC0zOSw5
ICszOSw4IEBAIEpTSW50ZXJwcmV0ZXIqIEpTUnVuOjpHZXRJbnRlcnByZXRlcigpCiAKIENvbXBs
ZXRpb24gSlNSdW46OkV2YWx1YXRlKCkKIHsKLSAgICByZXR1cm4gZkludGVycHJldGVyLmV2YWx1
YXRlKGZTb3VyY2UpOworICAgIHJldHVybiBmSW50ZXJwcmV0ZXIuZXZhbHVhdGUoVVN0cmluZygp
LCAwLCBmU291cmNlLmRhdGEoKSwgZlNvdXJjZS5zaXplKCkpOwogfQotCiAKIGJvb2wgSlNSdW46
OkNoZWNrU3ludGF4KCkKIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjg5NQpkaWZmIC1wIC11IC1yMS44OTUgSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCi0tLSBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJOCBEZWMgMjAwNSAxODoxOToyNiAt
MDAwMAkxLjg5NQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCTEwIERlYyAyMDA1IDE2OjA3
OjM5IC0wMDAwCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDUtMTItMTAgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gZml4IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTY4OAorICAgICAgICAgIHNwZWVkIHVwIEphdmFTY3JpcHQgcGFyc2luZyBieSBub3QgY3Jl
YXRpbmcgYSBVU3RyaW5nIGp1c3QgdG8gcGFyc2UKKworICAgICAgICAqIGtqcy9pbnRlcm5hbC5o
OgorICAgICAgICAqIGtqcy9pbnRlcm5hbC5jcHA6IChLSlM6OkludGVycHJldGVySW1wOjpldmFs
dWF0ZSk6IENoYW5nZSB0byB0YWtlIGEgY2hhcmFjdGVyIHBvaW50ZXIKKyAgICAgICAgYW5kIGxl
bmd0aCByYXRoZXIgdGhhbiBhIFVTdHJpbmcuCisKKyAgICAgICAgKiBranMvaW50ZXJwcmV0ZXIu
aDoKKyAgICAgICAgKiBranMvaW50ZXJwcmV0ZXIuY3BwOiAoSW50ZXJwcmV0ZXI6OmV2YWx1YXRl
KTogRGl0dG8uCisKKyAgICAgICAgKiBranMvcHJvdGVjdC5oOiBSZW1vdmUgdW5lZWRlZCAiY29u
dmVydCB0byBib29sIiBvcGVyYXRvciBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYQorICAgICAgICAi
Y29udmVydCB0byByYXcgcG9pbnRlciIgb3BlcmF0b3IgaW4gdGhpcyBjbGFzcy4KKwogMjAwNS0x
Mi0wOCAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEpvaG4uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgwCmRpZmYgLXAgLXUgLXIxLjgwIEphdmFTY3JpcHRD
b3JlL2tqcy9pbnRlcm5hbC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJ
MSBEZWMgMjAwNSAxMDozMTo1OSAtMDAwMAkxLjgwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvaW50
ZXJuYWwuY3BwCTEwIERlYyAyMDA1IDE2OjA3OjM5IC0wMDAwCkBAIC01OTMsNjUgKzU5Myw1MCBA
QCBib29sIEludGVycHJldGVySW1wOjpjaGVja1N5bnRheChjb25zdCBVCiAgIEpTTG9jayBsb2Nr
OwogCiAgIC8vIFBhcnNlcjo6cGFyc2UoKSByZXR1cm5zIDAgaW4gYSBzeW50YXggZXJyb3Igb2Nj
dXJzLCBzbyB3ZSBqdXN0IGNoZWNrIGZvciB0aGF0Ci0gIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJv
Z05vZGUgPSBQYXJzZXI6OnBhcnNlKFVTdHJpbmcoKSwgMCwgY29kZS5kYXRhKCksY29kZS5zaXpl
KCksMCwwLDApOworICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dOb2RlID0gUGFyc2VyOjpwYXJz
ZShVU3RyaW5nKCksIDAsIGNvZGUuZGF0YSgpLCBjb2RlLnNpemUoKSwgMCwgMCwgMCk7CiAgIHJl
dHVybiBwcm9nTm9kZTsKIH0KIAotQ29tcGxldGlvbiBJbnRlcnByZXRlckltcDo6ZXZhbHVhdGUo
Y29uc3QgVVN0cmluZyAmY29kZSwgVmFsdWVJbXAgKnRoaXNWLCBjb25zdCBVU3RyaW5nICZzb3Vy
Y2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCitDb21wbGV0aW9uIEludGVycHJldGVySW1w
OjpldmFsdWF0ZShjb25zdCBVQ2hhciAqY29kZSwgaW50IGNvZGVMZW5ndGgsIFZhbHVlSW1wICp0
aGlzViwgY29uc3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQog
ewogICBKU0xvY2sgbG9jazsKIAogICAvLyBwcmV2ZW50IGFnYWluc3QgaW5maW5pdGUgcmVjdXJz
aW9uCi0gIGlmIChyZWN1cnNpb24gPj0gMjApIHsKLSNpZiBBUFBMRV9DSEFOR0VTCi0gICAgQ29t
cGxldGlvbiByZXN1bHQgPSBDb21wbGV0aW9uKFRocm93LCBFcnJvcjo6Y3JlYXRlKCZnbG9iRXhl
YywgR2VuZXJhbEVycm9yLCAiUmVjdXJzaW9uIHRvbyBkZWVwIikpOwotICAgIHJldHVybiByZXN1
bHQ7Ci0jZWxzZQotICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LEVycm9yOjpjcmVhdGUoJmds
b2JFeGVjLCBHZW5lcmFsRXJyb3IsICJSZWN1cnNpb24gdG9vIGRlZXAiKSk7Ci0jZW5kaWYKLSAg
fQorICBpZiAocmVjdXJzaW9uID49IDIwKQorICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LCBF
cnJvcjo6Y3JlYXRlKCZnbG9iRXhlYywgR2VuZXJhbEVycm9yLCAiUmVjdXJzaW9uIHRvbyBkZWVw
IikpOwogCiAgIC8vIHBhcnNlIHRoZSBzb3VyY2UgY29kZQogICBpbnQgc2lkOwogICBpbnQgZXJy
TGluZTsKICAgVVN0cmluZyBlcnJNc2c7Ci0gIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ05vZGUg
PSBQYXJzZXI6OnBhcnNlKHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb2RlLmRhdGEo
KSxjb2RlLnNpemUoKSwmc2lkLCZlcnJMaW5lLCZlcnJNc2cpOworICBSZWZQdHI8UHJvZ3JhbU5v
ZGU+IHByb2dOb2RlID0gUGFyc2VyOjpwYXJzZShzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJl
ciwgY29kZSwgY29kZUxlbmd0aCwgJnNpZCwgJmVyckxpbmUsICZlcnJNc2cpOwogCiAgIC8vIG5v
dGlmeSBkZWJ1Z2dlciB0aGF0IHNvdXJjZSBoYXMgYmVlbiBwYXJzZWQKICAgaWYgKGRiZykgewot
ICAgIGJvb2wgY29udCA9IGRiZy0+c291cmNlUGFyc2VkKCZnbG9iRXhlYywgc2lkLCBzb3VyY2VV
UkwsIGNvZGUsIGVyckxpbmUpOworICAgIGJvb2wgY29udCA9IGRiZy0+c291cmNlUGFyc2VkKCZn
bG9iRXhlYywgc2lkLCBzb3VyY2VVUkwsIFVTdHJpbmcoY29kZSwgY29kZUxlbmd0aCksIGVyckxp
bmUpOwogICAgIGlmICghY29udCkKICAgICAgIHJldHVybiBDb21wbGV0aW9uKEJyZWFrKTsKICAg
fQogICAKICAgLy8gbm8gcHJvZ3JhbSBub2RlIG1lYW5zIGEgc3ludGF4IGVycm9yIG9jY3VycmVk
Ci0gIGlmICghcHJvZ05vZGUpIHsKLSAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUo
Jmdsb2JFeGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzaWQsICZzb3VyY2VVUkwp
OwotICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LGVycik7Ci0gIH0KKyAgaWYgKCFwcm9nTm9k
ZSkKKyAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgRXJyb3I6OmNyZWF0ZSgmZ2xvYkV4ZWMs
IFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNpZCwgJnNvdXJjZVVSTCkpOwogCiAgIGds
b2JFeGVjLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgcmVjdXJzaW9uKys7CiAKICAgT2JqZWN0SW1w
ICpnbG9iYWxPYmogPSBnbG9iYWxPYmplY3QoKTsKLSAgT2JqZWN0SW1wICp0aGlzT2JqID0gZ2xv
YmFsT2JqZWN0KCk7CisgIE9iamVjdEltcCAqdGhpc09iaiA9IGdsb2JhbE9iajsKIAotICBpZiAo
dGhpc1YpIHsKLSAgICAvLyAidGhpcyIgbXVzdCBiZSBhbiBvYmplY3QuLi4gdXNlIHNhbWUgcnVs
ZXMgYXMgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5KCkKLSAgICBpZiAodGhpc1YtPmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICB0aGlzT2JqID0gZ2xvYmFsT2JqZWN0KCk7Ci0gICAgZWxzZSB7
CisgIC8vICJ0aGlzIiBtdXN0IGJlIGFuIG9iamVjdC4uLiB1c2Ugc2FtZSBydWxlcyBhcyBGdW5j
dGlvbi5wcm90b3R5cGUuYXBwbHkoKQorICBpZiAodGhpc1YgJiYgIXRoaXNWLT5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgdGhpc09iaiA9IHRoaXNWLT50b09iamVjdCgmZ2xvYkV4ZWMpOwot
ICAgIH0KLSAgfQogCiAgIENvbXBsZXRpb24gcmVzOwotICBpZiAoZ2xvYkV4ZWMuaGFkRXhjZXB0
aW9uKCkpIHsKLSAgICAvLyB0aGUgdGhpc0FyZy0+dG9PYmplY3QoKSBjb252ZXJzaW9uIGFib3Zl
IG1pZ2h0IGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiAtIGlmIHNvLAotICAgIC8vIHByb3BhZ2F0
ZSBpdCBiYWNrCisgIGlmIChnbG9iRXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAvLyB0aGUgdGhp
c1YtPnRvT2JqZWN0KCkgY29udmVyc2lvbiBhYm92ZSBtaWdodCBoYXZlIHRocm93biBhbiBleGNl
cHRpb24gLSBpZiBzbywgcHJvcGFnYXRlIGl0CiAgICAgcmVzID0gQ29tcGxldGlvbihUaHJvdywg
Z2xvYkV4ZWMuZXhjZXB0aW9uKCkpOwotICB9CiAgIGVsc2UgewogICAgIC8vIGV4ZWN1dGUgdGhl
IGNvZGUKICAgICBDb250ZXh0SW1wIGN0eChnbG9iYWxPYmosIHRoaXMsIHRoaXNPYmopOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQ2CmRpZmYgLXAgLXUgLXIxLjQ2IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCi0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuaAkxIERlYyAyMDA1IDEwOjMxOjU5IC0wMDAw
CTEuNDYKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCTEwIERlYyAyMDA1IDE2OjA3
OjQwIC0wMDAwCkBAIC0yNTQsNyArMjU0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICBFeGVj
U3RhdGUgKmdsb2JhbEV4ZWMoKSB7IHJldHVybiAmZ2xvYkV4ZWM7IH0KICAgICBib29sIGNoZWNr
U3ludGF4KGNvbnN0IFVTdHJpbmcgJmNvZGUpOwotICAgIENvbXBsZXRpb24gZXZhbHVhdGUoY29u
c3QgVVN0cmluZyAmY29kZSwgVmFsdWVJbXAgKnRoaXNWLCBjb25zdCBVU3RyaW5nICZzb3VyY2VV
UkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpOworICAgIENvbXBsZXRpb24gZXZhbHVhdGUoY29u
c3QgVUNoYXIgKmNvZGUsIGludCBjb2RlTGVuZ3RoLCBWYWx1ZUltcCAqdGhpc1YsIGNvbnN0IFVT
dHJpbmcgJnNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CiAgICAgRGVidWdnZXIg
KmRlYnVnZ2VyKCkgY29uc3QgeyByZXR1cm4gZGJnOyB9CiAgICAgdm9pZCBzZXREZWJ1Z2dlcihE
ZWJ1Z2dlciAqZCkgeyBkYmcgPSBkOyB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3Jl
L2tqcy9pbnRlcnByZXRlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzMKZGlmZiAtcCAt
dSAtcjEuMzMgSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAotLS0gSmF2YVNjcmlw
dENvcmUva2pzL2ludGVycHJldGVyLmNwcAkyNyBOb3YgMjAwNSAwNzo1NDo0NCAtMDAwMAkxLjMz
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCTEwIERlYyAyMDA1IDE2OjA3
OjQwIC0wMDAwCkBAIC0xMDksMTYgKzEwOSwxNSBAQCBib29sIEludGVycHJldGVyOjpjaGVja1N5
bnRheChjb25zdCBVU3RyCiAgIHJldHVybiByZXAtPmNoZWNrU3ludGF4KGNvZGUpOwogfQogCi1D
b21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShjb25zdCBVU3RyaW5nICZjb2RlLCBWYWx1
ZUltcCAqdGhpc1YsIGNvbnN0IFVTdHJpbmcgJikKK0NvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2
YWx1YXRlKGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwg
Y29uc3QgVVN0cmluZyYgY29kZSwgVmFsdWVJbXAgKnRoaXNWKQogewotICByZXR1cm4gZXZhbHVh
dGUoVVN0cmluZygpLCAwLCBjb2RlLCB0aGlzVik7CisgICAgcmV0dXJuIGV2YWx1YXRlKHNvdXJj
ZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb2RlLmRhdGEoKSwgY29kZS5zaXplKCkpOwogfQog
Ci1Db21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShjb25zdCBVU3RyaW5nICZzb3VyY2VV
UkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcgJmNvZGUsIFZhbHVlSW1w
ICp0aGlzVikKK0NvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcg
JnNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgVUNoYXIgKmNvZGUsIGlu
dCBjb2RlTGVuZ3RoLCBWYWx1ZUltcCAqdGhpc1YpCiB7Ci0gIENvbXBsZXRpb24gY29tcCA9IHJl
cC0+ZXZhbHVhdGUoY29kZSx0aGlzViwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIpOwor
ICBDb21wbGV0aW9uIGNvbXAgPSByZXAtPmV2YWx1YXRlKGNvZGUsIGNvZGVMZW5ndGgsIHRoaXNW
LCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlcik7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAg
IGlmIChzaG91bGRQcmludEV4Y2VwdGlvbnMoKSAmJiBjb21wLmNvbXBsVHlwZSgpID09IFRocm93
KSB7CiAgICAgSlNMb2NrIGxvY2s7CiAgICAgRXhlY1N0YXRlICpleGVjID0gcmVwLT5nbG9iYWxF
eGVjKCk7CkBAIC0xMjgsNyArMTI3LDYgQEAgQ29tcGxldGlvbiBJbnRlcnByZXRlcjo6ZXZhbHVh
dGUoY29uc3QgVQogCiAgICAgZnJlZShmKTsKICAgfQotI2VuZGlmCiAKICAgcmV0dXJuIGNvbXA7
CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjkKZGlmZiAtcCAtdSAtcjEuMjkgSmF2YVNjcmlwdENvcmUva2pz
L2ludGVycHJldGVyLmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5oCTIzIE5v
diAyMDA1IDA1OjQxOjE5IC0wMDAwCTEuMjkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnBy
ZXRlci5oCTEwIERlYyAyMDA1IDE2OjA3OjQwIC0wMDAwCkBAIC0yMDMsMTAgKzIwMyw4IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAqIGV4ZWN1dGlvbi4gVGhpcyBzaG91bGQgZWl0aGVyIGJlIE51
bGwoKSBvciBhbiBPYmplY3QuCiAgICAgICogQHJldHVybiBBIGNvbXBsZXRpb24gb2JqZWN0IHJl
cHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBleGVjdXRpb24uCiAgICAgICovCi0gICAgQ29t
cGxldGlvbiBldmFsdWF0ZShjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFydGluZ0xp
bmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcgJmNvZGUsIFZhbHVlSW1wICp0aGlzViA9IE5VTEwpOwot
Ci0JLy8gT3ZlcmxvYWQgb2YgZXZhbHVhdGUgdG8ga2VlcCBKYXZhU2NyaXB0R2x1ZSBib3RoIHNv
dXJjZSBhbmQgYmluYXJ5IGNvbXBhdGlibGUuCi0JQ29tcGxldGlvbiBldmFsdWF0ZShjb25zdCBV
U3RyaW5nICZjb2RlLCBWYWx1ZUltcCAqdGhpc1YgPSBOVUxMLCBjb25zdCBVU3RyaW5nICZzb3Vy
Y2VGaWxlbmFtZSA9IFVTdHJpbmcoKSk7CisgICAgQ29tcGxldGlvbiBldmFsdWF0ZShjb25zdCBV
U3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcm
IGNvZGUsIFZhbHVlSW1wICp0aGlzViA9IDApOworICAgIENvbXBsZXRpb24gZXZhbHVhdGUoY29u
c3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVQ2hh
ciAqY29kZSwgaW50IGNvZGVMZW5ndGgsIFZhbHVlSW1wICp0aGlzViA9IDApOwogCiAgICAgLyoq
CiAgICAgICogQGludGVybmFsCkBAIC0zNTksMTUgKzM1NywxMiBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBzdGF0aWMgdm9pZCBmaW5hbENoZWNrKCk7CiAjZW5kaWYKIAotI2lmIEFQUExFX0NIQU5H
RVMKICAgICBzdGF0aWMgYm9vbCBzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsKICAgICBzdGF0aWMg
dm9pZCBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMoYm9vbCk7Ci0jZW5kaWYKIAogICAgIHZvaWQg
c2F2ZUJ1aWx0aW5zIChTYXZlZEJ1aWx0aW5zICYpIGNvbnN0OwogICAgIHZvaWQgcmVzdG9yZUJ1
aWx0aW5zIChjb25zdCBTYXZlZEJ1aWx0aW5zICYpOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAg
IC8qKgogICAgICAqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYSBnbG9iYWwgb2JqZWN0IChm
b3IgYW55IGludGVycHJldGVyKS4gIFRoaXMgbWF5CiAgICAgICogYmUgZGlmZmljdWx0IHRvIGRl
dGVybWluZSBmb3IgbXVsdGlwbGUgdXNlcyBvZiBKU0MgaW4gYSBwcm9jZXNzIHRoYXQgYXJlCkBA
IC0zOTUsNyArMzkwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBib29sIGlzU2Fm
ZVNjcmlwdCAoY29uc3QgSW50ZXJwcmV0ZXIgKnRhcmdldCkgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IAogICAgIHZpcnR1YWwgdm9pZCAqY3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlIChFeGVj
U3RhdGUgKmV4ZWMsIGludCBsYW5ndWFnZSwgT2JqZWN0SW1wICp2YWx1ZSwgY29uc3QgQmluZGlu
Z3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKmN1cnJl
bnQpOwotI2VuZGlmCiAKICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBhdm9pZCBhY2Nl
c3NpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZXMgZm9yIHRoZXNlIGlkZW50aWZpZXJzIGluCiAgICAg
Ly8gaW1wb3J0YW50IHByb3BlcnR5IGxvb2t1cCBmdW5jdGlvbnMsIHRvIGF2b2lkIHRha2luZyBQ
SUMgYnJhbmNoZXMgaW4gTWFjaC1PIGJpbmFyaWVzCkBAIC00MzQsOSArNDI4LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgIGNsYXNzIEV4ZWNTdGF0ZSB7CiAgICAgZnJpZW5kIGNsYXNzIEludGVycHJl
dGVySW1wOwogICAgIGZyaWVuZCBjbGFzcyBGdW5jdGlvbkltcDsKLSNpZiBBUFBMRV9DSEFOR0VT
CiAgICAgZnJpZW5kIGNsYXNzIFJ1bnRpbWVNZXRob2RJbXA7Ci0jZW5kaWYKIAogICAgIGZyaWVu
ZCBjbGFzcyBHbG9iYWxGdW5jSW1wOwogICBwdWJsaWM6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvcHJvdGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9ranMvcHJvdGVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXAgLXUgLXIx
LjE0IEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9w
cm90ZWN0LmgJMSBEZWMgMjAwNSAxMDozMTo1OSAtMDAwMAkxLjE0CisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvcHJvdGVjdC5oCTEwIERlYyAyMDA1IDE2OjA3OjQwIC0wMDAwCkBAIC02NywxNSArNjcs
NiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gbV9wdHIgPT0gTlVMTDsgfQogCi0gICAgICAgIC8vIHRoaXMgdHlwZSBj
b252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvCi0gICAgICAg
IC8vIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzCi0KLSAgICAgICAgdHlwZWRl
ZiBUICogKFByb3RlY3RlZFB0cjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpKCkgY29uc3Q7Ci0gICAg
ICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9wdHIgPyAmUHJvdGVjdGVkUHRyOjpnZXQgOiAwOwotICAgICAgICB9
Ci0gICAgICAgIAogICAgICAgICBQcm90ZWN0ZWRQdHIgJm9wZXJhdG9yPShjb25zdCBQcm90ZWN0
ZWRQdHIgJik7CiAgICAgICAgIFByb3RlY3RlZFB0ciAmb3BlcmF0b3I9KFQgKik7CiAgICAgICAg
IApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ5NwpkaWZmIC1wIC11
IC1yMS40OTcgV2ViQ29yZS9DaGFuZ2VMb2cKLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCTEwIERlYyAy
MDA1IDAyOjU5OjI1IC0wMDAwCTEuNDk3CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkxMCBEZWMgMjAw
NSAxNjowOTowMSAtMDAwMApAQCAtMSwzICsxLDExMCBAQAorMjAwNS0xMi0xMCAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD01Njg4CisgICAgICAgICAgc3BlZWQgdXAgSmF2YVNjcmlwdCBwYXJzaW5nIGJ5
IG5vdCBjcmVhdGluZyBhIFVTdHJpbmcganVzdCB0byBwYXJzZQorCisgICAgICAgICoga2h0bWwv
ZWNtYS9ranNfZG9tLmNwcDogKEtKUzo6RE9NTm9kZTo6Z2V0TGlzdGVuZXIpOiBVc2UgbGlzdGVu
ZXJPYmogaW5zdGVhZCBvZgorICAgICAgICBsaXN0ZW5lck9iakltcC4KKyAgICAgICAgKiBraHRt
bC9lY21hL2tqc19odG1sLmNwcDogKEtKUzo6SW1hZ2U6OmdldFZhbHVlUHJvcGVydHkpOiBEaXR0
by4KKyAgICAgICAgKiBraHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcDogKEtKUzo6WE1MSHR0
cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkpOiBEaXR0by4KKyAgICAgICAgKiBraHRtbC9lY21h
L2tqc193aW5kb3cuaDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwOgorICAg
ICAgICAoS0pTOjpXaW5kb3c6OmdldExpc3RlbmVyKTogRGl0dG8uCisgICAgICAgIChLSlM6Oldp
bmRvdzo6Z2V0SlNMYXp5RXZlbnRMaXN0ZW5lcik6IFRha2UgY29kZSBhcyBhIERPTVN0cmluZywg
bm90IFFTdHJpbmcuCisKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19ldmVudHMuY3BwOgorICAg
ICAgICAoS0pTOjpqc1N0cmluZ09yVW5kZWZpbmVkKTogUmVuYW1lZCBmdW5jdGlvbiBhbmQgbW92
ZWQgaXQgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4KKyAgICAgICAgKEtKUzo6SlNBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KTogQ2xlYW5lZCB1cCBmdW5jdGlvbiwgcmVtb3ZlZCBk
b3VibGUKKyAgICAgICAgbG9nZ2luZywgYW5kIGZpeGVkIGNvZGUgcGF0aCB0byBub3QgdXNlIFVT
dHJpbmc6OmFzY2lpKCkuCisgICAgICAgIChLSlM6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
OjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcik6IFVwZGF0ZWQgc2luY2UgdHlwZQorICAgICAg
ICBvZiB0aGUgd2luZG93IG9iamVjdCBpcyBub3cgV2luZG93LgorICAgICAgICAoS0pTOjpKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6fkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKTogRGl0
dG8uCisgICAgICAgIChLSlM6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjp3aW5kb3dPYmop
OiBEaXR0by4KKyAgICAgICAgKEtKUzo6SlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXIp
OiBEaXR0by4KKyAgICAgICAgKEtKUzo6SlNFdmVudExpc3RlbmVyOjp+SlNFdmVudExpc3RlbmVy
KTogRGl0dG8uCisgICAgICAgIChLSlM6OkpTRXZlbnRMaXN0ZW5lcjo6d2luZG93T2JqKTogRGl0
dG8uCisgICAgICAgIChLSlM6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVu
ZXIpOiBEaXR0by4gQWxzbyBjaGFuZ2VkIGNvZGUgdG8gYmUKKyAgICAgICAgYSBET01TdHJpbmcg
aW5zdGVhZCBvZiBhIFFTdHJpbmcuCisgICAgICAgIChLSlM6OkpTTGF6eUV2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KTogUmVtb3ZlZCBmdW5jdGlvbiBiZWNhdXNlIHRoZSBiYXNlIGNsYXNzCisg
ICAgICAgIGhhbmRsZUV2ZW50IGFscmVhZHkgY2FsbHMgbGlzdGVuZXJPYmogd2hpY2ggdGFrZXMg
Y2FyZSBvZiBwYXJzZUNvZGUgLS0gbm8gbmVlZCB0bworICAgICAgICBkbyBhbiBhZGRpdGlvbmFs
IHBhcnNlQ29kZSBoZXJlLgorICAgICAgICAoS0pTOjpKU0xhenlFdmVudExpc3RlbmVyOjpwYXJz
ZUNvZGUpOiBSZWFycmFuZ2UgYW5kIGNsZWFuIHVwIGEgYml0LiBDb2RlIGlzIG5vdworICAgICAg
ICBhIERPTVN0cmluZyBpbnN0ZWFkIG9mIGEgUVN0cmluZy4KKyAgICAgICAgKEtKUzo6Q2xpcGJv
YXJkOjpDbGlwYm9hcmQpOiBSZW1vdmUgZXhwbGljaXQgcmVmIHNpbmNlIHdlIG5vdyB1c2UgYSBS
ZWZQdHIgZm9yCisgICAgICAgIHRoZSBjbGlwYm9hcmQgb2JqZWN0LgorICAgICAgICAoS0pTOjpD
bGlwYm9hcmQ6OmdldFZhbHVlUHJvcGVydHkpOiBVcGRhdGUgdG8gY2FsbCBqc1N0cmluZ09yVW5k
ZWZpbmVkLgorCisgICAgICAgICoga2h0bWwvZWNtYS9ranNfZXZlbnRzLmg6IFJlZm9ybWF0dGVk
IHRoZSBmaWxlLiBDaGFuZ2VkIHdpbmRvd09iaiBmdW5jdGlvbnMgdG8KKyAgICAgICAgcmV0dXJu
IFdpbmRvdyogaW5zdGVhZCBvZiBPYmplY3RJbXAqLiBSZW1vdmVkIGxpc3RlbmVyT2JqSW1wIGZ1
bmN0aW9uLiBSZW1vdmVkCisgICAgICAgIGRlc3RydWN0b3JzIGZyb20gbWFueSBjbGFzc2VzIHRo
YXQgZG9uJ3QgbmVlZCB0aGVtLiBVc2VkIGEgUmVmUHRyIGZvciB0aGUKKyAgICAgICAgQ2xpcGJv
YXJkSW1wbCBpbiBhIENsaXBib2FyZCBvYmplY3QuCisKKyAgICAgICAgKiBraHRtbC9lY21hL2tq
c19wcm94eS5oOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX3Byb3h5LmNwcDoKKyAgICAgICAg
KEtKU1Byb3h5SW1wbDo6ZXZhbHVhdGUpOiBUYWtlIGZpbGVuYW1lIGFuZCBjb2RlIGFzIERPTVN0
cmluZyBpbnN0ZWFkIG9mIFFTdHJpbmcuCisgICAgICAgIChLSlNQcm94eUltcGw6OmNyZWF0ZUhU
TUxFdmVudEhhbmRsZXIpOiBUYWtlIFVSTCBhbmQgY29kZSBhcyBET01TdHJpbmcuCisKKyAgICAg
ICAgKiBraHRtbC94bWwvZG9tX2RvY2ltcGwuaDoKKyAgICAgICAgKiBraHRtbC94bWwvZG9tX2Rv
Y2ltcGwuY3BwOgorICAgICAgICAoRG9jdW1lbnRJbXBsOjpjcmVhdGVIVE1MRXZlbnRMaXN0ZW5l
cik6IFRha2UgYSBET01TdHJpbmcgcmF0aGVyIHRoYW4gYSBRU3RyaW5nIGZvciB0aGUKKyAgICAg
ICAgSmF2YVNjcmlwdCBjb2RlLgorICAgICAgICAoRG9jdW1lbnRJbXBsOjpzZXRIVE1MV2luZG93
RXZlbnRMaXN0ZW5lcik6IEFkZGVkIGFuIG92ZXJsb2FkIHRoYXQgdGFrZXMgYW4gYXR0cmlidXRl
CisgICAgICAgIHBvaW50ZXIuIENhbGxzIHRocm91Z2ggYWZ0ZXIgZXh0cmFjdGluZyB0aGUgY29k
ZSBmcm9tIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCisKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxf
ZWxlbWVudGltcGwuaDoKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3Bw
OiAoSFRNTEVsZW1lbnRJbXBsOjpzZXRIVE1MRXZlbnRMaXN0ZW5lcik6IE5ldworICAgICAgICB2
ZXJzaW9uIG9mIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYW4gYXR0cmlidXRlIHBvaW50ZXI7IGNhbGxz
IHRocm91Z2ggdG8gdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgYWZ0ZXIgZXh0cmFjdGluZyB0aGUg
Y29kZSBmcm9tIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCisKKyAgICAgICAgKiBraHRtbC9odG1sL2h0
bWxfYmFzZWltcGwuY3BwOgorICAgICAgICAoSFRNTEJvZHlFbGVtZW50SW1wbDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOiBDaGFuZ2UgdG8gdXNlIG5ldyBzZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5l
cgorICAgICAgICBhbmQgc2V0SFRNTEV2ZW50TGlzdGVuZXIgdGhhdCB0YWtlcyBhbiBhdHRyaWJ1
dGUgcG9pbnRlci4KKyAgICAgICAgKEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAoSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2VsZW1l
bnRpbXBsLmNwcDogKEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBEaXR0
by4KKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwOgorICAgICAgICAoRE9N
OjpIVE1MRm9ybUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IERpdHRvLgorICAg
ICAgICAoRE9NOjpIVE1MQnV0dG9uRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTog
RGl0dG8uCisgICAgICAgIChET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAoRE9NOjpIVE1MTGFiZWxFbGVtZW50SW1wbDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKERPTTo6SFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAoRE9NOjpIVE1M
VGV4dEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAg
ICAgKiBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcDoKKyAgICAgICAgKERPTTo6SFRNTElt
YWdlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgICog
a2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwOgorICAgICAgICAoRE9NOjpIVE1MT2JqZWN0
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBr
aHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaDoKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfaGVh
ZGltcGwuY3BwOgorICAgICAgICAoSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjpub3RpZnlGaW5pc2hl
ZCk6IERvbid0IGNvbnZlcnQgVVJMIHRvIFFTdHJpbmcgc2luY2Ugd2Ugbm93IHRha2UKKyAgICAg
ICAgYSBET01TdHJpbmcuCisgICAgICAgIChIVE1MU2NyaXB0RWxlbWVudEltcGw6OmV2YWx1YXRl
U2NyaXB0KTogQ2hhbmdlIHRvIHRha2Ugc2NyaXB0IGFzIGEgRE9NU3RyaW5nLgorCisgICAgICAg
ICoga2h0bWwva2h0bWxfcGFydC5oOgorICAgICAgICAqIGtodG1sL2todG1sX3BhcnQuY3BwOiAo
S0hUTUxQYXJ0OjpjcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcik6IFRha2UgYSBET01TdHJpbmcgcmF0
aGVyIHRoYW4KKyAgICAgICAgYSBRU3RyaW5nIGZvciB0aGUgSmF2YVNjcmlwdCBjb2RlLgorCisg
ICAgICAgICoga3dxL1dlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbTogKC1bV2ViQ29yZVNjcmlwdENh
bGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKTogQ2hhbmdlCisgICAgICAgIGNvZGUgcGF0aCBz
byBpdCBkb2Vzbid0IGNvbnZlcnQgYW4gTlNTdHJpbmcgdG8gVVRGLTggdG8gZ2V0IGl0IGludG8g
dGhlIEphdmFTY3JpcHQKKyAgICAgICAgbWFjaGluZXJ5LiBVc2UgUVN0cmluZzo6ZnJvbU5TU3Ry
aW5nIGluc3RlYWQgZm9yIG5vdy4KKworMjAwNS0xMS0yOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYuCisKKyAgICAgICAgLSBmaXhl
ZCBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTU2ODgKKyAg
ICAgICAgICBzcGVlZCB1cCBKYXZhU2NyaXB0IHBhcnNpbmcgYnkgbm90IGNyZWF0aW5nIGEgVVN0
cmluZyBqdXN0IHRvIHBhcnNlCisKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19wcm94eS5jcHA6
IChLSlNQcm94eUltcGw6OmV2YWx1YXRlKTogUGFzcyBhIHBvaW50ZXIgdG8gdGhlIGJhc2UgYW5k
IHRoZQorICAgICAgICBsZW5ndGggb2YgdGhlIHNjcmlwdCBzdHJpbmcgaW5zdGVhZCBvZiBjcmVh
dGluZyBhIFVTdHJpbmcuCisKKyAgICAgICAgKiBrd3EvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1t
OiAoLVtXZWJDb3JlU2NyaXB0Q2FsbEZyYW1lIGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAg
ICBDaGFuZ2VkIGNvZGUgdG8gY29udmVydCBOU1N0cmluZyB0byBRU3RyaW5nIHJhdGhlciB0aGFu
IGNvbnZlcnRpbmcgaXQgdG8gYW5kIGZyb20gVVRGLTguCisgICAgICAgIENoYW5nZWQgY2FsbCB0
byBldmFsdWF0ZSB0byB1c2UgbmV3IEFQSSB0aGF0IHRha2VzIGEgcG9pbnRlciB0byB0aGUgY2hh
cmFjdGVycyBhbmQgYSBsZW5ndGgKKyAgICAgICAgcmF0aGVyIHRoYW4gYSBVU3RyaW5nLgorCiAy
MDA1LTEyLTA5ICBKdXN0aW4gR2FyY2lhICA8anVzdGluLmdhcmNpYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQzNzAyMDk+IFJlcHJvZHVjaWJsZSBjcmFzaCB3aGVuIHBh
c3Rpbmcgb3ZlciB3aGl0ZXNwYWNlOnByZSB0ZXh0CkluZGV4OiBXZWJDb3JlL2todG1sL2todG1s
X3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2to
dG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM2NApkaWZmIC1wIC11IC1yMS4z
NjQgV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmNwcAotLS0gV2ViQ29yZS9raHRtbC9raHRtbF9w
YXJ0LmNwcAk2IERlYyAyMDA1IDA0OjI5OjIzIC0wMDAwCTEuMzY0CisrKyBXZWJDb3JlL2todG1s
L2todG1sX3BhcnQuY3BwCTEwIERlYyAyMDA1IDE2OjA5OjA0IC0wMDAwCkBAIC0yOTQxLDE0ICsy
OTQxLDE0IEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90UGFydFJlbW92ZWQoIEtQYXJ0czoKICAgICAg
ICAgZC0+bV9hY3RpdmVGcmFtZSA9IDBMOwogfQogCi1ET006OkV2ZW50TGlzdGVuZXIgKktIVE1M
UGFydDo6Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoIFFTdHJpbmcgY29kZSwgTm9kZUltcGwgKm5v
ZGUgKQorRE9NOjpFdmVudExpc3RlbmVyICpLSFRNTFBhcnQ6OmNyZWF0ZUhUTUxFdmVudExpc3Rl
bmVyKGNvbnN0IERPTVN0cmluZyYgY29kZSwgTm9kZUltcGwgKm5vZGUpCiB7CiAgIEtKU1Byb3h5
ICpwcm94eSA9IGpTY3JpcHQoKTsKIAogICBpZiAoIXByb3h5KQogICAgIHJldHVybiAwOwogCi0g
IHJldHVybiBwcm94eS0+Y3JlYXRlSFRNTEV2ZW50SGFuZGxlciggbV91cmwudXJsKCksIGNvZGUs
IG5vZGUgKTsKKyAgcmV0dXJuIHByb3h5LT5jcmVhdGVIVE1MRXZlbnRIYW5kbGVyKG1fdXJsLnVy
bCgpLCBjb2RlLCBub2RlKTsKIH0KIAogS0hUTUxQYXJ0ICpLSFRNTFBhcnQ6Om9wZW5lcigpCklu
ZGV4OiBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTQxCmRpZmYgLXAgLXUgLXIxLjE0MSBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuaAotLS0gV2Vi
Q29yZS9raHRtbC9raHRtbF9wYXJ0LmgJNCBEZWMgMjAwNSAxMTozNTowMiAtMDAwMAkxLjE0MQor
KysgV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmgJMTAgRGVjIDIwMDUgMTY6MDk6MDUgLTAwMDAK
QEAgLTExNzQsNyArMTE3NCw3IEBAIHByaXZhdGU6CiAKICAgYm9vbCByZXF1ZXN0T2JqZWN0KCBr
aHRtbDo6Q2hpbGRGcmFtZSAqY2hpbGQsIGNvbnN0IEtVUkwgJnVybCwgY29uc3QgS1BhcnRzOjpV
UkxBcmdzICZhcmdzID0gS1BhcnRzOjpVUkxBcmdzKCkgKTsKIAotICBET006OkV2ZW50TGlzdGVu
ZXIgKmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKCBRU3RyaW5nIGNvZGUsIERPTTo6Tm9kZUltcGwg
Km5vZGUgKTsKKyAgRE9NOjpFdmVudExpc3RlbmVyICpjcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihj
b25zdCBET006OkRPTVN0cmluZyYgY29kZSwgRE9NOjpOb2RlSW1wbCAqbm9kZSk7CiAKIHB1Ymxp
YzoKICAgRE9NOjpEb2N1bWVudEltcGwgKnhtbERvY0ltcGwoKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEx
NgpkaWZmIC1wIC11IC1yMS4xMTYgV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwCi0tLSBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAJMiBEZWMgMjAwNSAwMzo0ODowNSAtMDAwMAkx
LjExNgorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwCTEwIERlYyAyMDA1IDE2OjA5
OjA3IC0wMDAwCkBAIC02MjksNyArNjI5LDcgQEAgVmFsdWVJbXAgKkRPTU5vZGU6OmdldExpc3Rl
bmVyKGNvbnN0IEF0bwogewogICAgIERPTTo6RXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIgPSBtX2lt
cGwtPmdldEhUTUxFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7CiAgICAgSlNFdmVudExpc3RlbmVy
ICpqc0xpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNFdmVudExpc3RlbmVyKj4obGlzdGVuZXIpOwot
ICAgIGlmICgganNMaXN0ZW5lciAmJiBqc0xpc3RlbmVyLT5saXN0ZW5lck9iakltcCgpICkKKyAg
ICBpZiAoanNMaXN0ZW5lciAmJiBqc0xpc3RlbmVyLT5saXN0ZW5lck9iaigpKQogCXJldHVybiBq
c0xpc3RlbmVyLT5saXN0ZW5lck9iaigpOwogICAgIGVsc2UKIAlyZXR1cm4gTnVsbCgpOwpJbmRl
eDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNzQKZGlmZiAtcCAtdSAtcjEuNzQgV2ViQ29yZS9raHRtbC9lY21hL2tqc19l
dmVudHMuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJNCBEZWMgMjAw
NSAxMTozNTowOCAtMDAwMAkxLjc0CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5j
cHAJMTAgRGVjIDIwMDUgMTY6MDk6MDcgLTAwMDAKQEAgLTM2LDIyNCArMzYsMTkwIEBACiAKICNp
bmNsdWRlIDxrZGVidWcuaD4KIAotdXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsKLQot
dXNpbmcgRE9NOjpBdG9taWNTdHJpbmc7Ci11c2luZyBET006OkNsaXBib2FyZEV2ZW50SW1wbDsK
LXVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwotdXNpbmcgRE9NOjpET01TdHJpbmc7Ci11c2luZyBE
T006OkV2ZW50SW1wbDsKLXVzaW5nIERPTTo6RXZlbnRMaXN0ZW5lckV2ZW50OwotdXNpbmcgRE9N
OjpLZXlib2FyZEV2ZW50SW1wbDsKLXVzaW5nIERPTTo6TW91c2VFdmVudEltcGw7Ci11c2luZyBE
T006OlVJRXZlbnRJbXBsOwotdXNpbmcgRE9NOjpNdXRhdGlvbkV2ZW50SW1wbDsKLXVzaW5nIERP
TTo6TW91c2VSZWxhdGVkRXZlbnRJbXBsOwotdXNpbmcgRE9NOjpOb2RlSW1wbDsKLXVzaW5nIERP
TTo6V2hlZWxFdmVudEltcGw7Ci0KLXVzaW5nIGtodG1sOjpSZW5kZXJPYmplY3Q7Cit1c2luZyBu
YW1lc3BhY2UgRE9NOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3Bh
Y2Uga2h0bWw7CiAKIG5hbWVzcGFjZSBLSlMgewogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUpT
QWJzdHJhY3RFdmVudExpc3RlbmVyOjpKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcihib29sIF9odG1s
KQotICA6IGh0bWwoX2h0bWwpCitzdGF0aWMgVmFsdWVJbXAqIGpzU3RyaW5nT3JVbmRlZmluZWQo
Y29uc3QgRE9NU3RyaW5nJiBzdHIpCiB7CisgICAgcmV0dXJuIHN0ci5pc051bGwoKSA/IGpzVW5k
ZWZpbmVkKCkgOiBqc1N0cmluZyhzdHIpOwogfQogCi1KU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6
fkpTQWJzdHJhY3RFdmVudExpc3RlbmVyKCkKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSlNBYnN0
cmFjdEV2ZW50TGlzdGVuZXI6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGJvb2wgX2h0bWwpCisg
ICAgOiBodG1sKF9odG1sKQogewogfQogCiB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpo
YW5kbGVFdmVudChFdmVudExpc3RlbmVyRXZlbnQgZWxlLCBib29sIGlzV2luZG93RXZlbnQpCiB7
CiAjaWZkZWYgS0pTX0RFQlVHR0VSCi0gIGlmIChLSlNEZWJ1Z1dpbjo6aW5zdGFuY2UoKSAmJiBL
SlNEZWJ1Z1dpbjo6aW5zdGFuY2UoKS0+aW5TZXNzaW9uKCkpCi0gICAgcmV0dXJuOworICAgIGlm
IChLSlNEZWJ1Z1dpbjo6aW5zdGFuY2UoKSAmJiBLSlNEZWJ1Z1dpbjo6aW5zdGFuY2UoKS0+aW5T
ZXNzaW9uKCkpCisgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gIEV2ZW50SW1wbCAqZXZ0ID0g
ZWxlOworICAgIEV2ZW50SW1wbCAqZXZlbnQgPSBlbGU7CiAKLSAgT2JqZWN0SW1wICpsaXN0ZW5l
ciA9IGxpc3RlbmVyT2JqKCk7Ci0gIE9iamVjdEltcCAqd2luID0gd2luZG93T2JqKCk7CisgICAg
T2JqZWN0SW1wKiBsaXN0ZW5lciA9IGxpc3RlbmVyT2JqKCk7CisgICAgaWYgKCFsaXN0ZW5lcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2luZG93KiB3aW5kb3cgPSB3aW5kb3dPYmooKTsKKyAg
ICBLSFRNTFBhcnQqIHBhcnQgPSB3aW5kb3ctPnBhcnQoKTsKKyAgICBpZiAoIXBhcnQpCisgICAg
ICAgIHJldHVybjsKKyAgICBLSlNQcm94eSogcHJveHkgPSBLSlNQcm94eTo6cHJveHkocGFydCk7
CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuOwogCi0gIEtIVE1MUGFydCAqcGFydCA9
IHN0YXRpY19jYXN0PFdpbmRvdyo+KHdpbiktPnBhcnQoKTsKLSAgS0pTUHJveHkgKnByb3h5ID0g
MDsKLSAgaWYgKHBhcnQpCi0gICAgICBwcm94eSA9IEtKU1Byb3h5Ojpwcm94eSggcGFydCApOwot
ICBpZiAoIXByb3h5KQotICAgIHJldHVybjsKLQotICBKU0xvY2sgbG9jazsKKyAgICBKU0xvY2sg
bG9jazsKICAgCi0gIFNjcmlwdEludGVycHJldGVyICppbnRlcnByZXRlciA9IHN0YXRpY19jYXN0
PFNjcmlwdEludGVycHJldGVyICo+KHByb3h5LT5pbnRlcnByZXRlcigpKTsKLSAgRXhlY1N0YXRl
ICpleGVjID0gaW50ZXJwcmV0ZXItPmdsb2JhbEV4ZWMoKTsKKyAgICBTY3JpcHRJbnRlcnByZXRl
ciogaW50ZXJwcmV0ZXIgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAqPihwcm94eS0+
aW50ZXJwcmV0ZXIoKSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gaW50ZXJwcmV0ZXItPmdsb2Jh
bEV4ZWMoKTsKICAgCi0gIGJvb2wgaGFzSGFuZGxlRXZlbnQgPSBmYWxzZTsKLSAgVmFsdWVJbXAg
KmhhbmRsZUV2ZW50RnVuY1ZhbHVlID0gMDsKLSAgT2JqZWN0SW1wICpoYW5kbGVFdmVudEZ1bmMg
PSAwOwotICAKLSAgaGFuZGxlRXZlbnRGdW5jVmFsdWUgPSBsaXN0ZW5lci0+Z2V0KGV4ZWMsICJo
YW5kbGVFdmVudCIpOwotICBpZiAoaGFuZGxlRXZlbnRGdW5jVmFsdWUtPmlzT2JqZWN0KCkpIHsg
ICAgICAKLSAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPiho
YW5kbGVFdmVudEZ1bmNWYWx1ZSk7Ci0gICAgICAKLSAgICAgIGlmIChoYW5kbGVFdmVudEZ1bmMt
PmltcGxlbWVudHNDYWxsKCkpCi0gICAgICAgICAgaGFzSGFuZGxlRXZlbnQgPSB0cnVlOwotICB9
CisgICAgYm9vbCBoYXNIYW5kbGVFdmVudCA9IGZhbHNlOworICAgIFZhbHVlSW1wKiBoYW5kbGVF
dmVudEZ1bmNWYWx1ZSA9IGxpc3RlbmVyLT5nZXQoZXhlYywgImhhbmRsZUV2ZW50Iik7CisgICAg
T2JqZWN0SW1wKiBoYW5kbGVFdmVudEZ1bmMgPSAwOworICAgIGlmIChoYW5kbGVFdmVudEZ1bmNW
YWx1ZS0+aXNPYmplY3QoKSkgeyAgICAgIAorICAgICAgICBoYW5kbGVFdmVudEZ1bmMgPSBzdGF0
aWNfY2FzdDxPYmplY3RJbXAgKj4oaGFuZGxlRXZlbnRGdW5jVmFsdWUpOworICAgICAgICBpZiAo
IWhhbmRsZUV2ZW50RnVuYy0+aW1wbGVtZW50c0NhbGwoKSkKKyAgICAgICAgICAgIGhhbmRsZUV2
ZW50RnVuYyA9IDA7CisgICAgfQogICAKLSAgaWYgKGxpc3RlbmVyLT5pbXBsZW1lbnRzQ2FsbCgp
IHx8IGhhc0hhbmRsZUV2ZW50KSB7Ci0gICAgICByZWYoKTsKKyAgICBpZiAoaGFuZGxlRXZlbnRG
dW5jIHx8IGxpc3RlbmVyLT5pbXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICAgIHJlZigpOwogICAg
ICAgCi0gICAgICBMaXN0IGFyZ3M7Ci0gICAgICBhcmdzLmFwcGVuZChnZXRET01FdmVudChleGVj
LGV2dCkpOworICAgICAgICBMaXN0IGFyZ3M7CisgICAgICAgIGFyZ3MuYXBwZW5kKGdldERPTUV2
ZW50KGV4ZWMsIGV2ZW50KSk7CiAgICAgICAKLSAgICAgIFdpbmRvdyAqd2luZG93ID0gc3RhdGlj
X2Nhc3Q8V2luZG93Kj4od2luKTsKLSAgICAgIC8vIFNldCB0aGUgZXZlbnQgd2UncmUgaGFuZGxp
bmcgaW4gdGhlIFdpbmRvdyBvYmplY3QKLSAgICAgIHdpbmRvdy0+c2V0Q3VycmVudEV2ZW50KGV2
dCk7Ci0gICAgICAvLyAuLi4gYW5kIGluIHRoZSBpbnRlcnByZXRlcgotICAgICAgaW50ZXJwcmV0
ZXItPnNldEN1cnJlbnRFdmVudChldnQpOworICAgICAgICAvLyBTZXQgdGhlIGV2ZW50IHdlJ3Jl
IGhhbmRsaW5nIGluIHRoZSBXaW5kb3cgb2JqZWN0CisgICAgICAgIHdpbmRvdy0+c2V0Q3VycmVu
dEV2ZW50KGV2ZW50KTsKKyAgICAgICAgLy8gLi4uIGFuZCBpbiB0aGUgaW50ZXJwcmV0ZXIKKyAg
ICAgICAgaW50ZXJwcmV0ZXItPnNldEN1cnJlbnRFdmVudChldmVudCk7CiAgICAgICAKLSAgICAg
IE9iamVjdEltcCAqdGhpc09iajsKLSAgICAgIGlmIChpc1dpbmRvd0V2ZW50KSB7Ci0gICAgICAg
ICAgdGhpc09iaiA9IHdpbjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhpc09iaiA9IHN0
YXRpY19jYXN0PE9iamVjdEltcCAqPihnZXRET01Ob2RlKGV4ZWMsIGV2dC0+Y3VycmVudFRhcmdl
dCgpKSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIFZhbHVlSW1wICpyZXR2YWw7Ci0gICAgICBp
ZiAoaGFzSGFuZGxlRXZlbnQpCi0gICAgICAgICAgcmV0dmFsID0gaGFuZGxlRXZlbnRGdW5jLT5j
YWxsKGV4ZWMsIGxpc3RlbmVyLCBhcmdzKTsKLSAgICAgIGVsc2UKLSAgICAgICAgICByZXR2YWwg
PSBsaXN0ZW5lci0+Y2FsbChleGVjLCB0aGlzT2JqLCBhcmdzKTsKLQotICAgICAgd2luZG93LT5z
ZXRDdXJyZW50RXZlbnQoIDAgKTsKLSAgICAgIGludGVycHJldGVyLT5zZXRDdXJyZW50RXZlbnQo
IDAgKTsKLSAgICAgIGlmICggZXhlYy0+aGFkRXhjZXB0aW9uKCkgKSB7Ci0gICAgICAgICAgY2hh
ciAqbWVzc2FnZSA9IGV4ZWMtPmV4Y2VwdGlvbigpLT50b09iamVjdChleGVjKS0+Z2V0KGV4ZWMs
IG1lc3NhZ2VQcm9wZXJ0eU5hbWUpLT50b1N0cmluZyhleGVjKS5hc2NpaSgpOwotICAgICAgICAg
IGludCBsaW5lTnVtYmVyID0gIGV4ZWMtPmV4Y2VwdGlvbigpLT50b09iamVjdChleGVjKS0+Z2V0
KGV4ZWMsICJsaW5lIiktPnRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgUVN0cmluZyBzb3VyY2VV
Ukw7Ci0gICAgICAgICAgewotICAgICAgICAgICAgICAvLyBwdXQgdGhpcyBpbiBhIGJsb2NrIHRv
IG1ha2Ugc3VyZSBVU3RyaW5nIGlzIGRlYWxsb2NhdGVkIGluc2lkZSB0aGUgbG9jawotICAgICAg
ICAgICAgICBVU3RyaW5nIHVTb3VyY2VVUkwgPSBleGVjLT5leGNlcHRpb24oKS0+dG9PYmplY3Qo
ZXhlYyktPmdldChleGVjLCAic291cmNlVVJMIiktPnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAg
ICAgICBzb3VyY2VVUkwgPSB1U291cmNlVVJMLnFzdHJpbmcoKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgaWYgKEludGVycHJldGVyOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkgewotICAgICAg
ICAgICAgICBwcmludGYoIihldmVudCBoYW5kbGVyKTolc1xuIiwgbWVzc2FnZSk7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIEtXUShwYXJ0KS0+YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCBs
aW5lTnVtYmVyLCBzb3VyY2VVUkwpOwotICAgICAgICAgIAotICAgICAgICAgIGlmIChJbnRlcnBy
ZXRlcjo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpCi0gICAgICAgICAgICAgIHByaW50ZigiKGV2
ZW50IGhhbmRsZXIpOiVzXG4iLCBtZXNzYWdlKTsKLSAgICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghcmV0dmFsLT5pc1VuZGVm
aW5lZE9yTnVsbCgpICYmIGV2dC0+c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSkKLSAgICAgICAgICAg
ICAgICBldnQtPnN0b3JlUmVzdWx0KHJldHZhbC0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkp
OworICAgICAgICBWYWx1ZUltcCogcmV0dmFsOworICAgICAgICBpZiAoaGFzSGFuZGxlRXZlbnQp
CisgICAgICAgICAgICByZXR2YWwgPSBoYW5kbGVFdmVudEZ1bmMtPmNhbGwoZXhlYywgbGlzdGVu
ZXIsIGFyZ3MpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE9iamVjdEltcCogdGhpc09i
ajsKKyAgICAgICAgICAgIGlmIChpc1dpbmRvd0V2ZW50KQorICAgICAgICAgICAgICAgIHRoaXNP
YmogPSB3aW5kb3c7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpc09iaiA9
IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGdldERPTU5vZGUoZXhlYywgZXZlbnQtPmN1cnJlbnRU
YXJnZXQoKSkpOworICAgICAgICAgICAgcmV0dmFsID0gbGlzdGVuZXItPmNhbGwoZXhlYywgdGhp
c09iaiwgYXJncyk7CisgICAgICAgIH0KKworICAgICAgICB3aW5kb3ctPnNldEN1cnJlbnRFdmVu
dCgwKTsKKyAgICAgICAgaW50ZXJwcmV0ZXItPnNldEN1cnJlbnRFdmVudCgwKTsKKworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIE9iamVjdEltcCogZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnRvT2JqZWN0KGV4ZWMpOworICAgICAgICAgICAg
UVN0cmluZyBtZXNzYWdlID0gZXhjZXB0aW9uLT5nZXQoZXhlYywgbWVzc2FnZVByb3BlcnR5TmFt
ZSktPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgICAgICAgICAgIGludCBsaW5lTnVtYmVy
ID0gZXhjZXB0aW9uLT5nZXQoZXhlYywgImxpbmUiKS0+dG9JbnQzMihleGVjKTsKKyAgICAgICAg
ICAgIFFTdHJpbmcgc291cmNlVVJMID0gZXhjZXB0aW9uLT5nZXQoZXhlYywgInNvdXJjZVVSTCIp
LT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoSW50ZXJwcmV0ZXI6
OnNob3VsZFByaW50RXhjZXB0aW9ucygpKQorICAgICAgICAgICAgICAgIHByaW50ZigiKGV2ZW50
IGhhbmRsZXIpOiVzXG4iLCBtZXNzYWdlLmxvY2FsOEJpdCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBLV1EocGFydCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgc291
cmNlVVJMKTsKKyAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAoIXJldHZhbC0+aXNVbmRlZmluZWRPck51bGwoKSAmJiBl
dmVudC0+c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBldmVudC0+c3Rv
cmVSZXN1bHQocmV0dmFsLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7CiAgICAgICAgICAg
ICBpZiAoaHRtbCkgewogICAgICAgICAgICAgICAgIFFWYXJpYW50IHJldCA9IFZhbHVlVG9WYXJp
YW50KGV4ZWMsIHJldHZhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldC50eXBlKCkgPT0gUVZh
cmlhbnQ6OkJvb2wgJiYgcmV0LnRvQm9vbCgpID09IGZhbHNlKQotICAgICAgICAgICAgICAgICAg
ICBldnQtPnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgaWYgKHJldC50eXBlKCkg
PT0gUVZhcmlhbnQ6OkJvb2wgJiYgIXJldC50b0Jvb2woKSkKKyAgICAgICAgICAgICAgICAgICAg
ZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICB9Ci0gIAotICAg
ICAgRE9NOjpEb2N1bWVudEltcGw6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygpOwotICAgICAg
ZGVyZWYoKTsKLSAgfQorICAgICAgICB9CisKKyAgICAgICAgRG9jdW1lbnRJbXBsOjp1cGRhdGVE
b2N1bWVudHNSZW5kZXJpbmcoKTsKKyAgICAgICAgZGVyZWYoKTsKKyAgICB9CiB9CiAKLURPTTo6
RE9NU3RyaW5nIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpldmVudExpc3RlbmVyVHlwZSgpCitE
T01TdHJpbmcgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmV2ZW50TGlzdGVuZXJUeXBlKCkKIHsK
ICAgICBpZiAoaHRtbCkKIAlyZXR1cm4gIl9raHRtbF9IVE1MRXZlbnRMaXN0ZW5lciI7Ci0gICAg
ZWxzZQotCXJldHVybiAiX2todG1sX0pTRXZlbnRMaXN0ZW5lciI7CisgICAgcmV0dXJuICJfa2h0
bWxfSlNFdmVudExpc3RlbmVyIjsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcjo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoT2JqZWN0SW1w
ICpfbGlzdGVuZXIsIE9iamVjdEltcCAqX3dpbiwgYm9vbCBfaHRtbCkKK0pTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihPYmplY3RJbXAqIF9saXN0
ZW5lciwgV2luZG93KiBfd2luLCBib29sIF9odG1sKQogICA6IEpTQWJzdHJhY3RFdmVudExpc3Rl
bmVyKF9odG1sKQogICAsIGxpc3RlbmVyKF9saXN0ZW5lcikKICAgLCB3aW4oX3dpbikKIHsKLSAg
ICBpZiAoX2xpc3RlbmVyKSB7Ci0gICAgICBzdGF0aWNfY2FzdDxXaW5kb3cqPih3aW4pLT5qc1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMuaW5zZXJ0KF9saXN0ZW5lciwgdGhpcyk7Ci0gICAgfQor
ICAgIGlmIChfbGlzdGVuZXIpCisgICAgICAgIF93aW4tPmpzVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVycy5pbnNlcnQoX2xpc3RlbmVyLCB0aGlzKTsKIH0KIAogSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXI6On5KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcigpCiB7Ci0gICAgaWYgKGxpc3RlbmVy
KSB7Ci0gICAgICAgIGlmICh3aW4pIHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFdpbmRvdyo+
KHdpbiktPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIGlmIChsaXN0ZW5lciAmJiB3aW4pCisgICAgICAgIHdpbi0+anNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CiB9CiAKLU9iamVjdElt
cCAqSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyT2JqKCkgY29uc3QKK09iamVj
dEltcCogSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyT2JqKCkgY29uc3QKIHsg
CiAgICAgcmV0dXJuIGxpc3RlbmVyOyAKIH0KIAotT2JqZWN0SW1wICpKU1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lcjo6d2luZG93T2JqKCkgY29uc3QKK1dpbmRvdyogSlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXI6OndpbmRvd09iaigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHdpbjsKIH0KIAogdm9p
ZCBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Y2xlYXJXaW5kb3dPYmooKQogewotICAgIHdp
biA9IE5VTEw7CisgICAgd2luID0gMDsKIH0KIAotCiB2b2lkIEpTVW5wcm90ZWN0ZWRFdmVudExp
c3RlbmVyOjptYXJrKCkKIHsKLSAgT2JqZWN0SW1wICpsaXN0ZW5lckltcCA9IGxpc3RlbmVyOwot
ICBpZiAobGlzdGVuZXJJbXAgJiYgIWxpc3RlbmVySW1wLT5tYXJrZWQoKSkKLSAgICBsaXN0ZW5l
ckltcC0+bWFyaygpOworICAgIGlmIChsaXN0ZW5lciAmJiAhbGlzdGVuZXItPm1hcmtlZCgpKQor
ICAgICAgICBsaXN0ZW5lci0+bWFyaygpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpT
RXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKE9iamVjdEltcCAqX2xpc3RlbmVyLCBPYmpl
Y3RJbXAgKl93aW4sIGJvb2wgX2h0bWwpCi0gIDogSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoX2h0
bWwpCi0gICwgbGlzdGVuZXIoX2xpc3RlbmVyKQotICAsIHdpbihfd2luKQorSlNFdmVudExpc3Rl
bmVyOjpKU0V2ZW50TGlzdGVuZXIoT2JqZWN0SW1wICpfbGlzdGVuZXIsIFdpbmRvdyAqX3dpbiwg
Ym9vbCBfaHRtbCkKKyAgICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKF9odG1sKQorICAgICwg
bGlzdGVuZXIoX2xpc3RlbmVyKQorICAgICwgd2luKF93aW4pCiB7CiAgICAgaWYgKF9saXN0ZW5l
cikKLSAgICAgIHN0YXRpY19jYXN0PFdpbmRvdyo+KF93aW4pLT5qc0V2ZW50TGlzdGVuZXJzLmlu
c2VydChfbGlzdGVuZXIsIHRoaXMpOworICAgICAgICBfd2luLT5qc0V2ZW50TGlzdGVuZXJzLmlu
c2VydChfbGlzdGVuZXIsIHRoaXMpOwogfQogCiBKU0V2ZW50TGlzdGVuZXI6On5KU0V2ZW50TGlz
dGVuZXIoKQogewotICAgIGlmIChPYmplY3RJbXAgKmwgPSBsaXN0ZW5lcikgewotICAgICAgICBP
YmplY3RJbXAgKncgPSB3aW47Ci0gICAgICAgIGlmICh3KSB7Ci0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxXaW5kb3cgKj4odyktPmpzRXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGwpOwotICAgICAgICB9
Ci0gICAgfQorICAgIGlmIChsaXN0ZW5lciAmJiB3aW4pCisgICAgICAgIHdpbi0+anNFdmVudExp
c3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOwogfQogCi1PYmplY3RJbXAgKkpTRXZlbnRMaXN0ZW5l
cjo6bGlzdGVuZXJPYmooKSBjb25zdAorT2JqZWN0SW1wKiBKU0V2ZW50TGlzdGVuZXI6Omxpc3Rl
bmVyT2JqKCkgY29uc3QKIHsgCiAgICAgcmV0dXJuIGxpc3RlbmVyOyAKIH0KIAotT2JqZWN0SW1w
ICpKU0V2ZW50TGlzdGVuZXI6OndpbmRvd09iaigpIGNvbnN0CitXaW5kb3cqIEpTRXZlbnRMaXN0
ZW5lcjo6d2luZG93T2JqKCkgY29uc3QKIHsKICAgICByZXR1cm4gd2luOwogfQogCiB2b2lkIEpT
RXZlbnRMaXN0ZW5lcjo6Y2xlYXJXaW5kb3dPYmooKQogewotICAgIHdpbiA9IE5VTEw7CisgICAg
d2luID0gMDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU0xhenlFdmVudExpc3RlbmVy
OjpKU0xhenlFdmVudExpc3RlbmVyKFFTdHJpbmcgX2NvZGUsIE9iamVjdEltcCAqX3dpbiwgTm9k
ZUltcGwgKl9vcmlnaW5hbE5vZGUsIGludCBsaW5lbm8pCi0gIDogSlNFdmVudExpc3RlbmVyKE5V
TEwsIF93aW4sIHRydWUpLAorSlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0ZW5l
cihjb25zdCBET01TdHJpbmcmIF9jb2RlLCBXaW5kb3cqIF93aW4sIE5vZGVJbXBsKiBfb3JpZ2lu
YWxOb2RlLCBpbnQgbGluZW5vKQorICA6IEpTRXZlbnRMaXN0ZW5lcigwLCBfd2luLCB0cnVlKSwK
ICAgICBjb2RlKF9jb2RlKSwKICAgICBwYXJzZWQoZmFsc2UpCiB7CkBAIC0yNjgsODYgKzIzNCw2
OCBAQCBKU0xhenlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyCiAgICAgb3JpZ2lu
YWxOb2RlID0gX29yaWdpbmFsTm9kZTsKIH0KIAotdm9pZCBKU0xhenlFdmVudExpc3RlbmVyOjpo
YW5kbGVFdmVudChFdmVudExpc3RlbmVyRXZlbnQgZXZ0LCBib29sIGlzV2luZG93RXZlbnQpCitP
YmplY3RJbXAqIEpTTGF6eUV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyT2JqKCkgY29uc3QKIHsKICAg
ICBwYXJzZUNvZGUoKTsKLSAgICBPYmplY3RJbXAgKmxpc3RlbmVyT2JqID0gbGlzdGVuZXI7Ci0g
ICAgaWYgKGxpc3RlbmVyT2JqKQotICAgICAgICBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KGV2dCwgaXNXaW5kb3dFdmVudCk7Ci19Ci0KLQotT2JqZWN0SW1wICpKU0xhenlFdmVudExpc3Rl
bmVyOjpsaXN0ZW5lck9iaigpIGNvbnN0Ci17Ci0gIHBhcnNlQ29kZSgpOwotICByZXR1cm4gbGlz
dGVuZXI7CisgICAgcmV0dXJuIGxpc3RlbmVyOwogfQogCiB2b2lkIEpTTGF6eUV2ZW50TGlzdGVu
ZXI6OnBhcnNlQ29kZSgpIGNvbnN0CiB7Ci0gIGlmICghcGFyc2VkKSB7Ci0gICAgT2JqZWN0SW1w
ICp3ID0gd2luOwotICAgIEtIVE1MUGFydCAqcGFydCA9IHN0YXRpY19jYXN0PFdpbmRvdyAqPih3
KS0+cGFydCgpOwotICAgIEtKU1Byb3h5ICpwcm94eSA9IDBMOworICAgIGlmIChwYXJzZWQpCisg
ICAgICAgIHJldHVybjsKKyAgICBwYXJzZWQgPSB0cnVlOworCisgICAgS0hUTUxQYXJ0ICpwYXJ0
ID0gd2luZG93T2JqKCktPnBhcnQoKTsKKyAgICBLSlNQcm94eSAqcHJveHkgPSAwOwogICAgIGlm
IChwYXJ0KQotICAgICAgcHJveHkgPSBLSlNQcm94eTo6cHJveHkoIHBhcnQgKTsKKyAgICAgICAg
cHJveHkgPSBLSlNQcm94eTo6cHJveHkocGFydCk7CiAKICAgICBpZiAocHJveHkpIHsKLSAgICAg
IFNjcmlwdEludGVycHJldGVyICppbnRlcnByZXRlciA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVy
cHJldGVyICo+KHByb3h5LT5pbnRlcnByZXRlcigpKTsKLSAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9
IGludGVycHJldGVyLT5nbG9iYWxFeGVjKCk7Ci0KLSAgICAgIEpTTG9jayBsb2NrOwotICAgICAg
T2JqZWN0SW1wICpjb25zdHIgPSBpbnRlcnByZXRlci0+YnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAg
ICBMaXN0IGFyZ3M7Ci0KLSAgICAgIHN0YXRpYyBQcm90ZWN0ZWRQdHI8VmFsdWVJbXA+IGV2ZW50
U3RyaW5nID0gU3RyaW5nKCJldmVudCIpOwotICAgICAgVVN0cmluZyBzb3VyY2VVUkwocGFydC0+
bV91cmwudXJsKCkpOwotICAgICAgYXJncy5hcHBlbmQoZXZlbnRTdHJpbmcpOwotICAgICAgYXJn
cy5hcHBlbmQoU3RyaW5nKGNvZGUpKTsKLSAgICAgIGxpc3RlbmVyID0gY29uc3RyLT5jb25zdHJ1
Y3QoZXhlYywgYXJncywgc291cmNlVVJMLCBsaW5lTnVtYmVyKTsgLy8gIyMjIGlzIGdsb2JhbEV4
ZWMgb2sgPwotCi0gICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLQlleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwotCi0JLy8gZmFpbGVkIHRvIHBhcnNlLCBzbyBsZXQncyBqdXN0IG1ha2Ug
dGhpcyBsaXN0ZW5lciBhIG5vLW9wCi0JbGlzdGVuZXIgPSBOVUxMOwotICAgICAgfSBlbHNlIGlm
IChvcmlnaW5hbE5vZGUpIHsKLSAgICAgICAgLy8gQWRkIHRoZSBldmVudCdzIGhvbWUgZWxlbWVu
dCB0byB0aGUgc2NvcGUKLSAgICAgICAgLy8gKGFuZCB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgZm9y
bSAtIHNlZSBIVE1MRWxlbWVudDo6ZXZlbnRIYW5kbGVyU2NvcGUpCi0gICAgICAgIFNjb3BlQ2hh
aW4gc2NvcGUgPSBsaXN0ZW5lci0+c2NvcGUoKTsKLQotICAgICAgICBPYmplY3RJbXAgKnRoaXNP
Ymo7Ci0gICAgICAgIHsgLy8gc2NvcGUKLSAgICAgICAgICAgIEpTTG9jayBsb2NrOwotICAgICAg
ICAgICAgdGhpc09iaiA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihnZXRET01Ob2RlKGV4ZWMs
IG9yaWdpbmFsTm9kZSkpOwotICAgICAgICB9CisgICAgICAgIFNjcmlwdEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KHByb3h5LT5pbnRl
cnByZXRlcigpKTsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gaW50ZXJwcmV0ZXItPmdsb2Jh
bEV4ZWMoKTsKIAotICAgICAgICBpZiAodGhpc09iaikgewotICAgICAgICAgIHN0YXRpY19jYXN0
PERPTU5vZGUqPih0aGlzT2JqKS0+cHVzaEV2ZW50SGFuZGxlclNjb3BlKGV4ZWMsIHNjb3BlKTsK
LSAgICAgICAgICBsaXN0ZW5lci0+c2V0U2NvcGUoc2NvcGUpOworICAgICAgICBKU0xvY2sgbG9j
azsKKyAgICAgICAgT2JqZWN0SW1wKiBjb25zdHIgPSBpbnRlcnByZXRlci0+YnVpbHRpbkZ1bmN0
aW9uKCk7CisgICAgICAgIExpc3QgYXJnczsKKworICAgICAgICBzdGF0aWMgUHJvdGVjdGVkUHRy
PFZhbHVlSW1wPiBldmVudFN0cmluZyA9IGpzU3RyaW5nKCJldmVudCIpOworICAgICAgICBVU3Ry
aW5nIHNvdXJjZVVSTChwYXJ0LT5tX3VybC51cmwoKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGV2
ZW50U3RyaW5nKTsKKyAgICAgICAgYXJncy5hcHBlbmQoU3RyaW5nKGNvZGUpKTsKKyAgICAgICAg
bGlzdGVuZXIgPSBjb25zdHItPmNvbnN0cnVjdChleGVjLCBhcmdzLCBzb3VyY2VVUkwsIGxpbmVO
dW1iZXIpOyAvLyAjIyMgaXMgZ2xvYmFsRXhlYyBvayA/CisKKyAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworCisg
ICAgICAgICAgICAvLyBmYWlsZWQgdG8gcGFyc2UsIHNvIGxldCdzIGp1c3QgbWFrZSB0aGlzIGxp
c3RlbmVyIGEgbm8tb3AKKyAgICAgICAgICAgIGxpc3RlbmVyID0gMDsKKyAgICAgICAgfSBlbHNl
IGlmIChvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgZXZlbnQncyBob21l
IGVsZW1lbnQgdG8gdGhlIHNjb3BlCisgICAgICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwg
YW5kIHRoZSBmb3JtIC0gc2VlIEhUTUxFbGVtZW50OjpldmVudEhhbmRsZXJTY29wZSkKKyAgICAg
ICAgICAgIFNjb3BlQ2hhaW4gc2NvcGUgPSBsaXN0ZW5lci0+c2NvcGUoKTsKKworICAgICAgICAg
ICAgVmFsdWVJbXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZ2V0RE9NTm9k
ZShleGVjLCBvcmlnaW5hbE5vZGUpKTsKKyAgICAgICAgICAgIGlmICh0aGlzT2JqLT5pc09iamVj
dCgpKSB7CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RE9NTm9kZSo+KHRoaXNPYmopLT5w
dXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgc2NvcGUpOworICAgICAgICAgICAgICAgIGxpc3Rl
bmVyLT5zZXRTY29wZShzY29wZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0K
ICAgICB9CiAKICAgICAvLyBubyBtb3JlIG5lZWQgdG8ga2VlcCB0aGUgdW5wYXJzZWQgY29kZSBh
cm91bmQKLSAgICBjb2RlID0gUVN0cmluZygpOwotICAgIAotICAgIGlmIChPYmplY3RJbXAgKmwg
PSBsaXN0ZW5lcikgewotICAgICAgICBPYmplY3RJbXAgKncgPSB3aW47Ci0gICAgICAgIHN0YXRp
Y19jYXN0PFdpbmRvdyAqPih3KS0+anNFdmVudExpc3RlbmVycy5pbnNlcnQobCwgY29uc3RfY2Fz
dDxKU0xhenlFdmVudExpc3RlbmVyICo+KHRoaXMpKTsKLSAgICB9Ci0gICAgCi0gICAgcGFyc2Vk
ID0gdHJ1ZTsKLSAgfQorICAgIGNvZGUgPSBET01TdHJpbmcoKTsKKworICAgIGlmIChsaXN0ZW5l
cikKKyAgICAgICAgd2luZG93T2JqKCktPmpzRXZlbnRMaXN0ZW5lcnMuaW5zZXJ0KGxpc3RlbmVy
LCBjb25zdF9jYXN0PEpTTGF6eUV2ZW50TGlzdGVuZXIgKj4odGhpcykpOwogfQogCi1WYWx1ZUlt
cCAqZ2V0Tm9kZUV2ZW50TGlzdGVuZXIoTm9kZUltcGwgKm4sIGNvbnN0IEF0b21pY1N0cmluZyAm
ZXZlbnRUeXBlKQorVmFsdWVJbXAqIGdldE5vZGVFdmVudExpc3RlbmVyKE5vZGVJbXBsKiBuLCBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKIHsKLSAgSlNBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIgKmxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIgKj4obi0+
Z2V0SFRNTEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKSk7Ci0gIGlmIChsaXN0ZW5lcikKLSAgICBp
ZiAoVmFsdWVJbXAgKm9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9iakltcCgpKQotICAgICAgcmV0
dXJuIG9iajsKLSAgcmV0dXJuIGpzTnVsbCgpOworICAgIGlmIChKU0Fic3RyYWN0RXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcio+KG4t
PmdldEhUTUxFdmVudExpc3RlbmVyKGV2ZW50VHlwZSkpKQorICAgICAgICBpZiAoVmFsdWVJbXAq
IG9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9iaigpKQorICAgICAgICAgICAgcmV0dXJuIG9iajsK
KyAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYzMCwx
MCArNTc4LDYgQEAgRE9NVUlFdmVudDo6RE9NVUlFdmVudChFeGVjU3RhdGUgKmV4ZWMsIAogICBz
ZXRQcm90b3R5cGUoRE9NVUlFdmVudFByb3RvOjpzZWxmKGV4ZWMpKTsKIH0KIAotRE9NVUlFdmVu
dDo6fkRPTVVJRXZlbnQoKQotewotfQotCiBib29sIERPTVVJRXZlbnQ6OmdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PERPTVVJRXZl
bnQsIERPTUV2ZW50PihleGVjLCAmRE9NVUlFdmVudFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwpAQCAtNzIxLDEwICs2NjUsNiBAQCBET01Nb3VzZUV2ZW50OjpET01Nb3VzZUV2ZW50
KEV4ZWNTdGF0ZSAqCiAgIHNldFByb3RvdHlwZShET01Nb3VzZUV2ZW50UHJvdG86OnNlbGYoZXhl
YykpOwogfQogCi1ET01Nb3VzZUV2ZW50Ojp+RE9NTW91c2VFdmVudCgpCi17Ci19Ci0KIGJvb2wg
RE9NTW91c2VFdmVudDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIHJldHVy
biBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NTW91c2VFdmVudCwgRE9NVUlFdmVudD4oZXhlYywgJkRP
TU1vdXNlRXZlbnRUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKQEAgLTg1MSwxNSAr
NzkxLDYgQEAgRE9NS2V5Ym9hcmRFdmVudDo6RE9NS2V5Ym9hcmRFdmVudChFeGVjUwogICBzZXRQ
cm90b3R5cGUoRE9NS2V5Ym9hcmRFdmVudFByb3RvOjpzZWxmKGV4ZWMpKTsKIH0KIAotRE9NS2V5
Ym9hcmRFdmVudDo6fkRPTUtleWJvYXJkRXZlbnQoKQotewotfQotCi1jb25zdCBDbGFzc0luZm8q
IERPTUtleWJvYXJkRXZlbnQ6OmNsYXNzSW5mbygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZpbmZv
OwotfQotCiBib29sIERPTUtleWJvYXJkRXZlbnQ6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewogICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PERPTUtleWJvYXJkRXZlbnQsIERP
TVVJRXZlbnQ+KGV4ZWMsICZET01LZXlib2FyZEV2ZW50VGFibGUsIHRoaXMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CkBAIC05NjMsMTAgKzg5NCw2IEBAIERPTU11dGF0aW9uRXZlbnQ6OkRPTU11dGF0
aW9uRXZlbnQoRXhlY1MKICAgc2V0UHJvdG90eXBlKERPTU11dGF0aW9uRXZlbnRQcm90bzo6c2Vs
ZihleGVjKSk7CiB9CiAKLURPTU11dGF0aW9uRXZlbnQ6On5ET01NdXRhdGlvbkV2ZW50KCkKLXsK
LX0KLQogYm9vbCBET01NdXRhdGlvbkV2ZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxET01NdXRhdGlvbkV2ZW50LCBET01F
dmVudD4oZXhlYywgJkRPTU11dGF0aW9uRXZlbnRUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBz
bG90KTsKQEAgLTExMTMsMjQgKzEwNDAsNiBAQCBDbGlwYm9hcmQ6OkNsaXBib2FyZChFeGVjU3Rh
dGUgKmV4ZWMsIERPCiAgIDogY2xpcGJvYXJkKGNiKQogewogICAgIHNldFByb3RvdHlwZShDbGlw
Ym9hcmRQcm90bzo6c2VsZihleGVjKSk7Ci0gIAotICAgIGlmIChjbGlwYm9hcmQpCi0gICAgICAg
IGNsaXBib2FyZC0+cmVmKCk7Ci19Ci0KLUNsaXBib2FyZDo6fkNsaXBib2FyZCgpCi17Ci0gICAg
aWYgKGNsaXBib2FyZCkKLSAgICAgICAgY2xpcGJvYXJkLT5kZXJlZigpOwotfQotCi1zdGF0aWMg
VmFsdWVJbXAgKnN0cmluZ09yVW5kZWZpbmVkKGNvbnN0IERPTTo6RE9NU3RyaW5nICZzdHIpCi17
Ci0gICAgaWYgKHN0ci5pc051bGwoKSkgewotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZyhzdHIpOwotICAgIH0KIH0KIAogYm9v
bCBDbGlwYm9hcmQ6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTE0MywxMCAr
MTA1MiwxMCBAQCBWYWx1ZUltcCAqQ2xpcGJvYXJkOjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAgICAg
c3dpdGNoICh0b2tlbikgewogICAgICAgICBjYXNlIERyb3BFZmZlY3Q6CiAgICAgICAgICAgICBh
c3NlcnQoY2xpcGJvYXJkLT5pc0ZvckRyYWdnaW5nKCkgfHwgY2xpcGJvYXJkLT5kcm9wRWZmZWN0
KCkuaXNOdWxsKCkpOwotICAgICAgICAgICAgcmV0dXJuIHN0cmluZ09yVW5kZWZpbmVkKGNsaXBi
b2FyZC0+ZHJvcEVmZmVjdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZ09yVW5kZWZp
bmVkKGNsaXBib2FyZC0+ZHJvcEVmZmVjdCgpKTsKICAgICAgICAgY2FzZSBFZmZlY3RBbGxvd2Vk
OgogICAgICAgICAgICAgYXNzZXJ0KGNsaXBib2FyZC0+aXNGb3JEcmFnZ2luZygpIHx8IGNsaXBi
b2FyZC0+ZWZmZWN0QWxsb3dlZCgpLmlzTnVsbCgpKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJp
bmdPclVuZGVmaW5lZChjbGlwYm9hcmQtPmVmZmVjdEFsbG93ZWQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4ganNTdHJpbmdPclVuZGVmaW5lZChjbGlwYm9hcmQtPmVmZmVjdEFsbG93ZWQoKSk7CiAg
ICAgICAgIGNhc2UgVHlwZXM6CiAgICAgICAgIHsKICAgICAgICAgICAgIFFTdHJpbmdMaXN0IHFU
eXBlcyA9IGNsaXBib2FyZC0+dHlwZXMoKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
ZXZlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNt
YS9ranNfZXZlbnRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAtcCAtdSAtcjEu
MzUgV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuaAotLS0gV2ViQ29yZS9raHRtbC9lY21h
L2tqc19ldmVudHMuaAkxIERlYyAyMDA1IDEwOjMyOjA5IC0wMDAwCTEuMzUKKysrIFdlYkNvcmUv
a2h0bWwvZWNtYS9ranNfZXZlbnRzLmgJMTAgRGVjIDIwMDUgMTY6MDk6MDggLTAwMDAKQEAgLTM5
LDIwOSArMzksMjAxIEBAIG5hbWVzcGFjZSBET00gewogCiBuYW1lc3BhY2UgS0pTIHsKIAotICBj
bGFzcyBXaW5kb3c7Ci0gIGNsYXNzIENsaXBib2FyZDsKKyAgICBjbGFzcyBXaW5kb3c7CisgICAg
Y2xhc3MgQ2xpcGJvYXJkOwogICAgIAotICBjbGFzcyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciA6
IHB1YmxpYyBET006OkV2ZW50TGlzdGVuZXIgewotICBwdWJsaWM6Ci0gICAgSlNBYnN0cmFjdEV2
ZW50TGlzdGVuZXIoYm9vbCBfaHRtbCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5KU0Fic3RyYWN0
RXZlbnRMaXN0ZW5lcigpOwotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChET006OkV2ZW50
TGlzdGVuZXJFdmVudCBldnQsIGJvb2wgaXNXaW5kb3dFdmVudCk7Ci0gICAgdmlydHVhbCBET006
OkRPTVN0cmluZyBldmVudExpc3RlbmVyVHlwZSgpOwotICAgIHZpcnR1YWwgT2JqZWN0SW1wICps
aXN0ZW5lck9iaigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIE9iamVjdEltcCAqd2luZG93T2Jq
KCkgY29uc3QgPSAwOwotICAgIE9iamVjdEltcCAqbGlzdGVuZXJPYmpJbXAoKSBjb25zdCB7IHJl
dHVybiBsaXN0ZW5lck9iaigpOyB9Ci0gIHByb3RlY3RlZDoKLSAgICBib29sIGh0bWw7Ci0gIH07
Ci0KLSAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNBYnN0cmFj
dEV2ZW50TGlzdGVuZXIgewotICBwdWJsaWM6Ci0gICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIoT2JqZWN0SW1wICpfbGlzdGVuZXIsIE9iamVjdEltcCAqX3dpbiwgYm9vbCBfaHRtbCA9IGZh
bHNlKTsKLSAgICB2aXJ0dWFsIH5KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcigpOwotICAgIHZp
cnR1YWwgT2JqZWN0SW1wICpsaXN0ZW5lck9iaigpIGNvbnN0OwotICAgIHZpcnR1YWwgT2JqZWN0
SW1wICp3aW5kb3dPYmooKSBjb25zdDsKLSAgICB2b2lkIGNsZWFyV2luZG93T2JqKCk7Ci0gICAg
dm9pZCBtYXJrKCk7Ci0gIHByb3RlY3RlZDoKLSAgICBPYmplY3RJbXAgKmxpc3RlbmVyOwotICAg
IE9iamVjdEltcCAqd2luOwotICB9OwotCi0gIGNsYXNzIEpTRXZlbnRMaXN0ZW5lciA6IHB1Ymxp
YyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciB7Ci0gIHB1YmxpYzoKLSAgICBKU0V2ZW50TGlzdGVu
ZXIoT2JqZWN0SW1wICpfbGlzdGVuZXIsIE9iamVjdEltcCAqX3dpbiwgYm9vbCBfaHRtbCA9IGZh
bHNlKTsKLSAgICB2aXJ0dWFsIH5KU0V2ZW50TGlzdGVuZXIoKTsKLSAgICB2aXJ0dWFsIE9iamVj
dEltcCAqbGlzdGVuZXJPYmooKSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVjdEltcCAqd2luZG93
T2JqKCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhcldpbmRvd09iaigpOwotICBwcm90ZWN0ZWQ6Ci0g
ICAgbXV0YWJsZSBQcm90ZWN0ZWRQdHI8T2JqZWN0SW1wPiBsaXN0ZW5lcjsKLSAgICBQcm90ZWN0
ZWRQdHI8T2JqZWN0SW1wPiB3aW47Ci0gIH07Ci0KLSAgY2xhc3MgSlNMYXp5RXZlbnRMaXN0ZW5l
ciA6IHB1YmxpYyBKU0V2ZW50TGlzdGVuZXIgewotICBwdWJsaWM6Ci0gICAgSlNMYXp5RXZlbnRM
aXN0ZW5lcihRU3RyaW5nIF9jb2RlLCBPYmplY3RJbXAgKl93aW4sIERPTTo6Tm9kZUltcGwgKm5v
ZGUsIGludCBsaW5lbm8gPSAwKTsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRE9NOjpF
dmVudExpc3RlbmVyRXZlbnQgZXZ0LCBib29sIGlzV2luZG93RXZlbnQpOwotICAgIE9iamVjdElt
cCAqbGlzdGVuZXJPYmooKSBjb25zdDsKLSAgICAKLSAgcHJpdmF0ZToKLSAgICB2b2lkIHBhcnNl
Q29kZSgpIGNvbnN0OworICAgIGNsYXNzIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyIDogcHVibGlj
IERPTTo6RXZlbnRMaXN0ZW5lciB7CisgICAgcHVibGljOgorICAgICAgICBKU0Fic3RyYWN0RXZl
bnRMaXN0ZW5lcihib29sIEhUTUwgPSBmYWxzZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChET006OkV2ZW50TGlzdGVuZXJFdmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKKyAg
ICAgICAgdmlydHVhbCBET006OkRPTVN0cmluZyBldmVudExpc3RlbmVyVHlwZSgpOworICAgICAg
ICB2aXJ0dWFsIE9iamVjdEltcCogbGlzdGVuZXJPYmooKSBjb25zdCA9IDA7CisgICAgICAgIHZp
cnR1YWwgV2luZG93KiB3aW5kb3dPYmooKSBjb25zdCA9IDA7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgYm9vbCBodG1sOworICAgIH07CisKKyAgICBjbGFzcyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lciA6IHB1YmxpYyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciB7CisgICAgcHVibGljOgorICAg
ICAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihPYmplY3RJbXAqIGxpc3RlbmVyLCBXaW5k
b3cqLCBib29sIEhUTUwgPSBmYWxzZSk7CisgICAgICAgIHZpcnR1YWwgfkpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKCk7CisgICAgICAgIHZpcnR1YWwgT2JqZWN0SW1wICpsaXN0ZW5lck9iaigp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIFdpbmRvdyAqd2luZG93T2JqKCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgY2xlYXJXaW5kb3dPYmooKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
KyAgICBwcml2YXRlOgorICAgICAgICBPYmplY3RJbXAqIGxpc3RlbmVyOworICAgICAgICBXaW5k
b3cqIHdpbjsKKyAgICB9OworCisgICAgY2xhc3MgSlNFdmVudExpc3RlbmVyIDogcHVibGljIEpT
QWJzdHJhY3RFdmVudExpc3RlbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZlbnRMaXN0
ZW5lcihPYmplY3RJbXAqIGxpc3RlbmVyLCBXaW5kb3cqLCBib29sIEhUTUwgPSBmYWxzZSk7Cisg
ICAgICAgIHZpcnR1YWwgfkpTRXZlbnRMaXN0ZW5lcigpOworICAgICAgICB2aXJ0dWFsIE9iamVj
dEltcCogbGlzdGVuZXJPYmooKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBXaW5kb3cqIHdpbmRv
d09iaigpIGNvbnN0OworICAgICAgICB2b2lkIGNsZWFyV2luZG93T2JqKCk7CisgICAgcHJvdGVj
dGVkOgorICAgICAgICBtdXRhYmxlIFByb3RlY3RlZFB0cjxPYmplY3RJbXA+IGxpc3RlbmVyOwor
ICAgIHByaXZhdGU6CisgICAgICAgIFByb3RlY3RlZFB0cjxXaW5kb3c+IHdpbjsKKyAgICB9Owor
CisgICAgY2xhc3MgSlNMYXp5RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBKU0V2ZW50TGlzdGVuZXIg
eworICAgIHB1YmxpYzoKKyAgICAgICAgSlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBET006OkRP
TVN0cmluZyYgY29kZSwgV2luZG93KiwgRE9NOjpOb2RlSW1wbCosIGludCBsaW5lbm8gPSAwKTsK
KyAgICAgICAgdmlydHVhbCBPYmplY3RJbXAgKmxpc3RlbmVyT2JqKCkgY29uc3Q7CiAgICAgCi0g
ICAgbXV0YWJsZSBRU3RyaW5nIGNvZGU7Ci0gICAgbXV0YWJsZSBib29sIHBhcnNlZDsKLSAgICBp
bnQgbGluZU51bWJlcjsKLSAgICBET006Ok5vZGVJbXBsICpvcmlnaW5hbE5vZGU7Ci0gIH07Ci0K
LSAgVmFsdWVJbXAgKmdldE5vZGVFdmVudExpc3RlbmVyKERPTTo6Tm9kZUltcGwgKm4sIGNvbnN0
IERPTTo6QXRvbWljU3RyaW5nICZldmVudFR5cGUpOwotCi0gIC8vIENvbnN0cnVjdG9yIGZvciBF
dmVudCAtIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHNvbWUgZ2xvYmFsIHZhcnMKLSAgY2xhc3Mg
RXZlbnRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3QgewotICBwdWJsaWM6Ci0gICAgRXZl
bnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKikgeyB9Ci0gICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYp
OwotICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4p
IGNvbnN0OwotICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKLSAgICB2aXJ0dWFsIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gIH07Ci0KLSAgVmFsdWVJbXAgKmdldEV2ZW50Q29u
c3RydWN0b3IoRXhlY1N0YXRlICpleGVjKTsKLQotICBjbGFzcyBET01FdmVudCA6IHB1YmxpYyBE
T01PYmplY3QgewotICBwdWJsaWM6Ci0gICAgRE9NRXZlbnQoRXhlY1N0YXRlICpleGVjLCBET006
OkV2ZW50SW1wbCAqZSk7Ci0gICAgfkRPTUV2ZW50KCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwotICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0JCQlWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0g
Tm9uZSk7Ci0gICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCk7Ci0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOwotICAgIGVudW0geyBUeXBlLCBUYXJnZXQsIEN1cnJlbnRUYXJnZXQsIEV2
ZW50UGhhc2UsIEJ1YmJsZXMsCi0gICAgICAgICAgIENhbmNlbGFibGUsIFRpbWVTdGFtcCwgU3Rv
cFByb3BhZ2F0aW9uLCBQcmV2ZW50RGVmYXVsdCwgSW5pdEV2ZW50LAotCSAgIC8vIE1TIElFIGVx
dWl2YWxlbnRzCi0JICAgU3JjRWxlbWVudCwgUmV0dXJuVmFsdWUsIENhbmNlbEJ1YmJsZSwgQ2xp
cGJvYXJkRGF0YSwgRGF0YVRyYW5zZmVyIH07Ci0gICAgRE9NOjpFdmVudEltcGwgKmltcGwoKSBj
b25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLSAgcHJvdGVjdGVkOgotICAgIFJlZlB0cjxE
T006OkV2ZW50SW1wbD4gbV9pbXBsOwotICAgIG11dGFibGUgQ2xpcGJvYXJkICpjbGlwYm9hcmQ7
Ci0gIH07Ci0KLSAgVmFsdWVJbXAgKmdldERPTUV2ZW50KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpF
dmVudEltcGwgKmUpOwotCi0gIERPTTo6RXZlbnRJbXBsICp0b0V2ZW50KFZhbHVlSW1wICopOyAv
LyByZXR1cm5zIDAgaWYgdmFsdWUgaXMgbm90IGEgRE9NRXZlbnQgb2JqZWN0Ci0KLSAgLy8gQ29u
c3RydWN0b3Igb2JqZWN0IEV2ZW50RXhjZXB0aW9uCi0gIGNsYXNzIEV2ZW50RXhjZXB0aW9uQ29u
c3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKLSAgcHVibGljOgotICAgIEV2ZW50RXhjZXB0
aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlICopIHsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3Qm
KTsKLSAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2Vu
KSBjb25zdDsKLSAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5Ci0gICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICB9OwotCi0gIFZhbHVlSW1wICpnZXRFdmVudEV4
Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7Ci0KLSAgY2xhc3MgRE9NVUlFdmVu
dCA6IHB1YmxpYyBET01FdmVudCB7Ci0gIHB1YmxpYzoKLSAgICBET01VSUV2ZW50KEV4ZWNTdGF0
ZSAqZXhlYywgRE9NOjpVSUV2ZW50SW1wbCAqdWUpOwotICAgIH5ET01VSUV2ZW50KCk7Ci0gICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9u
bHkKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgZW51bSB7
IFZpZXcsIERldGFpbCwgS2V5Q29kZSwgQ2hhckNvZGUsIExheWVyWCwgTGF5ZXJZLCBQYWdlWCwg
UGFnZVksIFdoaWNoLCBJbml0VUlFdmVudCB9OwotICB9OwotCi0gIGNsYXNzIERPTU1vdXNlRXZl
bnQgOiBwdWJsaWMgRE9NVUlFdmVudCB7Ci0gIHB1YmxpYzoKLSAgICBET01Nb3VzZUV2ZW50KEV4
ZWNTdGF0ZSAqZXhlYywgRE9NOjpNb3VzZUV2ZW50SW1wbCAqbWUpOwotICAgIH5ET01Nb3VzZUV2
ZW50KCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBtYXJrKCk7Ci0gICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQotICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICBlbnVtIHsgU2NyZWVuWCwgU2NyZWVuWSwg
Q2xpZW50WCwgWCwgQ2xpZW50WSwgWSwgT2Zmc2V0WCwgT2Zmc2V0WSwKLSAgICAgICAgICAgQ3Ry
bEtleSwgU2hpZnRLZXksIEFsdEtleSwKLSAgICAgICAgICAgTWV0YUtleSwgQnV0dG9uLCBSZWxh
dGVkVGFyZ2V0LCBGcm9tRWxlbWVudCwgVG9FbGVtZW50LAotICAgICAgICAgICBJbml0TW91c2VF
dmVudCB9OwotICB9OwotCi0gIGNsYXNzIERPTUtleWJvYXJkRXZlbnQgOiBwdWJsaWMgRE9NVUlF
dmVudCB7Ci0gIHB1YmxpYzoKLSAgICBET01LZXlib2FyZEV2ZW50KEV4ZWNTdGF0ZSAqZXhlYywg
RE9NOjpLZXlib2FyZEV2ZW50SW1wbCAqa2UpOwotICAgIH5ET01LZXlib2FyZEV2ZW50KCk7Ci0g
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRl
bnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIC8vIG5vIHB1dCAtIGFsbCByZWFk
LW9ubHkKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Q7Ci0g
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgIGVudW0geyBLZXlJZGVudGlmaWVy
LCBLZXlMb2NhdGlvbiwgQ3RybEtleSwgU2hpZnRLZXksIEFsdEtleSwgTWV0YUtleSwgQWx0R3Jh
cGhLZXksIEluaXRLZXlib2FyZEV2ZW50fTsKLSAgfTsKLQotICAvLyBDb25zdHJ1Y3RvciBvYmpl
Y3QgTXV0YXRpb25FdmVudAotICBjbGFzcyBNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3IgOiBwdWJs
aWMgRE9NT2JqZWN0IHsKLSAgcHVibGljOgotICAgIE11dGF0aW9uRXZlbnRDb25zdHJ1Y3RvcihF
eGVjU3RhdGUgKikgeyB9Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIC8v
IG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87Ci0gIH07Ci0KLSAgVmFsdWVJbXAgKmdldE11dGF0aW9uRXZlbnRDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUgKmV4ZWMpOwotCi0gIGNsYXNzIERPTU11dGF0aW9uRXZlbnQgOiBwdWJsaWMg
RE9NRXZlbnQgewotICBwdWJsaWM6Ci0gICAgRE9NTXV0YXRpb25FdmVudChFeGVjU3RhdGUgKmV4
ZWMsIERPTTo6TXV0YXRpb25FdmVudEltcGwgKm1lKTsKLSAgICB+RE9NTXV0YXRpb25FdmVudCgp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAvLyBubyBwdXQgLSBhbGwg
cmVhZC1vbmx5Ci0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAg
IGVudW0geyBBdHRyQ2hhbmdlLCBSZWxhdGVkTm9kZSwgQXR0ck5hbWUsIFByZXZWYWx1ZSwgTmV3
VmFsdWUsCi0gICAgICAgICAgIEluaXRNdXRhdGlvbkV2ZW50IH07Ci0gIH07CisgICAgcHJpdmF0
ZToKKyAgICAgICAgdm9pZCBwYXJzZUNvZGUoKSBjb25zdDsKKworICAgICAgICBtdXRhYmxlIERP
TTo6RE9NU3RyaW5nIGNvZGU7CisgICAgICAgIG11dGFibGUgYm9vbCBwYXJzZWQ7CisgICAgICAg
IGludCBsaW5lTnVtYmVyOworICAgICAgICBET006Ok5vZGVJbXBsKiBvcmlnaW5hbE5vZGU7Cisg
ICAgfTsKKworICAgIFZhbHVlSW1wKiBnZXROb2RlRXZlbnRMaXN0ZW5lcihET006Ok5vZGVJbXBs
KiBuLCBjb25zdCBET006OkF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKworICAgIC8vIENvbnN0
cnVjdG9yIGZvciBFdmVudCAtIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHNvbWUgZ2xvYmFsIHZh
cnMKKyAgICBjbGFzcyBFdmVudENvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CisgICAg
cHVibGljOgorICAgICAgICBFdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopIHsgfQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKKyAgICAgICAgLy8gbm8gcHV0IC0gYWxs
IHJlYWQtb25seQorICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBp
bmZvOworICAgIH07CisKKyAgICBWYWx1ZUltcCogZ2V0RXZlbnRDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqKTsKKworICAgIGNsYXNzIERPTUV2ZW50IDogcHVibGljIERPTU9iamVjdCB7CisgICAgcHVi
bGljOgorICAgICAgICBET01FdmVudChFeGVjU3RhdGUqLCBET006OkV2ZW50SW1wbCopOworICAg
ICAgICB2aXJ0dWFsIH5ET01FdmVudCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICAgICAgVmFsdWVJbXAqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2Vu
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgVmFsdWVJbXAqLCBpbnQgYXR0ciA9IE5vbmUpOworICAgICAgICB2b2lkIHB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuLCBWYWx1ZUltcCosIGludCk7CisgICAg
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQorICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisgICAgICAgIGVu
dW0geyBUeXBlLCBUYXJnZXQsIEN1cnJlbnRUYXJnZXQsIEV2ZW50UGhhc2UsIEJ1YmJsZXMsCisg
ICAgICAgICAgICAgICBDYW5jZWxhYmxlLCBUaW1lU3RhbXAsIFN0b3BQcm9wYWdhdGlvbiwgUHJl
dmVudERlZmF1bHQsIEluaXRFdmVudCwKKyAgICAgICAgICAgICAgIC8vIE1TIElFIGVxdWl2YWxl
bnRzCisgICAgICAgICAgICAgICBTcmNFbGVtZW50LCBSZXR1cm5WYWx1ZSwgQ2FuY2VsQnViYmxl
LCBDbGlwYm9hcmREYXRhLCBEYXRhVHJhbnNmZXIgfTsKKyAgICAgICAgRE9NOjpFdmVudEltcGwg
KmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIFJlZlB0cjxET006OkV2ZW50SW1wbD4gbV9pbXBsOworICAgICAgICBtdXRhYmxlIENs
aXBib2FyZCogY2xpcGJvYXJkOworICAgIH07CisKKyAgICBWYWx1ZUltcCogZ2V0RE9NRXZlbnQo
RXhlY1N0YXRlKiwgRE9NOjpFdmVudEltcGwqKTsKKworICAgIERPTTo6RXZlbnRJbXBsKiB0b0V2
ZW50KFZhbHVlSW1wICopOyAvLyByZXR1cm5zIDAgaWYgdmFsdWUgaXMgbm90IGEgRE9NRXZlbnQg
b2JqZWN0CisKKyAgICAvLyBDb25zdHJ1Y3RvciBvYmplY3QgRXZlbnRFeGNlcHRpb24KKyAgICBj
bGFzcyBFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CisgICAg
cHVibGljOgorICAgICAgICBFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopIHsg
fQorICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgVmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKKyAgICAgICAgLy8gbm8g
cHV0IC0gYWxsIHJlYWQtb25seQorICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOworICAgIH07CisKKyAgICBWYWx1ZUltcCAqZ2V0RXZlbnRFeGNlcHRpb25D
b25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKKworICAgIGNsYXNzIERPTVVJRXZlbnQgOiBwdWJsaWMg
RE9NRXZlbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgRE9NVUlFdmVudChFeGVjU3RhdGUqLCBE
T006OlVJRXZlbnRJbXBsKik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgICAg
ICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CisgICAgICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQorICAgICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisgICAgICAgIGVudW0geyBWaWV3LCBEZXRh
aWwsIEtleUNvZGUsIENoYXJDb2RlLCBMYXllclgsIExheWVyWSwgUGFnZVgsIFBhZ2VZLCBXaGlj
aCwgSW5pdFVJRXZlbnQgfTsKKyAgICB9OworCisgICAgY2xhc3MgRE9NTW91c2VFdmVudCA6IHB1
YmxpYyBET01VSUV2ZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIERPTU1vdXNlRXZlbnQoRXhl
Y1N0YXRlKiwgRE9NOjpNb3VzZUV2ZW50SW1wbCAqbWUpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKKyAgICAgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwg
aW50IHRva2VuKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAg
Ly8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQorICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICAgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBpbmZvOworICAgICAgICBlbnVtIHsgU2NyZWVuWCwgU2NyZWVuWSwgQ2xp
ZW50WCwgWCwgQ2xpZW50WSwgWSwgT2Zmc2V0WCwgT2Zmc2V0WSwKKyAgICAgICAgICAgICAgIEN0
cmxLZXksIFNoaWZ0S2V5LCBBbHRLZXksCisgICAgICAgICAgICAgICBNZXRhS2V5LCBCdXR0b24s
IFJlbGF0ZWRUYXJnZXQsIEZyb21FbGVtZW50LCBUb0VsZW1lbnQsCisgICAgICAgICAgICAgICBJ
bml0TW91c2VFdmVudCB9OworICAgIH07CisKKyAgICBjbGFzcyBET01LZXlib2FyZEV2ZW50IDog
cHVibGljIERPTVVJRXZlbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgRE9NS2V5Ym9hcmRFdmVu
dChFeGVjU3RhdGUqLCBET006OktleWJvYXJkRXZlbnRJbXBsICprZSk7CisgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYpOworICAgICAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OworICAgICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1v
bmx5CisgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQorICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Cisg
ICAgICAgIGVudW0geyBLZXlJZGVudGlmaWVyLCBLZXlMb2NhdGlvbiwgQ3RybEtleSwgU2hpZnRL
ZXksIEFsdEtleSwgTWV0YUtleSwgQWx0R3JhcGhLZXksIEluaXRLZXlib2FyZEV2ZW50fTsKKyAg
ICB9OworCisgICAgLy8gQ29uc3RydWN0b3Igb2JqZWN0IE11dGF0aW9uRXZlbnQKKyAgICBjbGFz
cyBNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIE11dGF0aW9uRXZlbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKSB7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIFZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7CisgICAgICAgIC8vIG5vIHB1dCAt
IGFsbCByZWFkLW9ubHkKKyAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gaW5mbzsKKyAgICB9OworCisgICAgVmFsdWVJbXAqIGdldE11dGF0aW9uRXZlbnRDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqKTsKKworICAgIGNsYXNzIERPTU11dGF0aW9uRXZlbnQgOiBwdWJsaWMg
RE9NRXZlbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgRE9NTXV0YXRpb25FdmVudChFeGVjU3Rh
dGUqLCBET006Ok11dGF0aW9uRXZlbnRJbXBsICptZSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
U2xvdCYpOworICAgICAgICBWYWx1ZUltcCogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CisgICAg
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQorICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisgICAgICAgIGVu
dW0geyBBdHRyQ2hhbmdlLCBSZWxhdGVkTm9kZSwgQXR0ck5hbWUsIFByZXZWYWx1ZSwgTmV3VmFs
dWUsCisgICAgICAgICAgICAgICBJbml0TXV0YXRpb25FdmVudCB9OworICAgIH07CiAgIAogICAg
IGNsYXNzIERPTVdoZWVsRXZlbnQgOiBwdWJsaWMgRE9NVUlFdmVudCB7CiAgICAgcHVibGljOgot
ICAgICAgICBET01XaGVlbEV2ZW50KEV4ZWNTdGF0ZSAqLCBET006OldoZWVsRXZlbnRJbXBsICop
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIFZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OworICAgICAgICBET01X
aGVlbEV2ZW50KEV4ZWNTdGF0ZSosIERPTTo6V2hlZWxFdmVudEltcGwgKik7CisgICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOworICAgICAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgICAgICAvLyBubyBwdXQgLSBhbGwgcmVh
ZC1vbmx5CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
CiAgICAgICAgIGVudW0geyBTY3JlZW5YLCBTY3JlZW5ZLCBDbGllbnRYLCBYLCBDbGllbnRZLCBZ
LCBPZmZzZXRYLCBPZmZzZXRZLAotICAgICAgICAgICBDdHJsS2V5LCBTaGlmdEtleSwgQWx0S2V5
LCBNZXRhS2V5LCBXaGVlbERlbHRhIH07CisgICAgICAgICAgICAgICBDdHJsS2V5LCBTaGlmdEtl
eSwgQWx0S2V5LCBNZXRhS2V5LCBXaGVlbERlbHRhIH07CiAgICAgfTsKIAotICBjbGFzcyBDbGlw
Ym9hcmQgOiBwdWJsaWMgRE9NT2JqZWN0IHsKLSAgZnJpZW5kIGNsYXNzIENsaXBib2FyZFByb3Rv
RnVuYzsKLSAgcHVibGljOgotICAgIENsaXBib2FyZChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6Q2xp
cGJvYXJkSW1wbCAqZHMpOwotICAgIH5DbGlwYm9hcmQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7Ci0gICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIg
PSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50IC8qYXR0ciovKTsKLSAgICB2aXJ0dWFsIGJvb2wg
dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0g
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgIGVudW0geyBDbGVhckRhdGEsIEdl
dERhdGEsIFNldERhdGEsIFR5cGVzLCBTZXREcmFnSW1hZ2UsIERyb3BFZmZlY3QsIEVmZmVjdEFs
bG93ZWQgfTsKLSAgcHJpdmF0ZToKLSAgICBET006OkNsaXBib2FyZEltcGwgKmNsaXBib2FyZDsK
LSAgfTsKKyAgICBjbGFzcyBDbGlwYm9hcmQgOiBwdWJsaWMgRE9NT2JqZWN0IHsKKyAgICBmcmll
bmQgY2xhc3MgQ2xpcGJvYXJkUHJvdG9GdW5jOworICAgIHB1YmxpYzoKKyAgICAgICAgQ2xpcGJv
YXJkKEV4ZWNTdGF0ZSosIERPTTo6Q2xpcGJvYXJkSW1wbCAqZHMpOworICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgVmFsdWVJbXAqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlKiwgaW50IHRva2VuKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgVmFsdWVJbXAqLCBpbnQgYXR0ciA9IE5vbmUpOworICAg
ICAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuLCBWYWx1ZUlt
cCosIGludCBhdHRyKTsKKyAgICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUq
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQorICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIGluZm87CisgICAgICAgIGVudW0geyBDbGVhckRhdGEsIEdldERhdGEsIFNl
dERhdGEsIFR5cGVzLCBTZXREcmFnSW1hZ2UsIERyb3BFZmZlY3QsIEVmZmVjdEFsbG93ZWQgfTsK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8RE9NOjpDbGlwYm9hcmRJbXBsPiBjbGlwYm9h
cmQ7CisgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UKIApJbmRleDogV2ViQ29yZS9raHRtbC9lY21h
L2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lY21hL2tqc19odG1sLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTEKZGlmZiAtcCAt
dSAtcjEuMTUxIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKLS0tIFdlYkNvcmUva2h0
bWwvZWNtYS9ranNfaHRtbC5jcHAJMyBEZWMgMjAwNSAyMDoyNjowMCAtMDAwMAkxLjE1MQorKysg
V2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAkxMCBEZWMgMjAwNSAxNjowOToxMyAtMDAw
MApAQCAtMzY1Miw3ICszNjUyLDcgQEAgVmFsdWVJbXAgKkltYWdlOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdAogICBjYXNlIENvbXBsZXRlOgogICAgIHJldHVybiBCb29sZWFuKCFpbWcgfHwgaW1n
LT5zdGF0dXMoKSA+PSBraHRtbDo6Q2FjaGVkT2JqZWN0OjpQZXJzaXN0ZW50KTsKICAgY2FzZSBP
bkxvYWQ6Ci0gICAgaWYgKG9uTG9hZExpc3RlbmVyICYmIG9uTG9hZExpc3RlbmVyLT5saXN0ZW5l
ck9iakltcCgpKSB7CisgICAgaWYgKG9uTG9hZExpc3RlbmVyICYmIG9uTG9hZExpc3RlbmVyLT5s
aXN0ZW5lck9iaigpKSB7CiAgICAgICByZXR1cm4gb25Mb2FkTGlzdGVuZXItPmxpc3RlbmVyT2Jq
KCk7CiAgICAgfSBlbHNlIHsKICAgICAgIHJldHVybiBOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX3Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19wcm94eS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYK
ZGlmZiAtcCAtdSAtcjEuMjYgV2ViQ29yZS9raHRtbC9lY21hL2tqc19wcm94eS5jcHAKLS0tIFdl
YkNvcmUva2h0bWwvZWNtYS9ranNfcHJveHkuY3BwCTI3IE5vdiAyMDA1IDA3OjU0OjUwIC0wMDAw
CTEuMjYKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcHJveHkuY3BwCTEwIERlYyAyMDA1IDE2
OjA5OjEzIC0wMDAwCkBAIC0yOCwyMiArMjgsMjEgQEAKICNpbmNsdWRlIDxrZGVidWcuaD4KICNp
bmNsdWRlIDxranMvY29sbGVjdG9yLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCi11c2luZyBET006OkV2ZW50TGlzdGVuZXI7Ci0KIGV4dGVybiAiQyIg
ewotICBLSlNQcm94eSAqa2pzX2h0bWxfaW5pdChLSFRNTFBhcnQgKmtodG1scGFydCk7CisgICAg
S0pTUHJveHkgKmtqc19odG1sX2luaXQoS0hUTUxQYXJ0ICopOwogfQogCiBjbGFzcyBLSlNQcm94
eUltcGwgOiBwdWJsaWMgS0pTUHJveHkgewogcHVibGljOgotICBLSlNQcm94eUltcGwoS0hUTUxQ
YXJ0ICpwYXJ0KTsKKyAgS0pTUHJveHlJbXBsKEtIVE1MUGFydCopOwogICB2aXJ0dWFsIH5LSlNQ
cm94eUltcGwoKTsKLSAgdmlydHVhbCBRVmFyaWFudCBldmFsdWF0ZShRU3RyaW5nIGZpbGVuYW1l
LCBpbnQgYmFzZUxpbmUsIGNvbnN0IFFTdHJpbmcmc3RyLCBET006Ok5vZGVJbXBsICpuKTsKKyAg
dmlydHVhbCBRVmFyaWFudCBldmFsdWF0ZShjb25zdCBET01TdHJpbmcmIGZpbGVuYW1lLCBpbnQg
YmFzZUxpbmUsIGNvbnN0IERPTVN0cmluZyYgY29kZSwgTm9kZUltcGwqKTsKICAgdmlydHVhbCB2
b2lkIGNsZWFyKCk7Ci0gIHZpcnR1YWwgRE9NOjpFdmVudExpc3RlbmVyICpjcmVhdGVIVE1MRXZl
bnRIYW5kbGVyKFFTdHJpbmcgc291cmNlVXJsLCBRU3RyaW5nIGNvZGUsIERPTTo6Tm9kZUltcGwg
Km5vZGUpOwotICB2aXJ0dWFsIHZvaWQgZmluaXNoZWRXaXRoRXZlbnQoRE9NOjpFdmVudEltcGwg
KmV2ZW50KTsKKyAgdmlydHVhbCBFdmVudExpc3RlbmVyICpjcmVhdGVIVE1MRXZlbnRIYW5kbGVy
KGNvbnN0IERPTVN0cmluZyYgc291cmNlVVJMLCBjb25zdCBET01TdHJpbmcmIGNvZGUsIE5vZGVJ
bXBsKik7CisgIHZpcnR1YWwgdm9pZCBmaW5pc2hlZFdpdGhFdmVudChFdmVudEltcGwqKTsKICAg
dmlydHVhbCBLSlM6OlNjcmlwdEludGVycHJldGVyICppbnRlcnByZXRlcigpOwogCiAgIHZpcnR1
YWwgdm9pZCBzZXREZWJ1Z0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKQEAgLTkwLDggKzg5LDcgQEAg
S0pTUHJveHlJbXBsOjp+S0pTUHJveHlJbXBsKCkKICNlbmRpZgogfQogCi1RVmFyaWFudCBLSlNQ
cm94eUltcGw6OmV2YWx1YXRlKFFTdHJpbmcgZmlsZW5hbWUsIGludCBiYXNlTGluZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyZzdHIsIERPTTo6Tm9kZUlt
cGwgKm4pIAorUVZhcmlhbnQgS0pTUHJveHlJbXBsOjpldmFsdWF0ZShjb25zdCBET01TdHJpbmcm
IGZpbGVuYW1lLCBpbnQgYmFzZUxpbmUsIGNvbnN0IERPTVN0cmluZyYgc3RyLCBOb2RlSW1wbCAq
bikgCiB7CiAgIC8vIGV2YWx1YXRlIGNvZGUuIFJldHVybnMgdGhlIEpTIHJldHVybiB2YWx1ZSBv
ciBhbiBpbnZhbGlkIFFWYXJpYW50CiAgIC8vIGlmIHRoZXJlIHdhcyBub25lLCBhbiBlcnJvciBv
Y2N1cmVkIG9yIHRoZSB0eXBlIGNvdWxkbid0IGJlIGNvbnZlcnRlZC4KQEAgLTExNSw4ICsxMTMs
NyBAQCBRVmFyaWFudCBLSlNQcm94eUltcGw6OmV2YWx1YXRlKFFTdHJpbmcgCiAgIEpTTG9jayBs
b2NrOwogCiAgIEtKUzo6VmFsdWVJbXAgKnRoaXNOb2RlID0gbiA/IFdpbmRvdzo6cmV0cmlldmUo
bV9wYXJ0KSA6IGdldERPTU5vZGUobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwgbik7Ci0gIFVTdHJp
bmcgY29kZShzdHIpOwotICBDb21wbGV0aW9uIGNvbXAgPSBtX3NjcmlwdC0+ZXZhbHVhdGUoZmls
ZW5hbWUsIGJhc2VMaW5lLCBjb2RlLCB0aGlzTm9kZSk7CisgIENvbXBsZXRpb24gY29tcCA9IG1f
c2NyaXB0LT5ldmFsdWF0ZShmaWxlbmFtZSwgYmFzZUxpbmUsIHJlaW50ZXJwcmV0X2Nhc3Q8S0pT
OjpVQ2hhciAqPihzdHIudW5pY29kZSgpKSwgc3RyLmxlbmd0aCgpLCB0aGlzTm9kZSk7CiAKICAg
Ym9vbCBzdWNjZXNzID0gKCBjb21wLmNvbXBsVHlwZSgpID09IE5vcm1hbCApIHx8ICggY29tcC5j
b21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSApOyAgCiAKQEAgLTE1MSwyMSArMTQ4LDIxIEBAIHZv
aWQgS0pTUHJveHlJbXBsOjpjbGVhcigpIHsKICAgfQogfQogCi1ET006OkV2ZW50TGlzdGVuZXIg
KktKU1Byb3h5SW1wbDo6Y3JlYXRlSFRNTEV2ZW50SGFuZGxlcihRU3RyaW5nIHNvdXJjZVVybCwg
UVN0cmluZyBjb2RlLCBET006Ok5vZGVJbXBsICpub2RlKQorRXZlbnRMaXN0ZW5lciAqS0pTUHJv
eHlJbXBsOjpjcmVhdGVIVE1MRXZlbnRIYW5kbGVyKGNvbnN0IERPTVN0cmluZyYgVVJMLCBjb25z
dCBET01TdHJpbmcmIGNvZGUsIE5vZGVJbXBsICpub2RlKQogewogI2lmZGVmIEtKU19ERUJVR0dF
UgogICBpZiAoS0pTRGVidWdXaW46Omluc3RhbmNlKCkpCi0gICAgS0pTRGVidWdXaW46Omluc3Rh
bmNlKCktPnNldE5leHRTb3VyY2VJbmZvKHNvdXJjZVVybCxtX2hhbmRsZXJMaW5lbm8pOworICAg
IEtKU0RlYnVnV2luOjppbnN0YW5jZSgpLT5zZXROZXh0U291cmNlSW5mbyhVUkwsbV9oYW5kbGVy
TGluZW5vKTsKICNlbHNlCi0gIFFfVU5VU0VEKHNvdXJjZVVybCk7CisgIFFfVU5VU0VEKFVSTCk7
CiAjZW5kaWYKIAogICBpbml0U2NyaXB0KCk7CiAgIEpTTG9jayBsb2NrOwotICByZXR1cm4gS0pT
OjpXaW5kb3c6OnJldHJpZXZlV2luZG93KG1fcGFydCktPmdldEpTTGF6eUV2ZW50TGlzdGVuZXIo
Y29kZSxub2RlLG1faGFuZGxlckxpbmVubyk7CisgIHJldHVybiBLSlM6OldpbmRvdzo6cmV0cmll
dmVXaW5kb3cobV9wYXJ0KS0+Z2V0SlNMYXp5RXZlbnRMaXN0ZW5lcihjb2RlLCBub2RlLCBtX2hh
bmRsZXJMaW5lbm8pOwogfQogCi12b2lkIEtKU1Byb3h5SW1wbDo6ZmluaXNoZWRXaXRoRXZlbnQo
RE9NOjpFdmVudEltcGwgKmV2ZW50KQordm9pZCBLSlNQcm94eUltcGw6OmZpbmlzaGVkV2l0aEV2
ZW50KEV2ZW50SW1wbCAqZXZlbnQpCiB7CiAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIERP
TSBpbXBsZW1lbnRhdGlvbiBoYXMgZmluaXNoZWQgd2l0aCBhIHBhcnRpY3VsYXIgZXZlbnQuIFRo
aXMKICAgLy8gaXMgdGhlIGNhc2UgaW4gc2l0YXRpb25zIHdoZXJlIGFuIGV2ZW50IGhhcyBiZWVu
IGNyZWF0ZWQganVzdCBmb3IgdGVtcG9yYXJ5IHVzYWdlLApJbmRleDogV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19wcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VjbWEva2pzX3Byb3h5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11
IC1yMS40IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcHJveHkuaAotLS0gV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19wcm94eS5oCTEyIE1heSAyMDA1IDE3OjExOjIxIC0wMDAwCTEuNAorKysgV2ViQ29y
ZS9raHRtbC9lY21hL2tqc19wcm94eS5oCTEwIERlYyAyMDA1IDE2OjA5OjEzIC0wMDAwCkBAIC0x
LDQgKzEsMyBAQAotLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQogLyoKICAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAoQykgMTk5OSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQpAQCAtMTksMjQgKzE4LDIzIEBACiAgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAy
MTExLTEzMDcgIFVTQQogICovCiAKLSNpZm5kZWYgX0tKU19QUk9YWV9IXwotI2RlZmluZSBfS0pT
X1BST1hZX0hfCisjaWZuZGVmIEtKU19QUk9YWV9ICisjZGVmaW5lIEtKU19QUk9YWV9ICiAKICNp
bmNsdWRlIDxxdmFyaWFudC5oPgogI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAogY2xhc3MgS0hUTUxQ
YXJ0OwotY2xhc3MgS0pTRGVidWdXaW47CiAKIG5hbWVzcGFjZSBET00gewotICBjbGFzcyBFdmVu
dEltcGw7Ci0gIGNsYXNzIEV2ZW50TGlzdGVuZXI7Ci0gIGNsYXNzIE5vZGVJbXBsOworICAgIGNs
YXNzIERPTVN0cmluZzsKKyAgICBjbGFzcyBFdmVudEltcGw7CisgICAgY2xhc3MgRXZlbnRMaXN0
ZW5lcjsKKyAgICBjbGFzcyBOb2RlSW1wbDsKIH07CiAKIG5hbWVzcGFjZSBLSlMgewotICBjbGFz
cyBMaXN0OwotICBjbGFzcyBJbnRlcnByZXRlcjsKKyAgICBjbGFzcyBJbnRlcnByZXRlcjsKIH0K
IAogLyoqCkBAIC00OCwxMSArNDYsMTEgQEAgY2xhc3MgS0pTUHJveHkgewogcHVibGljOgogICBL
SlNQcm94eSgpIHsgbV9oYW5kbGVyTGluZW5vID0gMDsgfQogICB2aXJ0dWFsIH5LSlNQcm94eSgp
IHsgfQotICB2aXJ0dWFsIFFWYXJpYW50IGV2YWx1YXRlKFFTdHJpbmcgZmlsZW5hbWUsIGludCBi
YXNlTGluZSwgY29uc3QgUVN0cmluZyAmLCBET006Ok5vZGVJbXBsICpuKSA9IDA7CisgIHZpcnR1
YWwgUVZhcmlhbnQgZXZhbHVhdGUoY29uc3QgRE9NOjpET01TdHJpbmcmIGZpbGVuYW1lLCBpbnQg
YmFzZUxpbmUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBjb2RlLCBET006Ok5vZGVJbXBsKikgPSAw
OwogICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7Ci0gIHZpcnR1YWwgRE9NOjpFdmVudExpc3Rl
bmVyICpjcmVhdGVIVE1MRXZlbnRIYW5kbGVyKFFTdHJpbmcgc291cmNlVXJsLCBRU3RyaW5nIGNv
ZGUsIERPTTo6Tm9kZUltcGwgKm5vZGUpID0gMDsKLSAgdmlydHVhbCB2b2lkIGZpbmlzaGVkV2l0
aEV2ZW50KERPTTo6RXZlbnRJbXBsICpldmVudCkgPSAwOwotICB2aXJ0dWFsIEtKUzo6SW50ZXJw
cmV0ZXIgKmludGVycHJldGVyKCkgPSAwOworICB2aXJ0dWFsIERPTTo6RXZlbnRMaXN0ZW5lciog
Y3JlYXRlSFRNTEV2ZW50SGFuZGxlcihjb25zdCBET006OkRPTVN0cmluZyYgc291cmNlVVJMLCBj
b25zdCBET006OkRPTVN0cmluZyYgY29kZSwgRE9NOjpOb2RlSW1wbCopID0gMDsKKyAgdmlydHVh
bCB2b2lkIGZpbmlzaGVkV2l0aEV2ZW50KERPTTo6RXZlbnRJbXBsKikgPSAwOworICB2aXJ0dWFs
IEtKUzo6SW50ZXJwcmV0ZXIqIGludGVycHJldGVyKCkgPSAwOwogCiAgIHZpcnR1YWwgdm9pZCBz
ZXREZWJ1Z0VuYWJsZWQoYm9vbCBlbmFibGVkKSA9IDA7CiAgIHZpcnR1YWwgYm9vbCBwYXVzZWQo
KSBjb25zdCA9IDA7CkBAIC02NSw3ICs2Myw3IEBAIHB1YmxpYzoKICAgaW50IG1faGFuZGxlckxp
bmVubzsKIAogICAvLyBIZWxwZXIgbWV0aG9kLCB0byBhY2Nlc3MgdGhlIHByaXZhdGUgS0hUTUxQ
YXJ0OjpqU2NyaXB0KCkKLSAgc3RhdGljIEtKU1Byb3h5ICpwcm94eSggS0hUTUxQYXJ0ICpwYXJ0
ICk7CisgIHN0YXRpYyBLSlNQcm94eSAqcHJveHkoS0hUTUxQYXJ0ICpwYXJ0KTsKIH07CiAKICNl
bmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkzCmRpZmYgLXAgLXUgLXIxLjE5MyBXZWJDb3JlL2todG1s
L2VjbWEva2pzX3dpbmRvdy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNw
cAk0IERlYyAyMDA1IDAwOjMyOjM0IC0wMDAwCTEuMTkzCisrKyBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX3dpbmRvdy5jcHAJMTAgRGVjIDIwMDUgMTY6MDk6MTUgLTAwMDAKQEAgLTE0MTEsNyArMTQx
MSw3IEBAIFZhbHVlSW1wICpXaW5kb3c6OmdldExpc3RlbmVyKEV4ZWNTdGF0ZSAKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiAKICAgRE9NOjpFdmVudExpc3RlbmVyICpsaXN0ZW5lciA9IGRvYy0+
Z2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKLSAgaWYgKGxpc3RlbmVyICYm
IHN0YXRpY19jYXN0PEpTRXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKS0+bGlzdGVuZXJPYmpJbXAo
KSkKKyAgaWYgKGxpc3RlbmVyICYmIHN0YXRpY19jYXN0PEpTRXZlbnRMaXN0ZW5lcio+KGxpc3Rl
bmVyKS0+bGlzdGVuZXJPYmooKSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNFdmVudExpc3Rl
bmVyKj4obGlzdGVuZXIpLT5saXN0ZW5lck9iaigpOwogICBlbHNlCiAgICAgcmV0dXJuIE51bGwo
KTsKQEAgLTE0NDYsNyArMTQ0Niw3IEBAIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyICpXaW5k
b3c6OmdldEoKICAgcmV0dXJuIG5ldyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihsaXN0ZW5l
ck9iamVjdCwgdGhpcywgaHRtbCk7CiB9CiAKLUpTTGF6eUV2ZW50TGlzdGVuZXIgKldpbmRvdzo6
Z2V0SlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBRU3RyaW5nJiBjb2RlLCBET006Ok5vZGVJbXBs
ICpub2RlLCBpbnQgbGluZU51bWJlcikKK0pTTGF6eUV2ZW50TGlzdGVuZXIgKldpbmRvdzo6Z2V0
SlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBET01TdHJpbmcmIGNvZGUsIERPTTo6Tm9kZUltcGwg
Km5vZGUsIGludCBsaW5lTnVtYmVyKQogewogICByZXR1cm4gbmV3IEpTTGF6eUV2ZW50TGlzdGVu
ZXIoY29kZSwgdGhpcywgbm9kZSwgbGluZU51bWJlcik7CiB9CkluZGV4OiBXZWJDb3JlL2todG1s
L2VjbWEva2pzX3dpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VjbWEva2pzX3dpbmRvdy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU4CmRpZmYg
LXAgLXUgLXIxLjU4IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmgKLS0tIFdlYkNvcmUv
a2h0bWwvZWNtYS9ranNfd2luZG93LmgJMjEgTm92IDIwMDUgMDE6MTk6NTcgLTAwMDAJMS41OAor
KysgV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuaAkxMCBEZWMgMjAwNSAxNjowOToxNiAt
MDAwMApAQCAtMTIxLDcgKzEyMSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEJhckluZm8gKnRv
b2xiYXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBKU0V2ZW50TGlzdGVuZXIgKmdldEpT
RXZlbnRMaXN0ZW5lcihWYWx1ZUltcCAqdmFsLCBib29sIGh0bWwgPSBmYWxzZSk7CiAgICAgSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgKmdldEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKFZh
bHVlSW1wICp2YWwsIGJvb2wgaHRtbCA9IGZhbHNlKTsKLSAgICBKU0xhenlFdmVudExpc3RlbmVy
ICpnZXRKU0xhenlFdmVudExpc3RlbmVyKGNvbnN0IFFTdHJpbmcgJmNvZGUsIERPTTo6Tm9kZUlt
cGwgKm5vZGUsIGludCBsaW5lbm8gPSAwKTsKKyAgICBKU0xhenlFdmVudExpc3RlbmVyICpnZXRK
U0xhenlFdmVudExpc3RlbmVyKGNvbnN0IERPTTo6RE9NU3RyaW5nJiBjb2RlLCBET006Ok5vZGVJ
bXBsKiBub2RlLCBpbnQgbGluZW5vID0gMCk7CiAgICAgdm9pZCBjbGVhciggRXhlY1N0YXRlICpl
eGVjICk7CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29u
c3Q7CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVz
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDkKZGlmZiAtcCAtdSAtcjEuNDkgV2ViQ29y
ZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL3ht
bGh0dHByZXF1ZXN0LmNwcAkyIERlYyAyMDA1IDAzOjQ4OjA2IC0wMDAwCTEuNDkKKysrIFdlYkNv
cmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAJMTAgRGVjIDIwMDUgMTY6MDk6MTYgLTAw
MDAKQEAgLTE3NCwxMyArMTc0LDEzIEBAIFZhbHVlSW1wICpYTUxIdHRwUmVxdWVzdDo6Z2V0VmFs
dWVQcm9wZXIKICAgY2FzZSBTdGF0dXNUZXh0OgogICAgIHJldHVybiBnZXRTdGF0dXNUZXh0KCk7
CiAgIGNhc2UgT25yZWFkeXN0YXRlY2hhbmdlOgotICAgaWYgKG9uUmVhZHlTdGF0ZUNoYW5nZUxp
c3RlbmVyICYmIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyLT5saXN0ZW5lck9iakltcCgpKSB7
CisgICBpZiAob25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIgJiYgb25SZWFkeVN0YXRlQ2hhbmdl
TGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpIHsKICAgICAgcmV0dXJuIG9uUmVhZHlTdGF0ZUNoYW5n
ZUxpc3RlbmVyLT5saXN0ZW5lck9iaigpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIE51bGwo
KTsKICAgIH0KICAgY2FzZSBPbmxvYWQ6Ci0gICBpZiAob25Mb2FkTGlzdGVuZXIgJiYgb25Mb2Fk
TGlzdGVuZXItPmxpc3RlbmVyT2JqSW1wKCkpIHsKKyAgIGlmIChvbkxvYWRMaXN0ZW5lciAmJiBv
bkxvYWRMaXN0ZW5lci0+bGlzdGVuZXJPYmooKSkgewogICAgICByZXR1cm4gb25Mb2FkTGlzdGVu
ZXItPmxpc3RlbmVyT2JqKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gTnVsbCgpOwpJbmRl
eDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuODUKZGlmZiAtcCAtdSAtcjEuODUgV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfYmFzZWltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5j
cHAJNCBEZWMgMjAwNSAwMToyMTowOSAtMDAwMAkxLjg1CisrKyBXZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9iYXNlaW1wbC5jcHAJMTAgRGVjIDIwMDUgMTY6MDk6MTcgLTAwMDAKQEAgLTE0OCwyNiAr
MTQ4LDE5IEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHQKICAgICAg
ICAgaWYgKGF0dGFjaGVkKCkpCiAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5yZWNhbGNTdHls
ZShGb3JjZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikgewot
ICAgICAgICBnZXREb2N1bWVudCgpLT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihsb2FkRXZl
bnQsCSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5x
c3RyaW5nKCksIE5VTEwpKTsKKyAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0SFRNTFdpbmRvd0V2
ZW50TGlzdGVuZXIobG9hZEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmJlZm9yZXVubG9hZEF0dHIpIHsKLSAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0SFRN
TFdpbmRvd0V2ZW50TGlzdGVuZXIoYmVmb3JldW5sb2FkRXZlbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhU
TUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCBOVUxMKSk7CisgICAgICAg
IGdldERvY3VtZW50KCktPnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGJlZm9yZXVubG9hZEV2
ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIp
IHsKLSAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIodW5s
b2FkRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCku
cXN0cmluZygpLCBOVUxMKSk7CisgICAgICAgIGdldERvY3VtZW50KCktPnNldEhUTUxXaW5kb3dF
dmVudExpc3RlbmVyKHVubG9hZEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmJsdXJBdHRyKSB7Ci0gICAgICAgIGdldERvY3VtZW50KCktPnNldEhUTUxXaW5k
b3dFdmVudExpc3RlbmVyKGJsdXJFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVu
ZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIE5VTEwpKTsKKyAgICAgICAgZ2V0RG9jdW1lbnQo
KS0+c2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIoYmx1ckV2ZW50LCBhdHRyKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmZvY3VzQXR0cikgewotICAgICAgICBnZXREb2N1bWVu
dCgpLT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihmb2N1c0V2ZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVh
dGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgTlVMTCkpOworICAg
ICAgICBnZXREb2N1bWVudCgpLT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihmb2N1c0V2ZW50
LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnJlc2l6ZUF0dHIpIHsK
LSAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIocmVzaXpl
RXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0
cmluZygpLCBOVUxMKSk7CisgICAgICAgIGdldERvY3VtZW50KCktPnNldEhUTUxXaW5kb3dFdmVu
dExpc3RlbmVyKHJlc2l6ZUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbnNjcm9sbEF0dHIpIHsKLSAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0SFRNTFdpbmRv
d0V2ZW50TGlzdGVuZXIoc2Nyb2xsRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3Rl
bmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCBOVUxMKSk7CisgICAgICAgIGdldERvY3VtZW50
KCktPnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKHNjcm9sbEV2ZW50LCBhdHRyKTsKICAgICB9
IGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKIH0KQEAgLTQyMCwxNCArNDEzLDExIEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXQKICAgICAgICAgICAgIG1fc2Nyb2xsaW5nID0gUVNjcm9sbFZpZXc6OkFsd2F5
c09mZjsKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGFyZSBhbHJlYWR5IGF0dGFjaGVkLCB0aGlz
IGhhcyBubyBlZmZlY3QuCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0
cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVy
KGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExp
c3RlbmVyKGxvYWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25iZWZvcmV1bmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGJlZm9y
ZXVubG9hZEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgp
LT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykp
OworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihiZWZvcmV1bmxvYWRFdmVudCwgYXR0cik7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb251bmxvYWRBdHRyKSB7Ci0gICAgICAg
IHNldEhUTUxFdmVudExpc3RlbmVyKHVubG9hZEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1
ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcih1bmxv
YWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC03MDcsMTQgKzY5NywxMSBAQCB2b2lkIEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlCiAgICAgICAgIGlmKCFtX2JvcmRlcikK
ICAgICAgICAgICAgIGZyYW1lYm9yZGVyID0gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gb25sb2FkQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2Fk
RXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0
ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAg
ICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGxvYWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmV1bmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxF
dmVudExpc3RlbmVyKGJlZm9yZXVubG9hZEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgp
LnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihiZWZvcmV1
bmxvYWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb251bmxv
YWRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHVubG9hZEV2ZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRM
aXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1M
RXZlbnRMaXN0ZW5lcih1bmxvYWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlCiAgICAgICAgIEhU
TUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMTIKZGlmZiAtcCAtdSAtcjEuMTEyIFdlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2VsZW1lbnRpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVu
dGltcGwuY3BwCTEgRGVjIDIwMDUgMTA6MzI6MTggLTAwMDAJMS4xMTIKKysrIFdlYkNvcmUva2h0
bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcAkxMCBEZWMgMjAwNSAxNjowOToxOCAtMDAwMApA
QCAtMTYwLDkyICsxNjAsNjMgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0
cmlidQogICAgIH0KIC8vIHN0YW5kYXJkIGV2ZW50cwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmNsaWNrQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjbGlja0V2
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVI
VE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjbGlja0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmNvbnRleHRtZW51QXR0cikgewotICAgIAlzZXRIVE1MRXZlbnRM
aXN0ZW5lcihjb250ZXh0bWVudUV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJp
bmcoKSwgdGhpcykpOworICAgIAlzZXRIVE1MRXZlbnRMaXN0ZW5lcihjb250ZXh0bWVudUV2ZW50
LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRibGNsaWNrQXR0cikg
ewotCXNldEhUTUxFdmVudExpc3RlbmVyKGtodG1sRGJsY2xpY2tFdmVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIo
YXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKwlzZXRIVE1MRXZlbnRMaXN0ZW5lcihr
aHRtbERibGNsaWNrRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ubW91c2Vkb3duQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihtb3VzZWRv
d25FdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3Jl
YXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobW91c2Vkb3duRXZlbnQsIGF0dHIpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2Vtb3ZlQXR0cikgewotICAgICAgICBzZXRI
VE1MRXZlbnRMaXN0ZW5lcihtb3VzZW1vdmVFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUo
KS5xc3RyaW5nKCksIHRoaXMpKTsKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobW91c2Vt
b3ZlRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2Vv
dXRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKG1vdXNlb3V0RXZlbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVu
dExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKG1vdXNlb3V0RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9ubW91c2VvdmVyQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcihtb3VzZW92ZXJFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9j
dW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCks
IHRoaXMpKTsKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobW91c2VvdmVyRXZlbnQsIGF0
dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2V1cEF0dHIpIHsKLSAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobW91c2V1cEV2ZW50LAotCSAgICAgICAgICAgICAg
ICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVl
KCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKG1vdXNl
dXBFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZXdo
ZWVsQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihtb3VzZXdoZWVsRXZlbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2
ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAgICAgICAgc2V0
SFRNTEV2ZW50TGlzdGVuZXIobW91c2V3aGVlbEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmZvY3VzQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcihET01Gb2N1c0luRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERv
Y3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygp
LCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKERPTUZvY3VzSW5FdmVudCwg
YXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25ibHVyQXR0cikgewotICAg
ICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihET01Gb2N1c091dEV2ZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihh
dHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcihET01Gb2N1c091dEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmtleWRvd25BdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGtleWRv
d25FdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3Jl
YXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoa2V5ZG93bkV2ZW50LCBhdHRyKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmtleXByZXNzQXR0cikgewotICAgICAgICBzZXRIVE1M
RXZlbnRMaXN0ZW5lcihrZXlwcmVzc0V2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFz
dHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihrZXlwcmVzc0V2
ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmtleXVwQXR0cikg
ewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihrZXl1cEV2ZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihh
dHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcihrZXl1cEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bnNjcm9sbEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoc2Nyb2xsRXZlbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxF
dmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNl
dEhUTUxFdmVudExpc3RlbmVyKHNjcm9sbEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbmJlZm9yZWN1dEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlz
dGVuZXIoYmVmb3JlY3V0RXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERv
Y3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygp
LCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGJlZm9yZWN1dEV2ZW50LCBh
dHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmN1dEF0dHIpIHsKLSAgICAg
ICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY3V0RXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVl
KCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGN1dEV2
ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJlZm9yZWNvcHlB
dHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGJlZm9yZWNvcHlFdmVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50
TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAgICAgICAgc2V0SFRN
TEV2ZW50TGlzdGVuZXIoYmVmb3JlY29weUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbmNvcHlBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVy
KGNvcHlFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+
Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsK
KyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY29weUV2ZW50LCBhdHRyKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJlZm9yZXBhc3RlQXR0cikgewotICAgICAgICBzZXRI
VE1MRXZlbnRMaXN0ZW5lcihiZWZvcmVwYXN0ZUV2ZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1
ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihiZWZv
cmVwYXN0ZUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnBh
c3RlQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihwYXN0ZUV2ZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRM
aXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1M
RXZlbnRMaXN0ZW5lcihwYXN0ZUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmRyYWdlbnRlckF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
ZHJhZ2VudGVyRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50
KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlz
KSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRyYWdlbnRlckV2ZW50LCBhdHRyKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdvdmVyQXR0cikgewotICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihkcmFnb3ZlckV2ZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52
YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihk
cmFnb3ZlckV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRy
YWdsZWF2ZUF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZHJhZ2xlYXZlRXZl
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhU
TUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAg
IHNldEhUTUxFdmVudExpc3RlbmVyKGRyYWdsZWF2ZUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyb3BBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExp
c3RlbmVyKGRyb3BFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1l
bnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRo
aXMpKTsKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZHJvcEV2ZW50LCBhdHRyKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdzdGFydEF0dHIpIHsKLSAgICAgICAg
c2V0SFRNTEV2ZW50TGlzdGVuZXIoZHJhZ3N0YXJ0RXZlbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZh
bHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRy
YWdzdGFydEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRy
YWdBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRyYWdFdmVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlz
dGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAgICAgICAgc2V0SFRNTEV2
ZW50TGlzdGVuZXIoZHJhZ0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbmRyYWdlbmRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRyYWdl
bmRFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3Jl
YXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZHJhZ2VuZEV2ZW50LCBhdHRyKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlbGVjdHN0YXJ0QXR0cikgewotICAgICAgICBzZXRI
VE1MRXZlbnRMaXN0ZW5lcihzZWxlY3RzdGFydEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1
ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihzZWxl
Y3RzdGFydEV2ZW50LCBhdHRyKTsKICAgICB9IAogfQogCkBAIC04NTQsMyArODI1LDggQEAgYm9v
bCBIVE1MRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICByZXR1cm4gaW5FaXRoZXJUYWdMaXN0KG5ld0NoaWxkKTsKIH0KKwordm9pZCBIVE1M
RWxlbWVudEltcGw6OnNldEhUTUxFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBBdHRyaWJ1dGVJbXBsKiBhdHRyKQoreworICAgIEVsZW1lbnRJbXBsOjpzZXRIVE1M
RXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExp
c3RlbmVyKGF0dHItPnZhbHVlKCksIHRoaXMpKTsKK30KSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NDAKZGlmZiAtcCAtdSAtcjEuNDAgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwu
aAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAkxIERlYyAyMDA1IDEw
OjMyOjE4IC0wMDAwCTEuNDAKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBs
LmgJMTAgRGVjIDIwMDUgMTY6MDk6MTggLTAwMDAKQEAgLTk3LDYgKzk3LDggQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGluQmxvY2tUYWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7
CiAgICAgc3RhdGljIGJvb2wgaXNSZWNvZ25pemVkVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lKTsKIAorICAgIHZvaWQgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEF0dHJpYnV0ZUltcGwqKTsKKwogcHJvdGVjdGVkOgogCiAgICAg
Ly8gZm9yIElNRywgT0JKRUNUIGFuZCBBUFBMRVQKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2Zvcm1pbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwNgpk
aWZmIC1wIC11IC1yMS4yMDYgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCi0t
LSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAJMSBEZWMgMjAwNSAxMDozMjox
OCAtMDAwMAkxLjIwNgorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTEw
IERlYyAyMDA1IDE2OjA5OjIwIC0wMDAwCkBAIC01OTMsMTEgKzU5Myw5IEBAIHZvaWQgSFRNTEZv
cm1FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHQKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBhdXRvY29tcGxldGVBdHRyKSB7CiAgICAgICAgIG1fYXV0b2NvbXBsZXRlID0gc3RyY2Fz
ZWNtcCggYXR0ci0+dmFsdWUoKSwgIm9mZiIgKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbnN1Ym1pdEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoc3VibWl0
RXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0
ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAg
ICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHN1Ym1pdEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBvbnJlc2V0QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRM
aXN0ZW5lcihyZXNldEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1
bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwg
dGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihyZXNldEV2ZW50LCBhdHRyKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgewogICAgICAgICBET01T
dHJpbmcgbmV3TmFtZUF0dHIgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBpZiAoaW5Eb2N1bWVu
dCgpICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKQEAgLTExMTgsMTEgKzEx
MTYsOSBAQCB2b2lkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBCiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewogICAgICAgICAvLyBEbyBu
b3RoaW5nLgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9jdXNBdHRyKSB7Ci0g
ICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGZvY3VzRXZlbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHIt
PnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVy
KGZvY3VzRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmx1
ckF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1ckV2ZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0
ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZl
bnRMaXN0ZW5lcihibHVyRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0x
Njk4LDI2ICsxNjk0LDIwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVk
QXQKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoZWlnaHRBdHRyKSB7CiAgICAgICAg
IGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIGF0dHItPnZhbHVlKCkpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9jdXNBdHRyKSB7Ci0gICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKGZvY3VzRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0
cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGZvY3VzRXZlbnQs
IGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmx1ckF0dHIpIHsKLSAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1ckV2ZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52
YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihi
bHVyRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc2VsZWN0
QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihzZWxlY3RFdmVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlz
dGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAgICAgICAgc2V0SFRNTEV2
ZW50TGlzdGVuZXIoc2VsZWN0RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9uY2hhbmdlQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjaGFu
Z2VFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3Jl
YXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY2hhbmdlRXZlbnQsIGF0dHIpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uaW5wdXRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVu
dExpc3RlbmVyKGlucHV0RXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERv
Y3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygp
LCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGlucHV0RXZlbnQsIGF0dHIp
OwogICAgIH0KICAgICAvLyBTZWFyY2ggZmllbGQgYW5kIHNsaWRlciBhdHRyaWJ1dGVzIGFsbCBq
dXN0IGNhdXNlIHVwZGF0ZUZyb21FbGVtZW50IHRvIGJlIGNhbGxlZCB0aHJvdWdoIHN0eWxlCiAg
ICAgLy8gcmVjYWxjaW5nLgogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlYXJjaEF0
dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoc2VhcmNoRXZlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3Rl
bmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVu
dExpc3RlbmVyKHNlYXJjaEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSByZXN1bHRzQXR0cikgewogICAgICAgICBtX21heFJlc3VsdHMgPSAhYXR0ci0+aXNOdWxs
KCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAtMTsKICAgICAgICAgc2V0Q2hhbmdlZCgpOwpA
QCAtMjQxOCwxMSArMjQwOCw5IEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudEltcGw6OmlzRm9jdXNh
YmxlKCkKIHZvaWQgSFRNTExhYmVsRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmZv
Y3VzQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihmb2N1c0V2ZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRM
aXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1M
RXZlbnRMaXN0ZW5lcihmb2N1c0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmJsdXJBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGJsdXJF
dmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRl
SFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAgICAg
ICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1ckV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UKICAg
ICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAg
LTI4MjgsMTQgKzI4MTYsMTEgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnBhcnNlTWFw
cGVkQQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFjY2Vzc2tleUF0dHIpIHsKICAg
ICAgICAgLy8gRklYTUU6IGlnbm9yZSBmb3IgdGhlIG1vbWVudAogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uZm9jdXNBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVy
KGZvY3VzRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCkt
PmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7
CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGZvY3VzRXZlbnQsIGF0dHIpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmx1ckF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2
ZW50TGlzdGVuZXIoYmx1ckV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRE
b2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmco
KSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihibHVyRXZlbnQsIGF0dHIp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uY2hhbmdlQXR0cikgewotICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjaGFuZ2VFdmVudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFs
dWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY2hh
bmdlRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0zNDI4LDE3ICszNDEz
LDEzIEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnBhcnNlTWFwcGUKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhY2Nlc3NrZXlBdHRyKSB7CiAgICAgICAgIC8vIGlnbm9y
ZSBmb3IgdGhlIG1vbWVudAogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9jdXNB
dHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGZvY3VzRXZlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3Rl
bmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVu
dExpc3RlbmVyKGZvY3VzRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9uYmx1ckF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1ckV2ZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1M
RXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgICAgICBz
ZXRIVE1MRXZlbnRMaXN0ZW5lcihibHVyRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uc2VsZWN0QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5l
cihzZWxlY3RFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQo
KS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMp
KTsKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoc2VsZWN0RXZlbnQsIGF0dHIpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uY2hhbmdlQXR0cikgewotICAgICAgICBzZXRI
VE1MRXZlbnRMaXN0ZW5lcihjaGFuZ2VFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5x
c3RyaW5nKCksIHRoaXMpKTsKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY2hhbmdlRXZl
bnQsIGF0dHIpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBXZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9oZWFkaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42
MApkaWZmIC1wIC11IC1yMS42MCBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAK
LS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkzMCBOb3YgMjAwNSAwMzox
MjowMCAtMDAwMAkxLjYwCisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJ
MTAgRGVjIDIwMDUgMTY6MDk6MjEgLTAwMDAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgorCiAjaW5jbHVkZSAi
aHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIK
IApAQCAtNTgsNyArNTksNyBAQCBIVE1MQmFzZUVsZW1lbnRJbXBsOjp+SFRNTEJhc2VFbGVtZW50
SW1wCiB2b2lkIEhUTUxCYXNlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBocmVmQXR0
cikgewotCW1faHJlZiA9IGtodG1sOjpwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsKKwltX2hyZWYg
PSBwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsKIAlwcm9jZXNzKCk7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikgewogICAgIAltX3RhcmdldCA9IGF0dHItPnZhbHVl
KCk7CkBAIC0xNjksNyArMTcwLDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnRJbXBsOjpwYXJzZU1h
cHBlZEF0dAogICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1ZSgpKTsKICAg
ICAgICAgcHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhyZWZBdHRy
KSB7Ci0gICAgICAgIG1fdXJsID0gZ2V0RG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoIGtodG1sOjpw
YXJzZVVSTChhdHRyLT52YWx1ZSgpKS5xc3RyaW5nKCkgKTsKKyAgICAgICAgbV91cmwgPSBnZXRE
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChhdHRyLT52YWx1ZSgpKS5xc3RyaW5nKCkp
OwogCXByb2Nlc3MoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikg
ewogICAgICAgICBtX3R5cGUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtNTgwLDEzICs1ODEsMTMgQEAg
dm9pZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6Om5vdGlmeUZpbmlzaAogCiAgICAgYXNzZXJ0KGNz
ID09IG1fY2FjaGVkU2NyaXB0KTsKIAotICAgIGV2YWx1YXRlU2NyaXB0KGNzLT51cmwoKS5xc3Ry
aW5nKCksIGNzLT5zY3JpcHQoKSk7CisgICAgZXZhbHVhdGVTY3JpcHQoY3MtPnVybCgpLCBjcy0+
c2NyaXB0KCkpOwogCiAgICAgY3MtPmRlcmVmKHRoaXMpOwogICAgIG1fY2FjaGVkU2NyaXB0ID0g
MDsKIH0KIAotdm9pZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OmV2YWx1YXRlU2NyaXB0KGNvbnN0
IFFTdHJpbmcgJlVSTCwgY29uc3QgRE9NU3RyaW5nICZzY3JpcHQpCit2b2lkIEhUTUxTY3JpcHRF
bGVtZW50SW1wbDo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgRE9NU3RyaW5nJiBVUkwsIGNvbnN0IERP
TVN0cmluZyYgc2NyaXB0KQogewogICAgIGlmIChtX2V2YWx1YXRlZCkKICAgICAgICAgcmV0dXJu
OwpAQCAtNTk2LDcgKzU5Nyw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjpldmFsdWF0
ZVNjcmkKICAgICAgICAgS0pTUHJveHkgKnByb3h5ID0gS0pTUHJveHk6OnByb3h5KHBhcnQpOwog
ICAgICAgICBpZiAocHJveHkpIHsKICAgICAgICAgICAgIG1fZXZhbHVhdGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHByb3h5LT5ldmFsdWF0ZShVUkwsIDAsIHNjcmlwdC5xc3RyaW5nKCksIDApOwor
ICAgICAgICAgICAgcHJveHktPmV2YWx1YXRlKFVSTCwgMCwgc2NyaXB0LCAwKTsKICAgICAgICAg
ICAgIERvY3VtZW50SW1wbDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCk7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXAgLXUgLXIxLjIzIFdlYkNvcmUva2h0
bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2hlYWRp
bXBsLmgJMzAgTm92IDIwMDUgMDM6MTI6MDAgLTAwMDAJMS4yMworKysgV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfaGVhZGltcGwuaAkxMCBEZWMgMjAwNSAxNjowOToyMSAtMDAwMApAQCAtMjA2LDcg
KzIwNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENyZWF0ZWRCeVBhcnNlcihib29sIGNyZWF0
ZWRCeVBhcnNlcikgeyBtX2NyZWF0ZWRCeVBhcnNlciA9IGNyZWF0ZWRCeVBhcnNlcjsgfQogICAg
IHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCk7CiAKLSAgICB2b2lkIGV2YWx1YXRlU2NyaXB0
KGNvbnN0IFFTdHJpbmcgJiwgY29uc3QgRE9NU3RyaW5nICYpOworICAgIHZvaWQgZXZhbHVhdGVT
Y3JpcHQoY29uc3QgRE9NU3RyaW5nICZVUkwsIGNvbnN0IERPTVN0cmluZyAmc2NyaXB0KTsKIAog
ICAgIERPTVN0cmluZyB0ZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUZXh0KGNvbnN0IERPTVN0
cmluZyAmKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdl
aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTkKZGlmZiAtcCAtdSAtcjEuNTkgV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfaW1hZ2VpbXBsLmNwcAkzIERlYyAyMDA1IDIwOjI2OjAxIC0wMDAwCTEuNTkKKysrIFdl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMTAgRGVjIDIwMDUgMTY6MDk6MjEg
LTAwMDAKQEAgLTIxMCwxMSArMjEwLDExIEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXQKICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGlzbWFwQXR0cikgewogICAg
ICAgICBpc21hcCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmFib3J0QXR0
cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihhYm9ydEV2ZW50LCBnZXREb2N1bWVu
dCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhp
cykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihhYm9ydEV2ZW50LCBhdHRyKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IG9uZXJyb3JBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxF
dmVudExpc3RlbmVyKGVycm9yRXZlbnQsIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExp
c3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxF
dmVudExpc3RlbmVyKGVycm9yRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUg
PT0gb25sb2FkQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQs
IGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0
cmluZygpLCB0aGlzKSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGxvYWRFdmVudCwg
YXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBjb21wb3NpdGVBdHRyKSB7CiAgICAg
ICAgIF9jb21wb3NpdGVPcGVyYXRvciA9IGF0dHItPnZhbHVlKCkucXN0cmluZygpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gbmFtZUF0dHIpIHsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRt
bC9odG1sX29iamVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS44OQpkaWZmIC1wIC11IC1yMS44OSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBs
LmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMjEgTm92IDIw
MDUgMDE6MjA6MTMgLTAwMDAJMS44OQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0
aW1wbC5jcHAJMTAgRGVjIDIwMDUgMTY6MDk6MjIgLTAwMDAKQEAgLTY0MCwxMSArNjQwLDkgQEAg
dm9pZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQQogICAgICAgICBpZiAobV9y
ZW5kZXIpCiAgICAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IHRydWU7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcihsb2FkRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50
KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlz
KSk7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGxvYWRFdmVudCwgYXR0cik7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb251bmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKHVubG9hZEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFz
dHJpbmcoKSwgdGhpcykpOworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcih1bmxvYWRFdmVu
dCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKIAkg
ICAgRE9NU3RyaW5nIG5ld05hbWVBdHRyID0gYXR0ci0+dmFsdWUoKTsKIAkgICAgaWYgKGlzRG9j
TmFtZWRJdGVtKCkgJiYgaW5Eb2N1bWVudCgpICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkpIHsKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI4MgpkaWZmIC1wIC11IC1yMS4yODIgV2ViQ29yZS9r
aHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1w
bC5jcHAJNCBEZWMgMjAwNSAyMDo1NTo0NiAtMDAwMAkxLjI4MgorKysgV2ViQ29yZS9raHRtbC94
bWwvZG9tX2RvY2ltcGwuY3BwCTEwIERlYyAyMDA1IDE2OjA5OjI1IC0wMDAwCkBAIC0yNTMwLDcg
KzI1MzAsNyBAQCBib29sIERvY3VtZW50SW1wbDo6aGFzV2luZG93RXZlbnRMaXN0ZW5lCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1FdmVudExpc3RlbmVyICpEb2N1bWVudEltcGw6OmNyZWF0ZUhU
TUxFdmVudExpc3RlbmVyKFFTdHJpbmcgY29kZSwgTm9kZUltcGwgKm5vZGUpCitFdmVudExpc3Rl
bmVyICpEb2N1bWVudEltcGw6OmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGNvbnN0IERPTVN0cmlu
ZyYgY29kZSwgTm9kZUltcGwgKm5vZGUpCiB7CiAgICAgaWYgKHBhcnQoKSkgewogCXJldHVybiBw
YXJ0KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGNvZGUsIG5vZGUpOwpAQCAtMjUzOSw2ICsy
NTM5LDExIEBAIEV2ZW50TGlzdGVuZXIgKkRvY3VtZW50SW1wbDo6Y3JlYXRlSFRNTEUKICAgICB9
CiB9CiAKK3ZvaWQgRG9jdW1lbnRJbXBsOjpzZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgQXR0cmlidXRlSW1wbCogYXR0cikKK3sKKyAgICBz
ZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGNyZWF0ZUhUTUxFdmVudExpc3Rl
bmVyKGF0dHItPnZhbHVlKCksIDApKTsKK30KKwogdm9pZCBEb2N1bWVudEltcGw6OmRpc3BhdGNo
SW1hZ2VMb2FkRXZlbnRTb29uKEhUTUxJbWFnZUxvYWRlciAqaW1hZ2UpCiB7CiAgICAgbV9pbWFn
ZUxvYWRFdmVudERpc3BhdGNoU29vbkxpc3QuYXBwZW5kKGltYWdlKTsKSW5kZXg6IFdlYkNvcmUv
a2h0bWwveG1sL2RvbV9kb2NpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQz
CmRpZmYgLXAgLXUgLXIxLjE0MyBXZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5oCi0tLSBX
ZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5oCTEgRGVjIDIwMDUgMTA6MzI6MjYgLTAwMDAJ
MS4xNDMKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgJMTAgRGVjIDIwMDUgMTY6
MDk6MjYgLTAwMDAKQEAgLTQ2NiwxMSArNDY2LDEzIEBAIHB1YmxpYzoKICAgICBFdmVudExpc3Rl
bmVyICpnZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50
VHlwZSk7CiAgICAgdm9pZCByZW1vdmVIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcgJmV2ZW50VHlwZSk7CiAKKyAgICB2b2lkIHNldEhUTUxXaW5kb3dFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBBdHRyaWJ1dGVJbXBsKik7CisKICAg
ICB2b2lkIGFkZFdpbmRvd0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5
cGUsIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOwogICAgIHZvaWQg
cmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgYm9vbCBoYXNX
aW5kb3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKTsKIAotICAg
IEV2ZW50TGlzdGVuZXIgKmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKFFTdHJpbmcgY29kZSwgTm9k
ZUltcGwgKm5vZGUpOworICAgIEV2ZW50TGlzdGVuZXIgKmNyZWF0ZUhUTUxFdmVudExpc3RlbmVy
KGNvbnN0IERPTVN0cmluZyYgY29kZSwgTm9kZUltcGwqKTsKICAgICAKICAgICAvKioKICAgICAg
KiBTZWFyY2hlcyB0aHJvdWdoIHRoZSBkb2N1bWVudCwgc3RhcnRpbmcgZnJvbSBmcm9tTm9kZSwg
Zm9yIHRoZSBuZXh0IHNlbGVjdGFibGUgZWxlbWVudCB0aGF0IGNvbWVzIGFmdGVyIGZyb21Ob2Rl
LgpJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW0s
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IFdlYkNvcmUva3dxL1dl
YkNvcmVTY3JpcHREZWJ1Z2dlci5tbQotLS0gV2ViQ29yZS9rd3EvV2ViQ29yZVNjcmlwdERlYnVn
Z2VyLm1tCTI3IE5vdiAyMDA1IDA3OjU0OjUzIC0wMDAwCTEuNQorKysgV2ViQ29yZS9rd3EvV2Vi
Q29yZVNjcmlwdERlYnVnZ2VyLm1tCTEwIERlYyAyMDA1IDE2OjA5OjI3IC0wMDAwCkBAIC0yNywx
NCArMjcsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW1wb3J0IDxXZWJDb3Jl
L1dlYkNvcmVTY3JpcHREZWJ1Z2dlci5oPgorI2ltcG9ydCAiV2ViQ29yZVNjcmlwdERlYnVnZ2Vy
LmgiCisKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1dlYlNjcmlwdE9iamVjdFByaXZhdGUuaD4K
ICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9jb250ZXh0Lmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBLSlM7Ci0KKyNpbXBvcnQgIktXUVN0
cmluZy5oIgogCit1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBAaW50ZXJmYWNlIFdlYkNvcmVTY3Jp
cHREZWJ1Z2dlciAoV2ViQ29yZVNjcmlwdERlYnVnZ2VySW50ZXJuYWwpCiAKQEAgLTMxMSw3ICsz
MTIsNyBAQCBjbGFzcyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAKIC0gKGlk
KWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmlwdAogewotICAgIFVTdHJpbmcgY29k
ZShbc2NyaXB0IFVURjhTdHJpbmddKTsKKyAgICBVU3RyaW5nIGNvZGUoUVN0cmluZzo6ZnJvbU5T
U3RyaW5nKHNjcmlwdCkpOwogCiAgICAgRXhlY1N0YXRlICAgKnN0YXRlICAgPSBfc3RhdGU7CiAg
ICAgSW50ZXJwcmV0ZXIgKmludGVycCAgPSBzdGF0ZS0+aW50ZXJwcmV0ZXIoKTsKQEAgLTMzOCwx
MiArMzM5LDEyIEBAIGNsYXNzIFdlYkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKICAg
ICBpZiAoZXZhbCkgewogICAgICAgICBKU0xvY2sgbG9jazsKICAgICAgICAgTGlzdCBhcmdzOwot
ICAgICAgICBhcmdzLmFwcGVuZChTdHJpbmcoY29kZSkpOworICAgICAgICBhcmdzLmFwcGVuZChq
c1N0cmluZyhjb2RlKSk7CiAgICAgICAgIHJlc3VsdCA9IGV2YWwtPmNhbGwoc3RhdGUsIE5VTEws
IGFyZ3MpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLy8gbm8gImV2YWwiLCBvciBubyBj
b250ZXh0IChpLmUuIGdsb2JhbCBzY29wZSkgLSB1c2UgZ2xvYmFsIGZhbGxiYWNrCi0gICAgICAg
IHJlc3VsdCA9IGludGVycC0+aW1wKCktPmV2YWx1YXRlKGNvZGUsIGdsb2JPYmosIFVTdHJpbmco
KSwgMCkudmFsdWUoKTsKKyAgICAgICAgcmVzdWx0ID0gaW50ZXJwLT5pbXAoKS0+ZXZhbHVhdGUo
Y29kZS5kYXRhKCksIGNvZGUuc2l6ZSgpLCBnbG9iT2JqLCBVU3RyaW5nKCksIDApLnZhbHVlKCk7
CiAgICAgfQogCiAgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkgewo=
</data>
<flag name="review"
          id="980"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>