<?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>140187</bug_id>
          
          <creation_ts>2015-01-07 11:28:41 -0800</creation_ts>
          <short_desc>REGRESSION(r178039): Breaks ObjC Inspector Protocol (Requested by JoePeck on #webkit).</short_desc>
          <delta_ts>2015-01-07 11:32:12 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140053</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>benjamin</cc>
    
    <cc>burg</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1059430</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 11:28:41 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/178039 broke the build:
Breaks ObjC Inspector Protocol (Requested by JoePeck on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059432</commentid>
    <comment_count>1</comment_count>
      <attachid>244170</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 11:29:15 -0800</bug_when>
    <thetext>Created attachment 244170
ROLLOUT of r178039

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059433</commentid>
    <comment_count>2</comment_count>
      <attachid>244170</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-01-07 11:30:10 -0800</bug_when>
    <thetext>Comment on attachment 244170
ROLLOUT of r178039

I will be looking into fixing the ObjC stuff today so that this can land again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059435</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 11:31:48 -0800</bug_when>
    <thetext>This patch modifies the WEB_REPLAY inputs generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-input-generator-tests --reset-results`)

This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059436</commentid>
    <comment_count>4</comment_count>
      <attachid>244170</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 11:32:08 -0800</bug_when>
    <thetext>Comment on attachment 244170
ROLLOUT of r178039

Clearing flags on attachment: 244170

Committed r178042: &lt;http://trac.webkit.org/changeset/178042&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059437</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 11:32:10 -0800</bug_when>
    <thetext>Attachment 244170 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/InspectorValues.cpp:759:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorValues.cpp:770:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
ERROR: Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h:43:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.cpp:1210:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:67:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:139:  The parameter name &quot;style&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:153:  The parameter name &quot;style&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:219:  The parameter name &quot;style&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:221:  The parameter name &quot;style&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:225:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:225:  The parameter name &quot;inspectorStyle&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:226:  The parameter name &quot;style&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/inspector/InspectorStyleSheet.h:278:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/inspector/InspectorDatabaseResource.h:48:  The parameter name &quot;database&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/inspector/InspectorPageAgent.cpp:926:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/inspector/InspectorPageAgent.cpp:927:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:55:  whitespace before &apos;]&apos;  [pep8/E202] [5]
Total errors found: 17 in 125 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059438</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 11:32:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244170</attachid>
            <date>2015-01-07 11:29:15 -0800</date>
            <delta_ts>2015-01-07 11:32:08 -0800</delta_ts>
            <desc>ROLLOUT of r178039</desc>
            <filename>bug-140187-20150107112919.patch</filename>
            <type>text/plain</type>
            <size>612979</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
M2I4YWRmZWU1NzkzNDE0ZmVkZjBiYjVjOTBkYWU5ZTFiNjk2YTRiLi5lODVkZTJkYTdkZjE2MWMw
MWVjNGVlOTkzNDNjZTAyNmNmZGQ5ODEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxNS0wMS0wNyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3ODAzOS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDE4NworCisgICAg
ICAgIEJyZWFrcyBPYmpDIEluc3BlY3RvciBQcm90b2NvbCAoUmVxdWVzdGVkIGJ5IEpvZVBlY2sg
b24KKyAgICAgICAgI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0OgorCisg
ICAgICAgICJXZWIgSW5zcGVjdG9yOiBwdXJnZSBQYXNzUmVmUHRyIGZyb20gSW5zcGVjdG9yIGNv
ZGUgYW5kIHVzZQorICAgICAgICBSZWYgZm9yIHR5cGVkIGFuZCB1bnR5cGVkIHByb3RvY29sIG9i
amVjdHMiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDAwNTMKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4MDM5CisK
IDIwMTUtMDEtMDYgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IHB1cmdlIFBhc3NSZWZQdHIgZnJvbSBJbnNwZWN0b3IgY29k
ZSBhbmQgdXNlIFJlZiBmb3IgdHlwZWQgYW5kIHVudHlwZWQgcHJvdG9jb2wgb2JqZWN0cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRl
eCAyYmMyOTkzNDFjZGM0OTQ2YTI4ZjllOTZmODQ0YTU4N2RiOGJmNDhjLi45NjRmZTk4MDE4MTNm
MmYyOGY1ZGEwZmY3NmI2OWU5ZTQ3NGU3ZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTAx
LTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTc4MDM5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwMTg3CisKKyAgICAgICAgQnJlYWtzIE9iakMgSW5z
cGVjdG9yIFByb3RvY29sIChSZXF1ZXN0ZWQgYnkgSm9lUGVjayBvbgorICAgICAgICAjd2Via2l0
KS4KKworICAgICAgICBSZXZlcnRlZCBjaGFuZ2VzZXQ6CisKKyAgICAgICAgIldlYiBJbnNwZWN0
b3I6IHB1cmdlIFBhc3NSZWZQdHIgZnJvbSBJbnNwZWN0b3IgY29kZSBhbmQgdXNlCisgICAgICAg
IFJlZiBmb3IgdHlwZWQgYW5kIHVudHlwZWQgcHJvdG9jb2wgb2JqZWN0cyIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDA1MworICAgICAgICBodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNzgwMzkKKwogMjAxNS0wMS0wNiAgQnJpYW4g
Si4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogcHVyZ2UgUGFzc1JlZlB0ciBmcm9tIEluc3BlY3RvciBjb2RlIGFuZCB1c2UgUmVmIGZvciB0
eXBlZCBhbmQgdW50eXBlZCBwcm90b2NvbCBvYmplY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FhODUxNjk3
YWZkMTZjZWY1NWUxMDhmMmM4OWE5OGQxOGVlMTk2NC4uMGNhZDMyMDg1YTNiNmM5MjNiZDk3MjE3
ZDZlNDNhYjE2ODI2MjZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE1LTAxLTA3
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTc4MDM5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwMTg3CisKKyAgICAgICAgQnJlYWtzIE9iakMgSW5zcGVj
dG9yIFByb3RvY29sIChSZXF1ZXN0ZWQgYnkgSm9lUGVjayBvbgorICAgICAgICAjd2Via2l0KS4K
KworICAgICAgICBSZXZlcnRlZCBjaGFuZ2VzZXQ6CisKKyAgICAgICAgIldlYiBJbnNwZWN0b3I6
IHB1cmdlIFBhc3NSZWZQdHIgZnJvbSBJbnNwZWN0b3IgY29kZSBhbmQgdXNlCisgICAgICAgIFJl
ZiBmb3IgdHlwZWQgYW5kIHVudHlwZWQgcHJvdG9jb2wgb2JqZWN0cyIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDA1MworICAgICAgICBodHRwOi8v
dHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNzgwMzkKIAogMjAxNS0wMS0wNiAgQnJpYW4gSi4g
QnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMzQ1NjMxNTQ5MGY4
YmUxMWNhMmMwNmQ3MGFhNGI2MWI0NjlkNTA0ZC4uMjk5OWViZjkzYjZlZGFmYjM1NWVmOTg1MmRh
MmI3YTE5ODQ3ZGI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNS0wMS0wNyAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjE3ODAzOS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MDE4NworCisgICAgICAgIEJyZWFrcyBPYmpDIEluc3BlY3RvciBQ
cm90b2NvbCAoUmVxdWVzdGVkIGJ5IEpvZVBlY2sgb24KKyAgICAgICAgI3dlYmtpdCkuCisKKyAg
ICAgICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0OgorCisgICAgICAgICJXZWIgSW5zcGVjdG9yOiBwdXJn
ZSBQYXNzUmVmUHRyIGZyb20gSW5zcGVjdG9yIGNvZGUgYW5kIHVzZQorICAgICAgICBSZWYgZm9y
IHR5cGVkIGFuZCB1bnR5cGVkIHByb3RvY29sIG9iamVjdHMiCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwNTMKKyAgICAgICAgaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4MDM5CisKIDIwMTUtMDEtMDYgIEJyaWFuIEouIEJ1cmcg
IDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHB1cmdl
IFBhc3NSZWZQdHIgZnJvbSBJbnNwZWN0b3IgY29kZSBhbmQgdXNlIFJlZiBmb3IgdHlwZWQgYW5k
IHVudHlwZWQgcHJvdG9jb2wgb2JqZWN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggOWUyMjUxZGJiNWZmOWNkNWEwYzNiNTM0MGM0NmUx
YmM1OTcxZTM5Zi4uZDA0NmFiMmE1Y2IyYWMxOWY5ODU3NjMyNWY4OTEyYjQ5MGQ0OGFhZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCkBAIC05
OCw3ICs5OCw3IEBAIGJvb2wgU2NyaXB0VmFsdWU6OmlzRnVuY3Rpb24oKSBjb25zdAogfQogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKLXN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9J
bnNwZWN0b3JWYWx1ZShFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBpbnQg
bWF4RGVwdGgpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luc3BlY3Rv
clZhbHVlKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIEpTVmFsdWUgdmFsdWUsIGludCBtYXhEZXB0
aCkKIHsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9JbnNw
ZWN0b3JWYWx1ZShFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBKU1ZhbHVlCiAKICAgICBpZiAodmFs
dWUuaXNPYmplY3QoKSkgewogICAgICAgICBpZiAoaXNKU0FycmF5KHZhbHVlKSkgewotICAgICAg
ICAgICAgUmVmPEluc3BlY3RvckFycmF5PiBpbnNwZWN0b3JBcnJheSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5zcGVjdG9y
QXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGFzQXJyYXkodmFsdWUpOwogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJy
YXktPmxlbmd0aCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CkBAIC0xMzEsMTEgKzEzMSwxMSBAQCBzdGF0aWMgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgSlNWYWx1ZQog
ICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZWxlbWVudFZhbHVlID0ganNU
b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlLCBlbGVtZW50LCBtYXhEZXB0aCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFlbGVtZW50VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNoVmFsdWUoV1RGOjpt
b3ZlKGVsZW1lbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNo
VmFsdWUoZWxlbWVudFZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBX
VEY6Om1vdmUoaW5zcGVjdG9yQXJyYXkpOworICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RvckFy
cmF5OwogICAgICAgICB9Ci0gICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGluc3BlY3Rvck9i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGluc3BlY3Rvck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICAgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhzY3JpcHRTdGF0ZSk7CiAgICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHNjcmlwdFN0YXRl
LCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTE0NSwxNiAr
MTQ1LDE2IEBAIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1
ZShFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBKU1ZhbHVlCiAgICAgICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IGluc3BlY3RvclZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNjcmlwdFN0
YXRlLCBwcm9wZXJ0eVZhbHVlLCBtYXhEZXB0aCk7CiAgICAgICAgICAgICBpZiAoIWluc3BlY3Rv
clZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaW5z
cGVjdG9yT2JqZWN0LT5zZXRWYWx1ZShuYW1lLnN0cmluZygpLCBXVEY6Om1vdmUoaW5zcGVjdG9y
VmFsdWUpKTsKKyAgICAgICAgICAgIGluc3BlY3Rvck9iamVjdC0+c2V0VmFsdWUobmFtZS5zdHJp
bmcoKSwgaW5zcGVjdG9yVmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBXVEY6Om1v
dmUoaW5zcGVjdG9yT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIGluc3BlY3Rvck9iamVjdDsKICAg
ICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotUmVmUHRyPEluc3BlY3RvclZhbHVlPiBTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZShF
eGVjU3RhdGUqIHNjcmlwdFN0YXRlKSBjb25zdAorUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
U2NyaXB0VmFsdWU6OnRvSW5zcGVjdG9yVmFsdWUoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkgY29u
c3QKIHsKICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKHNjcmlwdFN0YXRlKTsKICAgICByZXR1cm4g
anNUb0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlLCBtX3ZhbHVlLmdldCgpLCBJbnNwZWN0b3JW
YWx1ZTo6bWF4RGVwdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL1NjcmlwdFZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0
VmFsdWUuaAppbmRleCBmZWY3NzAyNmU0N2I4OTk1MzVlY2E2NTIzN2Y1MzE2OTQ1NTMzMWM2Li5k
NWZhZGU5MGIxNmUzNDdmZDgzMmI5Y2I5YjUyZDMwMGY1ZDljYTQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNjcmlwdFZhbHVlJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOyB9CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB0b0luc3BlY3RvclZh
bHVlKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiB0b0luc3BlY3RvclZhbHVlKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7CiAj
ZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Db25zb2xlTWVzc2FnZS5jcHAKaW5kZXggMjAyZTE2NDk5ZTdjZWRlMWFlYmI3MDUwMTNjN2Fj
NjFkNGM4OWE1Ni4uZjdkMWU1NTY3ODUzNWE4OTNiY2ZmMzU1ODFiNjFhYTgyNzM1YjVhMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5j
cHAKQEAgLTE4MSwxMSArMTgxLDEwIEBAIHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25z
b2xlOjpDb25zb2xlTWVzc2FnZTo6TGV2ZWwgbWVzc2FnZUxldmVsVmFsdWUoTWVzCiAKIHZvaWQg
Q29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoSW5zcGVjdG9yQ29uc29sZUZyb250ZW5kRGlz
cGF0Y2hlciogY29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yOjpJbmplY3RlZFNj
cmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgYm9vbCBnZW5lcmF0ZVByZXZpZXcp
CiB7Ci0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdl
PiBqc29uT2JqID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6
OmNyZWF0ZSgpCisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNvbnNv
bGVNZXNzYWdlPiBqc29uT2JqID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q29uc29s
ZU1lc3NhZ2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTb3VyY2UobWVzc2FnZVNvdXJjZVZhbHVl
KG1fc291cmNlKSkKICAgICAgICAgLnNldExldmVsKG1lc3NhZ2VMZXZlbFZhbHVlKG1fbGV2ZWwp
KQotICAgICAgICAuc2V0VGV4dChtX21lc3NhZ2UpCi0gICAgICAgIC5yZWxlYXNlKCk7CisgICAg
ICAgIC5zZXRUZXh0KG1fbWVzc2FnZSk7CiAKICAgICAvLyBGSVhNRTogb25seSBzZW5kIG91dCB0
eXBlIGZvciBDb25zb2xlQVBJIHNvdXJjZSBtZXNzYWdlcy4KICAgICBqc29uT2JqLT5zZXRUeXBl
KG1lc3NhZ2VUeXBlVmFsdWUobV90eXBlKSk7CkBAIC0yMDAsNyArMTk5LDcgQEAgdm9pZCBDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChJbnNwZWN0b3JDb25zb2xlRnJvbnRlbmREaXNwYXRj
aGVyKiBjb25zb2xlRnIKICAgICBpZiAobV9hcmd1bWVudHMgJiYgbV9hcmd1bWVudHMtPmFyZ3Vt
ZW50Q291bnQoKSkgewogICAgICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGlu
amVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3IobV9hcmd1bWVudHMtPmdsb2Jh
bFN0YXRlKCkpOwogICAgICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewot
ICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IGpzb25BcmdzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6
Y3JlYXRlKCk7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4ganNvbkFyZ3MgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gTWVzc2Fn
ZVR5cGU6OlRhYmxlICYmIGdlbmVyYXRlUHJldmlldyAmJiBtX2FyZ3VtZW50cy0+YXJndW1lbnRD
b3VudCgpKSB7CiAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdGFibGUg
PSBtX2FyZ3VtZW50cy0+YXJndW1lbnRBdCgwKTsKICAgICAgICAgICAgICAgICBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSBjb2x1bW5zID0gbV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSA+IDEg
PyBtX2FyZ3VtZW50cy0+YXJndW1lbnRBdCgxKSA6IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCk7
CkBAIC0yMDksNyArMjA4LDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChJ
bnNwZWN0b3JDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyKiBjb25zb2xlRnIKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNvbkFyZ3MtPmFkZEl0ZW0o
aW5zcGVjdG9yVmFsdWUuY29weVJlZigpKTsKKyAgICAgICAgICAgICAgICBqc29uQXJncy0+YWRk
SXRlbShpbnNwZWN0b3JWYWx1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgp
OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gaW5zcGVjdG9yVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KG1fYXJndW1lbnRzLT5hcmd1bWVudEF0KGkpLCBBU0NJSUxpdGVyYWwoImNvbnNv
bGUiKSwgZ2VuZXJhdGVQcmV2aWV3KTsKQEAgLTIxNywxNyArMjE2LDE3IEBAIHZvaWQgQ29uc29s
ZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoSW5zcGVjdG9yQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hl
ciogY29uc29sZUZyCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBqc29uQXJncy0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5j
b3B5UmVmKCkpOworICAgICAgICAgICAgICAgICAgICBqc29uQXJncy0+YWRkSXRlbShpbnNwZWN0
b3JWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAg
anNvbk9iai0+c2V0UGFyYW1ldGVycyhXVEY6Om1vdmUoanNvbkFyZ3MpKTsKKyAgICAgICAgICAg
IGpzb25PYmotPnNldFBhcmFtZXRlcnMoanNvbkFyZ3MpOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgaWYgKG1fY2FsbFN0YWNrKQogICAgICAgICBqc29uT2JqLT5zZXRTdGFja1RyYWNlKG1fY2Fs
bFN0YWNrLT5idWlsZEluc3BlY3RvckFycmF5KCkpOwogCi0gICAgY29uc29sZUZyb250ZW5kRGlz
cGF0Y2hlci0+bWVzc2FnZUFkZGVkKFdURjo6bW92ZShqc29uT2JqKSk7CisgICAgY29uc29sZUZy
b250ZW5kRGlzcGF0Y2hlci0+bWVzc2FnZUFkZGVkKGpzb25PYmopOwogfQogCiB2b2lkIENvbnNv
bGVNZXNzYWdlOjp1cGRhdGVSZXBlYXRDb3VudEluQ29uc29sZShJbnNwZWN0b3JDb25zb2xlRnJv
bnRlbmREaXNwYXRjaGVyKiBjb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGll
cy5jcHAKaW5kZXggZjVkZjBiZjI1NTlmN2QzMzg0ZjcwOWE4ZTA0M2Y5ZDg1ZmM0NzdhNC4uOGU1
NzYzNzMyOTllZjQxNGEyNWQ5MzM5Y2M4Yzc3NmJkY2IzNmNmMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMu
Y3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzaXplX3Q+PiBs
aW5lRW5kaW5ncyhjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNo
PiBidWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKHNpemVfdCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIGxpbmVDb250ZW50KQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4gYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChzaXpl
X3QgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBsaW5lQ29udGVudCkKIHsKICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaDo6Y3JlYXRlKCkK
ICAgICAgICAgLnNldExpbmVOdW1iZXIobGluZU51bWJlcikKQEAgLTE1MywxNyArMTUzLDE1IEBA
IGludCBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhjb25zdCBKU0M6OllhcnI6OlJlZ3Vs
YXJFeHByZXNzaW9uJiByZWdleCwgY29uCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBl
czo6U2VhcmNoTWF0Y2g+PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29s
IGlzUmVnZXgpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiBzZWFyY2hJblRleHRCeUxp
bmVzKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCBj
YXNlU2Vuc2l0aXZlLCBjb25zdCBib29sIGlzUmVnZXgpCiB7Ci0gICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNo
TWF0Y2g+PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+PiByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7
CiAKICAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ2V4ID0gQ29udGVudFNlYXJj
aFV0aWxpdGllczo6Y3JlYXRlU2VhcmNoUmVnZXgocXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVn
ZXgpOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8c2l6ZV90LCBTdHJpbmc+PiBtYXRjaGVzID0gZ2V0
UmVndWxhckV4cHJlc3Npb25NYXRjaGVzQnlMaW5lcyhyZWdleCwgdGV4dCk7CiAKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIG1hdGNoIDogbWF0Y2hlcykgewotICAgICAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4gbWF0Y2hPYmplY3QgPSBidWlsZE9i
amVjdEZvclNlYXJjaE1hdGNoKG1hdGNoLmZpcnN0LCBtYXRjaC5zZWNvbmQpOwotICAgICAgICBy
ZXN1bHQtPmFkZEl0ZW0oV1RGOjptb3ZlKG1hdGNoT2JqZWN0KSk7Ci0gICAgfQorICAgIGZvciAo
Y29uc3QgYXV0byYgbWF0Y2ggOiBtYXRjaGVzKQorICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVp
bGRPYmplY3RGb3JTZWFyY2hNYXRjaChtYXRjaC5maXJzdCwgbWF0Y2guc2Vjb25kKSk7CiAKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuaAppbmRleCBiM2I2MTYxZTRlYjA2Zjcw
NTlkZmZkMDk5NzcxMDQ5MjZkMDRkNzFkLi45ODhhMGYyZGIxZTY0MDZjNGQwZjc2OThjMTk2OWVk
YmZjNzU4MjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0Nv
bnRlbnRTZWFyY2hVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2Ug
Q29udGVudFNlYXJjaFV0aWxpdGllcyB7CiAKIEpTX0VYUE9SVF9QUklWQVRFIEpTQzo6WWFycjo6
UmVndWxhckV4cHJlc3Npb24gY3JlYXRlU2VhcmNoUmVnZXgoY29uc3QgU3RyaW5nJiBxdWVyeSwg
Ym9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgpOwogSlNfRVhQT1JUX1BSSVZBVEUgaW50
IGNvdW50UmVndWxhckV4cHJlc3Npb25NYXRjaGVzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4
cHJlc3Npb24mLCBjb25zdCBTdHJpbmcmKTsKLUpTX0VYUE9SVF9QUklWQVRFIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNl
YXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0QnlMaW5lcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1Jl
Z2V4KTsKK0pTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+IHNl
YXJjaEluVGV4dEJ5TGluZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBjb25zdCBib29sIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wgaXNSZWdleCk7CiBKU19FWFBP
UlRfUFJJVkFURSBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uRnJvbU9mZnNldChzaXplX3Qgb2Zm
c2V0LCBjb25zdCBWZWN0b3I8c2l6ZV90PiYgbGluZUVuZGluZ3MpOwogSlNfRVhQT1JUX1BSSVZB
VEUgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzaXplX3Q+PiBsaW5lRW5kaW5ncyhjb25zdCBTdHJp
bmcmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0LmNwcAppbmRleCAzYjgzZDA4MGQ5ODUwZTA5MGU5OTJkM2FmYmEzY2EzODA0YTAyNDhi
Li45NWZhNzVkZjZiZmZkYTYzNGQ5YTA5NjljNTY0MmQyZjQ3ZWU1MDA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcApAQCAtMTA2
LDcgKzEwNiw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgICpyZXN1bHQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEY6Om1vdmUocmVzdWx0VmFs
dWUpKTsKKyAgICAqcmVzdWx0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUpOwogfQog
CiB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBSZWZQdHI8
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4q
IHByb3BlcnRpZXMpCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0
UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWMK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICpwcm9wZXJ0aWVzID0gQmluZGluZ1RyYWl0
czxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+
Pjo6cnVudGltZUNhc3QoV1RGOjptb3ZlKHJlc3VsdCkpOworICAgICpwcm9wZXJ0aWVzID0gQmlu
ZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0KTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlw
dDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4qIHByb3BlcnRpZXMpCkBAIC0xMzcsMTIg
KzEzNywxMiBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBhcnJheSA9IEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3Qo
V1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGF1dG8gYXJyYXkgPSBCaW5kaW5nVHJhaXRzPEFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9y
Pj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CiAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA+IDApCiAg
ICAgICAgICpwcm9wZXJ0aWVzID0gYXJyYXk7CiB9CiAKLVJlZjxBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJh
bWVzKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzKQorUGFzc1JlZlB0
cjxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5qZWN0
ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBj
YWxsRnJhbWVzKQogewogICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKICAgICBEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVND
SUlMaXRlcmFsKCJ3cmFwQ2FsbEZyYW1lcyIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5j
dGlvbkNhbGxIYW5kbGVyKCkpOwpAQCAtMTUzLDEyICsxNTMsMTIgQEAgUmVmPEFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3Jh
cENhbGxGcmEKICAgICBBU1NFUlQoIWhhZEV4Y2VwdGlvbik7CiAgICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiByZXN1bHQgPSBjYWxsRnJhbWVzVmFsdWUudG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRT
dGF0ZSgpKTsKICAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6
OkFycmF5KQotICAgICAgICByZXR1cm4gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj46OnJ1bnRpbWVDYXN0KFdURjo6bW92ZShyZXN1
bHQpKS5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gQmluZGluZ1RyYWl0czxBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj46OnJ1bnRpbWVDYXN0
KHJlc3VsdCk7CiAKICAgICByZXR1cm4gQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVjdChjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1l
LCBib29sIGdlbmVyYXRlUHJldmlldykgY29uc3QKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVjdChj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBO
YW1lLCBib29sIGdlbmVyYXRlUHJldmlldykgY29uc3QKIHsKICAgICBBU1NFUlQoIWhhc05vVmFs
dWUoKSk7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIHdyYXBGdW5jdGlvbihp
bmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoIndyYXBPYmplY3QiKSwgaW5zcGVj
dG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKQEAgLTE3OSw3ICsxNzks
NyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJ
bmplY3RlZFNjcmlwdDo6d3JhcE9iamVjdChjbwogICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJl
c3VsdE9iamVjdCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUoY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIHRhYmxlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgY29sdW1u
cykgY29uc3QKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiB0YWJsZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNvbHVtbnMpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKCFoYXNOb1ZhbHVlKCkpOwogICAgIERlcHJlY2F0ZWQ6OlNjcmlw
dEZ1bmN0aW9uQ2FsbCB3cmFwRnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlM
aXRlcmFsKCJ3cmFwVGFibGUiKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxs
SGFuZGxlcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHQuaAppbmRleCAyOTA5MmIwOTg2YjU0YjFhNTc0N2M2MmUzMGUwNjdkYThkZWM5OTNi
Li40MmM3OTBkZTEzZGY3OTBlMTI3ZGVlNzQ4ZmJlNzE0YjBiZjhjZTU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCkBAIC02Miw5ICs2
Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBib29sIG93blByb3BlcnRpZXMsIFJlZlB0cjxQcm90b2NvbDo6
QXJyYXk8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+KiByZXN1bHQpOwog
ICAgIHZvaWQgZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6UnVudGltZTo6SW50
ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiogcmVzdWx0KTsKIAotICAgIFJlZjxQcm90b2NvbDo6
QXJyYXk8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiB3cmFwQ2FsbEZyYW1lcyhjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOwotICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiB3cmFwT2JqZWN0KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3ID0gZmFsc2Up
IGNvbnN0OwotICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB3cmFw
VGFibGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgY29sdW1ucykgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxQcm90b2Nv
bDo6QXJyYXk8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiB3cmFwQ2FsbEZyYW1lcyhj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworICAgIFBhc3NSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9iamVjdChjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29sIGdlbmVyYXRlUHJldmlldyA9
IGZhbHNlKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+IHdyYXBUYWJsZShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdGFibGUsIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjb2x1bW5zKSBjb25zdDsKIAogICAgIHZvaWQg
c2V0RXhjZXB0aW9uVmFsdWUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKICAgICB2
b2lkIGNsZWFyRXhjZXB0aW9uVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAppbmRleCA3ZGUwNTE5OGNhZTAy
NzUxMmVjYjEwNTNmZDFlNjIxMzEwMTdlYmQ5Li5kZDEyOThjYjVmNGQ2Yzk3ZTE2MWU4OGEyYmMx
MzE2N2JiMjc5OWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC0xMzUsMjAgKzEzNSwxNSBAQCB2b2lkIElu
amVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
RGVwcmVjYXRlZDo6U2NyaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGlmICghcmVzdWx0UGFpci0+Z2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHJlc3VsdE9iamVjdCkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90IGEg
cGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGJvb2wgd2FzVGhyb3duVmFsdWUgPSBmYWxzZTsKLSAgICBpZiAoIXJlc3VsdFBh
aXItPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJ3YXNUaHJvd24iKSwgd2FzVGhyb3duVmFsdWUp
KSB7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gcmVzdWx0UGFp
ci0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicmVzdWx0IikpOworICAgIGJvb2wgd2FzVGhyb3du
VmFsID0gZmFsc2U7CisgICAgaWYgKCFyZXN1bHRPYmplY3QgfHwgIXJlc3VsdFBhaXItPmdldEJv
b2xlYW4oQVNDSUlMaXRlcmFsKCJ3YXNUaHJvd24iKSwgd2FzVGhyb3duVmFsKSkgewogICAgICAg
ICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgZXJyb3I6IHJlc3VsdCBpcyBu
b3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3YXNUaHJvd24gZmxhZyIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgKm9iamVjdFJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7Ci0gICAgKndh
c1Rocm93biA9IHdhc1Rocm93blZhbHVlOworICAgICp3YXNUaHJvd24gPSB3YXNUaHJvd25WYWw7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cAppbmRleCA4OTVhMDk2NjIyZTg4NTgyM2E3Y2U2YWI3ZjFlMmZjY2ZlYjMzYTgxLi5kYmU3OTNl
ZDExMGY0ZjNjYTI1NGQ0OThlOTA4YTA4ZWU5ZjI2YzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmNwcApAQCAtMzYsOCArMzYsOCBAQAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKFJlZjxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKQot
ICAgIDogbV9iYWNrZW5kRGlzcGF0Y2hlcihXVEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpKQor
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBp
bnQgaWQpCisgICAgOiBtX2JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQogICAg
ICwgbV9pZChpZCkKICAgICAsIG1fYWxyZWFkeVNlbnQoZmFsc2UpCiB7CkBAIC01NCwxOCArNTQs
MTggQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5k
RmFpbHVyZShjb25zdCBFcnJvclN0cmluZyYgZXIKICAgICBzZW5kSWZBY3RpdmUobnVsbHB0ciwg
ZXJyb3IpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jh
c2U6OnNlbmRJZkFjdGl2ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcnRpYWxNZXNzYWdl
LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKQordm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kSWZBY3RpdmUoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlv
bkVycm9yKQogewogICAgIGlmIChtX2FscmVhZHlTZW50KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UobV9pZCwgV1RGOjptb3ZlKHBhcnRp
YWxNZXNzYWdlKSwgaW52b2NhdGlvbkVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UobV9pZCwgcGFydGlhbE1lc3NhZ2UsIGludm9jYXRpb25FcnJvcik7CiAgICAg
bV9hbHJlYWR5U2VudCA9IHRydWU7CiB9CiAKLVJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cj4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcihpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKGNvbnN0IFN0
cmluZyYgZG9tYWluLCBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciogZGlz
cGF0Y2hlcikKQEAgLTkwLDggKzkwLDggQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRWYWx1ZTsKLSAgICBpZiAoIW1l
c3NhZ2VPYmplY3QtPmdldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgY2FsbElkVmFsdWUpKSB7
CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3Qt
PmdldChBU0NJSUxpdGVyYWwoImlkIikpOworICAgIGlmICghY2FsbElkVmFsdWUpIHsKICAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihudWxscHRyLCBJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRl
cmFsKCInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0xMDIsOCArMTAyLDggQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtZXRob2RWYWx1ZTsKLSAgICBpZiAoIW1lc3Nh
Z2VPYmplY3QtPmdldFZhbHVlKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIG1ldGhvZFZhbHVlKSkg
eworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0
LT5nZXQoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSk7CisgICAgaWYgKCFtZXRob2RWYWx1ZSkgewog
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCBBU0NJ
SUxpdGVyYWwoIidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBmb3VuZCIpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTEyOCwxMCArMTI4LDEwIEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICB9CiAKICAgICBT
dHJpbmcgZG9tYWluTWV0aG9kID0gbWV0aG9kLnN1YnN0cmluZyhwb3NpdGlvbiArIDEpOwotICAg
IGRvbWFpbkRpc3BhdGNoZXItPmRpc3BhdGNoKGNhbGxJZCwgZG9tYWluTWV0aG9kLCBtZXNzYWdl
T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIGRvbWFpbkRpc3BhdGNoZXItPmRpc3BhdGNo
KGNhbGxJZCwgZG9tYWluTWV0aG9kLCBtZXNzYWdlT2JqZWN0LnJlbGVhc2UoKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZv
Y2F0aW9uRXJyb3IpCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9u
c2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0
IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpCiB7CiAgICAgaWYgKCFtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlM
aXRlcmFsKCJyZXN1bHQiKSwgcmVzdWx0KTsKICAgICByZXNwb25zZU1lc3NhZ2UtPnNldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCBjYWxsSWQpOwogICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIEMKICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIG51bGxw
dHIpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2Nv
bEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGVycm9yQ29k
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiYmIGRhdGEpIGNvbnN0Cit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29t
bW9uRXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0CiB7CiAgICAgc3RhdGljIGNvbnN0IGlu
dCBlcnJvckNvZGVzW10gPSB7CiAgICAgICAgIC0zMjcwMCwgLy8gUGFyc2VFcnJvcgpAQCAtMTYz
LDIxICsxNjMsMjEgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJv
dG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIEMKICAgICAgICAgLTMyMDAwLCAv
LyBTZXJ2ZXJFcnJvcgogICAgIH07CiAKLSAgICBBU1NFUlRfQVJHKGVycm9yQ29kZSwgZXJyb3JD
b2RlID49IDApOwotICAgIEFTU0VSVF9BUkcoZXJyb3JDb2RlLCAodW5zaWduZWQpZXJyb3JDb2Rl
IDwgV1RGX0FSUkFZX0xFTkdUSChlcnJvckNvZGVzKSk7Ci0gICAgQVNTRVJUX0FSRyhlcnJvckNv
ZGUsIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7CisgICAgQVNTRVJUKGVycm9yQ29kZSA+PSAwKTsK
KyAgICBBU1NFUlQoKHVuc2lnbmVkKWVycm9yQ29kZSA8IFdURl9BUlJBWV9MRU5HVEgoZXJyb3JD
b2RlcykpOworICAgIEFTU0VSVChlcnJvckNvZGVzW2Vycm9yQ29kZV0pOwogCiAgICAgaWYgKCFt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmPElu
c3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBlcnJvci0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgZXJyb3JDb2Rlc1tl
cnJvckNvZGVdKTsKICAgICBlcnJvci0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIp
LCBlcnJvck1lc3NhZ2UpOwogICAgIGlmIChkYXRhKQotICAgICAgICBlcnJvci0+c2V0QXJyYXko
QVNDSUlMaXRlcmFsKCJkYXRhIiksIFdURjo6bW92ZShkYXRhKSk7CisgICAgICAgIGVycm9yLT5z
ZXRBcnJheShBU0NJSUxpdGVyYWwoImRhdGEiKSwgZGF0YSk7CiAKLSAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtZXNzYWdl
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCBXVEY6Om1vdmUoZXJyb3IpKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBtZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCBlcnJv
ci5yZWxlYXNlKCkpOwogICAgIGlmIChjYWxsSWQpCiAgICAgICAgIG1lc3NhZ2UtPnNldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCAqY2FsbElkKTsKICAgICBlbHNlCkBAIC0xODcsMzYgKzE4
NywzNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVy
cm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5WYWx1ZVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgRGVmYXVsdFZhbHVl
VHlwZT4KLXN0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0UHJvcGVydHlWYWx1ZShJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1
ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9y
cywgRGVmYXVsdFZhbHVlVHlwZSBkZWZhdWx0VmFsdWUsIGJvb2wgKCphc01ldGhvZCkoSW5zcGVj
dG9yVmFsdWUmLCBWYWx1ZVR5cGUmKSwgY29uc3QgY2hhciogdHlwZU5hbWUpCitzdGF0aWMgUmV0
dXJuVmFsdWVUeXBlIGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzLCBEZWZhdWx0VmFsdWVUeXBlIGRlZmF1bHRWYWx1ZSwgYm9vbCAoKmFzTWV0aG9k
KShJbnNwZWN0b3JWYWx1ZSYsIFZhbHVlVHlwZSYpLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkKIHsK
LSAgICBWYWx1ZVR5cGUgcmVzdWx0ID0gZGVmYXVsdFZhbHVlOwotICAgIC8vIG91dF9vcHRpb25h
bFZhbHVlRm91bmQgc2lnbmFscyB0byB0aGUgY2FsbGVyIHdoZXRoZXIgYW4gb3B0aW9uYWwgcHJv
cGVydHkgd2FzIGZvdW5kLgotICAgIC8vIGlmIG91dF9vcHRpb25hbFZhbHVlRm91bmQgPT0gbnVs
bHB0ciwgdGhlbiB0aGlzIGlzIGEgcmVxdWlyZWQgcHJvcGVydHkuCi0gICAgaWYgKG91dF9vcHRp
b25hbFZhbHVlRm91bmQpCi0gICAgICAgICpvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID0gZmFsc2U7
CisgICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKKworICAgIFZhbHVlVHlwZSB2YWx1ZSA9IGRl
ZmF1bHRWYWx1ZTsKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBm
YWxzZTsKIAogICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmICghb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCkKLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLmFkZEl0ZW0oU3RyaW5nOjpmb3Jt
YXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycg
d2l0aCB0eXBlICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0
IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJy4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKICAg
ICB9CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBvYmplY3QtPmZpbmQobmFtZSk7Ci0gICAgaWYg
KGZpbmRSZXN1bHQgPT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICBpZiAoIW91dF9vcHRpb25h
bFZhbHVlRm91bmQpCi0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6
Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7Cisg
ICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0
LT5maW5kKG5hbWUpOworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBp
ZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3Vu
ZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKICAgICB9CiAKLSAgICBpZiAoIWFzTWV0aG9kKCpmaW5kUmVzdWx0LT52YWx1ZSwgcmVzdWx0
KSkgewotICAgICAgICBwcm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6Zm9ybWF0KCJQYXJh
bWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgdHlwZU5hbWUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoIWFz
TWV0aG9kKCp2YWx1ZUl0ZXJhdG9yLT52YWx1ZSwgdmFsdWUpKSB7CisgICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUp
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAgIGlmIChvdXRfb3B0aW9uYWxW
YWx1ZUZvdW5kKQotICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9IHRydWU7CisgICAg
aWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKIAotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIHZhbHVlOwogfQogCiBzdHJ1Y3QgQXNNZXRob2RCcmlkZ2Vz
IHsKQEAgLTIyOSwzOSArMjMwLDM5IEBAIHN0cnVjdCBBc01ldGhvZEJyaWRnZXMgewogICAgIHN0
YXRpYyBib29sIGFzVmFsdWUoSW5zcGVjdG9yVmFsdWUmIHZhbHVlLCBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+JiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLmFzVmFsdWUob3V0cHV0KTsgfQogfTsKIAot
aW50IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKQoraW50IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9ycykKIHsKICAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxpbnQsIGludCwgaW50
PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJy
aWRnZXM6OmFzSW50ZWdlciwgIkludGVnZXIiKTsKIH0KIAotZG91YmxlIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitkb3VibGUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCiB7CiAg
ICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8ZG91YmxlLCBkb3VibGUsIGRvdWJsZT4ob2JqZWN0
LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgMCwgQXNNZXRob2RCcmlkZ2VzOjph
c0RvdWJsZSwgIk51bWJlciIpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBw
cm90b2NvbEVycm9ycykKK1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3Ry
aW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZh
bHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKIHsKICAgICByZXR1cm4g
Z2V0UHJvcGVydHlWYWx1ZTxTdHJpbmcsIFN0cmluZywgU3RyaW5nPihvYmplY3QsIG5hbWUsIHZh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAiIiwgQXNNZXRob2RCcmlkZ2VzOjphc1N0cmluZywg
IlN0cmluZyIpOwogfQogCi1ib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29s
ZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZh
bHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJy
b3JzKQorYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0
b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCiB7CiAgICAgcmV0dXJuIGdldFByb3BlcnR5
VmFsdWU8Ym9vbCwgYm9vbCwgYm9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2Nv
bEVycm9ycywgZmFsc2UsIEFzTWV0aG9kQnJpZGdlczo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOwog
fQogCi1SZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3Rv
Y29sRXJyb3JzKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
KQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiwgSW5zcGVjdG9yT2JqZWN0Kj4ob2JqZWN0LCBuYW1l
LCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0ciwgQXNNZXRob2RCcmlkZ2VzOjph
c09iamVjdCwgIk9iamVjdCIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIEluc3BlY3Rvck9i
amVjdCo+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIG51bGxwdHIs
IEFzTWV0aG9kQnJpZGdlczo6YXNPYmplY3QsICJPYmplY3QiKTsKIH0KIAotUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXko
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQogewotICAgIHJldHVybiBnZXRQ
cm9wZXJ0eVZhbHVlPFJlZlB0cjxJbnNwZWN0b3JBcnJheT4sIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4sIEluc3BlY3RvckFycmF5Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9ycywgbnVsbHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc0FycmF5LCAiQXJyYXkiKTsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiwgSW5zcGVjdG9yQXJyYXkqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91
bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzQXJyYXksICJB
cnJheSIpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
JiBwcm90b2NvbEVycm9ycykKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3RvclZh
bHVlPiwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiwgSW5zcGVjdG9yVmFsdWUqPihvYmplY3QsIG5h
bWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6
OmFzVmFsdWUsICJWYWx1ZSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+LCBJbnNwZWN0b3JWYWx1
ZSo+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIG51bGxwdHIsIEFz
TWV0aG9kQnJpZGdlczo6YXNWYWx1ZSwgIlZhbHVlIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmluZGV4IDg2Y2JkOWUyMmM3MzJiNzI2YTVj
MjVkMjIyNjhmZjMyZTcxMDhkYmYuLmE5OWU2ZWFiMWY4YjI3OWMxOGQzYmI4ZTMwZmEwODBmZDdi
NzY2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5k
ZWYgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaAogI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcl9oCiAKLSNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgpAQCAtNDAsMzEgKzQwLDMwIEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFz
cyBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyPiB7CiBwdWJsaWM6Ci0g
ICAgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKQotICAgICAgICA6IG1fYmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIpIHsgfQorICAgIEluc3BlY3RvclN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0
Y2hlcikgOiBtX2JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKSB7IH0KICAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKSA9IDA7CiBwcm90ZWN0ZWQ6Ci0gICAgUmVmPEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIGNsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKIAogICAgIGNsYXNzIEpT
X0VYUE9SVF9QUklWQVRFIENhbGxiYWNrQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbGxiYWNr
QmFzZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2FsbGJhY2tCYXNlKFJlZjxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgQ2FsbGJhY2tCYXNlKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOwogCiAgICAgICAgIGJv
b2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZW5kRmFpbHVyZShjb25zdCBFcnJv
clN0cmluZyYpOwogICAgICAgICB2b2lkIGRpc2FibGUoKSB7IG1fYWxyZWFkeVNlbnQgPSB0cnVl
OyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgc2VuZElmQWN0aXZlKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZv
Y2F0aW9uRXJyb3IpOworICAgICAgICB2b2lkIHNlbmRJZkFjdGl2ZShQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9u
RXJyb3IpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgICAgIGludCBtX2lkOwog
ICAgICAgICBib29sIG1fYWxyZWFkeVNlbnQ7CiAgICAgfTsKQEAgLTgzLDE3ICs4MiwxNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihjb25zdCBTdHJp
bmcmIGRvbWFpbiwgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIqKTsKICAg
ICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBzZW5kUmVz
cG9uc2UobG9uZyBjYWxsSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVzdWx0LCBjb25z
dCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShs
b25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgRXJy
b3JTdHJpbmcmIGludm9jYXRpb25FcnJvcik7CiAgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9y
KGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSkgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0
IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgZGF0
YSkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgaW50IGdldEludGVnZXIoSW5zcGVjdG9yT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIGRvdWJsZSBnZXRE
b3VibGUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7
Ci0gICAgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+JiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNw
ZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0
aWMgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJv
dG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5
KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOworICAg
IHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1v
bkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGRhdGEpIGNvbnN0OworCisgICAgc3RhdGljIGludCBnZXRJbnRlZ2VyKEluc3Bl
Y3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgZG91YmxlIGdldERvdWJsZShJ
bnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFN0cmluZyBnZXRTdHJp
bmcoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
LCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBib29sIGdldEJv
b2xlYW4oSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5z
cGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CiAKIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAppbmRleCAxOGRm
MTQyNWU2ZWQyNDQ2NjIwZTU3ZjRlMmNiYWY0NzA5ZjQ5ZjQzLi5hZTJhN2NkOTIzMGJiZGNiMjc4
NTgxZDlmM2E5MGE3YzY1NzI1ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckVudmlyb25tZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCkBAIC01MSw3ICs1MSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDYWxsSW5qZWN0ZWRTY3JpcHRGdW5jdGlvbihKU0M6
OkV4ZWNTdGF0ZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRJbml0aWFsaXplZCgp
ID0gMDsKLSAgICB2aXJ0dWFsIFJlZjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9uU3RvcHdhdGNo
KCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXVEY6OlN0b3B3YXRjaD4gZXhlY3V0aW9u
U3RvcHdhdGNoKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oCmluZGV4IDI5NmYzYTgxMDUyZmQzNzk4NmY2MzEzNzQ2Zjc0MjA1NGU3YTgzNmMuLjE0
M2RlZjg1NzlhYzQ2MDY1ZTk1ZmQ5YjEyODcxNTMzYWIwOWIzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
CkBAIC0zMSwxMyArMzEsMTIgQEAKIAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBCaW5kaW5nVHJhaXRzOwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogY2xhc3MgT3B0T3V0cHV0IHsKIHB1YmxpYzoKQEAgLTY0LDQ0ICs2MywxMjggQEAgcHJpdmF0
ZToKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcHRPdXRwdXQpOwogfTsKIAorLy8gVGhpcyBj
bGFzcyBwcm92aWRlcyAiVHJhaXRzIiB0eXBlIGZvciB0aGUgaW5wdXQgdHlwZSBULiBJdCBpcyBw
cm9ncmFtbWVkIHVzaW5nIEMrKyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgorLy8gdGVjaG5pcXVl
LiBCeSBkZWZhdWx0IGl0IHNpbXBseSB0YWtlcyAiSXRlbVRyYWl0cyIgdHlwZSBmcm9tIFQsIGJ1
dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgYmFzZSB0eXBlcy4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6Okl0
ZW1UcmFpdHMgVHJhaXRzOworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIEFycmF5
IDogcHVibGljIEluc3BlY3RvckFycmF5QmFzZSB7CiBwcml2YXRlOgogICAgIEFycmF5KCkgeyB9
CiAKLSAgICBJbnNwZWN0b3JBcnJheSYgb3BlbkFjY2Vzc29ycygpCisgICAgSW5zcGVjdG9yQXJy
YXkqIG9wZW5BY2Nlc3NvcnMoKQogICAgIHsKICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KEluc3BlY3RvckFycmF5KSA9PSBzaXplb2YoQXJyYXk8VD4pLCBjYW5ub3RfY2FzdCk7Ci0gICAg
ICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXkqPihzdGF0aWNfY2FzdDxJbnNw
ZWN0b3JBcnJheUJhc2UqPih0aGlzKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNw
ZWN0b3JBcnJheSo+KHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5QmFzZSo+KHRoaXMpKTsKICAg
ICB9CiAKIHB1YmxpYzoKLSAgICB2b2lkIGFkZEl0ZW0oUmVmPFQ+JiYgdmFsdWUpCisgICAgdm9p
ZCBhZGRJdGVtKFBhc3NSZWZQdHI8VD4gdmFsdWUpCiAgICAgewotICAgICAgICBvcGVuQWNjZXNz
b3JzKCkucHVzaFZhbHVlKCZ2YWx1ZS5nZXQoKSk7CisgICAgICAgIEFycmF5SXRlbUhlbHBlcjxU
Pjo6VHJhaXRzOjpwdXNoUmVmUHRyKHRoaXMtPm9wZW5BY2Nlc3NvcnMoKSwgdmFsdWUpOwogICAg
IH0KIAotICAgIHZvaWQgYWRkSXRlbShSZWZQdHI8VD4mJiB2YWx1ZSkKKyAgICB2b2lkIGFkZEl0
ZW0oVCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG9wZW5BY2Nlc3NvcnMoKS5wdXNoVmFsdWUoV1RG
Ojptb3ZlKHZhbHVlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJp
bmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgb3BlbkFjY2Vzc29ycygpLnB1c2hTdHJpbmcodmFs
dWUpOworICAgICAgICBBcnJheUl0ZW1IZWxwZXI8VD46OlRyYWl0czo6cHVzaFJhdyh0aGlzLT5v
cGVuQWNjZXNzb3JzKCksIHZhbHVlKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZEl0ZW0oaW50IHZh
bHVlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5PFQ+PiBjcmVhdGUoKQogICAgIHsKLSAg
ICAgICAgb3BlbkFjY2Vzc29ycygpLnB1c2hJbnRlZ2VyKHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBBcnJheTxUPigpKTsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIFJlZjxB
cnJheTxUPj4gY3JlYXRlKCkKK307CisKK3N0cnVjdCBTdHJ1Y3RJdGVtVHJhaXRzIHsKKyAgICBz
dGF0aWMgdm9pZCBwdXNoUmVmUHRyKEluc3BlY3RvckFycmF5KiBhcnJheSwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBBcnJheTxUPigpKTsKKyAgICAgICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7CiAgICAgfQog
fTsKIAordGVtcGxhdGU8Pgorc3RydWN0IEFycmF5SXRlbUhlbHBlcjxTdHJpbmc+IHsKKyAgICBz
dHJ1Y3QgVHJhaXRzIHsKKyAgICAgICAgc3RhdGljIHZvaWQgcHVzaFJhdyhJbnNwZWN0b3JBcnJh
eSogYXJyYXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFy
cmF5LT5wdXNoU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9OworCit0ZW1wbGF0
ZTw+CitzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPGludD4geworICAgIHN0cnVjdCBUcmFpdHMgewor
ICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmF3KEluc3BlY3RvckFycmF5KiBhcnJheSwgaW50IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhcnJheS0+cHVzaEludGVnZXIodmFsdWUpOwor
ICAgICAgICB9CisgICAgfTsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBBcnJheUl0ZW1IZWxw
ZXI8ZG91YmxlPiB7CisgICAgc3RydWN0IFRyYWl0cyB7CisgICAgICAgIHN0YXRpYyB2b2lkIHB1
c2hSYXcoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGFycmF5LT5wdXNoRG91YmxlKHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9
OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPGJvb2w+IHsKKyAgICBzdHJ1
Y3QgVHJhaXRzIHsKKyAgICAgICAgc3RhdGljIHZvaWQgcHVzaFJhdyhJbnNwZWN0b3JBcnJheSog
YXJyYXksIGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFycmF5LT5wdXNoQm9v
bGVhbih2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0
IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JWYWx1ZT4geworICAgIHN0cnVjdCBUcmFpdHMgewor
ICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKEluc3BlY3RvckFycmF5KiBhcnJheSwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFy
cmF5LT5wdXNoVmFsdWUodmFsdWUpOworICAgICAgICB9CisgICAgfTsKK307CisKK3RlbXBsYXRl
PD4KK3N0cnVjdCBBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0PiB7CisgICAgc3RydWN0
IFRyYWl0cyB7CisgICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJyYXkq
IGFycmF5LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT4gewor
ICAgIHN0cnVjdCBUcmFpdHMgeworICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKEluc3Bl
Y3RvckFycmF5KiBhcnJheSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGFycmF5LT5wdXNoQXJyYXkodmFsdWUpOworICAgICAgICB9Cisg
ICAgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQXJyYXlJdGVtSGVscGVy
PFByb3RvY29sOjpBcnJheTxUPj4geworICAgIHN0cnVjdCBUcmFpdHMgeworICAgICAgICBzdGF0
aWMgdm9pZCBwdXNoUmVmUHRyKEluc3BlY3RvckFycmF5KiBhcnJheSwgUGFzc1JlZlB0cjxQcm90
b2NvbDo6QXJyYXk8VD4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhcnJheS0+cHVz
aFZhbHVlKHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9OworCiAvLyBIZWxwZXIgbWV0aG9k
cyBmb3IgUHJvdG9jb2wgYW5kIG90aGVyIEluc3BlY3RvciB0eXBlcyBhcmUgcHJvdmlkZWQgYnkK
IC8vIHNwZWNpYWxpemF0aW9ucyBvZiBCaW5kaW5nVHJhaXRzPFQ+LiBTb21lIGFyZSBnZW5lcmF0
ZWQgZm9yIHByb3RvY29sIHR5cGVzLgogCkBAIC0xMDksOSArMTkyLDggQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIHN0cnVjdCBCaW5kaW5nVHJhaXRzIHsKICAgICB0eXBlZGVmIFQgQmluZGluZ1R5
cGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwdXNoKEluc3BlY3RvckFycmF5JiwgQmluZGluZ1R5cGUm
KTsKICAgICBzdGF0aWMgSW5zcGVjdG9yVmFsdWU6OlR5cGUgdHlwZVRhZygpOwotICAgIHN0YXRp
YyBSZWZQdHI8VD4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+KTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yVmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVECkBAIC0xMjIsMTYgKzIwNCwxNSBAQCBzdHJ1Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVF9B
UkcodmFsdWUsIHZhbHVlICYmIHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7CisgICAgICAgIEFTU0VS
VCh2YWx1ZS0+dHlwZSgpID09IFRZUEUpOwogICAgIH0KICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVECiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxBcnJheTxUPj4gcnVudGltZUNh
c3QoUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmIHZhbHVlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEFycmF5PFQ+PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAgICAgICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcnJheTsKICAgICAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFs
dWUtPmFzQXJyYXkoYXJyYXkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQs
IGNhc3RTdWNjZWVkZWQpOwpAQCAtMTQ1LDcgKzIyNiw2IEBAIHN0cnVjdCBCaW5kaW5nVHJhaXRz
PFByb3RvY29sOjpBcnJheTxUPj4gewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBzdGF0aWMg
dm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCiAg
ICAgewotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJyYXk7CiAgICAgICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVl
LT5hc0FycmF5KGFycmF5KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBj
YXN0U3VjY2VlZGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCA0MmE2YjVmM2NmODQ2NmZlMWFmMjZmMjQwNmM5YjUx
Y2QzMzk4M2NiLi4yYTJhMGJjODUwYTFlZGNmN2FiMzBhYTM2Y2RjODRlODMyN2MxYWUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
Y3BwCkBAIC0zNDcsNyArMzQ3LDcgQEAgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgVUNoYXIqIHN0
YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIG91dHB1dCkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFy
dCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB2YWx1ZVRva2VuRW5kLCBpbnQgZGVw
dGgpCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB2YWx1ZVRva2VuRW5kLCBpbnQg
ZGVwdGgpCiB7CiAgICAgaWYgKGRlcHRoID4gc3RhY2tMaW1pdCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0zODUsMTQgKzM4NSwxNCBAQCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJ1aWxk
VmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBUlJBWV9CRUdJTjogewotICAgICAgICBSZWY8
SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgICBzdGFydCA9IHRva2VuRW5kOwogICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4o
c3RhcnQsIGVuZCwgJnRva2VuU3RhcnQsICZ0b2tlbkVuZCk7CiAgICAgICAgIHdoaWxlICh0b2tl
biAhPSBBUlJBWV9FTkQpIHsKICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYXJy
YXlOb2RlID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5FbmQsIGRlcHRoICsgMSk7CiAg
ICAgICAgICAgICBpZiAoIWFycmF5Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUoV1RGOjptb3ZlKGFycmF5Tm9kZSkpOwor
ICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZShhcnJheU5vZGUpOwogCiAgICAgICAgICAgICAv
LyBBZnRlciBhIGxpc3QgdmFsdWUsIHdlIGV4cGVjdCBhIGNvbW1hIG9yIHRoZSBlbmQgb2YgdGhl
IGxpc3QuCiAgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOwpAQCAtNDA5LDExICs0MDksMTEg
QEAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFydCwg
Y29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUMKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4g
IT0gQVJSQVlfRU5EKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJlc3Vs
dCA9IFdURjo6bW92ZShhcnJheSk7CisgICAgICAgIHJlc3VsdCA9IGFycmF5LnJlbGVhc2UoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgT0JKRUNUX0JFR0lOOiB7Ci0gICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CiAgICAgICAgIHRva2VuID0g
cGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5TdGFydCwgJnRva2VuRW5kKTsKICAgICAgICAg
d2hpbGUgKHRva2VuICE9IE9CSkVDVF9FTkQpIHsKQEAgLTQzMiw3ICs0MzIsNyBAQCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hh
ciogZW5kLCBjb25zdCBVQwogICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1
ZSA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAg
ICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgICAgIG9iamVjdC0+c2V0VmFsdWUoa2V5LCBXVEY6Om1vdmUodmFsdWUpKTsKKyAgICAgICAg
ICAgIG9iamVjdC0+c2V0VmFsdWUoa2V5LCB2YWx1ZSk7CiAgICAgICAgICAgICBzdGFydCA9IHRv
a2VuRW5kOwogCiAgICAgICAgICAgICAvLyBBZnRlciBhIGtleS92YWx1ZSBwYWlyLCB3ZSBleHBl
Y3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZQpAQCAtNDUwLDcgKzQ1MCw3IEBAIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFy
KiBlbmQsIGNvbnN0IFVDCiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuICE9IE9CSkVDVF9F
TkQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmVzdWx0ID0gV1RGOjpt
b3ZlKG9iamVjdCk7CisgICAgICAgIHJlc3VsdCA9IG9iamVjdC5yZWxlYXNlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtNzM5LDggKzczOSw4IEBAIEluc3BlY3Rvck9iamVjdCogSW5z
cGVjdG9yT2JqZWN0QmFzZTo6b3BlbkFjY2Vzc29ycygpCiAKIGJvb2wgSW5zcGVjdG9yT2JqZWN0
QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkgY29uc3QK
IHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUo
bmFtZSwgdmFsdWUpKQorICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFt
ZSk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJu
IHZhbHVlLT5hc0Jvb2xlYW4ob3V0cHV0KTsKQEAgLTc0OCwzOSArNzQ4LDQwIEBAIGJvb2wgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91
dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRTdHJpbmcoY29uc3Qg
U3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3QKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQorICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIHZhbHVlLT5hc1N0cmluZyhvdXRw
dXQpOwogfQogCi1ib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRwdXQpIGNvbnN0CitQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0T2JqZWN0KGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVl
OwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CisgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdmFsdWUt
PmFzT2JqZWN0KG91dHB1dCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0Owor
ICAgIHZhbHVlLT5hc09iamVjdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCi1ib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYg
bmFtZSwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0cHV0KSBjb25zdAorUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0QXJyYXkoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7Ci0gICAg
aWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKKyAgICBpZiAoIXZh
bHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB2YWx1ZS0+YXNBcnJh
eShvdXRwdXQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0OworICAgIHZhbHVl
LT5hc0FycmF5KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLWJv
b2wgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+JiBvdXRwdXQpIGNvbnN0CitQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAog
ewotICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGZpbmRSZXN1bHQgPSBtX2RhdGEuZmlu
ZChuYW1lKTsKLSAgICBpZiAoZmluZFJlc3VsdCA9PSBtX2RhdGEuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIHJldHVy
biB0cnVlOworICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQo
bmFtZSk7CisgICAgaWYgKGl0ID09IG1fZGF0YS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNl
OjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtNzk4LDEzICs3OTksMTMgQEAgdm9pZCBJ
bnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25z
dAogewogICAgIG91dHB1dC5hcHBlbmQoJ3snKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fb3JkZXIuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gbV9kYXRh
LmZpbmQobV9vcmRlcltpXSk7Ci0gICAgICAgIEFTU0VSVChmaW5kUmVzdWx0ICE9IG1fZGF0YS5l
bmQoKSk7CisgICAgICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZp
bmQobV9vcmRlcltpXSk7CisgICAgICAgIEFTU0VSVChpdCAhPSBtX2RhdGEuZW5kKCkpOwogICAg
ICAgICBpZiAoaSkKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJywnKTsKLSAgICAgICAgZG91
YmxlUXVvdGVTdHJpbmcoZmluZFJlc3VsdC0+a2V5LCBvdXRwdXQpOworICAgICAgICBkb3VibGVR
dW90ZVN0cmluZyhpdC0+a2V5LCBvdXRwdXQpOwogICAgICAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7
Ci0gICAgICAgIGZpbmRSZXN1bHQtPnZhbHVlLT53cml0ZUpTT04ob3V0cHV0KTsKKyAgICAgICAg
aXQtPnZhbHVlLT53cml0ZUpTT04ob3V0cHV0KTsKICAgICB9CiAgICAgb3V0cHV0LmFwcGVuZCgn
fScpOwogfQpAQCAtODQ0LDUwICs4NDUsNTAgQEAgSW5zcGVjdG9yQXJyYXlCYXNlOjpJbnNwZWN0
b3JBcnJheUJhc2UoKQogewogfQogCi1SZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckFy
cmF5QmFzZTo6Z2V0KHNpemVfdCBpbmRleCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IElu
c3BlY3RvckFycmF5QmFzZTo6Z2V0KHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IG1fZGF0YS5zaXplKCkpOwogICAgIHJldHVybiBt
X2RhdGFbaW5kZXhdOwogfQogCi1SZWY8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3Rvck9iamVjdCk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JPYmplY3QpOwogfQogCi1SZWY8SW5zcGVj
dG9yQXJyYXk+IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSW5zcGVjdG9yQXJyYXkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQXJy
YXkpOwogfQogCi1SZWY8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHVlOjpudWxsKCkKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHVlOjpudWxsKCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JWYWx1ZSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JWYWx1ZSk7CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHJpbmc+IEluc3BlY3Rv
clN0cmluZzo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpCitQYXNzUmVmUHRyPEluc3BlY3Rv
clN0cmluZz4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHJpbmcodmFsdWUpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0cmluZyh2YWx1ZSkpOwogfQogCi1SZWY8SW5z
cGVjdG9yU3RyaW5nPiBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShjb25zdCBjaGFyKiB2YWx1ZSkK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShjb25z
dCBjaGFyKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHJp
bmcodmFsdWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0cmluZyh2YWx1
ZSkpOwogfQogCi1SZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6
Y3JlYXRlKGJvb2wgdmFsdWUpCitQYXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IEluc3Bl
Y3RvckJhc2ljVmFsdWU6OmNyZWF0ZShib29sIHZhbHVlKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKIH0KIAotUmVmPEluc3BlY3RvckJhc2lj
VmFsdWU+IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShpbnQgdmFsdWUpCitQYXNzUmVmUHRy
PEluc3BlY3RvckJhc2ljVmFsdWU+IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShpbnQgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1
ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkp
OwogfQogCi1SZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3Jl
YXRlKGRvdWJsZSB2YWx1ZSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gSW5zcGVj
dG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKGRvdWJsZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmgKaW5kZXggYmFmZmNiMGI1YjNkY2Y3YTc3MjFjZTRkZTBlYWJlNGFiNDhmOTAzMC4u
Mjk2YWY3ZDdhMTY4YjFlNWQ5ODFkZjNiODYwNzY4YTgzMjliOGM5NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC0zMiw3ICsz
Miw3IEBACiAjaWZuZGVmIEluc3BlY3RvclZhbHVlc19oCiAjZGVmaW5lIEluc3BlY3RvclZhbHVl
c19oCiAKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAg
ICAgICA6IG1fdHlwZShUeXBlOjpOdWxsKSB7IH0KICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JWYWx1
ZSgpIHsgfQogCi0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JWYWx1ZT4gbnVsbCgpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBudWxsKCk7CiAKICAgICBlbnVtIGNsYXNz
IFR5cGUgewogICAgICAgICBOdWxsID0gMCwKQEAgLTk5LDkgKzk5LDkgQEAgcHJpdmF0ZToKIGNs
YXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckJhc2ljVmFsdWUgOiBwdWJsaWMgSW5zcGVj
dG9yVmFsdWUgewogcHVibGljOgogCi0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JCYXNpY1ZhbHVl
PiBjcmVhdGUoYm9vbCk7Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVh
dGUoaW50KTsKLSAgICBzdGF0aWMgUmVmPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShkb3Vi
bGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShi
b29sKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVhdGUo
aW50KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVhdGUo
ZG91YmxlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xlYW4oYm9vbCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIC8vIE51bWJlcnMgZnJvbSB0aGUgZnJvbnRlbmQgYXJlIGFsd2F5cyBwYXJzZWQg
YXMgZG91Ymxlcywgc28gd2UgYWxsb3cKQEAgLTEzOCw4ICsxMzgsOCBAQCBwcml2YXRlOgogCiBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JTdHJpbmcgOiBwdWJsaWMgSW5zcGVjdG9y
VmFsdWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yU3RyaW5nPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JTdHJpbmc+IGNyZWF0ZShj
b25zdCBjaGFyKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5nPiBjcmVh
dGUoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3RyaW5n
PiBjcmVhdGUoY29uc3QgY2hhciopOwogCiAgICAgdmlydHVhbCBib29sIGFzU3RyaW5nKFN0cmlu
ZyYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKIApAQCAtMTc3LDkgKzE3Nyw5IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQpOwogICAgIHZv
aWQgc2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKTsKICAgICB2b2lkIHNldFN0
cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYpOwotICAgIHZv
aWQgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdEJh
c2U+JiYpOwotICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXlCYXNlPiYmKTsKKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4pOworICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPik7CisgICAgdm9p
ZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXlC
YXNlPik7CiAKICAgICBpdGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgY29u
c3RfaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwpAQCAtMTg4LDI1ICsx
ODgsMjMgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wmIG91dHB1dCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXRE
b3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBUJiBvdXRwdXQpIGNvbnN0CiAgICAgewotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOwotICAgICAgICBpZiAoIWdldFZhbHVlKG5h
bWUsIHZhbHVlKSkKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChu
YW1lKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgICAgICByZXR1cm4gdmFsdWUtPmFzRG91YmxlKG91dHB1dCk7CiAgICAgfQogICAgIHRlbXBs
YXRlPGNsYXNzIFQ+IGJvb2wgZ2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7Ci0g
ICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQorICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOworICAgICAgICBpZiAoIXZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIHJldHVybiB2YWx1ZS0+YXNJbnRlZ2VyKG91
dHB1dCk7CiAgICAgfQogCiAgICAgYm9vbCBnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIG91dHB1dCkgY29uc3Q7Ci0gICAgYm9vbCBnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBu
YW1lLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYpIGNvbnN0OwotICAgIGJvb2wgZ2V0QXJyYXko
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JikgY29uc3Q7Ci0gICAg
Ym9vbCBnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4m
KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0
QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3Zl
KGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKQEAgLTIyOSw3ICsyMjcsNyBAQCBwcml2YXRlOgogCiBj
bGFzcyBJbnNwZWN0b3JPYmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0QmFzZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZSgpOworICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlKCk7CiAKICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3RCYXNlOjphc09i
amVjdDsKIApAQCAtMjQ4LDcgKzI0Niw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBJbnNwZWN0b3JP
YmplY3RCYXNlOjpnZXRTdHJpbmc7CiAgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0
T2JqZWN0OwogICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldEFycmF5OwotICAgIHVz
aW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldFZhbHVlOworICAgIHVzaW5nIEluc3BlY3Rvck9i
amVjdEJhc2U6OmdldDsKIAogICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdEJhc2U6OnJlbW92ZTsK
IApAQCAtMjc1LDExICsyNzMsMTEgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcHVzaEludGVnZXIo
aW50KTsKICAgICB2b2lkIHB1c2hEb3VibGUoZG91YmxlKTsKICAgICB2b2lkIHB1c2hTdHJpbmco
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwdXNoVmFsdWUoUmVmUHRyPEluc3BlY3RvclZhbHVl
PiYmKTsKLSAgICB2b2lkIHB1c2hPYmplY3QoUmVmUHRyPEluc3BlY3Rvck9iamVjdEJhc2U+JiYp
OwotICAgIHZvaWQgcHVzaEFycmF5KFJlZlB0cjxJbnNwZWN0b3JBcnJheUJhc2U+JiYpOworICAg
IHZvaWQgcHVzaFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KTsKKyAgICB2b2lkIHB1
c2hPYmplY3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKKyAgICB2b2lkIHB1c2hBcnJh
eShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5Pik7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IGdldChzaXplX3QgaW5kZXgpOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdl
dChzaXplX3QgaW5kZXgpOwogCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWls
ZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0yOTcsNyArMjk1LDcgQEAgcHJpdmF0
ZToKIAogY2xhc3MgSW5zcGVjdG9yQXJyYXkgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXlCYXNlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgUmVmPEluc3BlY3RvckFycmF5
PiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gY3JlYXRlKCk7CiAKICAgICB1c2luZyBJbnNwZWN0b3JBcnJheUJhc2U6OmFz
QXJyYXk7CiAKQEAgLTM0NiwyNCArMzQ0LDI0IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvck9iamVj
dEJhc2U6OnNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsCiAg
ICAgc2V0VmFsdWUobmFtZSwgSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUpKTsKIH0KIAot
aW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBu
YW1lLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0
b3JPYmplY3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgaWYgKG1fZGF0
YS5zZXQobmFtZSwgV1RGOjptb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKKyAgICBpZiAobV9kYXRh
LnNldChuYW1lLCB2YWx1ZSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5hcHBlbmQobmFt
ZSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChjb25z
dCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiYmIHZhbHVlKQoraW5s
aW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiB2YWx1ZSkKIHsKICAgICBBU1NFUlQo
dmFsdWUpOwotICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIFdURjo6bW92ZSh2YWx1ZSkpLmlzTmV3
RW50cnkpCisgICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCiAgICAg
ICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eUJhc2U+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJh
eShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiB2YWx1
ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIFdURjo6
bW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkpCisgICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUp
LmlzTmV3RW50cnkpCiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCkBAIC0zODcs
MjIgKzM4NSwyMiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OnB1c2hTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvclN0cmluZzo6
Y3JlYXRlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEluc3Bl
Y3RvckFycmF5QmFzZTo6cHVzaFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVl
KQogewogICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgbV9kYXRhLmFwcGVuZChXVEY6Om1vdmUodmFs
dWUpKTsKKyAgICBtX2RhdGEuYXBwZW5kKHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVj
dG9yQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiYmIHZh
bHVlKQoraW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIG1f
ZGF0YS5hcHBlbmQoV1RGOjptb3ZlKHZhbHVlKSk7CisgICAgbV9kYXRhLmFwcGVuZCh2YWx1ZSk7
CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaEFycmF5KFJlZlB0cjxJ
bnNwZWN0b3JBcnJheUJhc2U+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JBcnJheUJh
c2U6OnB1c2hBcnJheShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKIHsKICAgICBB
U1NFUlQodmFsdWUpOwotICAgIG1fZGF0YS5hcHBlbmQoV1RGOjptb3ZlKHZhbHVlKSk7CisgICAg
bV9kYXRhLmFwcGVuZCh2YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENv
bnNvbGVDbGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdENvbnNvbGVDbGllbnQuY3BwCmluZGV4IGE3ZmIxMDRmNmE0YTM1MDRjNmRkN2QzM2Rl
ZGY5ZGViNzAyNjlhN2UuLjUwMGFmZTJiOWY2ZmYyNmRlMjUyOTFkODY3ODQxNWUxZjIwY2M3NmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmpl
Y3RDb25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKQEAgLTc1LDE4ICs3NSwxOSBAQCBKU0ds
b2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudChJbnNw
ZWN0b3JDb25zb2xlQWdlbnQqCiAgICAgfSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3RDb25z
b2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNz
YWdlTGV2ZWwgbGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiYmIGFyZ3VtZW50cykKK3ZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjptZXNz
YWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IEpTQzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gcHJwQXJn
dW1lbnRzKQogeworICAgIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cyA9IHBycEFy
Z3VtZW50czsKIAogICAgIGlmIChKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmxvZ1RvU3lz
dGVtQ29uc29sZSgpKQotICAgICAgICBDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdl
V2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBsZXZlbCwgZXhl
YywgYXJndW1lbnRzLmNvcHlSZWYoKSk7CisgICAgICAgIENvbnNvbGVDbGllbnQ6OnByaW50Q29u
c29sZU1lc3NhZ2VXaXRoQXJndW1lbnRzKE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksIHR5cGUs
IGxldmVsLCBleGVjLCBhcmd1bWVudHMpOwogCiAgICAgU3RyaW5nIG1lc3NhZ2U7CiAgICAgYXJn
dW1lbnRzLT5nZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcobWVzc2FnZSk7Ci0gICAgbV9jb25zb2xl
QWdlbnQtPmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlw
ZSwgbGV2ZWwsIG1lc3NhZ2UsIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpKTsKKyAgICBtX2Nv
bnNvbGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJ
LCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgZXhlYywgYXJndW1lbnRzLnJlbGVhc2UoKSk7CiB9CiAK
LXZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpjb3VudChFeGVjU3RhdGUqIGV4ZWMs
IFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQordm9pZCBKU0dsb2JhbE9iamVj
dENvbnNvbGVDbGllbnQ6OmNvdW50KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICAgICBtX2NvbnNvbGVBZ2VudC0+Y291bnQoZXhlYywg
YXJndW1lbnRzKTsKIH0KQEAgLTEwOSwxMCArMTEwLDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3RD
b25zb2xlQ2xpZW50Ojp0aW1lKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB2b2lk
IEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGltZUVuZChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0
YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUoZXhlYywgMSkpOwotICAgIG1fY29u
c29sZUFnZW50LT5zdG9wVGltaW5nKHRpdGxlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSk7CisgICAg
bV9jb25zb2xlQWdlbnQtPnN0b3BUaW1pbmcodGl0bGUsIGNhbGxTdGFjay5yZWxlYXNlKCkpOwog
fQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGltZVN0YW1wKEV4ZWNTdGF0
ZSosIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYpCit2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudDo6dGltZVN0YW1wKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRz
PikKIHsKICAgICAvLyBGSVhNRTogSlNDb250ZXh0IGluc3BlY3Rpb24gbmVlZHMgYSB0aW1lbGlu
ZS4KICAgICB3YXJuVW5pbXBsZW1lbnRlZChBU0NJSUxpdGVyYWwoImNvbnNvbGUudGltZVN0YW1w
IikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdENvbnNvbGVDbGllbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmgKaW5kZXggZTM1ZTliNjAxMGY5ZDg2YWQ0ZWRh
NzM4ZWQzOWEzZWM2MGYzNjU1Yy4uZjRhYjkxZTNkNDVkMjFmNzBmODFiODA1ZDQ2MDFjYmVjMmFl
NDhmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdENvbnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oCkBAIC00MywxNyArNDMsMTcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dUb1N5c3RlbUNvbnNvbGUoKTsKIAog
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNz
YWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxTY3JpcHRBcmd1
bWVudHM+JiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0
ZSosIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6
OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGNvdW50KEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1
bWVudHM+KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvZmlsZShKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwcm9m
aWxlRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIHRpbWUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxl
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdGltZUVuZChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB0aW1lU3RhbXAo
SlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHdhcm5VbmltcGxl
bWVudGVkKGNvbnN0IFN0cmluZyYgbWV0aG9kKTsKLSAgICB2b2lkIGludGVybmFsQWRkTWVzc2Fn
ZShNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+JiYpOworICAgIHZvaWQgaW50ZXJuYWxBZGRNZXNzYWdlKE1lc3NhZ2VUeXBl
LCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVu
dHM+KTsKIAogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVj
dEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGI4YWRlY2IwMzQ5
MjJiM2JkYmYwMGVkNzk5NzdjMzQyNDQ5ZDlkOWQuLmJjOGM0YjEzOThiNDdmNWU4YzQ1OGNhNjIy
N2U5NjRkMjZmOTA2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKQEAgLTIyMiw5ICsyMjIsOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJv
bGxlcjo6ZnJvbnRlbmRJbml0aWFsaXplZCgpCiAjZW5kaWYKIH0KIAotUmVmPFN0b3B3YXRjaD4g
SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQor
UGFzc1JlZlB0cjxTdG9wd2F0Y2g+IEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6
ZXhlY3V0aW9uU3RvcHdhdGNoKCkKIHsKLSAgICByZXR1cm4gbV9leGVjdXRpb25TdG9wd2F0Y2gu
Y29weVJlZigpOworICAgIHJldHVybiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKIH0KIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNw
ZWN0b3JDb250cm9sbGVyLmgKaW5kZXggMmEwMjE4NGFlYWRmOWU3NDcyZGUxNjE1M2EyMDlkYTU0
Yzk0MWE2Ny4uYTYwZDQ3YjI1OTc5MmUwYzQ3ZWUzMGViMWFiMWZkMTFmZjViZWIyMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3Bl
Y3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pT
R2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC05Myw3ICs5Myw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbENhbGxJbmplY3RlZFNjcmlwdEZ1bmN0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgaW50KSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2FsbEluamVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKSBvdmVy
cmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRJbml0aWFsaXplZCgpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgUmVmPFdURjo6U3RvcHdhdGNoPiBleGVjdXRpb25TdG9wd2F0Y2goKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1dGlv
blN0b3B3YXRjaCgpIG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAgICAgdmlydHVhbCBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJD
bGllbnQqIGF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNsaWVudCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fYXVnbWVudGluZ0NsaWVudDsgfSAKQEAgLTExNSw3ICsxMTUsNyBAQCBw
cml2YXRlOgogICAgIEluc3BlY3RvckFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI7Ci0gICAgUmVmPFdURjo6U3RvcHdhdGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKKyAgICBS
ZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IG1fZXhlY3V0aW9uU3RvcHdhdGNoOwogICAgIGJvb2wgbV9p
bmNsdWRlTmF0aXZlQ2FsbFN0YWNrV2l0aEV4Y2VwdGlvbnM7CiAgICAgYm9vbCBtX2lzQXV0b21h
dGljSW5zcGVjdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHRDYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9TY3JpcHRDYWxsRnJhbWUuY3BwCmluZGV4IDI4YzJhZjdlZmQ3OGQyNjllMWFkYWU1MDcwYjE2
N2NhMGI0NDIyMWYuLjdjOTUwZThiOTA3YWIzMWFmM2ZiZjY0MWRmODQwZTU4ZjFmYmU2NmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1l
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFt
ZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgYm9vbCBTY3JpcHRDYWxsRnJhbWU6OmlzRXF1YWwoY29u
c3QgU2NyaXB0Q2FsbEZyYW1lJiBvKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
LVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+IFNjcmlwdENhbGxG
cmFtZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdAorUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+IFNjcmlwdENhbGxGcmFtZTo6YnVpbGRJbnNw
ZWN0b3JPYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
b25zb2xlOjpDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRGdW5jdGlvbk5hbWUobV9m
dW5jdGlvbk5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHRDYWxsRnJhbWUuaAppbmRleCAwMTdkZGQwYjRhZGM1MGNkMGVmNDgyOTRiMTAyMGM5ODdlNzAw
YmEwLi42YTljZDc3ZjBhMjIwNmIwMmJmZmVkMzA2OWI4NmIyODc2ZTFlMTBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxGcmFtZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbEZyYW1lLmgKQEAgLTU0
LDcgKzU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFcXVhbChjb25zdCBTY3JpcHRDYWxsRnJh
bWUmKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25z
dDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFt
ZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suY3Bw
CmluZGV4IGFhNDUyYWQ3MGRhMmY2YmIzNmI5NDdiYjhiOGI0MmUzMzg1MzJiNjkuLjZmODFhNThl
ZGZjY2IzYTU1YmFhZWM0M2EyMzU3ODI5YWVkNTdkYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5jcHAKQEAgLTM2LDE0ICszNiwx
NCBAQAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotUmVmPFNjcmlwdENhbGxTdGFjaz4gU2Ny
aXB0Q2FsbFN0YWNrOjpjcmVhdGUoKQorUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IFNjcmlw
dENhbGxTdGFjazo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JpcHRD
YWxsU3RhY2spOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NyaXB0Q2FsbFN0YWNrKTsKIH0K
IAotUmVmPFNjcmlwdENhbGxTdGFjaz4gU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoVmVjdG9yPFNj
cmlwdENhbGxGcmFtZT4mIGZyYW1lcykKK1Bhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBTY3Jp
cHRDYWxsU3RhY2s6OmNyZWF0ZShWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiYgZnJhbWVzKQogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcmlwdENhbGxTdGFjayhmcmFtZXMpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNjcmlwdENhbGxTdGFjayhmcmFtZXMpKTsKIH0KIAogU2NyaXB0
Q2FsbFN0YWNrOjpTY3JpcHRDYWxsU3RhY2soKQpAQCAtMTA3LDEyICsxMDcsMTIgQEAgYm9vbCBT
Y3JpcHRDYWxsU3RhY2s6OmlzRXF1YWwoU2NyaXB0Q2FsbFN0YWNrKiBvKSBjb25zdAogfQogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBTY3JpcHRDYWxsU3RhY2s6OmJ1
aWxkSW5zcGVjdG9yQXJyYXkoKSBjb25zdAorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBTY3JpcHRD
YWxsU3RhY2s6OmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSBjb25zdAogewotICAgIGF1dG8gZnJhbWVz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNhbGxGcmFtZT4+IGZyYW1lcyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6
OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFt
ZXMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGZyYW1lcy0+YWRkSXRlbShtX2ZyYW1lcy5hdChpKS5i
dWlsZEluc3BlY3Rvck9iamVjdCgpKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKGZyYW1lcyk7Cisg
ICAgcmV0dXJuIGZyYW1lczsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaAppbmRleCA2ZGI3ZGU4NjYyOGRjOWY4Zjlj
MzUzMGMwMmY0MDUyZTZlMzc0ZTMxLi42M2UzY2UxMzdhZWU3NzRmMjA5ZTk3OTg5M2IwNTRlNTJh
MmEwMGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1Njcmlw
dENhbGxTdGFjay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0
Q2FsbFN0YWNrLmgKQEAgLTQ3LDggKzQ3LDggQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgU2Ny
aXB0Q2FsbFN0YWNrIDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0Q2FsbFN0YWNrPiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlID0g
MjAwOwogICAgIAotICAgIHN0YXRpYyBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGUoKTsKLSAg
ICBzdGF0aWMgUmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlKFZlY3RvcjxTY3JpcHRDYWxsRnJh
bWU+Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGUoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZShWZWN0b3I8U2Ny
aXB0Q2FsbEZyYW1lPiYpOwogCiAgICAgflNjcmlwdENhbGxTdGFjaygpOwogCkBAIC02Miw3ICs2
Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXF1YWwoU2NyaXB0Q2FsbFN0YWNrKikgY29uc3Q7
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBidWlsZEluc3Bl
Y3RvckFycmF5KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDYWxsRnJhbWU+PiBidWlsZEluc3Bl
Y3RvckFycmF5KCkgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcApp
bmRleCA0ZjY5NWE3NWJhMDFiYjQxMzQyM2QxNTQxYTE0MDhhYmY2M2U3ZTVhLi43NjVhZjk5OWUy
ODVhN2Q2NTg5N2E4YzJlMTdiNWE3OGNmMTUwOWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC03
Miw3ICs3Miw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAg
ICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJz
dCkKLSAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdC5jb3B5UmVmKCks
IG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZC5jb3B5UmVmKCkpOworICAgICAgICBpbnNwZWN0
KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LCBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQp
OwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYg
KG1fcGVuZGluZ0V4dHJhRG9tYWluc0RhdGEpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSW5zcGVj
dG9yQWdlbnQ6OmluaXRpYWxpemVkKEVycm9yU3RyaW5nJikKICAgICBtX2Vudmlyb25tZW50LmZy
b250ZW5kSW5pdGlhbGl6ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdChS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiBvYmplY3RUb0luc3BlY3Qs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGludHMpCit2b2lkIEluc3BlY3RvckFnZW50Ojpp
bnNwZWN0KFBhc3NSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0
VG9JbnNwZWN0LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGludHMpCiB7CiAgICAgaWYg
KG1fZW5hYmxlZCAmJiBtX2Zyb250ZW5kRGlzcGF0Y2hlcikgewogICAgICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+aW5zcGVjdChvYmplY3RUb0luc3BlY3QsIGhpbnRzKTsKQEAgLTEzMCw5ICsx
MzAsOSBAQCB2b2lkIEluc3BlY3RvckFnZW50OjphY3RpdmF0ZUV4dHJhRG9tYWluKGNvbnN0IFN0
cmluZyYgZG9tYWluTmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBkb21haW5OYW1lcyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBkb21haW5OYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgIGRvbWFpbk5hbWVzLT5hZGRJdGVtKGRv
bWFpbk5hbWUpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5hY3RpdmF0ZUV4dHJhRG9tYWlu
cyhXVEY6Om1vdmUoZG9tYWluTmFtZXMpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+YWN0
aXZhdGVFeHRyYURvbWFpbnMoZG9tYWluTmFtZXMucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6YWN0aXZhdGVFeHRyYURvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4
dHJhRG9tYWlucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDczMGRjZTYzMGE3OGU4ODFhMTc0YjIwNDNh
NDRiY2RmMmI5OGVmMGMuLmM5MGUyNDJkOGMxOWM2YzNlMGQ2Zjg5ODE3NTMyM2RjNTRiOTU4YWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQWdlbnQuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgaW5p
dGlhbGl6ZWQoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5zcGVjdChSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiBvYmplY3RUb0luc3BlY3QsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgaGludHMpOworICAgIHZvaWQgaW5zcGVjdChQYXNzUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IG9iamVjdFRvSW5zcGVjdCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKTsKICAgICB2b2lkIGV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3Bw
CmluZGV4IDAzYmQ0OGFlMDYyYmU0Yjk4MjZkNjEyYzU1MjIzY2E3NDQyY2E0ODMuLjQ3YWJkZmQ2
OTQ0ODRiMDIwZjA2ODhmMGJlZTgzNzQ1YWIxNjE4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuY3BwCkBAIC0xNDEsMTYgKzE0MSwxNiBAQCBib29sIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmlzUGF1c2VkKCkKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29u
c29sZUFzc2VydChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHNjcmlwdERlYnVn
U2VydmVyKCkucGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpICE9IEpTQzo6RGVidWdnZXI6OkRvbnRQ
YXVzZU9uRXhjZXB0aW9ucykgewotICAgICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkFzc2VydFBhdXNlUmVhc29uPiByZWFzb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6QXNzZXJ0UGF1c2VSZWFzb246OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpBc3NlcnRQYXVzZVJlYXNvbj4g
cmVhc29uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkFzc2VydFBhdXNlUmVhc29u
OjpjcmVhdGUoKTsKICAgICAgICAgaWYgKCFtZXNzYWdlLmlzTnVsbCgpKQogICAgICAgICAgICAg
cmVhc29uLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOwogICAgICAgICBicmVha1Byb2dyYW0oSW5zcGVj
dG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QXNzZXJ0LCByZWFzb24tPm9w
ZW5BY2Nlc3NvcnMoKSk7CiAgICAgfQogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvck9iamVjdD4g
YnVpbGRPYmplY3RGb3JCcmVha3BvaW50Q29va2llKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGlu
ZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4mIGFjdGlvbnMsIGJvb2wgaXNSZWdleCwgYm9vbCBhdXRvQ29udGlu
dWUpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQnJl
YWtwb2ludENvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1
bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
JiBhY3Rpb25zLCBib29sIGlzUmVnZXgsIGJvb2wgYXV0b0NvbnRpbnVlKQogewotICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInVybCIpLCB1cmwpOwogICAgIGJyZWFrcG9pbnRPYmplY3QtPnNldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJsaW5lTnVtYmVyIiksIGxpbmVOdW1iZXIpOwogICAgIGJyZWFrcG9p
bnRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2x1bW5OdW1iZXIiKSwgY29sdW1u
TnVtYmVyKTsKQEAgLTIzOSw3ICsyMzksNyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKEVycm9yU3RyaW5nJiBlcnJvclN0cgogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFr
cG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFs
VVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+PiYgbG9jYXRpb25zKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVh
a3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25h
bFVSTFJlZ2V4LCBjb25zdCBpbnQqIGNvbnN0IG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+PiYgbG9jYXRpb25zKQogewogICAgIGxvY2F0aW9ucyA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0
ZSgpOwogICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKQEAgLTI2
MSw5ICsyNjEsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRC
eVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaQogICAgIGJvb2wgYXV0b0NvbnRp
bnVlID0gZmFsc2U7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zOwogICAgIGlm
IChvcHRpb25zKSB7Ci0gICAgICAgIG9wdGlvbnMtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNv
bmRpdGlvbiIpLCBjb25kaXRpb24pOwotICAgICAgICBvcHRpb25zLT5nZXRCb29sZWFuKEFTQ0lJ
TGl0ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGF1dG9Db250aW51ZSk7Ci0gICAgICAgIG9wdGlvbnMt
PmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpLCBhY3Rpb25zKTsKKyAgICAgICAgKCpv
cHRpb25zKS0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uZGl0aW9uIiksIGNvbmRpdGlvbik7
CisgICAgICAgICgqb3B0aW9ucyktPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29udGlu
dWUiKSwgYXV0b0NvbnRpbnVlKTsKKyAgICAgICAgYWN0aW9ucyA9ICgqb3B0aW9ucyktPmdldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpKTsKICAgICB9CiAKICAgICBCcmVha3BvaW50QWN0
aW9ucyBicmVha3BvaW50QWN0aW9uczsKQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBsaQogCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkZW50
aWZpZXIsIGl0LT5rZXksIGJyZWFrcG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCi0gICAg
ICAgICAgICBsb2NhdGlvbnMtPmFkZEl0ZW0oV1RGOjptb3ZlKGxvY2F0aW9uKSk7CisgICAgICAg
ICAgICBsb2NhdGlvbnMtPmFkZEl0ZW0obG9jYXRpb24pOwogICAgIH0KICAgICAqb3V0QnJlYWtw
b2ludElkZW50aWZpZXIgPSBicmVha3BvaW50SWRlbnRpZmllcjsKIH0KQEAgLTMwMCw3ICszMDAs
NyBAQCBzdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
SW5zcGVjdG9yT2JqZWN0JiBsb2NhdGlvbiwgSgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9uLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlvbnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pCit2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvcHRpb25zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQog
ewogICAgIEpTQzo6U291cmNlSUQgc291cmNlSUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsK
QEAgLTMxMiw5ICszMTIsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdAogICAgIGJvb2wgYXV0
b0NvbnRpbnVlID0gZmFsc2U7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zOwog
ICAgIGlmIChvcHRpb25zKSB7Ci0gICAgICAgIG9wdGlvbnMtPmdldFN0cmluZyhBU0NJSUxpdGVy
YWwoImNvbmRpdGlvbiIpLCBjb25kaXRpb24pOwotICAgICAgICBvcHRpb25zLT5nZXRCb29sZWFu
KEFTQ0lJTGl0ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGF1dG9Db250aW51ZSk7Ci0gICAgICAgIG9w
dGlvbnMtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpLCBhY3Rpb25zKTsKKyAgICAg
ICAgKCpvcHRpb25zKS0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uZGl0aW9uIiksIGNvbmRp
dGlvbik7CisgICAgICAgICgqb3B0aW9ucyktPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRv
Q29udGludWUiKSwgYXV0b0NvbnRpbnVlKTsKKyAgICAgICAgYWN0aW9ucyA9ICgqb3B0aW9ucykt
PmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpKTsKICAgICB9CiAKICAgICBCcmVha3Bv
aW50QWN0aW9ucyBicmVha3BvaW50QWN0aW9uczsKQEAgLTM1MCw3ICszNTAsNyBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGJyZWFrcAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIGxvY2F0aW9uKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24pCiB7CiAgICAgaWYgKG1fY29udGludWVU
b0xvY2F0aW9uQnJlYWtwb2ludElEICE9IEpTQzo6bm9CcmVha3BvaW50SUQpIHsKICAgICAgICAg
c2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0aW9u
QnJlYWtwb2ludElEKTsKQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
CiAgICAgcmVzdW1lKGVycm9yU3RyaW5nKTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllciwgSlNDOjpTb3VyY2VJ
RCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2ludCkKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVu
dGlmaWVyLCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBi
cmVha3BvaW50KQogewogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0g
bV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwogICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3Nj
cmlwdHMuZW5kKCkpCkBAIC0zODgsMTIgKzM4OCwxMSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZl
QgogICAgICAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNJdGVyYXRvciA9IG1fYnJlYWtwb2lu
dElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEcy5zZXQoYnJlYWtwb2ludElkZW50
aWZpZXIsIFZlY3RvcjxKU0M6OkJyZWFrcG9pbnRJRD4oKSkuaXRlcmF0b3I7CiAgICAgZGVidWdT
ZXJ2ZXJCcmVha3BvaW50SURzSXRlcmF0b3ItPnZhbHVlLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJRCk7CiAKLSAgICBhdXRvIGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2NyaXB0SWQoU3RyaW5nOjpu
dW1iZXIoc291cmNlSUQpKQotICAgICAgICAuc2V0TGluZU51bWJlcihhY3R1YWxMaW5lTnVtYmVy
KQotICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAuc2V0TGluZU51bWJlcihhY3R1YWxMaW5l
TnVtYmVyKTsKICAgICBsb2NhdGlvbi0+c2V0Q29sdW1uTnVtYmVyKGFjdHVhbENvbHVtbk51bWJl
cik7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShsb2NhdGlvbik7CisgICAgcmV0dXJuIGxvY2F0aW9u
OwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJv
clN0cmluZyYgZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SURTdHIsIGNvbnN0IFN0cmluZyYg
cXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0
aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQpAQCAtNDMx
LDEzICs0MzAsMTMgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlvbkRl
dGFpbHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIGluamVjdGVkU2NyaXB0
LmdldEZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgJmRldGFpbHMpOwog
fQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0
ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1Jl
YXNvbiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhKQordm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2Vy
RnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkYXRhKQogewogICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9icmVha1JlYXNvbiA9IGJyZWFrUmVhc29uOwotICAg
IG1fYnJlYWtBdXhEYXRhID0gV1RGOjptb3ZlKGRhdGEpOworICAgIG1fYnJlYWtBdXhEYXRhID0g
ZGF0YTsKICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnNldFBhdXNlT25OZXh0U3RhdGVtZW50KHRy
dWUpOwogfQogCkBAIC01NDUsMTQgKzU0NCwxMiBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldE92ZXJsYXlNZXNzYWdlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKikKIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQKGNvbnN0
IFN0cmluZyYgZGlyZWN0aXZlVGV4dCkKIHsKICAgICBpZiAoc2NyaXB0RGVidWdTZXJ2ZXIoKS5w
YXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkgIT0gSlNDOjpEZWJ1Z2dlcjo6RG9udFBhdXNlT25FeGNl
cHRpb25zKSB7Ci0gICAgICAgIGF1dG8gcmVhc29uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkNTUFZpb2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNl
dERpcmVjdGl2ZShkaXJlY3RpdmVUZXh0KQotICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDU1BWaW9sYXRpb25QYXVz
ZVJlYXNvbj4gcmVhc29uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNTUFZpb2xh
dGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKS5zZXREaXJlY3RpdmUoZGlyZWN0aXZlVGV4dCk7CiAg
ICAgICAgIGJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6
UmVhc29uOjpDU1BWaW9sYXRpb24sIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpKTsKICAgICB9CiB9
CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxG
cmFtZXMoKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
Y3VycmVudENhbGxGcmFtZXMoKQogewogICAgIGlmICghbV9wYXVzZWRTY3JpcHRTdGF0ZSkKICAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKQEAgLTYwOSw4ICs2MDYsNyBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQg
c291cmNlSUQsIGNvbnN0IFNjcmlwdAogICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJjb25kaXRpb24iKSwgYnJlYWtwb2ludC5jb25kaXRpb24pOwogICAg
ICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiYXV0b0NvbnRp
bnVlIiksIGJyZWFrcG9pbnQuYXV0b0NvbnRpbnVlKTsKICAgICAgICAgRXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYWN0aW9uczsKLSAgICAg
ICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhY3Rpb25zIiksIGFj
dGlvbnMpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFjdGlvbnMgPSBicmVha3Bv
aW50T2JqZWN0LT5nZXRBcnJheShBU0NJSUxpdGVyYWwoImFjdGlvbnMiKSk7CiAgICAgICAgIGlm
ICghYnJlYWtwb2ludEFjdGlvbnNGcm9tUHJvdG9jb2woZXJyb3JTdHJpbmcsIGFjdGlvbnMsICZi
cmVha3BvaW50LmFjdGlvbnMpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjY5LDE1ICs2NjUsMTQgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUqIHNj
cmlwdFN0YXRlLAogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcGF5bG9hZCA9IGluamVjdGVk
U2NyaXB0LndyYXBPYmplY3Qoc2FtcGxlLCBvYmplY3RHcm91cEZvckJyZWFrcG9pbnRBY3Rpb24o
YWN0aW9uKSk7Ci0gICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6RGVidWdnZXI6OlByb2JlU2Ft
cGxlOjpjcmVhdGUoKQorICAgIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OlByb2JlU2FtcGxl
PiByZXN1bHQgPSBQcm90b2NvbDo6RGVidWdnZXI6OlByb2JlU2FtcGxlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0UHJvYmVJZChhY3Rpb24uaWRlbnRpZmllcikKICAgICAgICAgLnNldEJhdGNoSWQo
YmF0Y2hJZCkKICAgICAgICAgLnNldFNhbXBsZUlkKHNhbXBsZUlkKQogICAgICAgICAuc2V0VGlt
ZXN0YW1wKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmV4
ZWN1dGlvblN0b3B3YXRjaCgpLT5lbGFwc2VkVGltZSgpKQotICAgICAgICAuc2V0UGF5bG9hZChw
YXlsb2FkLnJlbGVhc2UoKSkKLSAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgLnNldFBheWxv
YWQocGF5bG9hZC5yZWxlYXNlKCkpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRpZFNh
bXBsZVByb2JlKFdURjo6bW92ZShyZXN1bHQpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
ZGlkU2FtcGxlUHJvYmUocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQpAQCAtNjkyLDEwICs2ODcsMTAgQEAgdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnJlc3VtZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1By
b2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1Jl
YXNvbiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBkYXRhKQordm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNo
ZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEp
CiB7CiAgICAgbV9icmVha1JlYXNvbiA9IGJyZWFrUmVhc29uOwotICAgIG1fYnJlYWtBdXhEYXRh
ID0gV1RGOjptb3ZlKGRhdGEpOworICAgIG1fYnJlYWtBdXhEYXRhID0gZGF0YTsKICAgICBzY3Jp
cHREZWJ1Z1NlcnZlcigpLmJyZWFrUHJvZ3JhbSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgKaW5kZXggOWE3NGNjNTUyNDhhZjNmN2ZkYWZiMjZhZTMwNGY0MDcxNWVkYWRjOS4u
MGFlNzMzMWE2Yzk2MDJlZjAzMGY2OTAyYTM4M2JlNGRiNTRmYzM0OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTczLDEwICs3NCwxMCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJp
bmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb3B0aW9ucywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+
PiYgbG9jYXRpb25zKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludChF
cnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBs
b2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9wdGlv
bnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24p
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJp
bmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRpb25zLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+
JiBsb2NhdGlvbnMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgbG9j
YXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllcikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbG9jYXRpb24pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb250
aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgbG9jYXRpb24pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
SXNSZWdleCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNjcmlw
dElELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdl
dEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+Jikg
b3ZlcnJpZGU7CkBAIC05Myw5ICs5NCw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGhhbmRs
ZUNvbnNvbGVBc3NlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAotICAgIHZvaWQgc2NoZWR1
bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hl
cjo6UmVhc29uIGJyZWFrUmVhc29uLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEpOwor
ICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZy
b250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSk7CiAgICAgdm9pZCBjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOwot
ICAgIHZvaWQgYnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
OjpSZWFzb24gYnJlYWtSZWFzb24sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSk7Cisg
ICAgdm9pZCBicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwog
ICAgIHZvaWQgc2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQKGNvbnN0IFN0cmluZyYgZGlyZWN0
aXZlVGV4dCk7CiAKICAgICBjbGFzcyBMaXN0ZW5lciB7CkBAIC0xMzEsNyArMTMyLDcgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgZGlkQ2xlYXJHbG9iYWxPYmplY3QoKTsKIAogcHJpdmF0ZToKLSAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkNhbGxGcmFtZT4+IGN1cnJlbnRDYWxsRnJhbWVzKCk7CisgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lPj4gY3VycmVudENhbGxGcmFtZXMoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXJzZVNvdXJjZShKU0M6OlNvdXJjZUlELCBjb25zdCBTY3JpcHQmKSBvdmVycmlkZSBmaW5hbDsK
ICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSkgb3ZlcnJpZGUgZmluYWw7CkBAIC0xMzksNyArMTQwLDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYnJlYWtwb2ludEFjdGlvblNvdW5kKGludCBicmVh
a3BvaW50QWN0aW9uSWRlbnRpZmllcikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGJyZWFr
cG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRB
Y3Rpb24mLCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25lZCBzYW1wbGVJZCwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBsZSkgb3ZlcnJpZGUgZmluYWw7CiAKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiByZXNvbHZlQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBKU0M6OlNvdXJjZUlELCBjb25z
dCBTY3JpcHRCcmVha3BvaW50Jik7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludElkZW50aWZpZXIsIEpTQzo6U291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQm
KTsKICAgICBib29sIGFzc2VydFBhdXNlZChFcnJvclN0cmluZyYpOwogICAgIHZvaWQgY2xlYXJE
ZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpOwogICAgIHZvaWQgY2xlYXJJbnNwZWN0b3JCcmVha3Bv
aW50U3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4IGEzOTQxZDNj
MTVhM2FmOGM4YzZkYzMzODIyMjUwMGYzNGI2ZjEwZTkuLjYzMmRlZjMyNzY4NWU3MDA5OTU1YjRh
NjM2MDg1MzZkMTA4NjUwNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAt
ODAsMTIgKzgwLDEyIEBAIHN0YXRpYyBTY3JpcHREZWJ1Z1NlcnZlcjo6UGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFNjcmlwCiAgICAgcmV0dXJuIHByZXNl
bnRTdGF0ZTsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpF
cnJvclJhbmdlPiBidWlsZEVycm9yUmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiB0
b2tlbkxvY2F0aW9uKQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgdG9rZW5Mb2NhdGlvbikKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RXJyb3JSYW5nZTo6Y3JlYXRlKCkKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RXJyb3JSYW5nZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXJ0T2Zmc2V0KHRv
a2VuTG9jYXRpb24uc3RhcnRPZmZzZXQpCi0gICAgICAgIC5zZXRFbmRPZmZzZXQodG9rZW5Mb2Nh
dGlvbi5lbmRPZmZzZXQpCi0gICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIC5zZXRFbmRPZmZz
ZXQodG9rZW5Mb2NhdGlvbi5lbmRPZmZzZXQpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCiB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN5
bnRheEVycm9yVHlwZSogcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3Ry
aW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9y
UmFuZ2U+JiByYW5nZSkKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4
cAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9u
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiYgb3B0aW9u
YWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCog
Z2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4q
IHdhc1Rocm93bikKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogY29uc3Qgb3B0
aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9v
bCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9v
bD4qIHdhc1Rocm93bikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElk
KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC0xNDcsNyArMTQ3
LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KIAogICAgIFN0cmluZyBhcmd1bWVudHM7CiAg
ICAgaWYgKG9wdGlvbmFsQXJndW1lbnRzKQotICAgICAgICBhcmd1bWVudHMgPSBvcHRpb25hbEFy
Z3VtZW50cy0+dG9KU09OU3RyaW5nKCk7CisgICAgICAgIGFyZ3VtZW50cyA9ICgqb3B0aW9uYWxB
cmd1bWVudHMpLT50b0pTT05TdHJpbmcoKTsKIAogICAgIFNjcmlwdERlYnVnU2VydmVyOjpQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlIHByZXZpb3VzUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IFNjcmlw
dERlYnVnU2VydmVyOjpEb250UGF1c2VPbkV4Y2VwdGlvbnM7CiAgICAgaWYgKGFzQm9vbChkb05v
dFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpKQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZv
aWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpydW4oRXJyb3JTdHJpbmcmKQogewogfQogCi12b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZz
ZXRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+JiYgbG9jYXRpb25zLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4mIHR5cGVE
ZXNjcmlwdGlvbnMpCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVz
Rm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVz
Y3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykKIHsKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiAgICAgVk0mIHZtID0gZ2xvYmFsVk0oKTsKQEAgLTIzNyw5ICsyMzcs
OCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFi
bGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcgogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBp
c1ZhbGlkID0gdHlwZUxvY2F0aW9uICYmIHR5cGVTZXQgJiYgIXR5cGVTZXQtPmlzRW1wdHkoKTsK
LSAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlR5cGVEZXNjcmlwdGlvbjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRJc1ZhbGlkKGlzVmFs
aWQpCi0gICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbiA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbjo6Y3JlYXRlKCkKKyAgICAgICAg
ICAgIC5zZXRJc1ZhbGlkKGlzVmFsaWQpOwogCiAgICAgICAgIGlmIChpc1ZhbGlkKSB7CiAgICAg
ICAgICAgICBkZXNjcmlwdGlvbi0+c2V0TGVhc3RDb21tb25BbmNlc3Rvcih0eXBlU2V0LT5sZWFz
dENvbW1vbkFuY2VzdG9yKCkpOwpAQCAtMjQ4LDcgKzI0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yUnVu
dGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJp
bmcmIGVyCiAgICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0SXNUcnVuY2F0ZWQodHlwZVNldC0+
aXNPdmVyZmxvd24oKSk7CiAgICAgICAgIH0KIAotICAgICAgICB0eXBlRGVzY3JpcHRpb25zLT5h
ZGRJdGVtKFdURjo6bW92ZShkZXNjcmlwdGlvbikpOworICAgICAgICB0eXBlRGVzY3JpcHRpb25z
LT5hZGRJdGVtKGRlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBkb3VibGUgZW5kID0gY3VycmVu
dFRpbWVNUygpOwpAQCAtMzMyLDEyICszMzEsMTEgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4K
ICAgICBjb25zdCBWZWN0b3I8QmFzaWNCbG9ja1JhbmdlPiYgYmFzaWNCbG9ja1JhbmdlcyA9IHZt
LmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NGb3JTb3VyY2VJRChzb3VyY2VJ
RCwgdm0pOwogICAgIGJhc2ljQmxvY2tzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0ZSgpOwogICAgIGZv
ciAoY29uc3QgQmFzaWNCbG9ja1JhbmdlJiBibG9jayA6IGJhc2ljQmxvY2tSYW5nZXMpIHsKLSAg
ICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+IGxvY2F0
aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jazo6Y3JlYXRlKCkK
KyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+
IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jazo6Y3Jl
YXRlKCkKICAgICAgICAgICAgIC5zZXRTdGFydE9mZnNldChibG9jay5tX3N0YXJ0T2Zmc2V0KQog
ICAgICAgICAgICAgLnNldEVuZE9mZnNldChibG9jay5tX2VuZE9mZnNldCkKLSAgICAgICAgICAg
IC5zZXRIYXNFeGVjdXRlZChibG9jay5tX2hhc0V4ZWN1dGVkKQotICAgICAgICAgICAgLnJlbGVh
c2UoKTsKLSAgICAgICAgYmFzaWNCbG9ja3MtPmFkZEl0ZW0oV1RGOjptb3ZlKGxvY2F0aW9uKSk7
CisgICAgICAgICAgICAuc2V0SGFzRXhlY3V0ZWQoYmxvY2subV9oYXNFeGVjdXRlZCk7CisgICAg
ICAgIGJhc2ljQmxvY2tzLT5hZGRJdGVtKGxvY2F0aW9uKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmgKaW5kZXggMmUwMjhhMTlhOTg5Mjg2MGFkZmQxODIxNzMyOThlOGY3
NDQ3MjlmNi4uZTVkNzNlMGI5ZGI3ODk2ZTMyNzU2OTM3MjlkMzQ0ZjExNmMyNTVmOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yUnVudGltZUFnZW50LmgKQEAgLTYzLDEyICs2MywxMiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9
IGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJv
clR5cGUqIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG1l
c3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiYp
IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29u
c3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBj
b25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlk
ZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIG9wdGlvbmFsQXJndW1lbnRzLCBjb25z
dCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wq
IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pIG92ZXJyaWRlIGZpbmFsOwor
ICAgIHZpcnR1YWwgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZh
bHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFs
IHZvaWQgcmVsZWFzZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IEVycm9yU3RyaW5nJiBvYmpl
Y3RJZCkgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0
aWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFs
UHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgb3ZlcnJpZGUgZmluYWw7
CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXApIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBy
dW4oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UnVudGltZVR5
cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgbG9jYXRpb25zLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9u
Pj4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFi
bGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXk+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBlbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRCYXNpY0Jsb2NrcyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgaW5fc291cmNlSUQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4mIG91dF9iYXNp
Y0Jsb2Nrcykgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQppbmRleCBi
YTQ5MTBkOTg0YjJiYTE3ZTkzNjBiZjAwNDk5YWMzMWViMDU5ZjE0Li5hODNlMmZhNjk4MTRkN2Y0
ZjA5M2NiNDg2MTA0MDU0M2IwNzY2MTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Iu
cHkKQEAgLTExNiwxMSArMTE2LDEyIEBAIGNsYXNzIENwcEdlbmVyYXRvcjoKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgogICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5w
cmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0aXZlLgogCisgICAgICAgIHNp
Z2lsID0gJyonIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICcmJwogICAgICAgICAjIFRo
aXMgaGFuZGxlcyB0aGUgJ2FueScgdHlwZSBhbmQgb2JqZWN0cyB3aXRoIGRlZmluZWQgcHJvcGVy
dGllcy4KICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSBpcyAnb2JqZWN0JzoKLSAgICAgICAgICAgIHJldHVybiAnY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmJworICAgICAgICAgICAgcmV0dXJu
ICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JyArIHNpZ2lsCiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4g
J2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmJworICAgICAgICAgICAg
cmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4nICsgc2lnaWwK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAg
ICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5
cGUpCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CkBAIC0xNDMsNyArMTQ0
LDcgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3Bw
X3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0eXBlX25hbWUsIGlzX29wdGlvbmFsKToK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgot
ICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9j
b2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjwl
cz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQogICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CiAgICAgICAgICAgICBidWls
ZGVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUp
CiAgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKQEAgLTE1Nyw5ICsxNTgsOSBAQCBjbGFzcyBD
cHBHZW5lcmF0b3I6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
OgogICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQogICAgICAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBbJ29iamVjdCddOgotICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PicKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JwogICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpIGluIFsnYW55J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4nCisgICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JwogICAgICAgICAgICAgZWxpZiBpc19vcHRp
b25hbDoKICAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBfbmFt
ZQogICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106
CkBAIC0yMTEsNyArMjEyLDcgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yOgogICAgICAgICAgICAgX3R5
cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCiAKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAg
cmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlKF90eXBlKQorICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBDcHBH
ZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgogICAgICAgICAgICAgY3BwX25hbWUgPSBD
cHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQogICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgpAQCAtMjk2LDkgKzI5Nyw1IEBAIGNsYXNzIENw
cEdlbmVyYXRvcjoKICAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlU
eXBlLCBPYmplY3RUeXBlKSkKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3Vz
ZV9yZWZlcmVuY2VzX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZShfdHlwZSwgKFBy
aW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbImFueSIsICJvYmpl
Y3QiXSkKLQotICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgc2hvdWxkX3Bhc3NfYnlfY29weV9m
b3JfcmV0dXJuX3R5cGUoX3R5cGUpOgogICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShfdHlwZSwg
KEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAoUHJpbWl0aXZl
VHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmplY3QiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCA0ZjNjMGMyOTVh
ZjVkYmJhMTUzNTllMjcyY2RmNjYwYjQ0ZjkxY2E4Li5lMDQ4ODQyYmZjNWI2Y2Q4MmJkNTQ4OTY3
NjMyODc3YmQwOWVhZTEyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weQpAQCAtNzYsMTAgKzc2LDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0g
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3Bh
dGNoZXIpOyB9Ci0gICAgY29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hl
cjsgfQorICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0g
ICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKIH07CiAiIiIpCiAKQEAgLTEwOCwxMSArMTA4LDExIEBAIHByb3RlY3RlZDoKICAgICBCYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKICAgICAi
IiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
IG92ZXJyaWRlOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3Zl
cnJpZGU7CiAke2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRlOgotICAgIEluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyJiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0xMjUsMTMgKzEyNSwxMyBAQCBwcml2YXRl
OgogICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24gPSAo
CiAgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxsYmFja05hbWV9IDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7
CiAgICAgcHVibGljOgotICAgICAgICAke2NhbGxiYWNrTmFtZX0oUmVmPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgICR7Y2FsbGJhY2tO
YW1lfShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBp
bnQgaWQpOwogICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKCR7b3V0UGFyYW1ldGVyc30pOwogICAg
IH07CiAgICAgdmlydHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7aW5QYXJhbWV0ZXJzfSkgPSAw
OyIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCA9
ICgKLSAgICAiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9y
T2JqZWN0PiYmIG1lc3NhZ2UpCisgICAgIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKQEAg
LTE0MSw3ICsxNDEsNyBAQCAke2Rpc3BhdGNoQ2FzZXN9CiB9IiIiKQogCiAgICAgQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKAotIiIidm9pZCBJbnNwZWN0b3Ik
e2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQorIiIidm9p
ZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1lc3NhZ2UpCiB7CiAgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKQEAgLTE2NiwxNiArMTY2LDE2IEBAICR7ZGlzcGF0Y2hD
YXNlc30KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+dmFsdWUp
KGNhbGxJZCwgbWVzc2FnZS5nZXQoKSk7CisgICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElk
LCAqbWVzc2FnZS5nZXQoKSk7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkRvbWFpbkNvbnN0cnVjdG9yID0gKAotICAgICIiIlJlZjxJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0
Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdl
bnQpCisgICAgIiIiUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI+IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKCpi
YWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdl
bnQpKTsKIH0KIAotSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlcjo6SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNwZWN0b3JTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICAsIG1fYWdl
bnQoYWdlbnQpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBA
IC0xODYsMjUgKzE4NiwyNiBAQCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXI6Okluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcgogfSIiIikKIAogICAg
IEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9
ICgKLSIiIiAgICBhdXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyOwotICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiks
IHBhcmFtc0NvbnRhaW5lcik7CisiIiIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwo
InBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CiAg
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBX
VEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogIiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKLSIiIkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFJl
ZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlk
KSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShX
VEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CisiIiJJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxiYWNrTmFtZX06OiR7Y2FsbGJh
Y2tOYW1lfShQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlz
cGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQogCiB2b2lkIEluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6
c2VuZFN1Y2Nlc3MoJHtmb3JtYWxQYXJhbWV0ZXJzfSkKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogJHtvdXRQYXJhbWV0ZXJBc3NpZ25tZW50c30KLSAgICBzZW5kSWZBY3RpdmUoV1RGOjptb3Zl
KGpzb25NZXNzYWdlKSwgRXJyb3JTdHJpbmcoKSk7CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNz
YWdlLCBFcnJvclN0cmluZygpKTsKIH0iIiIpCiAKICAgICBGcm9udGVuZERpc3BhdGNoZXJEb21h
aW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCkBAIC0yMjcsMjMgKzIyOCwyNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8Lyoke29iamVj
dFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQorICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyAke29iamVjdFR5cGV9Owog
ICAgIHB1YmxpYzoiIiIpCiAKICAgICBQcm90b2NvbE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlvblBv
c3RsdWRlID0gKAogIiIiCi0gICAgICAgIFJlZjwke29iamVjdFR5cGV9PiByZWxlYXNlKCkKKyAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPCR7b2JqZWN0VHlwZX0+JiAoKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlw
ZX0pID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JHtvYmplY3RUeXBl
fT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPCR7b2JqZWN0
VHlwZX0+Kj4oJnJlc3VsdCkpOworICAgICAgICBQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IHJl
bGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPCR7b2JqZWN0VHlw
ZX0+KCp0aGlzKS5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yNTQsMTAgKzI1
OCwxMSBAQCAke2NvbnN0cnVjdG9yRXhhbXBsZX0KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0iIiIpCisgICAg
fQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOyIiIikKIAogICAgIFByb3RvY29sT2JqZWN0UnVudGltZUNhc3QgPSAoCi0iIiJSZWZQ
dHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNh
c3QoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCisiIiJQYXNzUmVm
UHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVD
YXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiB7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0
U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CmluZGV4IGEyNDFjNTMwNmE0MjEyNzMzNTNiMDA1Yzg1MDZmODQ4ZjU5Mjk0MzguLjEyNzJj
MDBhZWZhYjU3OWJjZDI3OGM5YzA4ZmM2MDUzYTRkZGMwNGIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGhlYWRlcnMgPSBbCiAgICAgICAgICAgICAn
Ikluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIicsCiAgICAgICAgICAgICAnPGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVm
UHRyLmg+JywKICAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KIAogICAgICAg
ICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmluZycpXQpAQCAtMTU2LDcgKzE1Nyw3
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgIGluX3BhcmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCiAgICAgICAgIGZvciBf
cGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgaW5fcGFy
YW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3Vu
Y2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKLSAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiBjYWxs
YmFjayIgJSBjYWxsYmFja05hbWUpCisgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCJQYXNz
UmVmUHRyPCVzPiBjYWxsYmFjayIgJSBjYWxsYmFja05hbWUpCiAKICAgICAgICAgb3V0X3BhcmFt
ZXRlcnMgPSBbXQogICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJh
bWV0ZXJzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNTgy
ZGU0YjRhNGNhZGJhY2FiZmY5MmQwZmMzMWM5MGU5MzE2NDFhMS4uODQ2MTVkZDEzNDU5YzFmMzEy
N2I1ZmI1MTliNTZiYjllYTQwOGMxMiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9z
bWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRv
bWFpbik6CiAgICAgICAgIGNhc2VzID0gW10KICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgaWYg
KG1ldGhvZCA9PSAiJXMiKScgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQotICAg
ICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2FsbElkLCBtZXNzYWdlKTsnICUgZG9tYWlu
LmNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAg
ICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFu
ZF9uYW1lKQogICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgogICAg
ICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNv
bW1hbmQuY29tbWFuZF9uYW1lKQotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVz
KGNhbGxJZCwgbWVzc2FnZSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQorICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycgJSBjb21t
YW5kLmNvbW1hbmRfbmFtZSkKIAogICAgICAgICBzd2l0Y2hfYXJncyA9IHsKICAgICAgICAgICAg
ICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTc4LDI5ICsxNzgsMjIgQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0
b3IpOgogICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0gJyYlc192YWx1ZUZv
dW5kJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQogICAgICAgICAgICAgICAgIGluX3BhcmFt
ZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7
JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKIAotICAgICAgICAgICAgcGFyYW1ldGVyX2V4
cHJlc3Npb24gPSAnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAg
aWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlwZShwYXJhbWV0ZXIu
dHlwZSk6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnJXMuY29weVJl
ZigpJyAlIHBhcmFtZXRlcl9leHByZXNzaW9uCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcmJXMn
ICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KLQogICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKICAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
c3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCiAgICAgICAgICAgICAgICAgJ3BhcmFtZXRl
ck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlckV4cHJlc3Npb24nOiBwYXJhbWV0ZXJfZXhwcmVzc2lvbiwKICAgICAgICAgICAgICAgICAn
a2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUo
cGFyYW1ldGVyLnR5cGUpLAogICAgICAgICAgICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBvdXRf
c3VjY2Vzc19hcmd1bWVudAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbl9wYXJhbWV0
ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIGluXyUocGFyYW1l
dGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiUoa2V5ZWRHZXRNZXRob2Qp
cyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMi
KSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOycgJSBwYXJhbV9h
cmdzKQorICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAl
KHBhcmFtZXRlclR5cGUpcyBpbl8lKHBhcmFtZXRlck5hbWUpcyA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjolKGtleWVkR2V0TWV0aG9kKXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUoc3VjY2Vzc091dFBhcmFtKXMsIHByb3RvY29s
RXJyb3JzUHRyKTsnICUgcGFyYW1fYXJncykKIAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcg
PSAnJShwYXJhbWV0ZXJOYW1lKXNfdmFsdWVGb3VuZCA/ICUocGFyYW1ldGVyRXhwcmVzc2lvbilz
IDogbnVsbHB0cicgJSBwYXJhbV9hcmdzCisgICAgICAgICAgICAgICAgb3B0aW9uYWxfaW5fcGFy
YW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJmluXyUocGFy
YW1ldGVyTmFtZSlzIDogbnVsbHB0cicgJSBwYXJhbV9hcmdzCiAgICAgICAgICAgICAgICAgYWx0
ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3Bh
cmFtZXRlcl9zdHJpbmcpCiAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5k
KG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChw
YXJhbWV0ZXJfZXhwcmVzc2lvbikKLSAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5h
cHBlbmQocGFyYW1ldGVyX2V4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rp
c3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdpbl8nICsgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnaW5f
JyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKIAogICAgICAgICBpZiBjb21tYW5kLmlzX2Fz
eW5jOgogICAgICAgICAgICAgYXN5bmNfYXJncyA9IHsKQEAgLTIxMSw3ICsyMDQsNyBAQCBjbGFz
cyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBj
YWxsYmFjay0+ZGlzYWJsZSgpOycpCiAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7JykKICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMu
YXBwZW5kKCcgICAgICAgIHJldHVybjsnKQotICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMu
YXBwZW5kKCdjYWxsYmFjay5jb3B5UmVmKCknKQorICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRl
cnMuYXBwZW5kKCdjYWxsYmFjaycpCiAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKQEAgLTI2OCw5ICsyNjEsOSBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAogICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgaWYgY29tbWFuZC5pc19hc3lu
YzoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxJbnNwZWN0b3IlKGRvbWFpbk5h
bWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sg
PSBhZG9wdFJlZigqbmV3IEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBj
YWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
UmVmUHRyPEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjol
KGNhbGxiYWNrTmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3IlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tl
bmREaXNwYXRjaGVyLGNhbGxJZCkpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGlmIGxlbihj
b21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6CiAgICAgICAgICAgICBsaW5lcy5leHRlbmQo
b3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1f
YWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21t
YW5kX2FyZ3MpCkBAIC0yODksNiArMjgyLDYgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQogCiAgICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgZXJyb3IpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAgICAgICAgIHJl
dHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZmYw
OWFiMzliMGEzNjkzYTY3NGIwYzZjNGZmMTY1Y2ZmZGI3ZDA0Mi4uYWUwNGFkZjY4NDlkOGE2NzU5
M2VmYWFjZGEwNWJjY2JkYThkZjI2OSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAt
NTMsNiArNTMsNyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Io
R2VuZXJhdG9yKToKICAgICAgICAgICAgICciSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiJywK
ICAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPicsCiAg
ICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAg
Jzx3dGYvUGFzc1JlZlB0ci5oPicsCiAgICAgICAgICAgICAnPHd0Zi90ZXh0L1dURlN0cmluZy5o
PiddCiAKICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CmluZGV4IDg4ZjU4ZjQwMzBjM2MyZTU0Zjg3Y2Y1OGE5MzdhZjZhMzNm
ZTNkNjEuLjQyNzBiM2I1OTBmNGI3MzNiN2Q3NGFlOGFjMWY3MWU4MmZhZTk4NjIgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMDcsMTMgKzEwNywxMyBA
QCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5l
cmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5h
bWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMp
cyknICUgZXZlbnRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsn
KQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJShkb21haW5OYW1lKXMuJShldmVudE5h
bWUpcyIpKTsnICUgZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2Fzc2ln
bm1lbnRzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAgICAgICBsaW5lcy5l
eHRlbmQocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNP
YmplY3QuY29weVJlZigpKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOycp
CiAKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7JykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDk2MTE2NTBiMWVj
MTU5MWMxZjNiMTUxZTFlMWNkNjdkMGZmZWU3MDQuLmQ2MGM2YWQ4ZjI5NjIyZGIxNjI4YTUwZmE5
MTZlMWI1ZGU3ODUyNjYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtNTIsNiArNTIsNyBAQCBjbGFz
cyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGhl
YWRlcnMgPSBzZXQoWwogICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPicsCiAgICAgICAgICAgICAnPHd0Zi9Bc3NlcnRpb25zLmg+JywKKyAgICAgICAgICAg
ICc8d3RmL1Bhc3NSZWZQdHIuaD4nCiAgICAgICAgIF0pCiAKICAgICAgICAgZXhwb3J0X21hY3Jv
ID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQpA
QCAtMTk0LDEwICsxOTUsOSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9y
KEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9idWlsZGVy
X3N0YXRlX2VudW0odHlwZV9kZWNsYXJhdGlvbikpCiAKICAgICAgICAgY29uc3RydWN0b3JfZXhh
bXBsZSA9IFtdCi0gICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogUmVm
PCVzPiByZXN1bHQgPSAlczo6Y3JlYXRlKCknICUgKG9iamVjdF9uYW1lLCBvYmplY3RfbmFtZSkp
CisgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogUmVmUHRyPCVzPiBy
ZXN1bHQgPSAlczo6Y3JlYXRlKCknICUgKG9iamVjdF9uYW1lLCBvYmplY3RfbmFtZSkpCiAgICAg
ICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKICAgICAgICAgICAgIGNvbnN0cnVj
dG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogICAgIC5zZXQlcyguLi4pJyAlIHVjZmlyc3QobWVt
YmVyLm1lbWJlcl9uYW1lKSkKLSAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5hcHBlbmQoJyAg
ICAgKiAgICAgLnJlbGVhc2UoKScpCiAKICAgICAgICAgYnVpbGRlcl9hcmdzID0gewogICAgICAg
ICAgICAgJ29iamVjdFR5cGUnOiBvYmplY3RfbmFtZSwKQEAgLTMwMiw4ICszMDIsNiBAQCBjbGFz
cyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIHsnKQogICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNwZWN0
b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZh
bHVlKSkpOycgJSBzZXR0ZXJfYXJncykKLSAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxk
X3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpOgotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcyhB
U0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIFdURjo6bW92ZSh2YWx1ZSkpOycgJSBzZXR0ZXJfYXJn
cykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNw
ZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2
YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKQEAg
LTMzNSw3ICszMzMsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKEdl
bmVyYXRvcik6CiAgICAgICAgIGZvciBhcmd1bWVudCBpbiB0eXBlX2FyZ3VtZW50czoKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8PiAlcyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAl
ICgnICcuam9pbihzdHJ1Y3Rfa2V5d29yZHMpLCBhcmd1bWVudFswXSkpCiAgICAgICAgICAgICBp
ZiBhcmd1bWVudFsxXToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWZQ
dHI8JXM+IHJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIHZh
bHVlKTsnICUgYXJndW1lbnRbMF0pCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0
aWMgUGFzc1JlZlB0cjwlcz4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVz
IGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsn
ICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5d29yZHMpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRp
b24ucHkKaW5kZXggMmMyNjNiNTA0YmE5NmMyMDU4MDkzODU2NWYzNzE4MTA1MGUzOTM1OC4uMzFl
ZjQ5NDEyZGFiOWMwM2I3MmYwMzMzZWNiZjNiZjBjODllMzliMiAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19p
bXBsZW1lbnRhdGlvbi5weQpAQCAtMTIyLDcgKzEyMiw2IEBAIGNsYXNzIENwcFByb3RvY29sVHlw
ZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBl
bmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJp
bmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKiB2YWx1ZSknICUgKENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9m
b3JfdHlwZShvYmplY3RfZGVjbGFyYXRpb24udHlwZSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQo
IiIiewotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBvYmplY3Q7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0
KG9iamVjdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVk
KTsiIiIpCkBAIC0xNzAsNyArMTY5LDYgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFB
U1NFUlRfRElTQUJMRUQnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJXMoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VS
VF9BUkcodmFsdWUsIHZhbHVlKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBTdHJpbmcg
cmVzdWx0OycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9
IHZhbHVlLT5hc1N0cmluZyhyZXN1bHQpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFT
U0VSVChjYXN0U3VjY2VlZGVkKTsnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQppbmRleCAwOTFmYTY0ZGU0MzU3ZWVhZDY5N2ZkMWQ5ZmY4NjNiOTExNjAwMGYzLi44
ZmZhZTliN2FmNzc4ODk5NTM0ODQ5MzVhY2QyZjgzOGM3YzZiY2VjIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMTExLDcgKzExMSw3IEBAIGNsYXNzIE9i
akNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57JykKIAogICAg
ICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOycpCiAKICAgICAgICAgICAgIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyA9IGZp
bHRlcihsYW1iZGEgcGFyYW1ldGVyOiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpD
R2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpLCBjb21t
YW5kLnJldHVybl9wYXJhbWV0ZXJzKQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1
aXJlZF9wb2ludGVyX3BhcmFtZXRlcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKaW5kZXggYTNjNGUxYmJhNmI1NWU1ZjMxNzUxYmFhMTM5YjQxMmRhMjYwNzEz
Ni4uM2I4MzZmYTA1Zjc2ZDUzYTBiMjAzOGQ1MzBhZmVlZjcwODBmZTIyZCAxMDA3NTUKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMTE2LDcgKzExNiw3IEBAIGNs
YXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0
b3IpOgogICAgICAgICBpZiByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgb3Igb3B0aW9uYWxf
cG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIiVzLiVzIikpOycgJSAoZG9t
YWluLmRvbWFpbl9uYW1lLCBldmVudC5ldmVudF9uYW1lKSkKICAgICAgICAgaWYgZXZlbnQuZXZl
bnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9l
dmVudF9vdXRfcGFyYW1ldGVycyhkb21haW4sIGV2ZW50KSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBj
bGFzcyBPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJh
dG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMoc2VsZiwgZG9t
YWluLCBldmVudCk6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgIGtl
eWVkX3NldF9tZXRob2QgPSBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUo
cGFyYW1ldGVyLnR5cGUpCiAgICAgICAgICAgICB2YXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNDczMTAwYjBl
YjJhN2RjMzg0MzMzYjcwNzVlMDVlY2JkOTM4M2I2ZC4uNTE1NGZlYTM2YThkZjgyOWRmZWUyNWE5
OTQyMmUyMDIwZTA2MWRiNyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1l
bnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBA
IC01OCw2ICs1OCw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICciJXNFbnVtQ29udmVyc2lvbkhlbHBlcnMu
aCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKICAgICAgICAgICAgICc8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKICAgICAgICAgICAgICc8d3RmL0Fzc2VydGlvbnMu
aD4nLAorICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCiAgICAgICAgIF0KIAogICAg
ICAgICBoZWFkZXJfYXJncyA9IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3Vs
dAppbmRleCBkOGE3OWNkNTE2Y2VkN2E5ODRkNzI0YzI0OGRiNTk4NDk2ZTJhNGU1Li45YzRkYWM2
ZjMxNzg5ZjJmMWMwZGY1NGFmZDY4ZGQwMzVhMzA3Y2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUo
ZGlzcGF0Y2hlcik7IH0KLSAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNw
YXRjaGVyOyB9CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0
ZToKLSAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7CisgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwogfTsKIAogCkBAIC0xNDMsNiArMTQzLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiRGF0YWJhc2UiKTsKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2Jq
ZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTcxLDMyICsxNzIsMzIgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnks
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3B0X291dF9jb2x1
bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRf
bm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0X3Rp
bWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVu
Q29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKICAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgotICAgICAgICBF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNl
bmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNv
bHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZh
bHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBz
cWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNv
bG9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcik7
CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsK
KyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+
KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxT
dHJpbmc+KiBwcmludENvbG9yKTsKICAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRf
dGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVlcywgSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVu
Q29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZSB7CiAgICAgcHVibGljOgotICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhS
ZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAg
ICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNv
bG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworICAgICAgICBFeGVjdXRlU1FMQXN5bmND
YWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
LCBpbnQgaWQpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90
ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywg
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25z
dCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwogICAgIH07
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0cmluZyYsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
KEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnks
IFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrKSA9IDA7CiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKTsKIH07CiAKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICAgdm9pZCBleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgICB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImLCBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yNjEsMTIg
KzI2MiwxMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQogCi1SZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4g
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVh
dGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigqYmFja2Vu
ZERpc3BhdGNoZXIsIGFnZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwogfQog
Ci1JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAg
ICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKQEAgLTI3NiwzMiArMjc3LDMzIEBAIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCiB7CiAg
ICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMp
OwogCiAgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBt
ZXNzYWdlKTsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxs
SWQsICptZXNzYWdlLmdldCgpKTsKICAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CiAgICAgZWxzZSBp
ZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jKGNh
bGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jKGNhbGxJZCwgKm1lc3NhZ2Uu
Z2V0KCkpOwogICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jIikKLSAgICAg
ICAgZXhlY3V0ZVNRTEFzeW5jKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVTUUxB
c3luYyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKICAgICBlbHNlCiAgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJEYXRhYmFzZSIs
ICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQogCiB2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKIHsKLSAgICBh
dXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6
Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOwot
ICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRh
aW5lcik7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJh
c2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgU3RyaW5nIGluX3F1
ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMu
Z2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Cisg
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0
YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1
ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1z
LCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOworICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJy
b3JzLnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMxMyw3ICszMTUs
NyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBl
cnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKQEAgLTM0NSwxNCArMzQ3LDE0IEBAIHZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyhsb25nCiAgICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkp
CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAgfQotICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVh
c2UoKSwgZXJyb3IpOwogfQogCi1JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGOjptb3ZlKGJhY2tlbmRE
aXNwYXRjaGVyKSwgaWQpIHsgfQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoYmFja2VuZERpc3Bh
dGNoZXIsIGlkKSB7IH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2Vu
ZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29s
dW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3Rlcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFs
dWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRh
YmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNx
bEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29s
b3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQor
dm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1bW5OYW1lcykKICAgICAgICAganNvbk1lc3NhZ2UtPnNl
dEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwogICAgIGlm
IChub3Rlcy5pc0Fzc2lnbmVkKCkpCkBAIC0zNzEsMTkgKzM3MywyMCBAQCB2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbAogICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
c2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7CiAgICAgaWYgKHByaW50Q29s
b3IuaXNBc3NpZ25lZCgpKQogICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yLmdldFZhbHVlKCkpOwotICAgIHNlbmRJZkFj
dGl2ZShXVEY6Om1vdmUoanNvbk1lc3NhZ2UpLCBFcnJvclN0cmluZygpKTsKKyAgICBzZW5kSWZB
Y3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCiB7Ci0gICAg
YXV0byBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46
OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsK
LSAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250
YWluZXIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFi
YXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9x
dWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
LmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwor
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRh
dGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9x
dWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBl
cnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICcl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJh
bXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7CisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzk1LDkgKzM5
OCw5IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxs
YmFjayA9IGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNr
ZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIGNhbGxJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSwgY2FsbGJhY2suY29weVJlZigpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsKKyAgICBtX2FnZW50
LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJ
ZCwgaW5fcXVlcnksIGNhbGxiYWNrKTsKIAogICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOwpAQCAtNDA4LDE0ICs0MTEsMTUgQEAgdm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyhsb24KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKQogewotICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXI7Ci0gICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMi
KSwgcGFyYW1zQ29udGFpbmVyKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAg
ICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwo
InBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAg
ICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAg
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FM
U3luYyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJv
ck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQyNyw3ICs0MzEsNyBAQCB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZQogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBTdHJpbmcgb3V0X25vdGVzOwogICAgIGRvdWJsZSBv
dXRfdGltZXN0YW1wOwpAQCAtNDUwLDE0ICs0NTQsMTQgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGUKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIp
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29s
b3IpKTsKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9y
IiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENv
bG9yKSk7CiAgICAgfQotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwogfQogCi1JbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEY6Om1vdmUoYmFja2VuZERpc3BhdGNo
ZXIpLCBpZCkgeyB9CitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQp
IDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJh
Y2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYm
IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50
Q29sb3IpCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rl
cywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOwogICAgIGpzb25NZXNzYWdlLT5zZXREb3Vi
bGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKQEAgLTQ2NywxOSArNDcx
LDIwIEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjCiAgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKICAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKICAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7Ci0gICAgc2VuZElmQWN0aXZlKFdU
Rjo6bW92ZShqc29uTWVzc2FnZSksIEVycm9yU3RyaW5nKCkpOworICAgIHNlbmRJZkFjdGl2ZShq
c29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpCiB7Ci0gICAgYXV0byBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKLSAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJ
SUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOwotICAgIGludCBpbl9kYXRhYmFz
ZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFp
bmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1
ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGludCBpbl9k
YXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgICBpZiAocHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRh
dGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJ
bnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOwor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2Us
IHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTQ5MSw5ICs0OTYsOSBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcAogI2VuZGlmCiAKICAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRv
cHRSZWYoKm5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIGNhbGxJ
ZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
cixjYWxsSWQpKTsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoZXJyb3IsIGluX2RhdGFi
YXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjayk7CiAKICAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKQEAgLTU0Nyw2ICs1NTIsNyBAQCB2b2lkIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CkBAIC02NDQsNiArNjUwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKQEAgLTcwMCwxMCArNzA3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVj
dCkpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gcHRyKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CkBAIC03MjIsMjcgKzcyOSwzMCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+
JiAoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PEVycm9yPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgUmVmPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OwotICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJy
b3I+Kj4oJnJlc3VsdCkpOworICAgICAgICBQYXNzUmVmUHRyPEVycm9yPiByZWxlYXNlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4oKnRoaXMpLnJlbGVhc2Uo
KTsKICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAq
IFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFz
ZSgpOworICAgICAqICAgICAuc2V0Q29kZSguLi4pOwogICAgICAqLwogICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAg
fQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOwogfTsKIAogfSAvLyBEYXRhYmFzZQpAQCAtMTA1NSw3ICsxMDY1LDcgQEAgdm9pZCBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcygKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91
YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFi
YXNlRXJyb3IgKipzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNj
cmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwogICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVl
cyIpOwpAQCAtMTA5NSw3ICsxMTA1LDcgQEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMKICAgICB9
OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwg
aW50ICpkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgUldJ
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmlu
dENvbG9yKSB7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1
bW5OYW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIobm90ZXMsIEAibm90ZXMiKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKQEAgLTExMzUsNyArMTE0NSw3
IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fCiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xE
YXRhYmFzZUVycm9yICpzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
c2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3Ig
cHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1
bW5OYW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
Uihub3RlcywgQCJub3RlcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CkBAIC0xMTY2LDcgKzExNzYsNyBAQCB2b2lk
IE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMo
bG9uZyBjYWxsSWQsIGludCBpbgogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJhc2VF
cnJvciAqc3FsRXJyb3IsIFJXSVByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNv
bG9yLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENv
bG9yKSB7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVz
LCBAIm5vdGVzIik7CiAgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKQEAgLTE1NTUsNiArMTU2NSw3IEBAIF9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29u
dmVyc2lvbkhlbHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDI3
Zjc0NmQxMmIxNTEzZGYyMTJkMzE4M2RmNGM4MTUwOGJhYzk3YzguLjdiNWVmNTc1ODZlNDAzNmMw
MDFiYzdhYmViOWQxM2M4YjhhODFkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNDEsMTggKzQxLDE4
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgY29uc3QgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQorICAgIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIAogY2xhc3MgQWx0ZXJuYXRlSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBp
bl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3NxbEVycm9yLCBjb25zdCBTdHJp
bmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGlu
X3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBpbl9jb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNh
bGxJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5n
JiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzOCw2ICsxMzgsNyBAQCBJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIpOwogCiAjaW5jbHVkZSAiSW5zcGVjdG9y
UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0xNjMsMjEgKzE2
NCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIFllbGxvdyA9IDUsCiAgICAgICAgIEJsYWNrID0gNiwK
ICAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25v
dGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyog
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBv
cHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxpbnQ+KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRf
cHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4mJiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3Rp
bWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3Zh
bHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3NxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2Nv
bHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBp
bl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90
aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3Zh
bHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3Qg
aW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3Ry
aW5nKiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRf
cGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9w
dF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVz
LCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRf
dmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRf
ZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
IG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07
CiAKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSk7CiAgICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKIHBy
aXZhdGU6Ci0gICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogcHVibGljOgpAQCAtMjQyLDEyICsyNDMsMTIgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ojp+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KIAotUmVm
PEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0KIAotSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK0luc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICAsIG1fYWdlbnQo
YWdlbnQpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0y
NTcsNTYgKzI1OCw1NyBAQCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvcgogICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFi
YXNlIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3Bl
Y3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAgICBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CiAgICAgZWxzZSBpZiAobWV0
aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAgICBleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAgICAgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwogICAgIGVsc2UKICAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywg
IkRhdGFiYXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQogewot
ICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJp
bmc+OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXI7Ci0gICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1z
Q29udGFpbmVyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikp
OworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgIGJvb2wgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXIuZ2V0
KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVzX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJy
YXkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksICZjb2x1
bW5OYW1lc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgYm9vbCBub3Rlc192
YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJh
bCgibm90ZXMiKSwgJm5vdGVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAg
ICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmbm90ZXNfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIGJvb2wgdGltZXN0YW1wX3ZhbHVlRm91bmQg
PSBmYWxzZTsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBpbl90
aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0Nv
bnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJnRpbWVzdGFtcF92YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4gaW5fdGltZXN0YW1wID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldERvdWJsZShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1w
IiksICZ0aW1lc3RhbXBfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgIGJvb2wg
dmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmpl
Y3QocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmdmFsdWVz
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAm
dmFsdWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgICBib29sIHBheWxvYWRf
dmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
PiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2FkX3ZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRW
YWx1ZShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCAmcGF5bG9h
ZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgYm9vbCBkYXRhYmFzZUlkX3Zh
bHVlRm91bmQgPSBmYWxzZTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksICZkYXRhYmFzZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
LmdldCgpKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFz
ZUlkIiksICZkYXRhYmFzZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgICBi
b29sIHNxbEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3Ii
KSwgJnNxbEVycm9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgic3FsRXJyb3IiKSwgJnNxbEVycm9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgICBib29sIHNjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgaW5f
c2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAmc2NyZWVuQ29s
b3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFN0cmluZyBpbl9zY3Jl
ZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICZzY3JlZW5Db2xvcl92YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgYm9vbCBwcmludENvbG9yX3ZhbHVlRm91
bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwo
InByaW50Q29sb3IiKSwgJnByaW50Q29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0
KCkpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xv
ciIpLCAmcHJpbnRDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICAgaWYg
KHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
ID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIik7Ci0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwg
V1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJ
ZCwgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IGluX2NvbHVtbk5hbWVzLmNvcHlSZWYoKSA6IG51
bGxwdHIsIG5vdGVzX3ZhbHVlRm91bmQgPyAmaW5fbm90ZXMgOiBudWxscHRyLCB0aW1lc3RhbXBf
dmFsdWVGb3VuZCA/ICZpbl90aW1lc3RhbXAgOiBudWxscHRyLCB2YWx1ZXNfdmFsdWVGb3VuZCA/
IGluX3ZhbHVlcy5jb3B5UmVmKCkgOiBudWxscHRyLCBwYXlsb2FkX3ZhbHVlRm91bmQgPyBpbl9w
YXlsb2FkLmNvcHlSZWYoKSA6IG51bGxwdHIsIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZpbl9k
YXRhYmFzZUlkIDogbnVsbHB0ciwgc3FsRXJyb3JfdmFsdWVGb3VuZCA/IGluX3NxbEVycm9yLmNv
cHlSZWYoKSA6IG51bGxwdHIsIHNjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmaW5fc2NyZWVuQ29s
b3IgOiBudWxscHRyLCBwcmludENvbG9yX3ZhbHVlRm91bmQgPyAmaW5fcHJpbnRDb2xvciA6IG51
bGxwdHIpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMoY2FsbElkLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gJmluX2NvbHVtbk5h
bWVzIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6IG51bGxwdHIsIHRp
bWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxwdHIsIHZhbHVlc192YWx1
ZUZvdW5kID8gJmluX3ZhbHVlcyA6IG51bGxwdHIsIHBheWxvYWRfdmFsdWVGb3VuZCA/ICZpbl9w
YXlsb2FkIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmluX2RhdGFiYXNlSWQg
OiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8gJmluX3NxbEVycm9yIDogbnVsbHB0ciwg
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIHByaW50
Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENvbG9yIDogbnVsbHB0cik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0X2Nv
bHVtbk5hbWVzOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+IG91
dF9ub3RlczsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBvdXRf
dGltZXN0YW1wOwpAQCAtMzE2LDcgKzMxOCw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJCiAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVy
cm9yOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91
dF9zY3JlZW5Db2xvcjsKICAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gaW5fY29s
dW1uTmFtZXMuY29weVJlZigpIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3Rl
cyA6IG51bGxwdHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxw
dHIsIHZhbHVlc192YWx1ZUZvdW5kID8gaW5fdmFsdWVzLmNvcHlSZWYoKSA6IG51bGxwdHIsIHBh
eWxvYWRfdmFsdWVGb3VuZCA/IGluX3BheWxvYWQuY29weVJlZigpIDogbnVsbHB0ciwgZGF0YWJh
c2VJZF92YWx1ZUZvdW5kID8gJmluX2RhdGFiYXNlSWQgOiBudWxscHRyLCBzcWxFcnJvcl92YWx1
ZUZvdW5kID8gaW5fc3FsRXJyb3IuY29weVJlZigpIDogbnVsbHB0ciwgc2NyZWVuQ29sb3JfdmFs
dWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIHByaW50Q29sb3JfdmFsdWVGb3Vu
ZCA/ICZpbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVz
LCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNl
SWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKyAg
ICBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBjb2x1bW5OYW1l
c192YWx1ZUZvdW5kID8gJmluX2NvbHVtbk5hbWVzIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3Vu
ZCA/ICZpbl9ub3RlcyA6IG51bGxwdHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVz
dGFtcCA6IG51bGxwdHIsIHZhbHVlc192YWx1ZUZvdW5kID8gJmluX3ZhbHVlcyA6IG51bGxwdHIs
IHBheWxvYWRfdmFsdWVGb3VuZCA/ICZpbl9wYXlsb2FkIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92
YWx1ZUZvdW5kID8gJmluX2RhdGFiYXNlSWQgOiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5k
ID8gJmluX3NxbEVycm9yIDogbnVsbHB0ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9z
Y3JlZW5Db2xvciA6IG51bGxwdHIsIHByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENv
bG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFt
cCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJv
ciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKIAogICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHsKICAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKQEAgLTMzOCwzOCArMzQw
LDM5IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJCiAgICAgICAgIGlmIChvdXRfcHJpbnRDb2xv
ci5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAgfQotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1
bHQpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwogfQogCiB2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQogewotICAgIGF1dG8gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXI7Ci0gICAgbWVzc2FnZS5n
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJ
SUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsK
LSAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVyLmdldCgpLCBB
U0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVND
SUlMaXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAg
ICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRl
Z2VyKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xv
ciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
LmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzLmdldCgpKTsKLSAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwo
InByaW50Q29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2Fn
ZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVzID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAg
U3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIGRvdWJsZSBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0
aW1lc3RhbXAiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWVz
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRWYWx1ZShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoInNxbEVycm9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJp
bmcgaW5fc2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJwcmludENvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgICBp
ZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpOwot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2Us
IFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJ
ZCwgaW5fY29sdW1uTmFtZXMuY29weVJlZigpLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCBpbl92
YWx1ZXMuY29weVJlZigpLCBpbl9wYXlsb2FkLmNvcHlSZWYoKSwgaW5fZGF0YWJhc2VJZCwgaW5f
c3FsRXJyb3IuY29weVJlZigpLCBpbl9zY3JlZW5Db2xvciwgaW5fcHJpbnRDb2xvcik7CisgICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGNh
bGxJZCwgaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVlcywg
aW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCBp
bl9wcmludENvbG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAgICAgU3RyaW5nIG91dF9ub3Rl
czsKICAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKQEAgLTM3OSw3ICszODIsNyBAQCB2b2lkIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyhsb25nIGNhbGxJZAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAg
bV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBpbl9jb2x1bW5OYW1l
cy5jb3B5UmVmKCksIGluX25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVlcy5jb3B5UmVmKCks
IGluX3BheWxvYWQuY29weVJlZigpLCBpbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvci5jb3B5UmVm
KCksIGluX3NjcmVlbkNvbG9yLCBpbl9wcmludENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZvdXRf
bm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0
YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3Ip
OworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgaW5fY29s
dW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVlcywgaW5fcGF5bG9hZCwg
aW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCBpbl9wcmludENvbG9y
LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVz
LCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVl
bkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwogCiAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0
X2NvbHVtbk5hbWVzKTsKQEAgLTM5Miw3ICszOTUsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJ
ZAogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiks
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xv
cikpOwogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29s
b3IpKTsKICAgICB9Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNDQwLDYgKzQ0Myw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
Y2FsbElkCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTUz
Nyw2ICs1NDEsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApA
QCAtNTkzLDEwICs1OTgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYg
b2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0KSkKKyAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBwdHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9y
OwogICAgIHB1YmxpYzoKQEAgLTYxNSwyNyArNjIwLDMwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZjxF
cnJvcj4gcmVsZWFzZSgpCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
RXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0
KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4o
Jm1fcmVzdWx0KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmcmVz
dWx0KSk7CisgICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOwogICAgICAg
ICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAg
ICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogUmVmUHRyPEVy
cm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4u
KQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7CisgICAg
ICogICAgIC5zZXRDb2RlKC4uLik7CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CisgICAgdHlw
ZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9
OwogCiB9IC8vIERhdGFiYXNlCkBAIC03NTksOCArNzY3LDggQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiBjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxSV0lQ
cm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mJiBpbl9j
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1l
c3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1
ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGlu
dCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJp
bmcqIGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBk
b3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+JiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNv
bnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGlu
X3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
IGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xv
ciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0
ZTsKIH07CkBAIC05MzksMTQgKzk0NywxNCBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyBjYWxsSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYmIGlu
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3Rp
bWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGluX3Zh
bHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3Qg
aW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0
cmluZyogaW5fcHJpbnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikK
IHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKICAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSwgZXJyb3IpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBk
b3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0
YWJhc2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAq
c2NyZWVuQ29sb3IsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
Y29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKICAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CiAgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7
CkBAIC0xMDA0LDE0ICsxMDEyLDE0IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjCiAgICAgW21f
ZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczoo
aW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVz
ID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9faW5fdGlt
ZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5
bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2Rh
dGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3Ig
PyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9f
aW5fc2NyZWVuQ29sb3IgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9w
cmludENvbG9yIDogbmlsKV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9z
Y3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQordm9pZCBPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgY2FsbElkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGlu
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1w
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl92YWx1ZXMsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCiB7
CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCksIGVycm9yKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJy
b3IgKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xv
ciwgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJj
b2x1bW5OYW1lcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihub3RlcywgQCJub3RlcyIpOwogICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CkBAIC0xNDA1LDYgKzE0MTMsNyBAQCBf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBvcnQgIlJXSVByb3Rv
Y29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYv
UGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CmluZGV4IDJmOTAzZWYwZWZmODgw
MzBkZjU4ZTY1NGFjNTA4YjY3OGNlN2U4YzkuLjM4MjJmYTkwMjNjMGQxZjkxYmMzMWEyODVhOTEw
Mzg0ODFkNzUyZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24t
cmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNz
IEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7
IH0KLSAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Cisg
ICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWY8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVm
UHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsK
IAogCkBAIC0xNTYsNiArMTU2LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
TmV0d29yazMiKTsKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTg5LDEyICsxOTAsMTIgQEAgcHJvdGVjdGVkOgogCiBj
bGFzcyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogcHJp
dmF0ZToKLSAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yMDYsOCArMjA3LDggQEAgcHJpdmF0ZToKIAog
Y2xhc3MgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNy
ZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAg
ICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKTsKQEAgLTIxNyw3ICsyMTgsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgbG9hZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwogICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogcHJpdmF0ZToKLSAgICBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXImLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiBwdWJsaWM6CkBAIC0yODMsMTIgKzI4NCwxMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KIEluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KIAotUmVmPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3Jl
YXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKmJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKIH0K
IAotSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
K0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAg
ICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlcikKICAgICAsIG1fYWdlbnQoYWdlbnQpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCkBAIC0yOTgsMTIgKzI5OSwxMiBAQCBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3RvcgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQogewog
ICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKIAogICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQotICAgICAgICBsb2FkUmVz
b3VyY2UxKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGxvYWRSZXNvdXJjZTEoY2FsbElkLCAq
bWVzc2FnZS5nZXQoKSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwg
Iicgd2FzIG5vdCBmb3VuZCIpKTsKIH0KQEAgLTMxOCwxOCArMzE5LDE4IEBAIHZvaWQgSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjCiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgZXJyb3IpOwogfQogCi1SZWY8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcj4gSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
OjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigq
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
OwogfQogCi1JbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKICAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQogICAgICwgbV9hZ2VudChhZ2VudCkKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTMzOSw3ICszNDAsNyBAQCBJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3RvcgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmszIiksIHRoaXMpOwogfQogCi12b2lkIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQog
ewogICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIApAQCAtMzcwLDcgKzM3MSw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsIG1l
c3NhZ2UuZ2V0KCkpOworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2Uu
Z2V0KCkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC0zODMs
MTAgKzM4NCwxMCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShl
cnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBX
VEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQpAQCAtMzk5LDEwICs0MDAsMTAgQEAgdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWMKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9y
KTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBlcnJvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JikKQEAgLTQxNSwxMCArNDE2LDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYK
IAogICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2Fk
UmVzb3VyY2UzKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwogfQog
CiB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00MzEsMTAgKzQzMiwxMCBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7CiAKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVz
dWx0KSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmKQpAQCAtNDQ3LDEwICs0NDgsMTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWMKICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBl
cnJvcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKQEAgLTQ2Mywx
MCArNDY0LDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjCiAjZW5kaWYKIAogICAgIEVycm9y
U3RyaW5nIGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KGVy
cm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdU
Rjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwogfQogCiB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCkBAIC00NzksMTAgKzQ4MCwxMCBAQCB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlYwogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7CiAKLSAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3Ip
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC01MzAs
NiArNTMxLDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWMKICNpbmNsdWRlICJJbnNwZWN0b3JQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNjI3LDYgKzYyOSw3IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0xMjg5LDYgKzEyOTIsNyBAQCB1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhl
bHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAppbmRleCA0MDE4NWE5MWYzNjA1MGYxMWFiYzQ0
MWYzYmU3YjY4NWYxMDAwMzY3Li44ZGM5YzFmY2EzNmQ5YWEwNjUwM2ExMzBjYWYxZDdiYjYyYmZm
ZTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpz
b24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNs
YXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4m
JiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hl
cik7IH0KLSAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9
CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBS
ZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAg
UmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
fTsKIAogCkBAIC0xNDQsNiArMTQ0LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRXZlbnREb21haW4iKTsKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMTcwLDEyICsxNzEsMTIgQEAgcHJvdGVjdGVk
OgogCiBjbGFzcyBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVj
dG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0
ZToKICAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiBwcml2YXRlOgotICAgIElu
c3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyJiwgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIEluc3BlY3RvckNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yNDAsMTIgKzI0MSwxMiBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6fkluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KIAotUmVmPEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4gSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvckNv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigqYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7CiB9CiAKLUluc3BlY3RvckNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCitJ
bnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQogICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIpCiAgICAgLCBtX2FnZW50KGFnZW50KQogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjU1LDEyICsyNTYsMTIgQEAgSW5zcGVj
dG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJDb21tYW5kRG9tYWluIiksIHRoaXMpOwogfQog
Ci12b2lkIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpCit2b2lkIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKIHsKICAgICBSZWY8SW5zcGVjdG9yQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIGlmIChtZXRob2QgPT0g
ImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIikKLSAgICAgICAgY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAgICAgY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CiAgICAgZWxzZQogICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiQ29tbWFuZERv
bWFpbiIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfQpAQCAtMjc1LDE0ICsy
NzYsMTQgQEAgdm9pZCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2EKICNlbmRpZgogCiAgICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKICAgICBtX2Fn
ZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7
CiAKICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1D
b25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBlcnJvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzMwLDYgKzMzMSw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5o
PgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKQEAgLTM5OSwxMSArNDAxLDExIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCiB2b2lkIEluc3BlY3RvckV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdp
dGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCiB7Ci0gICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiks
IEFTQ0lJTGl0ZXJhbCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIpKTsKLSAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJwYXJhbWV0ZXIiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50
VmFsdWUocGFyYW1ldGVyKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVy
YWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QuY29weVJlZigpKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7CiAKICAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CkBAIC00NTIsNiArNDU0LDcgQEAgdm9pZCBJbnNwZWN0
b3JFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQ
YXJhbWV0ZXIgcGEKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtODEwLDcgKzgxMyw3IEBAIHZvaWQg
T2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUobG9uCiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4o
UldJUHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5W
YWx1ZSByZXR1cm5WYWx1ZSkgewotICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiks
IHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0T2JqZWN0LnJlbGVhc2UoKSwgU3RyaW5n
KCkpOwogICAgIH07CkBAIC0xMDE4LDkgKzEwMjEsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwogICAgIGlmICghZnJvbnRlbmRDaGFubmVsKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1l
dGVyIikpOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInBhcmFtZXRlciIpLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRl
cikpOwogICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwg
cGFyYW1zT2JqZWN0KTsKICAgICBmcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwpAQCAtMTE0Miw2ICsxMTQ1LDcgQEAgX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAjaW1wb3J0ICJSV0lQcm90b2Nv
bEVudW1Db252ZXJzaW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1Bh
c3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCBjYWZlNDZjMzE5NTE2ZjgzN2MyMTlj
YmEwNDRhZmQxZmQ1NGMxOWFlLi5kOTJlYzUyZjEwYmNjYjEwZjk1MzE0OWIzMjUxOGNhZTU0MjZh
YjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNDEs
MTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgY29uc3Qg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQorICAgIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTMzLDYg
KzEzMyw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIik7CiAK
ICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKQEAgLTI0MSw2ICsyNDIsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRl
ICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjUwLDggKzI1Miw4IEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXIgewogcHVibGljOgogICAgIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVy
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Ci0g
ICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBu
b3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4g
cGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3Fs
RXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KiBjb25zdCBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKTsKLSAg
ICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMs
IGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFs
dWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29u
c3QgU3RyaW5nJiBwcmludENvbG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0
aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5D
b2xvciwgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGlt
ZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNv
bnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CiBwcml2YXRlOgogICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiB9OwpAQCAtMzAzLDExICszMDUs
MTEgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMo
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGNv
bnN0IHByaW50Q29sb3IpCit2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVy
OjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90
ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRD
b2xvcikKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBp
ZiAoY29sdW1uTmFtZXMpCiAgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CiAgICAgaWYgKG5vdGVzKQpAQCAtMzI0
LDE2ICszMjYsMTYgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW4KICAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAqc2NyZWVuQ29sb3Ip
OwogICAgIGlmIChwcmludENvbG9yKQogICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgKnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0LmNvcHlSZWYo
KSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbXNPYmplY3QpOwogCiAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCi12b2lkIElu
c3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3ZvaWQg
SW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYg
cHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNv
bk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5k
aWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIp
LCBjb2x1bW5OYW1lcyk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJub3RlcyIpLCBub3Rlcyk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRl
cmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKQEAgLTM0Miw3ICszNDQsNyBAQCB2b2lkIElu
c3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUmVmUHRyPAogICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOwogICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IpOwogICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09i
amVjdC5jb3B5UmVmKCkpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsKIAogICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
IH0KQEAgLTM5MSw2ICszOTMsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNw
YXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPAogCiAjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCkBAIC00NDIsMTAgKzQ0NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmpl
Y3QpKQorICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQg
Y2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgpAQCAtNDY0LDI3ICs0NjcsMzAgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKLSAg
ICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9y
PiYgKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxFcnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIFJlZjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVy
cm9yPio+KCZyZXN1bHQpKTsKKyAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNl
KCk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAg
KiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQogICAgICAqICAgICAuc2V0
TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVh
c2UoKTsKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAg
IH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRl
bVRyYWl0czsKIH07CiAKIH0gLy8gRGF0YWJhc2UKQEAgLTg4Miw5ICs4ODgsOSBAQCB1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOwogICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3Ii
KTsKIAotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnMiKSk7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChj
b2x1bW5OYW1lcykKICAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CiAg
ICAgaWYgKG5vdGVzKQpAQCAtOTE5LDkgKzkyNSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc2NyZWVuQ29s
b3IsIEAic2NyZWVuQ29sb3IiKTsKICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKIAotICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBB
U0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsK
LSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJ
SUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVz
KSk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBu
b3Rlcyk7CiAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3Rh
bXAiKSwgdGltZXN0YW1wKTsKQEAgLTEwMzUsNiArMTA0MSw3IEBAIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQogI2ltcG9ydCAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lv
bkhlbHBlcnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgog
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CmluZGV4IDNjNWI2MTRkNjgwN2Y1ODA2NTY2YjljMjFj
NGY1ODEyYjgxYjZhNGQuLmY3YjQ0OWQ3NWZlMDUzNTM5YWZlODBjYmY5N2EzNzNjODIxYjgzZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1
bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApA
QCAtNDEsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5h
dGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNr
ZW5kRGlzcGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAg
Y29uc3QgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQorICAgIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAt
MTQyLDYgKzE0Miw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsz
Iik7CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKQEAgLTE2NiwxMiArMTY3LDEyIEBAIHByb3RlY3RlZDoKICNpZiBQTEFURk9S
TShXRUJfQ09NTUFORFMpCiBjbGFzcyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQg
bG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7CiBwcml2YXRlOgotICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYsIEluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwg
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTI0MCwxMiArMjQx
LDEyIEBAIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhCiAjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NP
TU1BTkRTKQogCiAjaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotUmVmPEluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoKmJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKIH0KIAotSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cjo6SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKK0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
Okluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCiAgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICAsIG1fYWdlbnQoYWdlbnQpCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0yNTUsMTIgKzI1NiwxMiBA
QCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKEluc3BlY3RvcgogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwog
fQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBt
ZXNzYWdlKQordm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtZXNzYWdlKQogewogICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJj
ZSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZShjYWxsSWQsIG1lc3NhZ2UpOworICAgICAgICBsb2Fk
UmVzb3VyY2UoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CiAgICAgZWxzZQogICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29y
azEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKIH0KQEAgLTI3NSwxMCArMjc2
LDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0CiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwog
Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3Zl
KHJlc3VsdCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0o
V0VCX0NPTU1BTkRTKQogCkBAIC0zMjcsNiArMzI4LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3QKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzkzLDcg
KzM5NSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMp
CiB2b2lkIEluc3BlY3Rvck5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRl
ZCgpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMucmVzb3VyY2VM
b2FkZWQiKSk7CiAKICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CkBAIC00NDQsNiArNDQ2LDcg
QEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2Fk
ZWQoKQogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00OTAsMTAgKzQ5MywxMCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJv
ciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0KSkKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8q
TmV0d29ya0Vycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAgICAgcHVi
bGljOgpAQCAtNTEyLDI3ICs1MTUsMzAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmPE5ldHdvcmtFcnJv
cj4gcmVsZWFzZSgpCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxOZXR3b3JrRXJyb3I+JiAoKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxOZXR3b3JrRXJyb3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBS
ZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VO
b25OdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3VsdCkpOworICAgICAgICBQYXNzUmVmUHRyPE5ldHdv
cmtFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
TmV0d29ya0Vycm9yPigqdGhpcykucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOZXR3b3JrRXJy
b3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiBSZWZQdHI8TmV0d29y
a0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFz
ZSgpOworICAgICAqICAgICAuc2V0Q29kZSguLi4pOwogICAgICAqLwogICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAg
fQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOwogfTsKIAogfSAvLyBOZXR3b3JrMgpAQCAtOTg0LDcgKzk5MCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiAgICAgaWYgKCFmcm9udGVuZENoYW5uZWwpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIk5ldHdvcmszLnJlc291cmNl
TG9hZGVkIikpOwogICAgIGZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CkBAIC0xMDkyLDYgKzEwOTgsNyBAQCBfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBvcnQgIlJXSVByb3RvY29s
RW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvUGFz
c1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbi1yZXN1bHQKaW5kZXggMzRkMjY3NmRkOWExNTUwMTY2MmRlOWVhNWNh
ZDk1ZWY3YjZhODA1Ny4uMmRjZjEzMzEzNzFmZTkwOTc3YjY2OTJkNTRjMmI4ZGNmZDYwYTJiYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApAQCAtNDEsMTAgKzQxLDEw
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgY29uc3QgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQorICAgIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTI3LDYgKzEyNyw3IEBA
IHByaXZhdGU6CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKQEAgLTIzNSw2ICsyMzYsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzMyLDYg
KzMzNCw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC04
MTQsNiArODE3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICNpbXBvcnQgIlJXSVBy
b3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3
dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAppbmRleCBkZjM5M2YxNmZiOGZiNjM0NDdm
ZTIzNDA1OGQzNzMxZjU3NGI0MDdiLi45Mzk5M2EzM2RjNzBhY2RmYThhZWQ2NjhlMTRhNDU4Nzdh
NzVmMzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTQx
LDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQotICAgIGNvbnN0
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KKyAgICBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZjxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAgLTEyNyw2
ICsxMjcsNyBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yMzUsNiArMjM2LDcgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
QEAgLTMzMiw2ICszMzQsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtMzgxLDEwICszODQsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9
CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypLZXlQYXRoKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3Qp
KQorICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypLZXlQYXRoKi9JbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gcHRyKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBLZXlQYXRoOwogICAgIHB1YmxpYzoKQEAgLTM5NiwzNSArMzk5LDM4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICAgfQogCi0g
ICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEtl
eVBhdGg+JiAoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8S2V5UGF0aD4qPigmbV9yZXN1bHQpOworICAgICAgICB9CiAKLSAgICAgICAgICAg
IFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFz
ZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPEtleVBhdGg+Kj4oJnJlc3VsdCkpOworICAgICAgICBQYXNzUmVmUHRyPEtleVBhdGg+
IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPEtleVBhdGg+
KCp0aGlzKS5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEtleVBhdGg+IHJlc3VsdCA9IEtleVBh
dGg6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRUeXBlKC4uLikKLSAgICAgKiAgICAgLnJlbGVh
c2UoKTsKKyAgICAgKiBSZWZQdHI8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkK
KyAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KKyAg
ICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0
czsKIAogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAg
ICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmci
KSwgdmFsdWUpOwogICAgIH0KIAotICAgIHZvaWQgc2V0QXJyYXkoUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0QXJyYXkoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJyYXki
KSwgV1RGOjptb3ZlKHZhbHVlKSk7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKSwgdmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTkxNCw2
ICs5MjAsNyBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBv
cnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3Vs
dAppbmRleCBmNjY5NTQzZDA5ZGJhODQ3ZmU1OGRmNGU3ZDJjMjlmZDQwNjJkOGM4Li4yMDRhMmI4
YjMyMjM0ODA1NzBkOWRhYjcwNTNiMTZkNmIyZWRhMDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURjo6bW92ZShkaXNwYXRjaGVyKTsgfQotICAgIGNvbnN0IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7IH0KKyAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiAKQEAgLTEyNyw2ICsxMjcsNyBAQCBw
cml2YXRlOgogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CkBAIC0yMzUsNiArMjM2LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzMiw2ICsz
MzQsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtODAw
LDYgKzgwMyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAjaW1wb3J0ICJSV0lQcm90
b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggN2YxZTZhNDFmZTg1OTFjYzA0NjgzNmE2YjEz
ODZkYTczZGI0YTg2OS4uMzY1NDZjMmNkMGFmM2UyMTIwOGY3Yjc3OTcyOGYxYzU3NWVmNmYzZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEY6Om1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBjb25zdCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNz
UmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hl
ci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogfTsKIAogCkBAIC0xMzAsNiArMTMwLDcgQEAgSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGll
ZCIsIEZhaW50ZWQ6ICJGYWludGUKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjM4LDYgKzIzOSw3IEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0zMzUsNiArMzM3LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTg2MSw2ICs4NjQsNyBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBSV0lQ
cm90b2NvbERlYnVnZ2VyUmVhc29uKSB7CiAjaW1wb3J0ICJSV0lQcm90b2NvbEVudW1Db252ZXJz
aW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24t
cmVzdWx0CmluZGV4IDU4Y2E0MDYzMGQxZGRhNGRmNjliN2U5YzFhM2ZjNmJhNjNlZjM5MzcuLmRh
NzU2NDYwMGY0NDhiYzkzYjU4OGQwNWEwZmEwNzNiMmI2ZDFlODEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbi1yZXN1bHQKQEAgLTQxLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAogY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewogcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURjo6bW92ZShk
aXNwYXRjaGVyKTsgfQotICAgIGNvbnN0IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3Bh
dGNoZXI7IH0KKyAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiBwcml2YXRl
OgotICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CiB9OwogCiAKQEAgLTEzMSw2ICsxMzEsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiUnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5z
OgogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CkBAIC0yMzksNiArMjQwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaW5j
bHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMzNiw2ICszMzgsNyBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtODk5LDYgKzkw
Miw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29sUnVudGltZVR3b0xl
Z2dlZEFuaW1hbHMpIHsKICNpbXBvcnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJz
LmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0
CmluZGV4IDkxZDc1YzM4OWVjMDRhNDAwM2NiYWExY2FhOThmMGVhNmNlYzkwNmMuLmNjNDJmZDIz
NWQzNWNkMGM3MGZhOWMyYjBiN2RkNTQ2M2U0OGI5MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24tcmVzdWx0CkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIGNsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
LSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEY6Om1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBjb25zdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBkaXNwYXRj
aGVyOyB9CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQogcHJpdmF0ZToK
LSAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
CisgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwogfTsKIAogCkBAIC0xMjcsNiArMTI3LDcgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIklu
c3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjM1
LDYgKzIzNiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI2luY2x1ZGUgIkluc3BlY3RvclBy
b3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zMzIsNiArMzM0LDcgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM4NCwxMCArMzg3LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0lu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1
bHQoV1RGOjptb3ZlKG9iamVjdCkpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9y
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CkBAIC00MDYsMjcgKzQw
OSwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICBvcGVy
YXRvciBSZWZQdHI8RXJyb3I+JiAoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KIAotICAg
ICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3Vs
dC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVpbnRl
cnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOworICAgICAgICBQYXNzUmVmUHRyPEVy
cm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJv
cj4oKnRoaXMpLnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9y
OjpjcmVhdGUoKQorICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgp
CiAgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQot
ICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqICAgICAuc2V0Q29kZSguLi4pOwogICAgICAq
LwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSk7CiAgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3Ry
dWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKQEAgLTQ0Niwz
NyArNDUyLDQwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXIoUmVmPC8qT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9iamVj
dCkpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgICB9
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKICAgICBwdWJs
aWM6CiAKLSAgICAgICAgUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiYgKCkKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQpOworICAgICAgICB9
CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
bV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUo
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZyZXN1bHQp
KTsKKyAgICAgICAgUGFzc1JlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU+KCp0aGlzKS5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgLyoKICAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlPiByZXN1bHQgPSBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKLSAgICAg
KiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+
IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKTsKICAgICAgKi8KICAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOwogICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0
ZW1UcmFpdHMgSXRlbVRyYWl0czsKIAotICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0Q29s
dW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgV1RGOjptb3ZlKHZhbHVlKSk7CisgICAgICAgIEluc3Bl
Y3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFs
dWUpOwogICAgIH0KIAogICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAg
LTQ4OSwxOSArNDk4LDE5IEBAIHB1YmxpYzoKICAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKICAgICB9CiAKLSAg
ICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQorICAgIHZvaWQgc2V0VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFdURjo6bW92ZSh2YWx1ZSkpOworICAgICAgICBJbnNw
ZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUp
OwogICAgIH0KIAotICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RC
YXNlOjpzZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgV1RGOjptb3ZlKHZhbHVlKSk7
CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5
bG9hZCIpLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICB2b2lkIHNldEVycm9y
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVy
YWwoImVycm9yIiksIFdURjo6bW92ZSh2YWx1ZSkpOworICAgICAgICBJbnNwZWN0b3JPYmplY3RC
YXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCB2YWx1ZSk7CiAgICAgfQogfTsK
IApAQCAtNTI4LDE1ICs1MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGOjptb3ZlKG9i
amVjdCkpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlBhcmFtZXRlckJ1bmRsZSovSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAg
ICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5
X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKQEAgLTU1Nyw1MiArNTY2LDU1
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0Pigp
OwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZh
bHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMi
KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxv
YWQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQi
KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3Io
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3Jf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVy
YWwoImVycm9yIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JT
ZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNl
KCkKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4mICgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFy
YW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBh
cmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmcmVzdWx0KSk7CisgICAgICAgIFBhc3NSZWZQdHI8UGFy
YW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9
OwogCiAgICAgLyoKICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPFBh
cmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAq
IFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRl
KCkKICAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKICAgICAgKiAgICAgLnNldE5vdGVz
KC4uLikKICAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCiAgICAgICogICAgIC5zZXRWYWx1
ZXMoLi4uKQogICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJv
ciguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICogICAgIC5zZXRFcnJvciguLi4p
OwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90
b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwogfTsKIAogLyogQ29uZmxpY3RlZCBu
YW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1
aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwpAQCAtNjI4LDEwICs2NDAsMTAgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQor
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
ICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
OwogICAgIHB1YmxpYzoKQEAgLTY3MSwzMCArNjgzLDMzIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgUmVm
PE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQorICAgICAgICBvcGVy
YXRvciBSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4mICgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZtX3Jlc3Vs
dCk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgcmV0
dXJuIFdURjo6bW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cz4qPigmcmVzdWx0KSk7CisgICAgICAgIFBhc3NSZWZQdHI8T2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4oKnRoaXMpLnJlbGVh
c2UoKTsKICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKLSAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVz
dWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKKyAgICAgKiBS
ZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKICAgICAgKiAgICAgLnNldEludGVnZXIo
Li4uKQogICAgICAqICAgICAuc2V0QXJyYXkoLi4uKQogICAgICAqICAgICAuc2V0U3RyaW5nKC4u
LikKICAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKLSAgICAgKiAgICAgLnNldE9iamVjdCguLi4p
Ci0gICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICogICAgIC5zZXRPYmplY3QoLi4uKTsKICAg
ICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOwogICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIH07CiAKIH0gLy8gRGF0YWJhc2UKQEAgLTcy
MywxNSArNzM4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAg
IEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURjo6bW92ZShvYmplY3QpKQor
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBwdHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgIH0KICAgICAgICAgZnJp
ZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5O
YW1lc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoQVNDSUlM
aXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1ZSk7CkBAIC03NTIsNTIgKzc2Nyw1NSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVl
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9
CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVl
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKICAgICAgICAg
fQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJv
ciIpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwog
ICAgICAgICB9CiAKLSAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+JiAoKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1
bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxQYXJhbWV0ZXJC
dW5kbGU+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBSZWY8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJh
bWV0ZXJCdW5kbGU+Kj4oJnJlc3VsdCkpOworICAgICAgICBQYXNzUmVmUHRyPFBhcmFtZXRlckJ1
bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UGFy
YW1ldGVyQnVuZGxlPigqdGhpcykucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfTsKIAogICAg
IC8qCiAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxQYXJhbWV0ZXJC
dW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAgKiBSZWZQdHI8
UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCiAgICAg
ICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCiAgICAgICogICAgIC5zZXROb3RlcyguLi4pCiAg
ICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQogICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikK
ICAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQotICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQot
ICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqICAgICAuc2V0RXJyb3IoLi4uKTsKICAgICAg
Ki8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCkpOwogICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0
cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKIH07CiAKIH0gLy8gVGVzdApAQCAtMTMxMyw2ICsx
MzMxLDcgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAjaW1wb3J0
ICJSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVscGVycy5oIgogI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdAppbmRleCBhNTRjOTUxOWVmMGVlZDRl
Zjk0YzRlMmY1YjY4MDhmYzI0OGYzMWU4Li43NmQwMWVkZDc0MjNkZDgyNjI5NTQ5NjZjNzc3NGQ5
NjIwOGU4ZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtNDEs
MTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBBbHRlcm5hdGVJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGOjptb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgY29uc3Qg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQorICAgIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIApAQCAtMTMxLDYg
KzEzMSw3IEBAIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1h
bHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zCiAKICNpbmNsdWRlICJJbnNwZWN0b3JQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTIzOSw2ICsyNDAs
NyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMzM2LDYgKzMzOCw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC0zOTMsMTAgKzM5NiwxMCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCov
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEY6Om1vdmUob2JqZWN0KSkKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qVHlw
ZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgICB9CiAgICAgICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CiAgICAg
cHVibGljOgpAQCAtNDI5LDM3ICs0MzIsNDAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxJZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUcmVlU2V0PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYg
c2V0VHJlZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDE+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInRyZWUiKSwgdmFsdWUpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUcmVlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAg
UmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVsZWFzZSgpCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxU
eXBlTmVlZGluZ0Nhc3Q+JiAoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJm1fcmVzdWx0KTsK
KyAgICAgICAgfQogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4g
V1RGOjptb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJnJlc3Vs
dCkpOworICAgICAgICBQYXNzUmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4gcmVsZWFzZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8VHlwZU5lZWRpbmdDYXN0PigqdGhpcyku
cmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfTsKIAogICAgIC8qCiAgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlc3VsdCA9IFR5cGVO
ZWVkaW5nQ2FzdDo6Y3JlYXRlKCkKKyAgICAgKiBSZWZQdHI8VHlwZU5lZWRpbmdDYXN0PiByZXN1
bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCiAgICAgICogICAgIC5zZXRTdHJpbmcoLi4u
KQogICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKICAgICAgKiAgICAgLnNldEFuaW1hbHMoLi4u
KQogICAgICAqICAgICAuc2V0SWQoLi4uKQotICAgICAqICAgICAuc2V0VHJlZSguLi4pCi0gICAg
ICogICAgIC5yZWxlYXNlKCk7CisgICAgICogICAgIC5zZXRUcmVlKC4uLik7CiAgICAgICovCiAg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJ
dGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiB9OwogCiAvKiAgKi8KQEAgLTQ5MywzNyArNDk5LDQwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8q
UmVjdXJzaXZlT2JqZWN0MSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQot
ICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEY6Om1vdmUob2JqZWN0KSkKKyAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPC8qUmVjdXJzaXZlT2JqZWN0MSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHB0cikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAgfQogICAgICAgICBmcmllbmQgY2xhc3MgUmVj
dXJzaXZlT2JqZWN0MTsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVj
dDE+IHJlbGVhc2UoKQorICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4m
ICgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxSZWN1cnNpdmVPYmplY3QxPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJuIFdURjo6bW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0MT4qPigmcmVzdWx0KSk7CisgICAgICAg
IFBhc3NSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4oKnRoaXMpLnJlbGVhc2UoKTsK
ICAgICAgICAgfQogICAgIH07CiAKICAgICAvKgogICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKLSAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0
MTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKiBSZWZQdHI8UmVjdXJz
aXZlT2JqZWN0MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRlKCk7CiAgICAgICov
CiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKICAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1
Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiAKLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgdm9pZCBz
ZXRPYmooUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVj
dChBU0NJSUxpdGVyYWwoIm9iaiIpLCBXVEY6Om1vdmUodmFsdWUpKTsKKyAgICAgICAgSW5zcGVj
dG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgib2JqIiksIHZhbHVlKTsKICAg
ICB9CiB9OwogCkBAIC01NDQsMzcgKzU1Myw0MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0luc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
Ojptb3ZlKG9iamVjdCkpCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlJlY3Vyc2l2ZU9i
amVjdDIqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7CiAgICAgcHVibGlj
OgogCi0gICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZWxlYXNlKCkKKyAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+JiAoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIp
ID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0
Mj4qPigmbV9yZXN1bHQpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2
ZU9iamVjdDI+Kj4oJnJlc3VsdCkpOworICAgICAgICBQYXNzUmVmUHRyPFJlY3Vyc2l2ZU9iamVj
dDI+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlY3Vy
c2l2ZU9iamVjdDI+KCp0aGlzKS5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAg
LyoKICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPFJlY3Vyc2l2ZU9i
amVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDI6OmNyZWF0ZSgpCi0gICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICogUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJlY3Vy
c2l2ZU9iamVjdDI6OmNyZWF0ZSgpOwogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQorICAgIHR5
cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwog
Ci0gICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+IHZhbHVlKQorICAgIHZvaWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCiAgICAgewotICAgICAg
ICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgV1RG
Ojptb3ZlKHZhbHVlKSk7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChB
U0NJSUxpdGVyYWwoIm9iaiIpLCB2YWx1ZSk7CiAgICAgfQogfTsKIApAQCAtNTg2LDcgKzU5OCw3
IEBAIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogdGVtcGxhdGU8
PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVl
ZGluZ0Nhc3Q+IHsKLXN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlw
ZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4mJiB2YWx1ZSk7CitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKIHN0YXRpYyB2b2lkIGFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKICNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECkBAIC02NzIsNyArNjg0LDYgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1
ZSkKIHsKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CiAgICAgU3RyaW5nIHJlc3VsdDsK
ICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKICAgICBB
U1NFUlQoY2FzdFN1Y2NlZWRlZCk7CkBAIC02ODMsNyArNjk0LDYgQEAgdm9pZCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1
ZUhhc0V4cGUKICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCiB7Ci0gICAgQVNTRVJU
X0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsK
ICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKICAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwpAQCAtNzE5LDcgKzcy
OSw3IEBAIHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBl
TmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4CiB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD46OnJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIHZhbHVl
KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Pjo6cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsKICAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKQEAgLTczNSw3
ICs3NDUsNiBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdAogI2lmICFBU1NFUlRfRElTQUJMRUQK
IHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpCiB7Ci0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1
ZS0+YXNPYmplY3Qob2JqZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOwpAQCAtNzU2LDcgKzc2NSw2IEBAIHZvaWQgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNF
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKIHsKLSAgICBBU1NFUlRfQVJHKHZh
bHVlLCB2YWx1ZSk7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwogICAgIGJv
b2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwogICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CkBAIC0xMjQ4LDYgKzEyNTYsNyBA
QCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKICNpbXBvcnQgIlJXSVBy
b3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3
dGYvUGFzc1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAKaW5kZXggNzI3ZWJhMTBk
ZjZkMDJiNjUxNDBiZTAwMWJhOWNlYWE0MjhjMDM3MS4uYzcxZGJjNjM5ZWJmMzAwYTA2NmE0MTEy
OTcyMzc2ZjU2Yzg4ZDdmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxh
eS9FbmNvZGVkVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5j
b2RlZFZhbHVlLmNwcApAQCAtMzcsMjIgKzM3LDIyIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1SZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBFbmNvZGVk
VmFsdWU6OmFzT2JqZWN0KCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBFbmNvZGVkVmFs
dWU6OmFzT2JqZWN0KCkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CiAg
ICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gbV92YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKICAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBFbmNvZGVkVmFsdWU6OmFzQXJyYXkoKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gRW5jb2RlZFZhbHVlOjphc0FycmF5KCkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHJlc3VsdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSBtX3ZhbHVlLT5hc0FycmF5KHJl
c3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsK
IAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAK
IEVuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxWZWN0b3I8Y2hhcj4+OjplbmNvZGVWYWx1ZShj
b25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKQEAgLTE3NSwyMyArMTc1LDIzIEBAIHRlbXBsYXRl
PD4gU3RyaW5nIEVuY29kZWRWYWx1ZTo6Y29udmVydFRvPFN0cmluZz4oKQogdGVtcGxhdGU8Pgog
dm9pZCBFbmNvZGVkVmFsdWU6OnB1dDxFbmNvZGVkVmFsdWU+KGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCB0eXBlbmFtZSBFbmNvZGluZ1RyYWl0czxFbmNvZGVkVmFsdWU+OjpEZWNvZGVkVHlwZSYg
dmFsdWUpCiB7Ci0gICAgYXNPYmplY3QoKS0+c2V0VmFsdWUoa2V5LCB2YWx1ZS5tX3ZhbHVlLmNv
cHlSZWYoKSk7CisgICAgYXNPYmplY3QoKS0+c2V0VmFsdWUoa2V5LCB2YWx1ZS5tX3ZhbHVlKTsK
IH0KIAogdGVtcGxhdGU8Pgogdm9pZCBFbmNvZGVkVmFsdWU6OmFwcGVuZDxFbmNvZGVkVmFsdWU+
KGNvbnN0IHR5cGVuYW1lIEVuY29kaW5nVHJhaXRzPEVuY29kZWRWYWx1ZT46OkRlY29kZWRUeXBl
JiB2YWx1ZSkKIHsKLSAgICBhc0FycmF5KCktPnB1c2hWYWx1ZSh2YWx1ZS5tX3ZhbHVlLmNvcHlS
ZWYoKSk7CisgICAgYXNBcnJheSgpLT5wdXNoVmFsdWUodmFsdWUubV92YWx1ZSk7CiB9CiAKIHRl
bXBsYXRlPD4KIGJvb2wgRW5jb2RlZFZhbHVlOjpnZXQ8RW5jb2RlZFZhbHVlPihjb25zdCBTdHJp
bmcmIGtleSwgdHlwZW5hbWUgRW5jb2RpbmdUcmFpdHM8RW5jb2RlZFZhbHVlPjo6RGVjb2RlZFR5
cGUmIGRlY29kZWRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gdmFsdWU7Ci0gICAgaWYgKCFhc09iamVjdCgpLT5nZXRWYWx1ZShrZXksIHZhbHVlKSkKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5zcGVjdG9yVmFsdWUoYXNPYmpl
Y3QoKS0+Z2V0KGtleSkpOworICAgIGlmICghaW5zcGVjdG9yVmFsdWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGRlY29kZWRWYWx1ZSA9IEVuY29kZWRWYWx1ZShXVEY6Om1vdmUodmFs
dWUpKTsKKyAgICBkZWNvZGVkVmFsdWUgPSBFbmNvZGVkVmFsdWUoaW5zcGVjdG9yVmFsdWUpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cmVwbGF5L0VuY29kZWRWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNv
ZGVkVmFsdWUuaAppbmRleCA4NjU5YjRmNTBiMTViZjM1NTQ0MTQ0YmZhZjI1ZDA4NGIwNDQwY2E2
Li5jMDAxMGU4YThhMGZmNjU5M2JjYmZhMDU2NzAzMDkxNjZhNjA2NTZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmgKQEAgLTQxLDcgKzQxLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEVuY29kaW5nVHJhaXRzOwogCiBjbGFzcyBFbmNvZGVk
VmFsdWUgZmluYWwgewogcHVibGljOgotICAgIGV4cGxpY2l0IEVuY29kZWRWYWx1ZShSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKKyAgICBleHBsaWNpdCBFbmNvZGVk
VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgICAg
ICAgOiBtX3ZhbHVlKHZhbHVlKSB7IH0KIAogICAgIEVuY29kZWRWYWx1ZSgpCkBAIC03OCw4ICs3
OCw4IEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydFRvKCk7
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGFzT2JqZWN0KCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXk+IGFzQXJyYXkoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBhc09iamVjdCgpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gYXNBcnJheSgp
OwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBtX3Zh
bHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weQppbmRleCA2NWY1NDlhZWIzNzdm
MmVjZWFhYmQ5NTkzNzcxMDJmZmIxNWI2M2E1Li5kZjliOTY3ODU2NGE2MzY0NWMyNThhOTdlOTc5
NDljYmM2MjU3ZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weQpAQCAtMzQx
LDEzICszNDEsMTMgQEAgY2xhc3MgVHlwZToKICAgICAgICAgaWYgc2VsZi5tb2RlID09IFR5cGVN
b2Rlcy5TQ0FMQVI6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlX25hbWUocXVhbGlmaWVk
KQogICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSBUeXBlTW9kZXMuU0hBUkVEOgotICAgICAgICAg
ICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIHNlbGYudHlwZV9uYW1lKHF1YWxpZmllZCkKKyAgICAg
ICAgICAgIHJldHVybiAiUGFzc1JlZlB0cjwlcz4iICUgc2VsZi50eXBlX25hbWUocXVhbGlmaWVk
KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyYiICUgc2VsZi50
eXBlX25hbWUocXVhbGlmaWVkKQogCiAgICAgZGVmIGFyZ3VtZW50X3R5cGUoc2VsZiwgcXVhbGlm
aWVkPUZhbHNlKToKICAgICAgICAgaWYgc2VsZi5tb2RlID09IFR5cGVNb2Rlcy5TSEFSRUQ6Ci0g
ICAgICAgICAgICByZXR1cm4gIlJlZlB0cjwlcz4mJiIgJSBzZWxmLnR5cGVfbmFtZShxdWFsaWZp
ZWQpCisgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8JXM+IiAlIHNlbGYudHlwZV9uYW1l
KHF1YWxpZmllZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLnN0b3Jh
Z2VfdHlwZSgpCiAKQEAgLTkzOSw3ICs5MzksNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAKICAgICBk
ZWYgZ2VuZXJhdGVfbWVtYmVyX21vdmVfZXhwcmVzc2lvbihzZWxmLCBfbWVtYmVyKToKICAgICAg
ICAgX3R5cGUgPSBzZWxmLl9tb2RlbC5nZXRfdHlwZV9mb3JfbWVtYmVyKF9tZW1iZXIpCi0gICAg
ICAgIGlmIF90eXBlLm1vZGUgaW4gW1R5cGVNb2Rlcy5PV05FRCwgVHlwZU1vZGVzLlNIQVJFRF06
CisgICAgICAgIGlmIF90eXBlLm1vZGUgPT0gVHlwZU1vZGVzLk9XTkVEOgogICAgICAgICAgICAg
cmV0dXJuICJXVEY6Om1vdmUoJXMpIiAlIF9tZW1iZXIubWVtYmVyTmFtZQogICAgICAgICBlbHNl
OgogICAgICAgICAgICAgcmV0dXJuIF9tZW1iZXIubWVtYmVyTmFtZQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcAppbmRleCBiNzY2MzY4MDMxZDRm
MzI3ZWZjOTkzZjNhMTQ5YmQ0OTVlNzgyOGQyLi5jMWI5ZjExM2Y2MjliZWI4Y2MyMjEyNjk5MzI2
NWJmNWFmMGFlYTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25z
b2xlQ2xpZW50LmNwcApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgQ29uc29sZUNsaWVudDo6cHJp
bnRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwK
ICAgICBXVEZMb2dBbHdheXMoIiVzIiwgYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OnByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJndW1l
bnRzKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIHBy
cEFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhB
cmd1bWVudHMoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiBwcnBBcmd1bWVudHMpCiB7CiAgICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1l
bnRzID0gcHJwQXJndW1lbnRzOwogCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBDb25zb2xlQ2xp
ZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlIHNvdXJj
ZSwgTWVzc2EKICAgICB9CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6aW50ZXJuYWxNZXNzYWdl
V2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIHBycEFyZ3VtZW50
cywgQXJndW1lbnRSZXF1aXJlbWVudCBhcmd1bWVudFJlcXVpcmVtZW50KQordm9pZCBDb25zb2xl
Q2xpZW50OjppbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUs
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U2Ny
aXB0QXJndW1lbnRzPiBwcnBBcmd1bWVudHMsIEFyZ3VtZW50UmVxdWlyZW1lbnQgYXJndW1lbnRS
ZXF1aXJlbWVudCkKIHsKICAgICBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMgPSBw
cnBBcmd1bWVudHM7CiAgICAgaWYgKGFyZ3VtZW50UmVxdWlyZW1lbnQgPT0gQXJndW1lbnRSZXF1
aXJlZCAmJiAhYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCkpCkBAIC0xOTUsNTcgKzE5NSw1NyBA
QCB2b2lkIENvbnNvbGVDbGllbnQ6OmludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVz
c2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldgogICAgIG1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKHR5
cGUsIGxldmVsLCBleGVjLCBhcmd1bWVudHMucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBDb25zb2xl
Q2xpZW50Ojpsb2dXaXRoTGV2ZWwoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiYmIGFyZ3VtZW50cywgTWVzc2FnZUxldmVsIGxldmVsKQordm9pZCBDb25zb2xlQ2xpZW50
Ojpsb2dXaXRoTGV2ZWwoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4gYXJndW1lbnRzLCBNZXNzYWdlTGV2ZWwgbGV2ZWwpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdl
V2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwgZXhlYywgV1RGOjptb3Zl
KGFyZ3VtZW50cyksIEFyZ3VtZW50UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhU
eXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cywgQXJn
dW1lbnRSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6Y2xlYXIoRXhlY1N0YXRl
KiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKK3ZvaWQgQ29uc29s
ZUNsaWVudDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50
cz4gYXJndW1lbnRzKQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVz
c2FnZVR5cGU6OkNsZWFyLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgV1RGOjptb3ZlKGFyZ3Vt
ZW50cyksIEFyZ3VtZW50Tm90UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBl
QW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkNsZWFyLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJn
dW1lbnRzLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25zb2xlQ2xpZW50Ojpk
aXIoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykK
K3ZvaWQgQ29uc29sZUNsaWVudDo6ZGlyKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFu
ZExldmVsKE1lc3NhZ2VUeXBlOjpEaXIsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1v
dmUoYXJndW1lbnRzKSwgQXJndW1lbnRSZXF1aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0
aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6RGlyLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywg
YXJndW1lbnRzLCBBcmd1bWVudFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25zb2xlQ2xpZW50Ojpk
aXJYTUwoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50
cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6ZGlyWE1MKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0
cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpEaXJYTUwsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVj
LCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnRSZXF1aXJlZCk7CisgICAgaW50ZXJuYWxN
ZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6RGlyWE1MLCBNZXNzYWdlTGV2ZWw6
OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25z
b2xlQ2xpZW50Ojp0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+
JiYgYXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50Ojp0YWJsZShFeGVjU3RhdGUqIGV4ZWMs
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7Ci0gICAgaW50ZXJuYWxN
ZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6VGFibGUsIE1lc3NhZ2VMZXZlbDo6
TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnRSZXF1aXJlZCk7CisgICAg
aW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6VGFibGUsIE1lc3Nh
Z2VMZXZlbDo6TG9nLCBleGVjLCBhcmd1bWVudHMsIEFyZ3VtZW50UmVxdWlyZWQpOwogfQogCi12
b2lkIENvbnNvbGVDbGllbnQ6OnRyYWNlKEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4mJiBhcmd1bWVudHMpCit2b2lkIENvbnNvbGVDbGllbnQ6OnRyYWNlKEV4ZWNTdGF0
ZSogZXhlYywgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKLSAgICBp
bnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpUcmFjZSwgTWVzc2Fn
ZUxldmVsOjpMb2csIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpLCBBcmd1bWVudE5vdFJlcXVp
cmVkKTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpU
cmFjZSwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnROb3RSZXF1
aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6YXNzZXJ0Q29uZGl0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMsIGJvb2wgY29uZGl0
aW9uKQordm9pZCBDb25zb2xlQ2xpZW50Ojphc3NlcnRDb25kaXRpb24oRXhlY1N0YXRlKiBleGVj
LCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBib29sIGNvbmRpdGlvbikK
IHsKICAgICBpZiAoY29uZGl0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnRlcm5hbE1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpBc3NlcnQsIE1lc3NhZ2VMZXZlbDo6
RXJyb3IsIGV4ZWMsIFdURjo6bW92ZShhcmd1bWVudHMpLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsK
KyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpBc3NlcnQs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGV4ZWMsIGFyZ3VtZW50cywgQXJndW1lbnROb3RSZXF1aXJl
ZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6Z3JvdXAoRXhlY1N0YXRlKiBleGVjLCBSZWZQ
dHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6Z3Jv
dXAoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRz
KQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlN0
YXJ0R3JvdXAsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwg
QXJndW1lbnROb3RSZXF1aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZl
bChNZXNzYWdlVHlwZTo6U3RhcnRHcm91cCwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIGFyZ3Vt
ZW50cywgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6Z3Jv
dXBDb2xsYXBzZWQoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFy
Z3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6Z3JvdXBDb2xsYXBzZWQoRXhlY1N0YXRlKiBl
eGVjLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewotICAgIGludGVy
bmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlN0YXJ0R3JvdXBDb2xsYXBz
ZWQsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgQXJndW1l
bnROb3RSZXF1aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNz
YWdlVHlwZTo6U3RhcnRHcm91cENvbGxhcHNlZCwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIGFy
Z3VtZW50cywgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6
Z3JvdXBFbmQoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3Vt
ZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6Z3JvdXBFbmQoRXhlY1N0YXRlKiBleGVjLCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewotICAgIGludGVybmFsTWVzc2Fn
ZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkVuZEdyb3VwLCBNZXNzYWdlTGV2ZWw6Okxv
ZywgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50Tm90UmVxdWlyZWQpOworICAg
IGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkVuZEdyb3VwLCBN
ZXNzYWdlTGV2ZWw6OkxvZywgZXhlYywgYXJndW1lbnRzLCBBcmd1bWVudE5vdFJlcXVpcmVkKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25zb2xlQ2xpZW50LmgKaW5kZXggYTE2Yjg1YmI0YTRjNzEzZTU5NDllNzY4ZWFjMWRjOGJm
NTE1ZTQzYS4uOGY0ZjE5M2U3YmNmN2U3YmY2NTA4ODViNzM3MDY2OTQ0YTZkYTBlZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuaApAQCAtNDIsMzAg
KzQyLDMwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db25zb2xlQ2xpZW50KCkgeyB9CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwcmludENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVt
bk51bWJlcik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHJpbnRDb25zb2xl
TWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+
JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHByaW50Q29uc29sZU1lc3Nh
Z2VXaXRoQXJndW1lbnRzKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWws
IEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4p
OwogCi0gICAgdm9pZCBsb2dXaXRoTGV2ZWwoRXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0QXJndW1lbnRzPiYmLCBNZXNzYWdlTGV2ZWwpOwotICAgIHZvaWQgY2xlYXIoRXhlY1N0
YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKLSAgICB2b2lkIGRp
cihFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwotICAg
IHZvaWQgZGlyWE1MKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50
cz4mJik7Ci0gICAgdm9pZCB0YWJsZShFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3Jp
cHRBcmd1bWVudHM+JiYpOwotICAgIHZvaWQgdHJhY2UoRXhlY1N0YXRlKiwgUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKLSAgICB2b2lkIGFzc2VydENvbmRpdGlvbihFeGVj
U3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYsIGJvb2wgY29uZGl0
aW9uKTsKLSAgICB2b2lkIGdyb3VwKEV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4mJik7Ci0gICAgdm9pZCBncm91cENvbGxhcHNlZChFeGVjU3RhdGUqLCBSZWZQ
dHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwotICAgIHZvaWQgZ3JvdXBFbmQoRXhl
Y1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICB2b2lk
IGxvZ1dpdGhMZXZlbChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJn
dW1lbnRzPiwgTWVzc2FnZUxldmVsKTsKKyAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSosIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKKyAgICB2b2lkIGRpcihFeGVjU3Rh
dGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBk
aXJYTUwoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4p
OworICAgIHZvaWQgdGFibGUoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4pOworICAgIHZvaWQgdHJhY2UoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOworICAgIHZvaWQgYXNzZXJ0Q29uZGl0aW9uKEV4ZWNT
dGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+LCBib29sIGNvbmRp
dGlvbik7CisgICAgdm9pZCBncm91cChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBncm91cENvbGxhcHNlZChFeGVjU3RhdGUqLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7CisgICAgdm9pZCBncm91cEVu
ZChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgbWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoRXhlY1N0YXRlKiwgUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY291bnQoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHJvZmlsZShFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHByb2ZpbGVFbmQo
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB0
aW1lKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgdGltZUVuZChFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHRpbWVTdGFtcChFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEV4ZWNTdGF0ZSos
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KSA9IDA7CiAKIHByaXZhdGU6
CiAgICAgZW51bSBBcmd1bWVudFJlcXVpcmVtZW50IHsgQXJndW1lbnRSZXF1aXJlZCwgQXJndW1l
bnROb3RSZXF1aXJlZCB9OwotICAgIHZvaWQgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZl
bChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNw
ZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiwgQXJndW1lbnRSZXF1aXJlbWVudCk7CisgICAgdm9p
ZCBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2
ZWwsIEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50
cz4sIEFyZ3VtZW50UmVxdWlyZW1lbnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCmluZGV4IDJhNTUyZjhmYTIwYWVi
NDkwNThlZDVjZWJhY2IzYTg5ZTY0MTcxMDIuLjMxMGY2NGRiNTY4YmJkZGQwM2JiOGYzOWE2ZjQ0
NWViZWIxODFmOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVTZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3Bw
CkBAIC0yMzcsMTcgKzIzNywxNyBAQCBTdHJpbmcgVHlwZVNldDo6bGVhc3RDb21tb25BbmNlc3Rv
cigpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2Ny
aXB0aW9uPj4gVHlwZVNldDo6YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3QKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+PiBUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXBy
ZXNlbnRhdGlvbnMoKSBjb25zdAogewotICAgIGF1dG8gZGVzY3JpcHRpb24gPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVE
ZXNjcmlwdGlvbj46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4+
IGRlc2NyaXB0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0b3J5LnNpemUoKTsgaSsrKQogICAg
ICAgICBkZXNjcmlwdGlvbi0+YWRkSXRlbShtX3N0cnVjdHVyZUhpc3RvcnkuYXQoaSktPmluc3Bl
Y3RvclJlcHJlc2VudGF0aW9uKCkpOwogCi0gICAgcmV0dXJuIFdURjo6bW92ZShkZXNjcmlwdGlv
bik7CisgICAgcmV0dXJuIGRlc2NyaXB0aW9uLnJlbGVhc2UoKTsKIH0KIAotUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXQ+IFR5cGVTZXQ6Omluc3BlY3RvclR5cGVTZXQo
KSBjb25zdAorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlU2V0
PiBUeXBlU2V0OjppbnNwZWN0b3JUeXBlU2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZVNldDo6Y3JlYXRlKCkKICAgICAgICAgLnNldElz
RnVuY3Rpb24oKG1fc2VlblR5cGVzICYgVHlwZUZ1bmN0aW9uKSAhPSBUeXBlTm90aGluZykKQEAg
LTUxMSwxMSArNTExLDExIEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6dG9KU09OU3RyaW5nKCkg
Y29uc3QKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1SZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IFN0cnVjdHVyZVNoYXBlOjppbnNwZWN0
b3JSZXByZXNlbnRhdGlvbigpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVz
ZW50YXRpb24oKQogewotICAgIGF1dG8gYmFzZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUoKS5yZWxlYXNlKCk7Ci0gICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBjdXJyZW50
T2JqZWN0ID0gYmFzZS5jb3B5UmVmKCk7Ci0gICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBjdXJy
ZW50U2hhcGUodGhpcyk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBiYXNlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6U3RydWN0dXJlRGVzY3JpcHRpb246OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gY3VycmVudE9iamVjdCA9
IGJhc2U7CisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBjdXJyZW50U2hhcGUgPSB0aGlzOwog
CiAgICAgd2hpbGUgKGN1cnJlbnRTaGFwZSkgewogICAgICAgICBhdXRvIGZpZWxkcyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwpAQCAtNTI1LDIxICs1MjUs
MjEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0
aW9uPiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG8KICAgICAgICAgZm9yIChhdXRvIGZpZWxkIDog
Y3VycmVudFNoYXBlLT5tX29wdGlvbmFsRmllbGRzKQogICAgICAgICAgICAgb3B0aW9uYWxGaWVs
ZHMtPmFkZEl0ZW0oZmllbGQuZ2V0KCkpOwogCi0gICAgICAgIGN1cnJlbnRPYmplY3QtPnNldEZp
ZWxkcygmZmllbGRzLmdldCgpKTsKLSAgICAgICAgY3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxG
aWVsZHMoJm9wdGlvbmFsRmllbGRzLmdldCgpKTsKKyAgICAgICAgY3VycmVudE9iamVjdC0+c2V0
RmllbGRzKGZpZWxkcyk7CisgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldE9wdGlvbmFsRmllbGRz
KG9wdGlvbmFsRmllbGRzKTsKICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0Q29uc3RydWN0b3JO
YW1lKGN1cnJlbnRTaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOwogICAgICAgICBjdXJyZW50T2Jq
ZWN0LT5zZXRJc0ltcHJlY2lzZShjdXJyZW50U2hhcGUtPm1faXNJbkRpY3Rpb25hcnlNb2RlKTsK
IAogICAgICAgICBpZiAoY3VycmVudFNoYXBlLT5tX3Byb3RvKSB7Ci0gICAgICAgICAgICBhdXRv
IG5leHRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNj
cmlwdGlvbjo6Y3JlYXRlKCkucmVsZWFzZSgpOwotICAgICAgICAgICAgY3VycmVudE9iamVjdC0+
c2V0UHJvdG90eXBlU3RydWN0dXJlKCZuZXh0T2JqZWN0LmdldCgpKTsKLSAgICAgICAgICAgIGN1
cnJlbnRPYmplY3QgPSBXVEY6Om1vdmUobmV4dE9iamVjdCk7CisgICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IG5leHRP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlv
bjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1
Y3R1cmUobmV4dE9iamVjdCk7CisgICAgICAgICAgICBjdXJyZW50T2JqZWN0ID0gbmV4dE9iamVj
dDsKICAgICAgICAgfQogCiAgICAgICAgIGN1cnJlbnRTaGFwZSA9IGN1cnJlbnRTaGFwZS0+bV9w
cm90bzsKICAgICB9CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKGJhc2UpOworICAgIHJldHVybiBi
YXNlLnJlbGVhc2UoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlU2V0LmgKaW5kZXggMWNhMzkxODUxZjU0ZmRmYTZiNzViYjA3M2ZlODRlYjUxOTY2MzE5MS4u
YjJjODEwN2I4OWE4YjUzYjU0MmI2OGUzYzk4ZTY2ZjdhMzM2NjFlYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhZGRQcm9wZXJ0eShSZWZQdHI8U3RyaW5nSW1wbD4pOwogICAgIFN0cmluZyBzdHJpbmdS
ZXByZXNlbnRhdGlvbigpOwogICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKLSAgICBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IGlu
c3BlY3RvclJlcHJlc2VudGF0aW9uKCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gaW5zcGVjdG9yUmVwcmVzZW50YXRp
b24oKTsKICAgICB2b2lkIHNldENvbnN0cnVjdG9yTmFtZShTdHJpbmcgbmFtZSkgeyBtX2NvbnN0
cnVjdG9yTmFtZSA9IChuYW1lLmlzRW1wdHkoKSA/ICJPYmplY3QiIDogbmFtZSk7IH0KICAgICBT
dHJpbmcgY29uc3RydWN0b3JOYW1lKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3Rvck5hbWU7IH0KICAg
ICB2b2lkIHNldFByb3RvKFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlKSB7IG1fcHJv
dG8gPSBzaGFwZTsgfQpAQCAtMTAyLDExICsxMDIsMTEgQEAgcHVibGljOgogICAgIHZvaWQgaW52
YWxpZGF0ZUNhY2hlKCk7CiAgICAgU3RyaW5nIGR1bXBUeXBlcygpIGNvbnN0OwogICAgIFN0cmlu
ZyBkaXNwbGF5TmFtZSgpIGNvbnN0OwotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4+IGFs
bFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0
dXJlRGVzY3JpcHRpb24+PiBhbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdDsKICAg
ICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBpc092ZXJmbG93bigpIGNv
bnN0IHsgcmV0dXJuIG1faXNPdmVyZmxvd247IH0KICAgICBTdHJpbmcgbGVhc3RDb21tb25BbmNl
c3RvcigpIGNvbnN0OwotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBl
U2V0PiBpbnNwZWN0b3JUeXBlU2V0KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpUeXBlU2V0PiBpbnNwZWN0b3JUeXBlU2V0KCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhp
bmc7IH0KICAgICBib29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0Owog
ICAgIHVpbnQzMl90IHNlZW5UeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VlblR5cGVzOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdG9wd2F0Y2guaCBiL1NvdXJjZS9XVEYvd3RmL1N0
b3B3YXRjaC5oCmluZGV4IDljYmE5YTE1YTRhYWU2NTkyOTFjYjdhOWMzNDVlMjA2ZjJlMjM0MjAu
LjQyMTM5MTFhNTVmNDJiYWNjYmVlOTNmNzJkZTFjYjdmZTM1NTM0NTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1N0b3B3YXRjaC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0b3B3YXRjaC5o
CkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBTdG9wd2F0Y2ggOiBw
dWJsaWMgUmVmQ291bnRlZDxTdG9wd2F0Y2g+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0
b3B3YXRjaD4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9wd2F0Y2g+IGNyZWF0
ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9wd2F0Y2goKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcHdhdGNoKCkpOwogICAgIH0KIAogICAgIHZv
aWQgcmVzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAppbmRleCA1MGVmMDA5ODk2YzEwNmM5MzdmZjg1NjgyN2Fm
YjAyMzE5YjczNmQ2Li5iOWQ1OTEyOTJhZjA1MjU0NjU3YWE3YjdkZWU0ZTcyNGVkNmYyY2QxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZU1hbmFnZXIuY3BwCkBAIC0zMDcsNyArMzA3LDcgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0
YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGUK
IAogICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGRhdGFiYXNl
Q29udGV4dEZvcihjb250ZXh0KTsKICAgICBkYXRhYmFzZUNvbnRleHQtPnNldEhhc09wZW5EYXRh
YmFzZXMoKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZShj
b250ZXh0LCBkYXRhYmFzZS5jb3B5UmVmKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmhv
c3QoKSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZE9wZW5EYXRhYmFzZShjb250ZXh0LCBkYXRhYmFzZSwgY29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKS0+aG9zdCgpLCBuYW1lLCBleHBlY3RlZFZlcnNpb24pOwogCiAgICAgaWYgKGJhY2tl
bmQtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewogICAgICAgICBMT0coU3Rv
cmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayBmb3IgZGF0
YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4
IDI1NTNlN2FiMjY1ZWMzY2E4ZjliNzEwOTY2MWE0ODQ5NDAwMWY5NTYuLjZiNDVlOWI4ZTI1NWNk
MDdlN2M4MDJjYWI4MzhjYjI1Y2MxYjA0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAt
MjYxNCw5ICsyNjE0LDkgQEAgRXZlbnRUYXJnZXQqIERvY3VtZW50OjplcnJvckV2ZW50VGFyZ2V0
KCkKICAgICByZXR1cm4gbV9kb21XaW5kb3cuZ2V0KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6Omxv
Z0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrKQordm9pZCBEb2N1bWVudDo6
bG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsKLSAgICBhZGRN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBlcnJvck1lc3Nh
Z2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXVEY6Om1vdmUoY2FsbFN0
YWNrKSk7CisgICAgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpF
cnJvciwgZXJyb3JNZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
Y2FsbFN0YWNrKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IFVSTCYgdXJsKQpA
QCAtNDk3NSw3ICs0OTc1LDcgQEAgdm9pZCBEb2N1bWVudDo6YWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QKICAgICAgICAgcGFn
ZS0+Y29uc29sZSgpLmFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgcmVxdWVzdElk
ZW50aWZpZXIsIHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNv
bHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFj
aywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVy
KQordm9pZCBEb2N1bWVudDo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmICghaXND
b250ZXh0VGhyZWFkKCkpIHsKICAgICAgICAgcG9zdFRhc2soQWRkQ29uc29sZU1lc3NhZ2VUYXNr
KHNvdXJjZSwgbGV2ZWwsIFN0cmluZ0NhcHR1cmUobWVzc2FnZSkpKTsKQEAgLTQ5ODMsNyArNDk4
Myw3IEBAIHZvaWQgRG9jdW1lbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1l
c3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nCiAgICAgfQogCiAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSB0aGlzLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNvbnNvbGUoKS5hZGRNZXNzYWdlKHNv
dXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
LCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgc3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICAg
ICAgcGFnZS0+Y29uc29sZSgpLmFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgc291
cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjaywgc3RhdGUsIHJlcXVl
c3RJZGVudGlmaWVyKTsKIH0KIAogU2VjdXJpdHlPcmlnaW4qIERvY3VtZW50Ojp0b3BPcmlnaW4o
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBmMWI3ZDNmMzVhZTE1MGY0M2Q1M2VlNzQ1
NGE3YWFkZWQ4YzM2YzIzLi45ODM2ZWE5YTlkYWM2MWZmNTk0OWQ5NjBlMDkwMTQ2Y2NmZDY4NmI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTE3OSw3ICsxMTc5LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2VuZFdpbGxSZXZlYWxFZGdlRXZlbnRzSWZOZWVkZWQoY29uc3QgSW50UG9pbnQmIG9s
ZFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgbmV3UG9zaXRpb24sIGNvbnN0IEludFJlY3QmIHZp
c2libGVSZWN0LCBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIEVsZW1lbnQqIHRhcmdldCA9
IG51bGxwdHIpOwogCiAgICAgdmlydHVhbCBFdmVudFRhcmdldCogZXJyb3JFdmVudFRhcmdldCgp
IG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUo
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQg
bGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPiYmKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9u
VG9Db25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRDYWxsU3RhY2s+KSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHZvaWQgaW5pdERO
U1ByZWZldGNoKCk7CiAKQEAgLTEzMTcsNyArMTMxNyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBvdmVycmlkZSBmaW5hbCB7IHJlZigp
OyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIG92ZXJy
aWRlIGZpbmFsIHsgZGVyZWYoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVz
c2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1i
ZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwgSlNDOjpFeGVjU3RhdGUq
ID0gMCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApIG92ZXJyaWRlIGZpbmFs
OworICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6U2NyaXB0Q2FsbFN0YWNrPiwgSlNDOjpFeGVjU3RhdGUqID0gMCwgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllciA9IDApIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCBkb3Vi
bGUgbWluaW11bVRpbWVySW50ZXJ2YWwoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4IDFhMDYzN2Zi
MTQxNmZiZGFmMmQ5Y2JkN2I3ZWIzZjQ1MjhkMTg2Y2QuLmIyZGI1OTE5MGE3MGVhOTFiNzM3NmZh
N2FkMmQyNThkZDc5OWE2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAKQEAgLTM1MCwyNSArMzUwLDI1IEBAIGJvb2wgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6c2FuaXRpemVTY3JpcHRFcnJvcihTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50JiBs
aW5lCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
cmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJl
ciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFJlZlB0cjxTY3Jp
cHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKK3Zv
aWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIENh
Y2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQogewogICAgIGlmIChtX2luRGlzcGF0Y2hFcnJvckV2
ZW50KSB7CiAgICAgICAgIGlmICghbV9wZW5kaW5nRXhjZXB0aW9ucykKICAgICAgICAgICAgIG1f
cGVuZGluZ0V4Y2VwdGlvbnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8UGVuZGluZ0V4Y2VwdGlvbj4+PigpOwotICAgICAgICBtX3BlbmRpbmdFeGNlcHRpb25zLT5h
cHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nRXhjZXB0aW9uPihlcnJvck1lc3NhZ2UsIGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBjYWxsU3RhY2suY29weVJlZigpKSk7
CisgICAgICAgIG1fcGVuZGluZ0V4Y2VwdGlvbnMtPmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFBl
bmRpbmdFeGNlcHRpb24+KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBz
b3VyY2VVUkwsIGNhbGxTdGFjaykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8g
Rmlyc3QgcmVwb3J0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24gYW5kIG9ubHkgdGhlbiBhbGwgdGhl
IG5lc3RlZCBvbmVzLgogICAgIGlmICghZGlzcGF0Y2hFcnJvckV2ZW50KGVycm9yTWVzc2FnZSwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIGNhY2hlZFNjcmlwdCkpCi0gICAg
ICAgIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyLCBjYWxsU3RhY2suY29weVJlZigpKTsKKyAgICAgICAgbG9nRXhj
ZXB0aW9uVG9Db25zb2xlKGVycm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIGNhbGxTdGFjayk7CiAKICAgICBpZiAoIW1fcGVuZGluZ0V4Y2VwdGlvbnMpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFBlbmRpbmdFeGNlcHRpb24+Pj4gcGVuZGluZ0V4Y2VwdGlvbnMgPSBXVEY6Om1vdmUobV9w
ZW5kaW5nRXhjZXB0aW9ucyk7CiAgICAgZm9yIChhdXRvJiBleGNlcHRpb24gOiAqcGVuZGluZ0V4
Y2VwdGlvbnMpCi0gICAgICAgIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShleGNlcHRpb24tPm1fZXJy
b3JNZXNzYWdlLCBleGNlcHRpb24tPm1fc291cmNlVVJMLCBleGNlcHRpb24tPm1fbGluZU51bWJl
ciwgZXhjZXB0aW9uLT5tX2NvbHVtbk51bWJlciwgZXhjZXB0aW9uLT5tX2NhbGxTdGFjay5jb3B5
UmVmKCkpOworICAgICAgICBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoZXhjZXB0aW9uLT5tX2Vycm9y
TWVzc2FnZSwgZXhjZXB0aW9uLT5tX3NvdXJjZVVSTCwgZXhjZXB0aW9uLT5tX2xpbmVOdW1iZXIs
IGV4Y2VwdGlvbi0+bV9jb2x1bW5OdW1iZXIsIGV4Y2VwdGlvbi0+bV9jYWxsU3RhY2spOwogfQog
CiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNv
bHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJ
ZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgK
aW5kZXggZDliZWJiZTZkNTBhOGU0OTI0ZTBjYTM0NmQyYzg0ZWM3Zjc0ZmY3ZC4uMmI0M2NhNzg4
ZDZhYjUyMzYzMTlkMTVlYTM1ODY1NzRjZGMxNWJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZGlzYWJsZUV2YWwoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsK
IAogICAgIGJvb2wgc2FuaXRpemVTY3JpcHRFcnJvcihTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50
JiBsaW5lTnVtYmVyLCBpbnQmIGNvbHVtbk51bWJlciwgU3RyaW5nJiBzb3VyY2VVUkwsIENhY2hl
ZFNjcmlwdCogPSBudWxscHRyKTsKLSAgICB2b2lkIHJlcG9ydEV4Y2VwdGlvbihjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYs
IENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKKyAgICB2b2lkIHJlcG9ydEV4Y2VwdGlvbihjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOwogCiAgICAgdm9pZCBhZGRDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVk
IGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5z
aWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApID0gMDsKQEAgLTE5OCw5ICsxOTgsOSBA
QCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rv
cjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyLCB1bnNpZ25l
ZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQg
Y29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiwgSlND
OjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9
IDApID0gMDsKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0KiBlcnJvckV2ZW50VGFyZ2V0KCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50
IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQg
Y29sdW1uTnVtYmVyLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPikgPSAw
OwogICAgIGJvb2wgZGlzcGF0Y2hFcnJvckV2ZW50KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwsIENhY2hlZFNjcmlwdCopOwogCiAgICAgdmlydHVhbCB2b2lkIHJlZlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Y
U1NBdWRpdG9yRGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVk
aXRvckRlbGVnYXRlLmNwcAppbmRleCAwNGRkMDQzYTYwZjRkMGUwMWYzNDdmMjNmZDEzMTYxMWMz
ODg4ZGJmLi5hMzJmYTA4NWNhODk0OWNhZGI2OTMyNzQxNTQ0MmJiNTZlN2NlMTg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yRGVsZWdhdGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAKQEAg
LTgyLDEyICs4MiwxMiBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBYU1NBdWRpdG9yRGVsZWdhdGU6
OmdlbmVyYXRlVmlvbGF0aW9uUmVwb3J0KGNvbnN0IFhTU0luZm8mCiAgICAgICAgICAgICBodHRw
Qm9keSA9IGZvcm1EYXRhLT5mbGF0dGVuVG9TdHJpbmcoKTsKICAgICB9CiAKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXBvcnREZXRhaWxzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXBvcnREZXRhaWxzID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICByZXBvcnREZXRhaWxzLT5zZXRTdHJpbmcoInJlcXVlc3QtdXJs
IiwgeHNzSW5mby5tX29yaWdpbmFsVVJMKTsKICAgICByZXBvcnREZXRhaWxzLT5zZXRTdHJpbmco
InJlcXVlc3QtYm9keSIsIGh0dHBCb2R5KTsKIAotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
cG9ydE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcmVwb3J0T2JqZWN0
LT5zZXRPYmplY3QoInhzcy1yZXBvcnQiLCBXVEY6Om1vdmUocmVwb3J0RGV0YWlscykpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcG9ydE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcmVwb3J0T2JqZWN0LT5zZXRPYmplY3QoInhzcy1yZXBvcnQiLCByZXBv
cnREZXRhaWxzLnJlbGVhc2UoKSk7CiAKICAgICByZXR1cm4gRm9ybURhdGE6OmNyZWF0ZShyZXBv
cnRPYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAppbmRleCBiNDY0ZGEzYTA4
Y2Q2ZGQ0ZWUzMmMxMmJkZjJhNWYzNjc3ODM4ZmUwLi5iMTNkOWMxMzI1M2FlM2IxODM3Y2E3YWRj
MDcwYTNiMGE5M2FhMWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29t
bWFuZExpbmVBUElIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFu
ZExpbmVBUElIb3N0LmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIENvbW1hbmRMaW5lQVBJSG9z
dDo6ZGlzY29ubmVjdCgpCiAjZW5kaWYKIH0KIAotdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omlu
c3BlY3RJbXBsKFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mJiBvYmplY3QsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4mJiBoaW50cykKK3ZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbChQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IGhpbnRzKQogewogICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudCkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTAxLDggKzEwMSw4IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1w
bChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgb2JqZWN0LCBSZWZQdHI8SW5zCiAgICAgaWYgKCFo
aW50cy0+YXNPYmplY3QoaGludHNPYmplY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IHJlbW90ZU9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QoV1RGOjptb3ZlKG9iamVjdCkpOwotICAgIG1f
aW5zcGVjdG9yQWdlbnQtPmluc3BlY3QoV1RGOjptb3ZlKHJlbW90ZU9iamVjdCksIFdURjo6bW92
ZShoaW50c09iamVjdCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+IHJlbW90ZU9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3Qob2JqZWN0KTsKKyAg
ICBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0KHJlbW90ZU9iamVjdC5yZWxlYXNlKCksIGhpbnRz
T2JqZWN0LnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpnZXRFdmVu
dExpc3RlbmVyc0ltcGwoTm9kZSogbm9kZSwgVmVjdG9yPEV2ZW50TGlzdGVuZXJJbmZvPiYgbGlz
dGVuZXJzQXJyYXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFu
ZExpbmVBUElIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElI
b3N0LmgKaW5kZXggMzFlNmM2MjhhMGI3ZGEzOTRjMTUxNDJlNmFlMDczNGQxZDVmNDI3NS4uYjAz
ZjE5NmY4MjZlMTk5MmRkMjZlNGY3MTc2YWZkYmIzNDEzMTM3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaApAQCAtOTUsNyArOTUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhZGRJbnNwZWN0ZWRPYmplY3Qoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rh
YmxlT2JqZWN0Pik7CiAgICAgdm9pZCBjbGVhckluc3BlY3RlZE9iamVjdHMoKTsKICAgICBJbnNw
ZWN0YWJsZU9iamVjdCogaW5zcGVjdGVkT2JqZWN0KHVuc2lnbmVkIGluZGV4KTsKLSAgICB2b2lk
IGluc3BlY3RJbXBsKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIG9iamVjdFRv
SW5zcGVjdCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgaGludHMpOworICAg
IHZvaWQgaW5zcGVjdEltcGwoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBv
YmplY3RUb0luc3BlY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaGlu
dHMpOwogCiAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0ltcGwoTm9kZSosIFZlY3RvcjxFdmVu
dExpc3RlbmVySW5mbz4mIGxpc3RlbmVyc0FycmF5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcApp
bmRleCA0N2Q4M2I5YmNjMzZhN2Q0MWViNzJmNDUyNzViYzFjY2RlZTUzOTBjLi45NGQ0Yzc4ZmY0
ZGE2MTczNGM4YThjY2UxODg0ZGYzOGRiZDI5MTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcApA
QCAtMTA4LDEyICsxMDgsMTEgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6
OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcmLCBSZWZQdHIKICAgICAgICAgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyBpbmZvID0gaG9zdC0+YXBwbGljYXRpb25DYWNo
ZUluZm8oKTsKICAgICAgICAgU3RyaW5nIG1hbmlmZXN0VVJMID0gaW5mby5tX21hbmlmZXN0LnN0
cmluZygpOwogICAgICAgICBpZiAoIW1hbmlmZXN0VVJMLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1h
bmlmZXN0PiB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZy
YW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUoKQorICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0PiB2YWx1ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Ojpj
cmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRGcmFtZUlkKG1fcGFnZUFnZW50LT5mcmFtZUlk
KGZyYW1lKSkKICAgICAgICAgICAgICAgICAuc2V0TWFuaWZlc3RVUkwobWFuaWZlc3RVUkwpCi0g
ICAgICAgICAgICAgICAgLnNldFN0YXR1cyhzdGF0aWNfY2FzdDxpbnQ+KGhvc3QtPnN0YXR1cygp
KSkKLSAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwotICAgICAgICAgICAgcmVzdWx0LT5hZGRJ
dGVtKFdURjo6bW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgIC5zZXRTdGF0dXMoc3RhdGlj
X2Nhc3Q8aW50Pihob3N0LT5zdGF0dXMoKSkpOworICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVt
KHZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE1Miw3ICsxNTEsNyBAQCB2b2lkIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1l
KEVycm9yU3RyaW5nJiBlcgogICAgIGFwcGxpY2F0aW9uQ2FjaGUgPSBidWlsZE9iamVjdEZvckFw
cGxpY2F0aW9uQ2FjaGUocmVzb3VyY2VzLCBpbmZvKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IEFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2VzLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvJiBhcHBsaWNhdGlv
bkNhY2hlSW5mbykKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25D
YWNoZTo6QXBwbGljYXRpb25DYWNoZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojpi
dWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OlJlc291cmNlSW5mb0xpc3QmIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMsIGNvbnN0IEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjpDYWNoZUluZm8mIGFwcGxpY2F0aW9uQ2FjaGVJbmZvKQogewogICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlv
bkNhY2hlOjpjcmVhdGUoKQogICAgICAgICAuc2V0TWFuaWZlc3RVUkwoYXBwbGljYXRpb25DYWNo
ZUluZm8ubV9tYW5pZmVzdC5zdHJpbmcoKSkKQEAgLTE2MywxNyArMTYyLDE3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNw
ZWN0b3JBcHBsaWNhdGlvCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6
OmJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQor
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2VzKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiBhcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2VzKQogewotICAgIGF1dG8gcmVzb3VyY2VzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBw
bGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IHJlc291cmNlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT46OmNyZWF0ZSgpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiByZXNvdXJj
ZUluZm8gOiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQogICAgICAgICByZXNvdXJjZXMtPmFk
ZEl0ZW0oYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UocmVzb3VyY2VJbmZv
KSk7CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc291cmNlcyk7CisgICAgcmV0dXJuIHJlc291
cmNlczsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojpi
dWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6UmVzb3VyY2VJbmZvJiByZXNvdXJjZUluZm8pCitQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4g
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJiBy
ZXNvdXJjZUluZm8pCiB7CiAgICAgU3RyaW5nQnVpbGRlciB0eXBlczsKIApAQCAtMTkyLDExICsx
OTEsMTEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXAKICAgICBpZiAocmVzb3VyY2VJbmZvLm1f
aXNFeHBsaWNpdCkKICAgICAgICAgdHlwZXMuYXBwZW5kTGl0ZXJhbCgiRXhwbGljaXQgIik7CiAK
LSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGlj
YXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUoKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHZhbHVlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJl
c291cmNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKHJlc291cmNlSW5mby5tX3Jlc291cmNl
LnN0cmluZygpKQogICAgICAgICAuc2V0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlSW5m
by5tX3NpemUpKQotICAgICAgICAuc2V0VHlwZSh0eXBlcy50b1N0cmluZygpKQotICAgICAgICAu
cmVsZWFzZSgpOworICAgICAgICAuc2V0VHlwZSh0eXBlcy50b1N0cmluZygpKTsKKyAgICByZXR1
cm4gdmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaApp
bmRleCBjNzEyOWQ2ZjM2NzEwYjc0OGNjYzA5NjFmYTU3ODFjNGJhYzNkYTcwLi5iYzZmZWJiYWJj
Zjc1MjI5NDk5OThiNTgyM2U2OTY5NjY3OGU4YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC02
Nyw5ICs2Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNo
ZUZvckZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4mKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNh
Y2hlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiwgY29uc3Qg
QXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYpOwotICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U+PiBidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291
cmNlcyhjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYpOwotICAg
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mKTsKKyAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IGJ1
aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
UmVzb3VyY2VJbmZvTGlzdCYsIGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDYWNoZUluZm8m
KTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IGJ1
aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0Jik7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IGJ1aWxk
T2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpSZXNvdXJjZUluZm8mKTsKIAogICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYsIFN0cmluZyBmcmFtZUlkKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggZjQyMWI0
NmNmOGFjZDk4MDM1NjdjZjFmMWIzNTBkYTkzNmI4MDZlNS4uNjVmNWRjNGU3NDBmY2ExYWE3N2Nj
NDBiNTZlOTU2YzVjZmU3MTM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC02MTIsNDIgKzYxMiw0MCBAQCB2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBubwogCiAgICAgLy8gUHNldWRvIGVsZW1lbnRzLgogICAgIGlmICghaW5jbHVkZVBzZXVk
byB8fCAqaW5jbHVkZVBzZXVkbykgewotICAgICAgICBhdXRvIHBzZXVkb0VsZW1lbnRzID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZE1hdGNoZXM+OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4gcHNldWRv
RWxlbWVudHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKFBzZXVkb0lk
IHBzZXVkb0lkID0gRklSU1RfUFVCTElDX1BTRVVET0lEOyBwc2V1ZG9JZCA8IEFGVEVSX0xBU1Rf
SU5URVJOQUxfUFNFVURPSUQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVk
b0lkICsgMSkpIHsKICAgICAgICAgICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZl
ci5wc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBwc2V1ZG9JZCwgU3R5bGVSZXNv
bHZlcjo6QWxsQ1NTUnVsZXMpOwogICAgICAgICAgICAgaWYgKCFtYXRjaGVkUnVsZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPiBtYXRjaGVzID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0ZSgpCiAgICAgICAg
ICAgICAgICAgICAgIC5zZXRQc2V1ZG9JZChzdGF0aWNfY2FzdDxpbnQ+KHBzZXVkb0lkKSkKLSAg
ICAgICAgICAgICAgICAgICAgLnNldE1hdGNoZXMoYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlz
dChtYXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsIGVsZW1lbnQpKQotICAgICAgICAgICAgICAg
ICAgICAucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5hZGRJdGVt
KFdURjo6bW92ZShtYXRjaGVzKSk7CisgICAgICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVzKGJ1
aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCBl
bGVtZW50KSk7CisgICAgICAgICAgICAgICAgcHNldWRvRWxlbWVudHMtPmFkZEl0ZW0obWF0Y2hl
cy5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHNldWRv
SWRNYXRjaGVzID0gV1RGOjptb3ZlKHBzZXVkb0VsZW1lbnRzKTsKKyAgICAgICAgcHNldWRvSWRN
YXRjaGVzID0gcHNldWRvRWxlbWVudHMucmVsZWFzZSgpOwogICAgIH0KIAogICAgIC8vIEluaGVy
aXRlZCBzdHlsZXMuCiAgICAgaWYgKCFpbmNsdWRlSW5oZXJpdGVkIHx8ICppbmNsdWRlSW5oZXJp
dGVkKSB7Ci0gICAgICAgIGF1dG8gZW50cmllcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT46OmNyZWF0ZSgp
OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4gZW50cmllcyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVF
bnRyeT46OmNyZWF0ZSgpOwogICAgICAgICBFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpOwogICAgICAgICB3aGlsZSAocGFyZW50RWxlbWVudCkgewogICAg
ICAgICAgICAgU3R5bGVSZXNvbHZlciYgcGFyZW50U3R5bGVSZXNvbHZlciA9IHBhcmVudEVsZW1l
bnQtPmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwogICAgICAgICAgICAgYXV0byBw
YXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTdHlsZVJlc29sdmVyLnN0eWxlUnVsZXNGb3JFbGVt
ZW50KHBhcmVudEVsZW1lbnQsIFN0eWxlUmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKLSAgICAgICAg
ICAgIGF1dG8gZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxl
RW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyhidWls
ZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZl
ciwgcGFyZW50RWxlbWVudCkpCi0gICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+
IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Ojpj
cmVhdGUoKQorICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoYnVpbGRBcnJheUZv
ck1hdGNoZWRSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsIHBhcmVu
dEVsZW1lbnQpKTsKICAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBh
cmVudEVsZW1lbnQtPnN0eWxlKCktPmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHls
ZVNoZWV0KHBhcmVudEVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQog
ICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c2V0SW5saW5lU3R5bGUoc3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JTdHlsZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0
eWxlU2hlZXQtPmlkKCksIDApKSkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBlbnRy
aWVzLT5hZGRJdGVtKFdURjo6bW92ZShlbnRyeSkpOworICAgICAgICAgICAgZW50cmllcy0+YWRk
SXRlbShlbnRyeS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVu
dEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGluaGVyaXRl
ZEVudHJpZXMgPSBXVEY6Om1vdmUoZW50cmllcyk7CisgICAgICAgIGluaGVyaXRlZEVudHJpZXMg
PSBlbnRyaWVzLnJlbGVhc2UoKTsKICAgICB9CiB9CiAKQEAgLTY3Myw3ICs2NzEsNyBAQCB2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBubwogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8Q1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlSW5mbyA9IENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGVsZW1lbnQsIHRydWUpOwotICAgIFJlZjxJbnNwZWN0b3JT
dHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNT
U0lkKCksIGNvbXB1dGVkU3R5bGVJbmZvLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
U3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JD
U1NJZCgpLCBjb21wdXRlZFN0eWxlSW5mbywgbnVsbHB0cik7CiAgICAgc3R5bGUgPSBpbnNwZWN0
b3JTdHlsZS0+YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKTsKIH0KIApAQCAtNzIwLDkgKzcx
OCw5IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0
b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnNldFN0eWxlVGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgZnVsbFN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCit2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4
dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCiB7
Ci0gICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZC5jb3B5UmVmKCkpOwor
ICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOwogICAgIEFTU0VSVCgh
Y29tcG91bmRJZC5pc0VtcHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVj
dG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91
bmRJZC5zdHlsZVNoZWV0SWQoKSk7CkBAIC03MzYsOSArNzM0LDkgQEAgdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3AKICAgICBlcnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3Ry
aW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBm
dWxsU3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBv
dmVyd3JpdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVz
dWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlk
LCBpbnQgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCiB7Ci0g
ICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZC5jb3B5UmVmKCkpOworICAg
IEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOwogICAgIEFTU0VSVCghY29t
cG91bmRJZC5pc0VtcHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9y
U3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJ
ZC5zdHlsZVNoZWV0SWQoKSk7CkBAIC03NTIsOSArNzUwLDkgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEkKICAgICBlcnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGZ1bGxT
dHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgYm9vbCBk
aXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3Vs
dCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkLmNvcHlSZWYo
KSk7CisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZCk7CiAgICAgQVNT
RVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBp
bnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBj
b21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKQEAgLTc2OCw5ICs3NjYsOSBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFJlZlB0cjxJbgogICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcoZWMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0
b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkKIHsKLSAgICBJ
bnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQuY29weVJlZigpKTsKKyAgICBJbnNw
ZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJ
ZC5pc0VtcHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVT
aGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJZC5zdHls
ZVNoZWV0SWQoKSk7CkBAIC04MTMsMzAgKzgxMSwyOSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjphZGRSdWxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50IGNvbnRleHROb2Rl
SQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4mIGNzc1Byb3BlcnRpZXMpCiB7Ci0gICAg
YXV0byBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm8+PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+OjpjcmVhdGUoKTsKICAgICBmb3Ig
KGludCBpID0gZmlyc3RDU1NQcm9wZXJ0eTsgaSA8PSBsYXN0Q1NTUHJvcGVydHk7ICsraSkgewog
ICAgICAgICBDU1NQcm9wZXJ0eUlEIGlkID0gY29udmVydFRvQ1NTUHJvcGVydHlJRChpKTsKLSAg
ICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVy
dHlJbmZvOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldE5hbWUoZ2V0UHJvcGVydHlOYW1lU3Ry
aW5nKGlkKSkKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4gcHJvcGVydHkgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbzo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5z
ZXROYW1lKGdldFByb3BlcnR5TmFtZVN0cmluZyhpZCkpOwogCiAgICAgICAgIGNvbnN0IFN0eWxl
UHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCA9IHNob3J0aGFuZEZvclByb3BlcnR5KGlkKTsK
ICAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHByb3BlcnRp
ZXMtPmFkZEl0ZW0oV1RGOjptb3ZlKHByb3BlcnR5KSk7CisgICAgICAgICAgICBwcm9wZXJ0aWVz
LT5hZGRJdGVtKHByb3BlcnR5LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICBhdXRvIGxvbmdoYW5kcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4gbG9uZ2hhbmRzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzaG9y
dGhhbmQubGVuZ3RoKCk7ICsraikgewogICAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBsb25naGFu
ZElEID0gc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtqXTsKICAgICAgICAgICAgIGxvbmdoYW5kcy0+
YWRkSXRlbShnZXRQcm9wZXJ0eU5hbWVTdHJpbmcobG9uZ2hhbmRJRCkpOwogICAgICAgICB9Ci0g
ICAgICAgIHByb3BlcnR5LT5zZXRMb25naGFuZHMoV1RGOjptb3ZlKGxvbmdoYW5kcykpOwotICAg
ICAgICBwcm9wZXJ0aWVzLT5hZGRJdGVtKFdURjo6bW92ZShwcm9wZXJ0eSkpOworICAgICAgICBw
cm9wZXJ0eS0+c2V0TG9uZ2hhbmRzKGxvbmdoYW5kcy5yZWxlYXNlKCkpOworICAgICAgICBwcm9w
ZXJ0aWVzLT5hZGRJdGVtKHByb3BlcnR5LnJlbGVhc2UoKSk7CiAgICAgfQotICAgIGNzc1Byb3Bl
cnRpZXMgPSBXVEY6Om1vdmUocHJvcGVydGllcyk7CisgICAgY3NzUHJvcGVydGllcyA9IHByb3Bl
cnRpZXMucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVk
b1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCit2b2lkIEluc3BlY3RvckNT
U0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5v
ZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgZm9yY2VkUHNldWRvQ2xhc3NlcykK
IHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9kb21BZ2VudC0+YXNzZXJ0RWxlbWVudChlcnJv
clN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCkBAIC04NjUsMTIgKzg2MiwxMiBA
QCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXROYW1lZEZsb3dDb2xsZWN0aW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgaW50IGRvYwogICAgIG1fbmFtZWRGbG93Q29sbGVjdGlvbnNSZXF1
ZXN0ZWQuYWRkKGRvY3VtZW50Tm9kZUlkKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8V2ViS2l0TmFt
ZWRGbG93Pj4gbmFtZWRGbG93c1ZlY3RvciA9IGRvY3VtZW50LT5uYW1lZEZsb3dzKCkubmFtZWRG
bG93cygpOwotICAgIGF1dG8gbmFtZWRGbG93cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93Pjo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
TmFtZWRGbG93Pj4gbmFtZWRGbG93cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6TmFtZWRGbG93Pjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKFZl
Y3RvcjxSZWZQdHI8V2ViS2l0TmFtZWRGbG93Pj46Oml0ZXJhdG9yIGl0ID0gbmFtZWRGbG93c1Zl
Y3Rvci5iZWdpbigpOyBpdCAhPSBuYW1lZEZsb3dzVmVjdG9yLmVuZCgpOyArK2l0KQogICAgICAg
ICBuYW1lZEZsb3dzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTmFtZWRGbG93KGVycm9yU3RyaW5n
LCBpdC0+Z2V0KCksIGRvY3VtZW50Tm9kZUlkKSk7CiAKLSAgICByZXN1bHQgPSBXVEY6Om1vdmUo
bmFtZWRGbG93cyk7CisgICAgcmVzdWx0ID0gbmFtZWRGbG93cy5yZWxlYXNlKCk7CiB9CiAKIElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5z
cGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50KQpAQCAtMTAwMyw3ICsxMDAwLDcgQEAg
SW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRG
b3JJZChFcnJvclN0cmluZyYgZXJyb3IKIAogSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVl
dCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQogewotICAgIGF1dG8g
b3JpZ2luID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpSZWd1
bGFyOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlJlZ3VsYXI7
CiAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCkg
JiYgcGFnZVN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkpCiAgICAgICAgIG9yaWdpbiA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50OwogICAg
IGVsc2UgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmIHBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAm
JiBwYWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCktPm5vZGVOYW1lKCkgPT0gIiNkb2N1bWVudCIp
CkBAIC0xMDE2LDcgKzEwMTMsNyBAQCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdAogICAgIHJldHVy
biBvcmlnaW47CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+
IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoU3R5bGVSdWxlKiBzdHlsZVJ1
bGUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
UnVsZShTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
IHsKICAgICBpZiAoIXN0eWxlUnVsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDMw
LDcgKzEwMjcsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKAogICAgIHJldHVybiBpbnNwZWN0
b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKGNz
c29tV3JhcHBlcikgOiBudWxscHRyOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0
eWxlUnVsZSogcnVsZSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NS
dWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSog
cnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTA0
MCw5ICsxMDM3LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5zcGVj
dG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShy
dWxlKSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3RvckNTU0FnZW50Ojpi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
Pj4mIG1hdGNoZWRSdWxlcywgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRWxlbWVudCog
ZWxlbWVudCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJh
eUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+JiBtYXRj
aGVkUnVsZXMsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQqIGVsZW1lbnQp
CiB7Ci0gICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRj
aD4+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UnVsZU1hdGNoPjo6Y3JlYXRlKCk7CiAKICAgICBTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dCBjb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1
bGVzKTsKICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGVsZW1lbnQtPmRvY3Vt
ZW50KCkpOwpAQCAtMTA1Miw3ICsxMDQ5LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG8KICAg
ICAgICAgaWYgKCFydWxlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
YXV0byBtYXRjaGluZ1NlbGVjdG9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46
OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50
Pj4gbWF0Y2hpbmdTZWxlY3RvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+Ojpj
cmVhdGUoKTsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QgPSBt
YXRjaGVkUnVsZS0+c2VsZWN0b3JMaXN0KCk7CiAgICAgICAgIGxvbmcgaW5kZXggPSAwOwogICAg
ICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJz
dCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3Ip
KSB7CkBAIC0xMDYzLDE3ICsxMDYwLDE2IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3RvCiAgICAg
ICAgICAgICArK2luZGV4OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBtYXRjaCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNl
dFJ1bGUoV1RGOjptb3ZlKHJ1bGVPYmplY3QpKQotICAgICAgICAgICAgLnNldE1hdGNoaW5nU2Vs
ZWN0b3JzKFdURjo6bW92ZShtYXRjaGluZ1NlbGVjdG9ycykpCi0gICAgICAgICAgICAucmVsZWFz
ZSgpOwotICAgICAgICByZXN1bHQtPmFkZEl0ZW0oV1RGOjptb3ZlKG1hdGNoKSk7CisgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4gbWF0Y2ggPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5z
ZXRSdWxlKHJ1bGVPYmplY3QucmVsZWFzZSgpKQorICAgICAgICAgICAgLnNldE1hdGNoaW5nU2Vs
ZWN0b3JzKG1hdGNoaW5nU2VsZWN0b3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJlc3VsdC0+YWRk
SXRlbShtYXRjaC5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIHJldHVybiBXVEY6Om1vdmUocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVj
dEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50KiBlbGVtZW50KQorUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxl
bWVudCk7CiAgICAgaWYgKCFpczxTdHlsZWRFbGVtZW50PigqZWxlbWVudCkpCkBAIC0xMDg3LDEz
ICsxMDgzLDEzIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyCiAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oYXR0cmlidXRlU3R5bGUtPmlzTXV0YWJsZSgpKTsKICAgICBNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzKiBtdXRhYmxlQXR0cmlidXRlU3R5bGUgPSBzdGF0aWNfY2FzdDxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzKj4oYXR0cmlidXRlU3R5bGUpOwogCi0gICAgUmVmPEluc3Bl
Y3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVj
dG9yQ1NTSWQoKSwgbXV0YWJsZUF0dHJpYnV0ZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0
aW9uKCksIG51bGxwdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5
bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIG11dGFibGVBdHRy
aWJ1dGVTdHlsZS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpLCBudWxscHRyKTsKICAgICBy
ZXR1cm4gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVn
aW9uPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JSZWdpb25zKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgUmVmUHRyPE5vZGVMaXN0PiYmIHJlZ2lvbkxpc3QsIGludCBkb2N1bWVu
dE5vZGVJZCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZv
clJlZ2lvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBy
ZWdpb25MaXN0LCBpbnQgZG9jdW1lbnROb2RlSWQpCiB7Ci0gICAgYXV0byByZWdpb25zID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+PiByZWdpb25zID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+OjpjcmVhdGUoKTsKIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpb25MaXN0LT5sZW5ndGgoKTsgKytpKSB7
CiAgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0
IHJlZ2lvbk92ZXJzZXQ7CkBAIC0xMTE1LDIyICsxMTExLDIxIEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4+IEluc3Bl
Y3RvckNTCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8g
cmVnaW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb246OmNyZWF0ZSgpCisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lvbj4gcmVnaW9uID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb246OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
UmVnaW9uT3ZlcnNldChyZWdpb25PdmVyc2V0KQogICAgICAgICAgICAgLy8gZG9jdW1lbnROb2Rl
SWQgd2FzIHByZXZpb3VzbHkgYXNzZXJ0ZWQKLSAgICAgICAgICAgIC5zZXROb2RlSWQobV9kb21B
Z2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgcmVn
aW9uTGlzdC0+aXRlbShpKSkpCi0gICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAgICAg
LnNldE5vZGVJZChtX2RvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRv
Y3VtZW50Tm9kZUlkLCByZWdpb25MaXN0LT5pdGVtKGkpKSk7CiAKLSAgICAgICAgcmVnaW9ucy0+
YWRkSXRlbShXVEY6Om1vdmUocmVnaW9uKSk7CisgICAgICAgIHJlZ2lvbnMtPmFkZEl0ZW0ocmVn
aW9uLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFdURjo6bW92ZShyZWdpb25zKTsK
KyAgICByZXR1cm4gcmVnaW9ucy5yZWxlYXNlKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
TmFtZWRGbG93KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgV2ViS2l0TmFtZWRGbG93KiB3ZWJr
aXROYW1lZEZsb3csIGludCBkb2N1bWVudE5vZGVJZCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpOYW1lZEZsb3c+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZv
ck5hbWVkRmxvdyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFdlYktpdE5hbWVkRmxvdyogd2Vi
a2l0TmFtZWRGbG93LCBpbnQgZG9jdW1lbnROb2RlSWQpCiB7CiAgICAgUmVmUHRyPE5vZGVMaXN0
PiBjb250ZW50TGlzdCA9IHdlYmtpdE5hbWVkRmxvdy0+Z2V0Q29udGVudCgpOwotICAgIGF1dG8g
Y29udGVudCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiBjb250ZW50ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY29udGVudExpc3QtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgLy8gZG9j
dW1lbnROb2RlSWQgd2FzIHByZXZpb3VzbHkgYXNzZXJ0ZWQKQEAgLTExNDEsNyArMTEzNiw3IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTmFtCiAgICAgICAgIC5zZXREb2N1bWVudE5vZGVJZChkb2N1
bWVudE5vZGVJZCkKICAgICAgICAgLnNldE5hbWUod2Via2l0TmFtZWRGbG93LT5uYW1lKCkuc3Ry
aW5nKCkpCiAgICAgICAgIC5zZXRPdmVyc2V0KHdlYmtpdE5hbWVkRmxvdy0+b3ZlcnNldCgpKQot
ICAgICAgICAuc2V0Q29udGVudChXVEY6Om1vdmUoY29udGVudCkpCisgICAgICAgIC5zZXRDb250
ZW50KGNvbnRlbnQucmVsZWFzZSgpKQogICAgICAgICAuc2V0UmVnaW9ucyhidWlsZEFycmF5Rm9y
UmVnaW9ucyhlcnJvclN0cmluZywgd2Via2l0TmFtZWRGbG93LT5nZXRSZWdpb25zKCksIGRvY3Vt
ZW50Tm9kZUlkKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggZDNhMDFmYzA1MmMwN2Y4NDBkYTkzNDVh
NWY5ODI3YjdlNWE0YzQ5OC4uM2RkY2E5YmY4OWNmOGRjMDY4NzVjNGE4NmRmYzNjMTkyODUyNTg2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0xMTcsMTMgKzExOCwxMyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVT
aGVldEJvZHk+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJpbmcq
IHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXRUZXh0KEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4
dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlVGV4dChFcnJvclN0cmluZyYs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdHlsZUlkLCBjb25z
dCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlUZXh0KEVy
cm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIHN0
eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3Zlcndy
aXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nJiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIHN0eWxlSWQsIGludCBw
cm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UnVs
ZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiYmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHNldFN0eWxlVGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4mIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCB0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4mIHN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgcnVsZUlkLCBjb25zdCBTdHJp
bmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYg
cmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkUnVsZShFcnJvclN0cmluZyYs
IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1By
b3BlcnR5SW5mbz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBmb3JjZVBz
ZXVkb1N0YXRlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXk+JiYgZm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGZvcmNlZFBzZXVkb0NsYXNz
ZXMpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXROYW1lZEZsb3dDb2xsZWN0aW9uKEVy
cm9yU3RyaW5nJiwgaW50IGRvY3VtZW50Tm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpOYW1lZEZsb3c+PiYgcmVzdWx0KSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKQEAgLTE1MiwxMiArMTUzLDEyIEBAIHByaXZhdGU6CiAgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogYXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJik7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luIGRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1l
bnQqIG93bmVyRG9jdW1lbnQpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKFN0eWxlUnVsZSosIFN0eWxlUmVzb2x2ZXIm
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9i
amVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gYnVpbGRBcnJh
eUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+JiwgU3R5
bGVSZXNvbHZlciYsIEVsZW1lbnQqKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCopOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlJlZ2lvbj4+IGJ1aWxkQXJyYXlGb3JSZWdpb25zKEVycm9yU3RyaW5nJiwgUmVmUHRy
PE5vZGVMaXN0PiYmLCBpbnQgZG9jdW1lbnROb2RlSWQpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6Ok5hbWVkRmxvdz4gYnVpbGRPYmplY3RGb3JOYW1lZEZsb3coRXJyb3JT
dHJpbmcmLCBXZWJLaXROYW1lZEZsb3cqLCBpbnQgZG9jdW1lbnROb2RlSWQpOworICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1
bGUoU3R5bGVSdWxlKiwgU3R5bGVSZXNvbHZlciYpOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxl
Kik7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3Qo
Y29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiYsIFN0eWxlUmVzb2x2ZXImLCBFbGVtZW50
Kik7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBi
dWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50Kik7CisgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJlZ2lv
bj4+IGJ1aWxkQXJyYXlGb3JSZWdpb25zKEVycm9yU3RyaW5nJiwgUGFzc1JlZlB0cjxOb2RlTGlz
dD4sIGludCBkb2N1bWVudE5vZGVJZCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6Ok5hbWVkRmxvdz4gYnVpbGRPYmplY3RGb3JOYW1lZEZsb3coRXJyb3JTdHJpbmcm
LCBXZWJLaXROYW1lZEZsb3cqLCBpbnQgZG9jdW1lbnROb2RlSWQpOwogCiAgICAgLy8gSW5zcGVj
dG9yRE9NQWdlbnQ6OkRPTUxpc3RlbmVyIGltcGxlbWVudGF0aW9uCiAgICAgdmlydHVhbCB2b2lk
IGRpZFJlbW92ZURvY3VtZW50KERvY3VtZW50Kikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVJbnN0cnVtZW50YXRpb24u
aAppbmRleCA0MWQ1NzZlMWU4YzY4MTIzMGI3ZmJmZjkwNzhiOTJlOTQ4ZTYxZWI0Li4zMmE2MjQ3
MjU2ODVhZWVhZGUyMjYxMDlhMTBhMDZkYWUyMTMxOGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmgK
QEAgLTM1LDE0ICszNSwxNSBAQAogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRl
IDxpbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRzLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL1Njcmlw
dENhbGxTdGFjay5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNz
YWdlVG9Db25zb2xlKFBhZ2UmIHBhZ2UsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgdW5zaWduZWQgbG9uZyBy
ZXF1ZXN0SWRlbnRpZmllcikKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlJiBwYWdlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVz
c2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAg
IGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBXVEY6
Om1vdmUoY2FsbFN0YWNrKSwgcmVxdWVzdElkZW50aWZpZXIpOworICAgICAgICBhZGRNZXNzYWdl
VG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc291cmNlLCB0eXBlLCBsZXZlbCwg
bWVzc2FnZSwgY2FsbFN0YWNrLCByZXF1ZXN0SWRlbnRpZmllcik7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShwYWdlKTsKICAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKQEAgLTU0LDExICs1NSwx
MSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0Nv
bnNvbGUoUGFnZSYgcGFnZSwgTWVzc2FnZVNvdQogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlJiBwYWdlLCBN
ZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cywgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllcikKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRk
TWVzc2FnZVRvQ29uc29sZShQYWdlJiBwYWdlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50
cz4gYXJndW1lbnRzLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAgICAgYWRk
TWVzc2FnZVRvQ29uc29sZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNvdXJjZSwgdHlwZSwg
bGV2ZWwsIG1lc3NhZ2UsIHN0YXRlLCBXVEY6Om1vdmUoYXJndW1lbnRzKSwgcmVxdWVzdElkZW50
aWZpZXIpOworICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc3RhdGUsIGFyZ3VtZW50cywgcmVx
dWVzdElkZW50aWZpZXIpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHNvdXJjZSk7CkBAIC05MCwxMSArOTEsMTEgQEAgaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmIHBhZ2UsIE1lc3Nh
Z2VTb3UKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqIHdvcmtlckdsb2JhbFNjb3Bl
LCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxl
dmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxT
dGFjaz4mJiBjYWxsU3RhY2ssIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCitpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoV29y
a2VyR2xvYmFsU2NvcGUqIHdvcmtlckdsb2JhbFNjb3BlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwg
TWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgdW5z
aWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSkKLSAg
ICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNvdXJj
ZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIFdURjo6bW92ZShjYWxsU3RhY2spLCByZXF1ZXN0SWRl
bnRpZmllcik7CisgICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKCppbnN0cnVtZW50aW5n
QWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBjYWxsU3RhY2ssIHJlcXVlc3RJ
ZGVudGlmaWVyKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHdvcmtlckdsb2JhbFNjb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKQEAgLTEyNSwxMSArMTI2LDExIEBAIGlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShXb3JrZXJH
bG9iYWxTY29wZSogd29yCiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpjb25zb2xlQ291bnQoUGFnZSYgcGFnZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQoraW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQoUGFnZSYgcGFnZSwg
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiBhcmd1bWVudHMpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JQYWdlKHBhZ2UpKQotICAgICAgICBjb25zb2xlQ291bnRJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBzdGF0ZSwgV1RGOjptb3ZlKGFyZ3VtZW50cykpOworICAgICAgICBjb25zb2xlQ291bnRJ
bXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSwgYXJndW1lbnRzKTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNDgsMTEg
KzE0OSwxMSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29u
c29sZVRpbWluZyhGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cgogI2VuZGlmCiB9CiAKLWlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmcoRnJhbWUmIGZy
YW1lLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3Rh
Y2s+JiYgc3RhY2spCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BD
b25zb2xlVGltaW5nKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4gc3RhY2spCiB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIHN0b3BDb25zb2xl
VGltaW5nSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUsIHRpdGxlLCBXVEY6Om1vdmUo
c3RhY2spKTsKKyAgICAgICAgc3RvcENvbnNvbGVUaW1pbmdJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBmcmFtZSwgdGl0bGUsIHN0YWNrKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGZyYW1l
KTsKICAgICBVTlVTRURfUEFSQU0odGl0bGUpOwpAQCAtMTYwLDEyICsxNjEsMTIgQEAgaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYg
ZnJhbWUsIGNvbnN0IFN0cmkKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXAoRnJhbWUmIGZyYW1lLCBSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQoraW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlVGltZVN0YW1wKEZyYW1lJiBmcmFtZSwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBjb25zb2xlVGltZVN0YW1wSW1wbCgq
aW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUsIFdURjo6bW92ZShhcmd1bWVudHMpKTsKKyAgICAg
ICAgY29uc29sZVRpbWVTdGFtcEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lLCBhcmd1
bWVudHMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZnJhbWUpOwogICAgIFVOVVNFRF9QQVJB
TShhcmd1bWVudHMpOwpAQCAtMTg0LDcgKzE4NSw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c3RhcnRQcm9maWxpbmcoUGFnZSYgcGFnZSwgSlNDOjpFeGVjU3RhdGUq
CiAjZW5kaWYKIH0KIAotaW5saW5lIFJlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6c3RvcFByb2ZpbGluZyhQYWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nICZ0aXRsZSkKK2lubGluZSBQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nKFBhZ2UmIHBhZ2UsIEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcgJnRpdGxlKQogewogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA4YmYwZjM3MjRmZTU2ZDk4
MDI3ODdhZjE2NjE3M2FkNGRlYWMxMDI2Li4yZWQ4YWRmYmRlOWEwODM2NGYwZjAyZGMxYWI5NzFm
ZjhiYWJiYjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQsIEluc3BlY3Rvck92ZXJsYXk6OkMK
ICAgICBtX292ZXJsYXktPmdldEhpZ2hsaWdodChoaWdobGlnaHQsIGNvb3JkaW5hdGVTeXN0ZW0p
OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDb250cm9sbGVyOjpidWls
ZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0CitQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUo
KSBjb25zdAogewogICAgIHJldHVybiBtX292ZXJsYXktPmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0
ZWROb2RlKCk7CiB9CkBAIC00NTQsOSArNDU0LDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojpmcm9udGVuZEluaXRpYWxpemVkKCkKICNlbmRpZgogfQogCi1SZWY8U3RvcHdhdGNoPiBJbnNw
ZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQorUGFzc1JlZlB0cjxTdG9wd2F0
Y2g+IEluc3BlY3RvckNvbnRyb2xsZXI6OmV4ZWN1dGlvblN0b3B3YXRjaCgpCiB7Ci0gICAgcmV0
dXJuIG1fZXhlY3V0aW9uU3RvcHdhdGNoLmNvcHlSZWYoKTsKKyAgICByZXR1cm4gbV9leGVjdXRp
b25TdG9wd2F0Y2g7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDM4YWVlYWFhODU4YWRj
MDI2ZGQ1Mzk1YjIwMDQxOWRiYmJlMTcyYWQuLjdjNzhlZTQ5NDNlZmY0ZDQwYjVhMTQ3NGM0OTM3
YzBlMzQwY2Q4NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaApAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SW5k
aWNhdGluZyhib29sKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc1VuZGVy
VGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNVbmRlclRlc3Q7IH0KICAgICB2b2lkIHNldElzVW5k
ZXJUZXN0KGJvb2wgaXNVbmRlclRlc3QpIHsgbV9pc1VuZGVyVGVzdCA9IGlzVW5kZXJUZXN0OyB9
CkBAIC0xMzEsNyArMTMxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FsbElu
amVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHNjcmlw
dE5hbWUsIGludCBzY3JpcHRMaW5lKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2Fs
bEluamVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgZnJvbnRlbmRJbml0aWFsaXplZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
UmVmPFdURjo6U3RvcHdhdGNoPiBleGVjdXRpb25TdG9wd2F0Y2goKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V1RGOjpTdG9wd2F0Y2g+IGV4ZWN1dGlvblN0b3B3YXRjaCgpIG92
ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb247CkBAIC0xNTAsNyArMTUwLDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOwogICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKLSAgICBSZWY8V1RGOjpTdG9wd2F0Y2g+IG1fZXhlY3V0aW9uU3Rv
cHdhdGNoOworICAgIFJlZlB0cjxXVEY6OlN0b3B3YXRjaD4gbV9leGVjdXRpb25TdG9wd2F0Y2g7
CiAgICAgUGFnZSYgbV9wYWdlOwogICAgIEluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGll
bnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIG1faW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApp
bmRleCBkYWEwZGYwNzU0YjdmOWIwMWQyOWU3YzEyZDIyZDA1MDIzODc5ZTdhLi5iYmFjZGM0MTk5
ZjQ2OTdmZmNiZDcyYTAyOTE4ZGUyYTkzM2NmY2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0U2l6ZSA9IDEw
MDAwOwogc3RhdGljIGNvbnN0IFVDaGFyIGVsbGlwc2lzVUNoYXJbXSA9IHsgMHgyMDI2LCAwIH07
CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgY29sb3JPYmplY3QpCitzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY29sb3JPYmplY3QpCiB7CiAgICAgaWYgKCFjb2xvck9iamVjdCkK
ICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKQEAgLTEzMiw5ICsxMzIsOCBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNv
bG9yT2JqZWN0KQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcm
IGZpZWxkTmFtZSwgSW5zcGVjdG9yT2JqZWN0KiBjb25maWdPYmplY3QpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY29sb3JPYmplY3Q7Ci0gICAgY29uZmlnT2JqZWN0LT5nZXRPYmpl
Y3QoZmllbGROYW1lLCBjb2xvck9iamVjdCk7Ci0gICAgcmV0dXJuIHBhcnNlQ29sb3IoV1RGOjpt
b3ZlKGNvbG9yT2JqZWN0KSk7CisgICAgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29s
b3JPYmplY3QgPSBjb25maWdPYmplY3QtPmdldE9iamVjdChmaWVsZE5hbWUpOworICAgIHJldHVy
biBwYXJzZUNvbG9yKGNvbG9yT2JqZWN0KTsKIH0KIAogc3RhdGljIGJvb2wgcGFyc2VRdWFkKGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHF1YWRBcnJheSwgRmxvYXRRdWFkKiBxdWFkKQpA
QCAtNTgwLDkgKzU3OSw5IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9G
cm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQogICAgICAgICAgICAgYXV0byBuZXdNYXAgPSBzdGQ6
Om1ha2VfdW5pcXVlPE5vZGVUb0lkTWFwPigpOwogICAgICAgICAgICAgZGFuZ2xpbmdNYXAgPSBu
ZXdNYXAuZ2V0KCk7CiAgICAgICAgICAgICBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzLmFwcGVuZChu
ZXdNYXAucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUo
KTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJlbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgICAg
ICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOb2RlKG5vZGUsIDAsIGRhbmds
aW5nTWFwKSk7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2V0Q2hpbGROb2Rl
cygwLCBXVEY6Om1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5zZXRDaGlsZE5vZGVzKDAsIGNoaWxkcmVuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgcGF0aC5hcHBlbmQocGFyZW50KTsKQEAgLTg3Nywx
NCArODc2LDE1IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpCiAgICAgYXhQcm9wZXJ0aWVzID0g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhub2RlKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgY29uc3QgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYmIG5vZGVJZHMsIFN0cmluZyogc2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQp
Cit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBub2RlSWRzLCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3Vs
dENvdW50KQogewogICAgIC8vIEZJWE1FOiBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdyYW51bGFy
aXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0ZWQuCiAg
ICAgSW5zcGVjdG9yTm9kZUZpbmRlciBmaW5kZXIod2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7CiAK
ICAgICBpZiAobm9kZUlkcykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9k
ZUlkcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBub2RlVmFsdWUgPSBub2RlSWRzLT5nZXQoaSk7CisgICAgICAgIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIG5vZGVJZHNSZWYgPSAqbm9kZUlkczsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG5vZGVJZHNSZWYtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbm9kZVZhbHVlID0gbm9kZUlkc1JlZi0+Z2V0KGkpOwogICAg
ICAgICAgICAgaWYgKCFub2RlVmFsdWUpIHsKICAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9
IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBub2RlSWRzIGl0ZW0uIik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTA0NiwzNyArMTA0NiwzNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0
Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvcgog
ICAgIHJldHVybiBoaWdobGlnaHRDb25maWc7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5h
YmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBoaWdobGlnaHRDb25maWcpCit2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBoaWdobGlnaHRDb25maWcpCiB7Ci0gICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0cmlu
ZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnLmdldCgpIDogbnVs
bHB0cik7CisgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0cmluZywgZW5hYmxlZCwgaGln
aGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnLT5nZXQoKSA6IDApOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
Y29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBjb25z
dCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRSZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5h
dGVzKQogewogICAgIGF1dG8gcXVhZCA9IHN0ZDo6bWFrZV91bmlxdWU8RmxvYXRRdWFkPihGbG9h
dFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEY6
Om1vdmUocXVhZCksIGNvbG9yLmNvcHlSZWYoKSwgb3V0bGluZUNvbG9yLmNvcHlSZWYoKSwgdXNl
UGFnZUNvb3JkaW5hdGVzKTsKKyAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQp
LCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYmIHF1YWRBcnJheSwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBv
dXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKK3ZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFF1YWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBxdWFkQXJyYXksIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVD
b2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gcXVhZCA9
IHN0ZDo6bWFrZV91bmlxdWU8RmxvYXRRdWFkPigpOwogICAgIGlmICghcGFyc2VRdWFkKHF1YWRB
cnJheSwgcXVhZC5nZXQoKSkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwo
IkludmFsaWQgUXVhZCBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpbm5l
ckhpZ2hsaWdodFF1YWQoV1RGOjptb3ZlKHF1YWQpLCBjb2xvci5jb3B5UmVmKCksIG91dGxpbmVD
b2xvci5jb3B5UmVmKCksIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgaW5uZXJIaWdobGlnaHRR
dWFkKFdURjo6bW92ZShxdWFkKSwgY29sb3IsIG91dGxpbmVDb2xvciwgdXNlUGFnZUNvb3JkaW5h
dGVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGlnaHRRdWFkKHN0
ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50
Ojppbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7
CiAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBzdGQ6Om1ha2VfdW5pcXVlPEhpZ2hsaWdodENv
bmZpZz4oKTsKLSAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9y
LmNvcHlSZWYoKSk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNl
Q29sb3Iob3V0bGluZUNvbG9yLmNvcHlSZWYoKSk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250
ZW50ID0gcGFyc2VDb2xvcigqY29sb3IpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91
dGxpbmUgPSBwYXJzZUNvbG9yKCpvdXRsaW5lQ29sb3IpOwogICAgIGhpZ2hsaWdodENvbmZpZy0+
dXNlUGFnZUNvb3JkaW5hdGVzID0gdXNlUGFnZUNvb3JkaW5hdGVzID8gKnVzZVBhZ2VDb29yZGlu
YXRlcyA6IGZhbHNlOwogICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0UXVhZChXVEY6Om1vdmUocXVh
ZCksICpoaWdobGlnaHRDb25maWcpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBj
b25zdCBTdHJpbmcqIG9iamVjdElkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0
Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBT
dHJpbmcqIG9iamVjdElkKQogewogICAgIE5vZGUqIG5vZGUgPSAwOwogICAgIGlmIChub2RlSWQp
IHsKQEAgLTEwOTgsMTQgKzEwOTgsMTQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnMKICAgICBt
X292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKmhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBmcmFtZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG91dGxpbmVDb2xvcikKK3ZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBm
cmFtZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
bV9wYWdlQWdlbnQtPmZyYW1lRm9ySWQoZnJhbWVJZCk7CiAgICAgaWYgKGZyYW1lICYmIGZyYW1l
LT5vd25lckVsZW1lbnQoKSkgewogICAgICAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IHN0ZDo6
bWFrZV91bmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwogICAgICAgICBoaWdobGlnaHRDb25maWct
PnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9yIGZyYW1lcy4KLSAg
ICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xvci5jb3B5UmVm
KCkpOwotICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xv
cihvdXRsaW5lQ29sb3IuY29weVJlZigpKTsKKyAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250
ZW50ID0gcGFyc2VDb2xvcigqY29sb3IpOworICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRl
bnRPdXRsaW5lID0gcGFyc2VDb2xvcigqb3V0bGluZUNvbG9yKTsKICAgICAgICAgbV9vdmVybGF5
LT5oaWdobGlnaHROb2RlKGZyYW1lLT5vd25lckVsZW1lbnQoKSwgKmhpZ2hsaWdodENvbmZpZyk7
CiAgICAgfQogfQpAQCAtMTIyMCw3ICsxMjIwLDcgQEAgc3RhdGljIFN0cmluZyBkb2N1bWVudEJh
c2VVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+Y29t
cGxldGVVUkwoIiIpLnN0cmluZygpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUs
IGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7CiAgICAg
aW50IGlkID0gYmluZChub2RlLCBub2Rlc01hcCk7CiAgICAgU3RyaW5nIG5vZGVOYW1lOwpAQCAt
MTI1MywyMCArMTI1MywxOSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIGF1dG8gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGU6OmNyZWF0ZSgpCisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4g
dmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXROb2RlSWQoaWQpCiAgICAgICAgIC5zZXROb2RlVHlwZShzdGF0aWNfY2FzdDxpbnQ+KG5v
ZGUtPm5vZGVUeXBlKCkpKQogICAgICAgICAuc2V0Tm9kZU5hbWUobm9kZU5hbWUpCiAgICAgICAg
IC5zZXRMb2NhbE5hbWUobG9jYWxOYW1lKQotICAgICAgICAuc2V0Tm9kZVZhbHVlKG5vZGVWYWx1
ZSkKLSAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgLnNldE5vZGVWYWx1ZShub2RlVmFsdWUp
OwogCiAgICAgaWYgKG5vZGUtPmlzQ29udGFpbmVyTm9kZSgpKSB7CiAgICAgICAgIGludCBub2Rl
Q291bnQgPSBpbm5lckNoaWxkTm9kZUNvdW50KG5vZGUpOwogICAgICAgICB2YWx1ZS0+c2V0Q2hp
bGROb2RlQ291bnQobm9kZUNvdW50KTsKLSAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IGNoaWxkcmVuID0gYnVpbGRB
cnJheUZvckNvbnRhaW5lckNoaWxkcmVuKG5vZGUsIGRlcHRoLCBub2Rlc01hcCk7CisgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGU+PiBjaGlsZHJlbiA9IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihub2Rl
LCBkZXB0aCwgbm9kZXNNYXApOwogICAgICAgICBpZiAoY2hpbGRyZW4tPmxlbmd0aCgpID4gMCkK
LSAgICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZHJlbihXVEY6Om1vdmUoY2hpbGRyZW4pKTsKKyAg
ICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZHJlbihjaGlsZHJlbi5yZWxlYXNlKCkpOwogICAgIH0K
IAogICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKQEAgLTEyODMsOSArMTI4Miw5IEBAIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWls
ZE9iamVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dSb290
KiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2hhZG93
Um9vdHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBzaGFkb3dSb290cyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgc2hhZG93Um9vdHMtPmFkZEl0ZW0oYnVpbGRPYmpl
Y3RGb3JOb2RlKHJvb3QsIDAsIG5vZGVzTWFwKSk7Ci0gICAgICAgICAgICB2YWx1ZS0+c2V0U2hh
ZG93Um9vdHMoV1RGOjptb3ZlKHNoYWRvd1Jvb3RzKSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0
U2hhZG93Um9vdHMoc2hhZG93Um9vdHMpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKQEAgLTEzMTgsMjYgKzEzMTcsMjYgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2Rl
KgogICAgICAgICAgICAgdmFsdWUtPnNldFJvbGUoYXhPYmplY3QtPmNvbXB1dGVkUm9sZVN0cmlu
ZygpKTsKICAgICB9CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKHZhbHVlKTsKKyAgICByZXR1cm4g
dmFsdWUucmVsZWFzZSgpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhF
bGVtZW50KiBlbGVtZW50KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVz
KEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgYXV0byBhdHRyaWJ1dGVzVmFsdWUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gYXR0cmlidXRlc1ZhbHVlID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgLy8gR28gdGhyb3VnaCBh
bGwgYXR0cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0uCiAgICAgaWYgKCFlbGVtZW50LT5oYXNB
dHRyaWJ1dGVzKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUoYXR0cmlidXRlc1ZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNWYWx1ZS5yZWxlYXNlKCk7CiAgICAgZm9yIChjb25z
dCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGVsZW1lbnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7
CiAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgogICAgICAgICBhdHRyaWJ1dGVzVmFsdWUt
PmFkZEl0ZW0oYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpKTsKICAgICAgICAgYXR0cmlidXRl
c1ZhbHVlLT5hZGRJdGVtKGF0dHJpYnV0ZS52YWx1ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIFdU
Rjo6bW92ZShhdHRyaWJ1dGVzVmFsdWUpOworICAgIHJldHVybiBhdHRyaWJ1dGVzVmFsdWUucmVs
ZWFzZSgpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250
YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5v
ZGVzTWFwKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckNv
bnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCog
bm9kZXNNYXApCiB7Ci0gICAgYXV0byBjaGlsZHJlbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGU+PiBjaGlsZHJlbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAg
ICAgIC8vIFNwZWNpYWwtY2FzZSB0aGUgb25seSB0ZXh0IGNoaWxkIC0gcHJldGVuZCB0aGF0IGNv
bnRhaW5lcidzIGNoaWxkcmVuIGhhdmUgYmVlbiByZXF1ZXN0ZWQuCiAgICAgICAgIE5vZGUqIGZp
cnN0Q2hpbGQgPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKTsKQEAgLTEzNDUsNyArMTM0NCw3IEBA
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VuCiAgICAgICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShi
dWlsZE9iamVjdEZvck5vZGUoZmlyc3RDaGlsZCwgMCwgbm9kZXNNYXApKTsKICAgICAgICAgICAg
IG1fY2hpbGRyZW5SZXF1ZXN0ZWQuYWRkKGJpbmQoY29udGFpbmVyLCBub2Rlc01hcCkpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBXVEY6Om1vdmUoY2hpbGRyZW4pOworICAgICAgICByZXR1
cm4gY2hpbGRyZW4ucmVsZWFzZSgpOwogICAgIH0KIAogICAgIE5vZGUqIGNoaWxkID0gaW5uZXJG
aXJzdENoaWxkKGNvbnRhaW5lcik7CkBAIC0xMzU2LDEwICsxMzU1LDEwIEBAIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNw
ZWN0b3JET01BZ2VuCiAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9k
ZShjaGlsZCwgZGVwdGgsIG5vZGVzTWFwKSk7CiAgICAgICAgIGNoaWxkID0gaW5uZXJOZXh0U2li
bGluZyhjaGlsZCk7CiAgICAgfQotICAgIHJldHVybiBXVEY6Om1vdmUoY2hpbGRyZW4pOworICAg
IHJldHVybiBjaGlsZHJlbi5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2
ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogbm9kZSwgY29u
c3QgU3RyaW5nKiBvYmplY3RHcm91cElkKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2
ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogbm9kZSwgY29u
c3QgU3RyaW5nKiBvYmplY3RHcm91cElkKQogewogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyID0gcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIubGlzdGVuZXI7CiAKQEAgLTEz
ODcsMzEgKzEzODYsMjkgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0
ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXYKICAgICAgICAgfQogICAg
IH0KIAotICAgIGF1dG8gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlz
dGVuZXI6OmNyZWF0ZSgpCisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZl
bnRMaXN0ZW5lcj4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUeXBlKGV2ZW50VHlwZSkKICAgICAgICAgLnNldFVz
ZUNhcHR1cmUocmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIudXNlQ2FwdHVyZSkKICAgICAgICAgLnNl
dElzQXR0cmlidXRlKGV2ZW50TGlzdGVuZXItPmlzQXR0cmlidXRlKCkpCiAgICAgICAgIC5zZXRO
b2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKSkKLSAgICAgICAgLnNldEhhbmRsZXJC
b2R5KGJvZHkpCi0gICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIC5zZXRIYW5kbGVyQm9keShi
b2R5KTsKICAgICBpZiAob2JqZWN0R3JvdXBJZCAmJiBoYW5kbGVyICYmIHN0YXRlKSB7CiAgICAg
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXItPmluamVjdGVkU2NyaXB0Rm9yKHN0YXRlKTsKICAgICAgICAgaWYgKCFpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0SGFuZGxlcihpbmplY3RlZFNj
cmlwdC53cmFwT2JqZWN0KERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHN0YXRlLT52bSgpLCBoYW5k
bGVyKSwgKm9iamVjdEdyb3VwSWQpKTsKICAgICB9CiAgICAgaWYgKCFzY3JpcHRJRC5pc051bGwo
KSkgewotICAgICAgICBhdXRvIGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRTY3JpcHRJZChzY3Jp
cHRJRCkKLSAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0gICAgICAgICAg
ICAucmVsZWFzZSgpOwotICAgICAgICB2YWx1ZS0+c2V0TG9jYXRpb24oV1RGOjptb3ZlKGxvY2F0
aW9uKSk7CisgICAgICAgICAgICAuc2V0TGluZU51bWJlcihsaW5lTnVtYmVyKTsKKyAgICAgICAg
dmFsdWUtPnNldExvY2F0aW9uKGxvY2F0aW9uLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmICghc291
cmNlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0U291cmNlTmFtZShzb3Vy
Y2VOYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIFdURjo6bW92ZSh2YWx1ZSk7CisgICAgcmV0dXJu
IHZhbHVlLnJlbGVhc2UoKTsKIH0KICAgICAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nl
c3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+JiYgYXhP
YmplY3QsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiYmIGNoaWxkTm9k
ZUlkcykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW4oUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBheE9iamVjdCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+JiBjaGlsZE5vZGVJZHMpCiB7CiAgICAgY29uc3Qg
YXV0byYgY2hpbGRyZW4gPSBheE9iamVjdC0+Y2hpbGRyZW4oKTsKICAgICBpZiAoIWNoaWxkcmVu
LnNpemUoKSkKQEAgLTE0MjQsMTEgKzE0MjEsMTEgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4K
ICAgICAgICAgaWYgKE5vZGUqIGNoaWxkTm9kZSA9IGNoaWxkT2JqZWN0LT5ub2RlKCkpCiAgICAg
ICAgICAgICBjaGlsZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChjaGls
ZE5vZGUpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlD
aGlsZHJlbihjaGlsZE9iamVjdC5jb3B5UmVmKCksIGNoaWxkTm9kZUlkcy5jb3B5UmVmKCkpOwor
ICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihjaGlsZE9iamVjdCwgY2hp
bGROb2RlSWRzKTsKICAgICB9CiB9CiAgICAgCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMoTm9kZSogbm9kZSkKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9y
RE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTQzOSw3ICsxNDM2
LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKIAogICAgIE5vZGUqIGFjdGl2ZURlc2NlbmRh
bnROb2RlID0gbnVsbHB0cjsKICAgICBib29sIGJ1c3kgPSBmYWxzZTsKLSAgICBhdXRvIGNoZWNr
ZWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpD
aGVja2VkOjpGYWxzZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzOjpDaGVja2VkIGNoZWNrZWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxzZTsKICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4gY2hpbGROb2RlSWRzOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiBjb250cm9sbGVkTm9kZUlkczsKICAgICBi
b29sIGV4aXN0cyA9IGZhbHNlOwpAQCAtMTQ0OSwxMiArMTQ0NiwxMiBAQCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmJ1aQogICAgIGJvb2wgZm9jdXNlZCA9IGZhbHNlOwogICAgIGJvb2wgaWdub3JlZCA9
IHRydWU7CiAgICAgYm9vbCBpZ25vcmVkQnlEZWZhdWx0ID0gZmFsc2U7Ci0gICAgYXV0byBpbnZh
bGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
SW52YWxpZDo6RmFsc2U7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllczo6SW52YWxpZCBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CiAgICAgYm9vbCBoaWRk
ZW4gPSBmYWxzZTsKICAgICBTdHJpbmcgbGFiZWw7CiAgICAgYm9vbCBsaXZlUmVnaW9uQXRvbWlj
ID0gZmFsc2U7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
IGxpdmVSZWdpb25SZWxldmFudDsKLSAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3Rh
dHVzOjpPZmY7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllczo6TGl2ZVJlZ2lvblN0YXR1cyBsaXZlUmVnaW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6
T2ZmOwogICAgIE5vZGUqIG1vdXNlRXZlbnROb2RlID0gbnVsbHB0cjsKICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4gb3duZWROb2RlSWRzOwogICAgIE5vZGUqIHBh
cmVudE5vZGUgPSBudWxscHRyOwpAQCAtMTQ5NSw3ICsxNDkyLDcgQEAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFn
ZW50OjpidWkKICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW4oYXhPYmplY3QsIFdURjo6bW92ZShjaGlsZE5vZGVJZHMpKTsKKyAgICAgICAgICAgIHBy
b2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oYXhPYmplY3QsIGNoaWxkTm9kZUlkcyk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChheE9iamVjdC0+c3VwcG9ydHNBUklBQ29udHJvbHMo
KSkgewogICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50Kj4gY29udHJvbGxlZEVsZW1lbnRz
OwpAQCAtMTYyNSwxMiArMTYyMiwxMSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzPiB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNyZWF0ZSgpCisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IHZhbHVlID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Y3JlYXRlKCkKICAgICAgICAg
LnNldEV4aXN0cyhleGlzdHMpCiAgICAgICAgIC5zZXRMYWJlbChsYWJlbCkKICAgICAgICAgLnNl
dFJvbGUocm9sZSkKLSAgICAgICAgLnNldE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5v
ZGUpKQotICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQobm9kZSkpOwogCiAgICAgaWYgKGV4aXN0cykgewogICAgICAgICBpZiAoYWN0
aXZlRGVzY2VuZGFudE5vZGUpCkBAIC0xNjgzLDcgKzE2NzksNyBAQCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aQogICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkQ2hpbGROb2RlSWRzKHNlbGVj
dGVkQ2hpbGROb2RlSWRzKTsKICAgICB9CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKHZhbHVlKTsK
KyAgICByZXR1cm4gdmFsdWUucmVsZWFzZSgpOwogfQogCiBOb2RlKiBJbnNwZWN0b3JET01BZ2Vu
dDo6aW5uZXJGaXJzdENoaWxkKE5vZGUqIG5vZGUpCkBAIC0xNzU4LDEwICsxNzU0LDEwIEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZENvbW1pdExvYWQoRG9jdW1lbnQqIGRvY3VtZW50KQog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVSZW1vdmVkKHBhcmVudElkLCBmcmFt
ZU93bmVySWQpOwogICAgIHVuYmluZChmcmFtZU93bmVyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
KTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVp
bGRPYmplY3RGb3JOb2RlKGZyYW1lT3duZXIsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRP
YmplY3RGb3JOb2RlKGZyYW1lT3duZXIsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogICAg
IE5vZGUqIHByZXZpb3VzU2libGluZyA9IGlubmVyUHJldmlvdXNTaWJsaW5nKGZyYW1lT3duZXIp
OwogICAgIGludCBwcmV2SWQgPSBwcmV2aW91c1NpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRN
YXAuZ2V0KHByZXZpb3VzU2libGluZykgOiAwOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5j
aGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklkLCBXVEY6Om1vdmUodmFsdWUpKTsKKyAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50SWQsIHByZXZJ
ZCwgdmFsdWUucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5z
ZXJ0RE9NTm9kZShOb2RlJiBub2RlKQpAQCAtMTc4OCw4ICsxNzg0LDggQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogICAgICAgICAvLyBDaGls
ZHJlbiBoYXZlIGJlZW4gcmVxdWVzdGVkIC0+IHJldHVybiB2YWx1ZSBvZiBhIG5ldyBjaGlsZC4K
ICAgICAgICAgTm9kZSogcHJldlNpYmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZygmbm9kZSk7
CiAgICAgICAgIGludCBwcmV2SWQgPSBwcmV2U2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1h
cC5nZXQocHJldlNpYmxpbmcpIDogMDsKLSAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZT4gdmFsdWUgPSBidWlsZE9iamVjdEZvck5vZGUoJm5vZGUsIDAsICZtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXApOwotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2Rl
SW5zZXJ0ZWQocGFyZW50SWQsIHByZXZJZCwgV1RGOjptb3ZlKHZhbHVlKSk7CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RG
b3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIHZhbHVl
LnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC0xODUzLDcgKzE4NDksNyBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0
b21pY1N0cmluZyYgbgogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzdHlsZUF0dHJpYnV0ZUlu
dmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKQogewotICAgIGF1dG8g
bm9kZUlkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+PiBub2RlSWRzID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMCwgc2l6ZSA9IGVsZW1lbnRzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gZWxlbWVudHMuYXQoaSk7CiAgICAgICAgIGludCBpZCA9IGJvdW5k
Tm9kZUlkKGVsZW1lbnQpOwpAQCAtMTg2NSw3ICsxODYxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6c3R5bGVBdHRyaWJ1dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBl
bGVtZW4KICAgICAgICAgICAgIG1fZG9tTGlzdGVuZXItPmRpZE1vZGlmeURPTUF0dHIoZWxlbWVu
dCk7CiAgICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0oaWQpOwogICAgIH0KLSAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+aW5saW5lU3R5bGVJbnZhbGlkYXRlZChXVEY6Om1vdmUobm9kZUlkcykpOwor
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbmxpbmVTdHlsZUludmFsaWRhdGVkKG5vZGVJZHMu
cmVsZWFzZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhcmFjdGVyRGF0YU1v
ZGlmaWVkKENoYXJhY3RlckRhdGEmIGNoYXJhY3RlckRhdGEpCkBAIC0xOTg4LDcgKzE5ODQsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZUJ5QmFja2VuZElkVG9Gcm9udGVuZChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsCiAgICAgfQogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2
ZU5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1Bhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01B
Z2VudDo6cmVzb2x2ZU5vZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYg
KCFmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgK
aW5kZXggNDEyYjdjMGQ0NDEzZmMwMzY2NjcxYzE4ODZlZDI4OTY3YTc5MmM2My4uNTMwNTA1NjM5
NWE4NzdiYTkwNjJhOGQ0NTQzZTExOWM5YmZkMTZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTEzMiwyMSArMTMyLDIxIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFdURjo6U3Ry
aW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4+JiBsaXN0ZW5lcnNBcnJheSkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9k
ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiYgYXhQcm9wZXJ0aWVzKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
d2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXk+JiYgbm9kZUlkcywgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckFycmF5Piogbm9kZUlkcywgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRD
b3VudCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFNlYXJjaFJlc3VsdHMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRl
eCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4+Jikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzZWFyY2hJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJlc29sdmVOb2Rl
KEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIHJl
c3VsdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChF
cnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaGlnaGxpZ2h0Q29uZmlnKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF0
aCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwdXNoTm9kZUJ5QmFj
a2VuZElkVG9Gcm9udGVuZChFcnJvclN0cmluZyYsIEJhY2tlbmROb2RlSWQsIGludCogbm9kZUlk
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUJhY2tlbmROb2RlSWRzKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBub2RlR3JvdXApIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGNv
bG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNv
bG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXk+JiYgcXVhZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYmIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+JiYgb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgY29u
c3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0SWQpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGNvbG9yLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgb3V0bGluZUNvbG9yKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBxdWFkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdl
Q29vcmRpbmF0ZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHROb2RlKEVy
cm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaGln
aGxpZ2h0Q29uZmlnLCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodEZyYW1lKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piog
b3V0bGluZUNvbG9yKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oRXJyb3JT
dHJpbmcmLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0Tm9kZUlkLCBjb25zdCBpbnQqIGFuY2hvck5v
ZGVJZCwgaW50KiBuZXdOb2RlSWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1bmRvKEVy
cm9yU3RyaW5nJikgb3ZlcnJpZGU7CkBAIC0xODYsNyArMTg2LDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCopOwogCi0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzb2x2ZU5vZGUo
Tm9kZSosIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOworICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXNvbHZlTm9kZShOb2RlKiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CiAgICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzKCk7
CiAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0Jiwg
dW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAgICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKQEAgLTIz
MCwyMCArMjMwLDIxIEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0JyZWFrcG9pbnQoTm9kZSos
IGludCB0eXBlKTsKICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiByb290
LCB1aW50MzJfdCByb290TWFzaywgYm9vbCB2YWx1ZSk7Ci0KLSAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlPiBidWlsZE9iamVjdEZvck5vZGUoTm9kZSosIGludCBkZXB0aCwg
Tm9kZVRvSWRNYXAqKTsKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4gYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqKTsKLSAgICBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4g
YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRo
LCBOb2RlVG9JZE1hcCogbm9kZXNNYXApOwotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkV2ZW50TGlzdGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lciYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2Rl
KiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cElkKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gYnVpbGRPYmplY3RGb3JBY2Nl
c3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKik7Ci0gICAgdm9pZCBwcm9jZXNzQWNjZXNzaWJpbGl0
eUNoaWxkcmVuKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiYmLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8aW50Pj4mJik7CisgICAgdm9pZCBkZXNjcmlwdGlvbkZvckRPTUV2
ZW50KE5vZGUqIHRhcmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29sIGluc2VydGlvbiwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gZGVzY3JpcHRpb24pOworCisgICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IGJ1aWxkT2JqZWN0Rm9y
Tm9kZShOb2RlKiwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCopOworICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gYnVpbGRBcnJheUZvckVsZW1lbnRBdHRy
aWJ1dGVzKEVsZW1lbnQqKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IGJ1aWxkQXJyYXlGb3JDb250YWlu
ZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVz
TWFwKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0
ZW5lcj4gYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqLCBjb25zdCBTdHJp
bmcqIG9iamVjdEdyb3VwSWQpOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gYnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcyhOb2RlKik7CisgICAgdm9pZCBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVu
KFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4sIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxpbnQ+PiYpOwogICAgIAogICAgIE5vZGUqIG5vZGVGb3JQYXRoKGNvbnN0IFN0
cmluZyYgcGF0aCk7CiAgICAgTm9kZSogbm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQpOwogCiAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKIAotICAgIHZvaWQgaW5uZXJI
aWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+LCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYgY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29y
ZGluYXRlcyk7CisgICAgdm9pZCBpbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZs
b2F0UXVhZD4sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGNvbG9y
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3Is
IGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcyk7CiAKICAgICBJbnNwZWN0b3JQYWdlQWdl
bnQqIG1fcGFnZUFnZW50OwogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBt
X2luamVjdGVkU2NyaXB0TWFuYWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRleCBkZDhmNTIzN2JlZjY0MTk4
Y2JmYzBiNjU0ZjczNzg4MTNlNmZiOGRlLi43ODI2YTkzMDRkMTI1MmMyOWVkZmZlNWI2MzM0ZWRj
YjUzYjA5NTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC0xNzAsOSArMTcwLDkgQEAgdm9pZCBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvciwg
Y29uc3QgU3RyaW4KIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkSW52YWxpZGF0
ZVN0eWxlQXR0cihOb2RlJiBub2RlKQogewogICAgIGlmIChoYXNCcmVha3BvaW50KCZub2RlLCBB
dHRyaWJ1dGVNb2RpZmllZCkpIHsKLSAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnRE
YXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgZGVzY3JpcHRpb25Gb3JE
T01FdmVudChub2RlLCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7
Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2Vy
RnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgV1RGOjptb3ZlKGV2ZW50RGF0YSkpOwor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KCZub2RlLCBBdHRy
aWJ1dGVNb2RpZmllZCwgZmFsc2UsIGV2ZW50RGF0YS5nZXQoKSk7CisgICAgICAgIG1fZGVidWdn
ZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
OjpSZWFzb246OkRPTSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC0yNzAs
OSArMjcwLDkgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVh
a3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW4KIHZvaWQgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6d2lsbEluc2VydERPTU5vZGUoTm9kZSYgcGFyZW50KQogewogICAgIGlmICho
YXNCcmVha3BvaW50KCZwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCkpIHsKLSAgICAgICAgUmVmPElu
c3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCwgdHJ1
ZSwgZXZlbnREYXRhLmdldCgpKTsKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dy
YW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBXVEY6
Om1vdmUoZXZlbnREYXRhKSk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50
RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2NyaXB0aW9uRm9y
RE9NRXZlbnQoJnBhcmVudCwgU3VidHJlZU1vZGlmaWVkLCB0cnVlLCBldmVudERhdGEuZ2V0KCkp
OworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dl
ckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwog
ICAgIH0KIH0KIApAQCAtMjgwLDM5ICsyODAsMzkgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogewogICAgIE5vZGUqIHBhcmVu
dE5vZGUgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKCZub2RlKTsKICAgICBp
ZiAoaGFzQnJlYWtwb2ludCgmbm9kZSwgTm9kZVJlbW92ZWQpKSB7Ci0gICAgICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
ICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9kZVJlbW92ZWQsIGZhbHNlLCBldmVu
dERhdGEuZ2V0KCkpOwotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNw
ZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIFdURjo6bW92ZShl
dmVudERhdGEpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVu
dCgmbm9kZSwgTm9kZVJlbW92ZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOworICAgICAgICBt
X2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlz
cGF0Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZSBp
ZiAocGFyZW50Tm9kZSAmJiBoYXNCcmVha3BvaW50KHBhcmVudE5vZGUsIFN1YnRyZWVNb2RpZmll
ZCkpIHsKLSAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBT
dWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOwotICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hl
cjo6UmVhc29uOjpET00sIFdURjo6bW92ZShldmVudERhdGEpKTsKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudCgmbm9kZSwgU3VidHJlZU1vZGlmaWVkLCBmYWxz
ZSwgZXZlbnREYXRhLmdldCgpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dy
YW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBldmVu
dERhdGEucmVsZWFzZSgpKTsKICAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDo6d2lsbE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoaGFz
QnJlYWtwb2ludCgmZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQpKSB7Ci0gICAgICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQs
IGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOwotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFr
UHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00s
IFdURjo6bW92ZShldmVudERhdGEpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgZGVzY3JpcHRp
b25Gb3JET01FdmVudCgmZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQsIGZhbHNlLCBldmVudERh
dGEuZ2V0KCkpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIGV2ZW50RGF0YS5yZWxl
YXNlKCkpOwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkZXNj
cmlwdGlvbkZvckRPTUV2ZW50KE5vZGUmIHRhcmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29s
IGluc2VydGlvbiwgSW5zcGVjdG9yT2JqZWN0JiBkZXNjcmlwdGlvbikKK3ZvaWQgSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGlu
dCBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIEluc3BlY3Rvck9iamVjdCogZGVzY3Jp
cHRpb24pCiB7Ci0gICAgQVNTRVJUKGhhc0JyZWFrcG9pbnQoJnRhcmdldCwgYnJlYWtwb2ludFR5
cGUpKTsKKyAgICBBU1NFUlQoaGFzQnJlYWtwb2ludCh0YXJnZXQsIGJyZWFrcG9pbnRUeXBlKSk7
CiAKLSAgICBOb2RlKiBicmVha3BvaW50T3duZXIgPSAmdGFyZ2V0OworICAgIE5vZGUqIGJyZWFr
cG9pbnRPd25lciA9IHRhcmdldDsKICAgICBpZiAoKDEgPDwgYnJlYWtwb2ludFR5cGUpICYgaW5o
ZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrKSB7CiAgICAgICAgIC8vIEZvciBpbmhlcml0
YWJsZSBicmVha3BvaW50IHR5cGVzLCB0YXJnZXQgbm9kZSBpc24ndCBhbHdheXMgdGhlIHNhbWUg
YXMgdGhlIG5vZGUgdGhhdCBvd25zIGEgYnJlYWtwb2ludC4KICAgICAgICAgLy8gVGFyZ2V0IG5v
ZGUgbWF5IGJlIHVua25vd24gdG8gZnJvbnRlbmQsIHNvIHdlIG5lZWQgdG8gcHVzaCBpdCBmaXJz
dC4KLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4gdGFyZ2V0Tm9kZU9iamVjdCA9IG1fZG9tQWdlbnQtPnJlc29sdmVOb2RlKCZ0YXJnZXQs
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKTsKLSAgICAgICAg
ZGVzY3JpcHRpb24uc2V0VmFsdWUoInRhcmdldE5vZGUiLCB0YXJnZXROb2RlT2JqZWN0KTsKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
dGFyZ2V0Tm9kZU9iamVjdCA9IG1fZG9tQWdlbnQtPnJlc29sdmVOb2RlKHRhcmdldCwgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXApOworICAgICAgICBkZXNjcmlw
dGlvbi0+c2V0VmFsdWUoInRhcmdldE5vZGUiLCB0YXJnZXROb2RlT2JqZWN0KTsKIAogICAgICAg
ICAvLyBGaW5kIGJyZWFrcG9pbnQgb3duZXIgbm9kZS4KICAgICAgICAgaWYgKCFpbnNlcnRpb24p
Ci0gICAgICAgICAgICBicmVha3BvaW50T3duZXIgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQ
YXJlbnROb2RlKCZ0YXJnZXQpOworICAgICAgICAgICAgYnJlYWtwb2ludE93bmVyID0gSW5zcGVj
dG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSh0YXJnZXQpOwogICAgICAgICBBU1NFUlQoYnJl
YWtwb2ludE93bmVyKTsKICAgICAgICAgd2hpbGUgKCEobV9kb21CcmVha3BvaW50cy5nZXQoYnJl
YWtwb2ludE93bmVyKSAmICgxIDw8IGJyZWFrcG9pbnRUeXBlKSkpIHsKICAgICAgICAgICAgIE5v
ZGUqIHBhcmVudE5vZGUgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKGJyZWFr
cG9pbnRPd25lcik7CkBAIC0zMjIsMTMgKzMyMiwxMyBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSYgdGFyZ2V0LCBpbnQgYnJlYWtw
bwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlID09IFN1YnRyZWVNb2Rp
ZmllZCkKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uLnNldEJvb2xlYW4oImluc2VydGlvbiIsIGlu
c2VydGlvbik7CisgICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9u
IiwgaW5zZXJ0aW9uKTsKICAgICB9CiAKICAgICBpbnQgYnJlYWtwb2ludE93bmVyTm9kZUlkID0g
bV9kb21BZ2VudC0+Ym91bmROb2RlSWQoYnJlYWtwb2ludE93bmVyKTsKICAgICBBU1NFUlQoYnJl
YWtwb2ludE93bmVyTm9kZUlkKTsKLSAgICBkZXNjcmlwdGlvbi5zZXRJbnRlZ2VyKCJub2RlSWQi
LCBicmVha3BvaW50T3duZXJOb2RlSWQpOwotICAgIGRlc2NyaXB0aW9uLnNldFN0cmluZygidHlw
ZSIsIGRvbVR5cGVOYW1lKGJyZWFrcG9pbnRUeXBlKSk7CisgICAgZGVzY3JpcHRpb24tPnNldElu
dGVnZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7CisgICAgZGVzY3JpcHRpb24t
PnNldFN0cmluZygidHlwZSIsIGRvbVR5cGVOYW1lKGJyZWFrcG9pbnRUeXBlKSk7CiB9CiAKIGJv
b2wgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6aGFzQnJlYWtwb2ludChOb2RlKiBub2RlLCBp
bnQgdHlwZSkKQEAgLTM2NiwxMiArMzY2LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDo6cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoYm9vbCBpc0RPTUV2ZW50LCBjb25zCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXZl
bnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGV2ZW50
RGF0YS0+c2V0U3RyaW5nKCJldmVudE5hbWUiLCBmdWxsRXZlbnROYW1lKTsKICAgICBpZiAoc3lu
Y2hyb25vdXMpCi0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3Rv
ckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkV2ZW50TGlzdGVuZXIsIFdURjo6
bW92ZShldmVudERhdGEpKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0o
SW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RXZlbnRMaXN0ZW5l
ciwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CiAgICAgZWxzZQotICAgICAgICBtX2RlYnVnZ2VyQWdl
bnQtPnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVu
ZERpc3BhdGNoZXI6OlJlYXNvbjo6RXZlbnRMaXN0ZW5lciwgV1RGOjptb3ZlKGV2ZW50RGF0YSkp
OworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQo
SW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RXZlbnRMaXN0ZW5l
ciwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDo6c2V0WEhSQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKQpA
QCAtNDExLDEwICs0MTEsMTAgQEAgdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxs
U2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQogICAgIGlmIChicmVha3BvaW50
VVJMLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRVUkwiLCBicmVha3BvaW50VVJMKTsKICAg
ICBldmVudERhdGEtPnNldFN0cmluZygidXJsIiwgdXJsKTsKLSAgICBtX2RlYnVnZ2VyQWdlbnQt
PmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29u
OjpYSFIsIFdURjo6bW92ZShldmVudERhdGEpKTsKKyAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFr
UHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpYSFIs
IGV2ZW50RGF0YS5yZWxlYXNlKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ6OmNsZWFyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IGM2OWIzYjg0NTEyNmRiMjY1N2ZmNjlmMmYyZDVlODIy
MmUwNzUzNjQuLjU1ODczMzdlNWNhYTJhY2U3MDIwOTRjMjhjNWM5NDRkZDI2M2JlOGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQuaApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVz
ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlzYWJsZSgpOwogCi0gICAgdm9pZCBkZXNjcmlwdGlv
bkZvckRPTUV2ZW50KE5vZGUmIHRhcmdldCwgaW50IGJyZWFrcG9pbnRUeXBlLCBib29sIGluc2Vy
dGlvbiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGRlc2NyaXB0aW9uKTsKKyAgICB2b2lk
IGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2V0LCBpbnQgYnJlYWtwb2ludFR5cGUs
IGJvb2wgaW5zZXJ0aW9uLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogZGVzY3JpcHRpb24p
OwogICAgIHZvaWQgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqLCB1aW50MzJfdCByb290
TWFzaywgYm9vbCBzZXQpOwogICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiwgaW50IHR5cGUp
OwogICAgIHZvaWQgZGlzY2FyZEJpbmRpbmdzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4IDgxMTNjNTQxODJl
MjAzYzE4MGNjMGRiNGY4ZWMyNTVlYjVmYWZiNDguLmQ3YzVlYTMwZmNkNDI2OGZiYzBlZjllY2Qw
YmZmNWQxN2RkN2Q3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC05NCwzNCArOTQsMzQgQEAgdm9pZCBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3Rv
cmFnZUl0ZW1zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pj4mIGl0ZW1zKQordm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdG9yYWdlSWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJp
bmc+Pj4mIGl0ZW1zKQogewogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFnZUFy
ZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQu
Y29weVJlZigpLCBmcmFtZSk7CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9
IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7CiAgICAgaWYg
KCFzdG9yYWdlQXJlYSkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiTm8g
U3RvcmFnZUFyZWEgZm9yIGdpdmVuIHN0b3JhZ2VJZCIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBzdG9yYWdlSXRlbXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pjo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+PiBzdG9yYWdlSXRlbXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+Pjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RvcmFnZUFyZWEtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgU3Ry
aW5nIGtleSA9IHN0b3JhZ2VBcmVhLT5rZXkoaSk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHN0
b3JhZ2VBcmVhLT5pdGVtKGtleSk7CiAKLSAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAgZW50cnktPmFkZEl0ZW0oa2V5KTsK
ICAgICAgICAgZW50cnktPmFkZEl0ZW0odmFsdWUpOwotICAgICAgICBzdG9yYWdlSXRlbXMtPmFk
ZEl0ZW0oV1RGOjptb3ZlKGVudHJ5KSk7CisgICAgICAgIHN0b3JhZ2VJdGVtcy0+YWRkSXRlbShl
bnRyeS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIGl0ZW1zID0gV1RGOjptb3ZlKHN0b3JhZ2VJ
dGVtcyk7CisgICAgaXRlbXMgPSBzdG9yYWdlSXRlbXMucmVsZWFzZSgpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVmUHRy
PFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywg
c3RvcmFnZUlkLmNvcHlSZWYoKSwgZnJhbWUpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3Rv
cmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUp
OwogICAgIGlmICghc3RvcmFnZUFyZWEpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxp
dGVyYWwoIlN0b3JhZ2Ugbm90IGZvdW5kIik7CiAgICAgICAgIHJldHVybjsKQEAgLTEzMywxMCAr
MTMzLDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRl
bShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIGVycm9yU3RyaW5nID0g
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKFFVT1RBX0VYQ0VFREVEX0VSUikubmFtZTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBzdG9y
YWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQordm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnJlbW92ZURPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAg
ICAgRnJhbWUqIGZyYW1lOwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBm
aW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZC5jb3B5UmVmKCksIGZyYW1lKTsK
KyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVy
cm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJTdG9yYWdlIG5vdCBmb3VuZCIpOwog
ICAgICAgICByZXR1cm47CkBAIC0xNTcsMTIgKzE1NywxMSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoU3RvcmFnZSogc3RvcmFnZSkKICAgICByZXR1cm4gc3Rv
cmFnZUlkKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBpc0xvY2FsU3RvcmFnZSktPnRvSlNPTlN0cmlu
ZygpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFn
ZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2UpCitQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29sIGlzTG9j
YWxTdG9yYWdlKQogewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdl
OjpTdG9yYWdlSWQ6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0
eU9yaWdpbi0+dG9SYXdTdHJpbmcoKSkKLSAgICAgICAgLnNldElzTG9jYWxTdG9yYWdlKGlzTG9j
YWxTdG9yYWdlKQotICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAuc2V0SXNMb2NhbFN0b3Jh
Z2UoaXNMb2NhbFN0b3JhZ2UpLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlw
ZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBQYWdlKikKQEAg
LTE4Miw3ICsxODEsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkRGlzcGF0
Y2hET01TdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbgogICAgICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1VcGRhdGVkKGlkLCBrZXksIG9sZFZhbHVlLCBu
ZXdWYWx1ZSk7CiB9CiAKLVJlZlB0cjxTdG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJiB0YXJnZXRGcmFtZSkKK1Bh
c3NSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3Jh
Z2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIHN0b3JhZ2VJZCwgRnJhbWUqJiB0YXJnZXRGcmFtZSkKIHsKICAgICBTdHJpbmcgc2Vj
dXJpdHlPcmlnaW47CiAgICAgYm9vbCBpc0xvY2FsU3RvcmFnZSA9IGZhbHNlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCmluZGV4
IDM2MWI2MTNjYzFkNzU3ZDQ0NjZkZjI4OWY3ZTk2ZmFlZDBhMmFjNWQuLjZmZGIxOWRhNmUwMDQ0
NWIxNGYwZDI4OTZjM2MxMzUyNGNjMTFjZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKQEAgLTYzLDE5ICs2MywxOSBAQCBw
dWJsaWM6CiAgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KICAgICB2aXJ0dWFsIHZv
aWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RE9NU3RvcmFn
ZUl0ZW1zKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiYmIHN0b3JhZ2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+PiYgaXRlbXMpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
PiYgaXRlbXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRET01TdG9yYWdlSXRlbShF
cnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHN0b3JhZ2VJZCwgY29uc3Qg
U3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGluamVjdGVk
IHNjcmlwdC4KICAgICBTdHJpbmcgc3RvcmFnZUlkKFN0b3JhZ2UqKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBzdG9yYWdlSWQoU2VjdXJp
dHlPcmlnaW4qLCBib29sIGlzTG9jYWxTdG9yYWdlKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gc3RvcmFnZUlkKFNlY3VyaXR5T3Jp
Z2luKiwgYm9vbCBpc0xvY2FsU3RvcmFnZSk7CiAKICAgICAvLyBDYWxsZWQgZnJvbSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7CiAKIHByaXZhdGU6
Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiYsIEZyYW1lKiYpOworICAg
IFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mLCBGcmFtZSomKTsKIAogICAg
IEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yRE9NU3RvcmFnZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVu
ZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggYjQ3NDk4MzM3MDI1ODc4ZmI0OWI1ZGUzN2Q5MDFmZjQ0
ZDE0ZDUyMy4uZDVhMzk2ODA1NjMzMWM3NGRlYzUxY2U0NWY4OTYyNmNiODE1M2Q0OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNw
cApAQCAtNTgsMjAgKzU4LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsK
IAotdm9pZCByZXBvcnRUcmFuc2FjdGlvbkZhaWxlZChFeGVjdXRlU1FMQ2FsbGJhY2smIHJlcXVl
c3RDYWxsYmFjaywgU1FMRXJyb3IqIGVycm9yKQordm9pZCByZXBvcnRUcmFuc2FjdGlvbkZhaWxl
ZChFeGVjdXRlU1FMQ2FsbGJhY2sqIHJlcXVlc3RDYWxsYmFjaywgU1FMRXJyb3IqIGVycm9yKQog
ewotICAgIGF1dG8gZXJyb3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I6OmNyZWF0ZSgpCisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gZXJyb3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRNZXNzYWdlKGVycm9yLT5tZXNzYWdlKCkpCi0gICAg
ICAgIC5zZXRDb2RlKGVycm9yLT5jb2RlKCkpCi0gICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgcmVx
dWVzdENhbGxiYWNrLnNlbmRTdWNjZXNzKG51bGxwdHIsIG51bGxwdHIsIFdURjo6bW92ZShlcnJv
ck9iamVjdCkpOworICAgICAgICAuc2V0Q29kZShlcnJvci0+Y29kZSgpKTsKKyAgICByZXF1ZXN0
Q2FsbGJhY2stPnNlbmRTdWNjZXNzKG51bGxwdHIsIG51bGxwdHIsIGVycm9yT2JqZWN0LnJlbGVh
c2UoKSk7CiB9CiAKIGNsYXNzIFN0YXRlbWVudENhbGxiYWNrIDogcHVibGljIFNRTFN0YXRlbWVu
dENhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0YXRlbWVudENhbGxiYWNrPiBj
cmVhdGUoUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RhdGVtZW50Q2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPEV4ZWN1
dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU3RhdGVtZW50Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGF0ZW1lbnRDYWxsYmFjayhyZXF1ZXN0
Q2FsbGJhY2spKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5TdGF0ZW1lbnRDYWxsYmFjaygpIHsg
fQpAQCAtODAsNjAgKzc5LDU3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFNRTFJlc3VsdFNl
dFJvd0xpc3QqIHJvd0xpc3QgPSByZXN1bHRTZXQtPnJvd3MoKTsKIAotICAgICAgICBhdXRvIGNv
bHVtbk5hbWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1
bW5OYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwog
ICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29sdW1ucyA9IHJvd0xpc3QtPmNvbHVtbk5h
bWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29sdW1ucy5zaXplKCk7ICsr
aSkKICAgICAgICAgICAgIGNvbHVtbk5hbWVzLT5hZGRJdGVtKGNvbHVtbnNbaV0pOwogCi0gICAg
ICAgIGF1dG8gdmFsdWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFs
dWU+OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3RvclZhbHVlPj4gdmFsdWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yVmFsdWU+OjpjcmVhdGUoKTsKICAgICAgICAgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYg
ZGF0YSA9IHJvd0xpc3QtPnZhbHVlcygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGRhdGEuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSA9
IHJvd0xpc3QtPnZhbHVlcygpW2ldOwotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBpbnNwZWN0b3JWYWx1ZTsKICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpTdHJpbmdWYWx1ZTogaW5zcGVjdG9yVmFsdWUgPSBJ
bnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZS5zdHJpbmcoKSk7IGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBTUUxWYWx1ZTo6TnVtYmVyVmFsdWU6IGluc3BlY3RvclZhbHVlID0gSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlLm51bWJlcigpKTsgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFNRTFZhbHVlOjpOdWxsVmFsdWU6IGluc3BlY3RvclZhbHVlID0gSW5zcGVjdG9yVmFsdWU6
Om51bGwoKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpTdHJpbmdWYWx1ZTog
dmFsdWVzLT5hZGRJdGVtKEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlLnN0cmluZygpKSk7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVtYmVyVmFsdWU6IHZhbHVlcy0+
YWRkSXRlbShJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUubnVtYmVyKCkpKTsgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdWxsVmFsdWU6IHZhbHVlcy0+YWRkSXRl
bShJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHZhbHVlcy0+YWRkSXRlbShXVEY6Om1vdmUoaW5zcGVjdG9yVmFs
dWUpKTsKICAgICAgICAgfQotICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3Mo
V1RGOjptb3ZlKGNvbHVtbk5hbWVzKSwgV1RGOjptb3ZlKHZhbHVlcyksIG51bGxwdHIpOworICAg
ICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoY29sdW1uTmFtZXMucmVsZWFzZSgp
LCB2YWx1ZXMucmVsZWFzZSgpLCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIFN0YXRlbWVudENhbGxiYWNrKFJlZjxFeGVjdXRlU1FMQ2FsbGJh
Y2s+JiYgcmVxdWVzdENhbGxiYWNrKQotICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKFdURjo6
bW92ZShyZXF1ZXN0Q2FsbGJhY2spKSB7IH0KLSAgICBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiBt
X3JlcXVlc3RDYWxsYmFjazsKKyAgICBTdGF0ZW1lbnRDYWxsYmFjayhQYXNzUmVmUHRyPEV4ZWN1
dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQorICAgICAgICA6IG1fcmVxdWVzdENhbGxi
YWNrKHJlcXVlc3RDYWxsYmFjaykgeyB9CisgICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4g
bV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCiBjbGFzcyBTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIDog
cHVibGljIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8U3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gY3JlYXRlKFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+
JiYgcmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YXRlbWVudEVycm9y
Q2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENh
bGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RhdGVtZW50RXJy
b3JDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0YXRlbWVudEVycm9yQ2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSk7CiAg
ICAgfQogCiAgICAgdmlydHVhbCB+U3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIHsgfQogCiAgICAg
dmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMRXJyb3IqIGVycm9y
KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQobV9yZXF1
ZXN0Q2FsbGJhY2suY29weVJlZigpLCBlcnJvcik7CisgICAgICAgIHJlcG9ydFRyYW5zYWN0aW9u
RmFpbGVkKG1fcmVxdWVzdENhbGxiYWNrLmdldCgpLCBlcnJvcik7CiAgICAgICAgIHJldHVybiB0
cnVlOyAgCiAgICAgfQogCiBwcml2YXRlOgotICAgIFN0YXRlbWVudEVycm9yQ2FsbGJhY2soUmVm
PEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCi0gICAgICAgIDogbV9yZXF1
ZXN0Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpIHsgfQotICAgIFJlZjxFeGVj
dXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2soUGFzc1JlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAg
ICAgICAgOiBtX3JlcXVlc3RDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2spIHsgfQorICAgIFJlZlB0
cjxFeGVjdXRlU1FMQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogY2xhc3MgVHJh
bnNhY3Rpb25DYWxsYmFjayA6IHB1YmxpYyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIHNxbFN0YXRlbWVudCwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJh
Y2spCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb25DYWxsYmFjaz4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4g
cmVxdWVzdENhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVHJh
bnNhY3Rpb25DYWxsYmFjayhzcWxTdGF0ZW1lbnQsIFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2sp
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25DYWxsYmFjayhzcWxT
dGF0ZW1lbnQsIHJlcXVlc3RDYWxsYmFjaykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgflRyYW5z
YWN0aW9uQ2FsbGJhY2soKSB7IH0KQEAgLTE0NCwyNCArMTQwLDI0IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIFZlY3RvcjxTUUxWYWx1ZT4gc3FsVmFsdWVz
OwotICAgICAgICBSZWY8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrKFN0YXRlbWVudENh
bGxiYWNrOjpjcmVhdGUobV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSk7Ci0gICAgICAgIFJl
ZjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKFN0YXRlbWVudEVycm9y
Q2FsbGJhY2s6OmNyZWF0ZShtX3JlcXVlc3RDYWxsYmFjay5jb3B5UmVmKCkpKTsKLSAgICAgICAg
dHJhbnNhY3Rpb24tPmV4ZWN1dGVTUUwobV9zcWxTdGF0ZW1lbnQsIHNxbFZhbHVlcywgV1RGOjpt
b3ZlKGNhbGxiYWNrKSwgV1RGOjptb3ZlKGVycm9yQ2FsbGJhY2spLCBJR05PUkVfRVhDRVBUSU9O
KTsKKyAgICAgICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjayhTdGF0ZW1l
bnRDYWxsYmFjazo6Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrLmdldCgpKSk7CisgICAgICAgIFJl
ZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s6OmNyZWF0ZShtX3JlcXVlc3RDYWxsYmFjay5nZXQoKSkpOworICAgICAgICB0
cmFuc2FjdGlvbi0+ZXhlY3V0ZVNRTChtX3NxbFN0YXRlbWVudCwgc3FsVmFsdWVzLCBjYWxsYmFj
ay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBJR05PUkVfRVhDRVBUSU9OKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogcHJpdmF0ZToKLSAgICBUcmFuc2FjdGlvbkNh
bGxiYWNrKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNr
PiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBUcmFuc2FjdGlvbkNhbGxiYWNrKGNvbnN0IFN0cmlu
ZyYgc3FsU3RhdGVtZW50LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENh
bGxiYWNrKQogICAgICAgICA6IG1fc3FsU3RhdGVtZW50KHNxbFN0YXRlbWVudCkKLSAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9CisgICAg
ICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSB7IH0KICAgICBTdHJpbmcg
bV9zcWxTdGF0ZW1lbnQ7Ci0gICAgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4gbV9yZXF1ZXN0Q2Fs
bGJhY2s7CisgICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7
CiB9OwogCiBjbGFzcyBUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgU1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaz4gY3JlYXRlKFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENh
bGxiYWNrKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4g
Y3JlYXRlKFBhc3NSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSk7CiAgICAgfQog
CiAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkgeyB9CkBAIC0xNzIsMTYg
KzE2OCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIHByaXZhdGU6
Ci0gICAgVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYg
cmVxdWVzdENhbGxiYWNrKQotICAgICAgICA6IG1fcmVxdWVzdENhbGxiYWNrKFdURjo6bW92ZShy
ZXF1ZXN0Q2FsbGJhY2spKSB7IH0KLSAgICBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiBtX3JlcXVl
c3RDYWxsYmFjazsKKyAgICBUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxFeGVj
dXRlU1FMQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICAgICAgOiBtX3JlcXVlc3RDYWxs
YmFjayhyZXF1ZXN0Q2FsbGJhY2spIHsgfQorICAgIFJlZlB0cjxFeGVjdXRlU1FMQ2FsbGJhY2s+
IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogY2xhc3MgVHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJh
Y2sgOiBwdWJsaWMgVm9pZENhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRyYW5z
YWN0aW9uU3VjY2Vzc0NhbGxiYWNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRy
YW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2soKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2soKSk7CiAgICAgfQog
CiAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2soKSB7IH0KQEAgLTI3Niw4
ICsyNzIsMTAgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxl
TmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yLCBjb25zdCBTdHIKICAgICB9CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFj
az4mJiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1
dGVTUUwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTENhbGxiYWNrPiBwcnBSZXF1ZXN0Q2FsbGJh
Y2spCiB7CisgICAgUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrID0g
cHJwUmVxdWVzdENhbGxiYWNrOworCiAgICAgaWYgKCFtX2VuYWJsZWQpIHsKICAgICAgICAgcmVx
dWVzdENhbGxiYWNrLT5zZW5kRmFpbHVyZSgiRGF0YWJhc2UgYWdlbnQgaXMgbm90IGVuYWJsZWQi
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjg5LDEwICsyODcsMTAgQEAgdm9pZCBJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZUlkLAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+IGNhbGxiYWNrKFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShxdWVyeSwgcmVx
dWVzdENhbGxiYWNrLmdldCgpKSk7Ci0gICAgUmVmPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjayhUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShyZXF1ZXN0
Q2FsbGJhY2suZ2V0KCkpKTsKLSAgICBSZWY8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2so
VHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKLSAgICBkYXRhYmFzZS0+dHJh
bnNhY3Rpb24oV1RGOjptb3ZlKGNhbGxiYWNrKSwgV1RGOjptb3ZlKGVycm9yQ2FsbGJhY2spLCBX
VEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s+IGNhbGxiYWNrKFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShxdWVyeSwgcmVxdWVz
dENhbGxiYWNrLmdldCgpKSk7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjayhUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShyZXF1ZXN0
Q2FsbGJhY2suZ2V0KCkpKTsKKyAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2soVHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKKyAgICBkYXRhYmFzZS0+
dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwg
c3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpkYXRhYmFzZUlkKERhdGFiYXNlKiBkYXRhYmFzZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCmluZGV4IDM4ZTNmMzEyYmJh
Mzc4M2FiMmYzMGUzZTU0NTA5ZmU2NDVlMjY5MWEuLjc3ZWZlZGYwODU1Njg3NWY5YmE5NTVjNzkx
YWIwNTNiNjJhYmZjNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlQWdlbnQuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBk
aXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFi
YXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBuYW1lcykgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+
JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBQYXNzUmVmUHRy
PEV4ZWN1dGVTUUxDYWxsYmFjaz4pIG92ZXJyaWRlOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gdGhl
IGluamVjdGVkIHNjcmlwdC4KICAgICBTdHJpbmcgZGF0YWJhc2VJZChEYXRhYmFzZSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlSW5zdHJ1
bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VJ
bnN0cnVtZW50YXRpb24uaAppbmRleCBjZGVjM2FjYzNjNTYxNDM1ZDI4MmI2M2RhMTY3YTEyZjQw
MmJkMjlkLi5kNmNiNjIzNmJjOGFlMDYyNTkwNmZiOTIyMzRmZDkxODExZTdhNWUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VJ
bnN0cnVtZW50YXRpb24uaApAQCAtMzgsMTEgKzM4LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUmVmUHRyPERhdGFiYXNlPiYmIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCitpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5n
JiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkK
LSAgICAgICAgZGlkT3BlbkRhdGFiYXNlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgV1RGOjpt
b3ZlKGRhdGFiYXNlKSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKTsKKyAgICAgICAgZGlkT3BlbkRh
dGFiYXNlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZGF0YWJhc2UsIGRvbWFpbiwgbmFtZSwg
dmVyc2lvbik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKICAgICBVTlVTRURf
UEFSQU0oZGF0YWJhc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwCmluZGV4IDliYWY1ZmY3NjFhYzE4NGM1MjQ1YTVi
NTI4OThkMjMzZDI0MDhhZmYuLjgzYjg4NDJlYzVmNTA3MzYwNzU5NGI5OGI0MGVjMmU3NzM1OGI0
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZS5jcHAKQEAgLTQzLDEyICs0MywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHN0YXRpYyBpbnQgbmV4dFVudXNlZElkID0gMTsKIAotUmVmPEluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2U+IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmNyZWF0ZShSZWZQdHI8RGF0YWJh
c2U+JiYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZT4gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJh
c2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZlcnNpb24pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVj
dG9yRGF0YWJhc2VSZXNvdXJjZShXVEY6Om1vdmUoZGF0YWJhc2UpLCBkb21haW4sIG5hbWUsIHZl
cnNpb24pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2UoZGF0YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lvbikpOwogfQogCi1JbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlOjpJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKFJlZlB0cjxEYXRhYmFzZT4m
JiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2ZXJzaW9uKQorSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6SW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3Ry
aW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQog
ICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKICAgICAsIG1faWQoU3RyaW5nOjpudW1iZXIobmV4
dFVudXNlZElkKyspKQogICAgICwgbV9kb21haW4oZG9tYWluKQpAQCAtNTksMTMgKzU5LDEyIEBA
IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6Okluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UoUmVm
UHRyPERhdGFiYXNlPiYmIGRhdGFiYXNlCiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZTo6YmluZChJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciogZGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXIpCiB7Ci0gICAgYXV0byBqc29uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlOjpjcmVhdGUoKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2U+IGpzb25PYmplY3QgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJZChtX2lk
KQogICAgICAgICAuc2V0RG9tYWluKG1fZG9tYWluKQogICAgICAgICAuc2V0TmFtZShtX25hbWUp
Ci0gICAgICAgIC5zZXRWZXJzaW9uKG1fdmVyc2lvbikKLSAgICAgICAgLnJlbGVhc2UoKTsKLSAg
ICBkYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlci0+YWRkRGF0YWJhc2UoV1RGOjptb3ZlKGpzb25P
YmplY3QpKTsKKyAgICAgICAgLnNldFZlcnNpb24obV92ZXJzaW9uKTsKKyAgICBkYXRhYmFzZUZy
b250ZW5kRGlzcGF0Y2hlci0+YWRkRGF0YWJhc2UoanNvbk9iamVjdCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGF0YWJhc2VSZXNvdXJjZS5oCmluZGV4IGNhYTY4YWFjYWU0YTYxYmQyOWE0ZjI1ZjIzNTgz
NDgwZDBjODJiYmQuLjk4OGEyNzdhM2ZjMDA4MGQxODk3NGM3M2M4OWIzZTBkNTczNjUyMjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuaApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpICYmIEVO
QUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRE
aXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CkBAIC00NCwxNSArNDUsMTUgQEAgY2xhc3MgRGF0YWJhc2U7CiAKIGNs
YXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlPiBjcmVhdGUoUmVmUHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJpbmcm
IGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IGNyZWF0ZShQYXNz
UmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKIAogICAgIHZvaWQgYmluZChJbnNw
ZWN0b3I6Okluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKik7CiAgICAgRGF0YWJh
c2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0
RGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7IG1fZGF0YWJhc2UgPSBkYXRh
YmFzZTsgfQorICAgIHZvaWQgc2V0RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJh
c2UpIHsgbV9kYXRhYmFzZSA9IGRhdGFiYXNlOyB9CiAgICAgU3RyaW5nIGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZDsgfQogCiBwcml2YXRlOgotICAgIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2Uo
UmVmUHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAgIEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAKICAgICBSZWZQdHI8RGF0YWJhc2U+
IG1fZGF0YWJhc2U7CiAgICAgU3RyaW5nIG1faWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKaW5kZXggNTBiZmUyMTMwNjdhYmUyNDk0YjRl
N2MyZGRkZmIwMjViOWMwMzg4Yi4uMWE3NGVkYjM5OGNjOWIxNmI3NjBjZjhlYjNjMWZhYjY5ZjM1
ODNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaApAQCAtNDUsOSArNDUsOSBAQCBjbGFzcyBQYWdlOwogCiBjbGFzcyBJbnNwZWN0b3JG
cm9udGVuZEhvc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEluc3BlY3RvckZyb250ZW5kSG9zdD4gY3JlYXRlKElu
c3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQsIFBhZ2UqIGZyb250ZW5kUGFnZSkKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IGNyZWF0ZShJbnNwZWN0b3JG
cm9udGVuZENsaWVudCogY2xpZW50LCBQYWdlKiBmcm9udGVuZFBhZ2UpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoY2xpZW50LCBmcm9u
dGVuZFBhZ2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGcm9udGVu
ZEhvc3QoY2xpZW50LCBmcm9udGVuZFBhZ2UpKTsKICAgICB9CiAKICAgICBXRUJDT1JFX0VYUE9S
VCB+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCBmNzljMDJlNzg3ZTY0OTVl
NjVhNTQ4N2M4YjhiMGIxYzFkMWU4ZDcyLi5kYTE2YTg0MWYzZTgwNmNiNmI3MWRmZjc4Y2RjMzAx
NDcyN2QwOTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTkyLDkgKzkyLDkgQEAgbmFtZXNwYWNlIHsKIGNsYXNz
IEdldERhdGFiYXNlTmFtZXNDYWxsYmFjayA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2spOwogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8R2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiBjcmVhdGUoUmVmPFJlcXVl
c3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBTdHJpbmcm
IHNlY3VyaXR5T3JpZ2luKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdldERhdGFiYXNlTmFtZXND
YWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4g
cmVxdWVzdENhbGxiYWNrLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKFdURjo6
bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBzZWN1cml0eU9yaWdpbikpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEdldERhdGFiYXNlTmFtZXNDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2ssIHNl
Y3VyaXR5T3JpZ2luKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+R2V0RGF0YWJhc2VOYW1lc0Nh
bGxiYWNrKCkgeyB9CkBAIC0xMjYsMTggKzEyNiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAog
ICAgICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZGF0YWJhc2VOYW1lc0xpc3QgPSByZXF1ZXN0
UmVzdWx0LT5kb21TdHJpbmdMaXN0KCk7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiBkYXRhYmFzZU5hbWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiBkYXRhYmFzZU5hbWVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0
YWJhc2VOYW1lc0xpc3QtPmxlbmd0aCgpOyArK2kpCiAgICAgICAgICAgICBkYXRhYmFzZU5hbWVz
LT5hZGRJdGVtKGRhdGFiYXNlTmFtZXNMaXN0LT5pdGVtKGkpKTsKLSAgICAgICAgbV9yZXF1ZXN0
Q2FsbGJhY2stPnNlbmRTdWNjZXNzKFdURjo6bW92ZShkYXRhYmFzZU5hbWVzKSk7CisgICAgICAg
IG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIEdldERhdGFiYXNlTmFtZXNDYWxsYmFjayhSZWY8UmVx
dWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IFN0cmlu
ZyYgc2VjdXJpdHlPcmlnaW4pCisgICAgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrKFBhc3NSZWZQ
dHI8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrLCBjb25zdCBT
dHJpbmcmIHNlY3VyaXR5T3JpZ2luKQogICAgICAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0
ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2so
V1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpCisgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2so
cmVxdWVzdENhbGxiYWNrKQogICAgICAgICAsIG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmln
aW4pIHsgfQotICAgIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiBtX3JlcXVlc3RD
YWxsYmFjazsKKyAgICBSZWZQdHI8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4gbV9yZXF1
ZXN0Q2FsbGJhY2s7CiAgICAgU3RyaW5nIG1fc2VjdXJpdHlPcmlnaW47CiB9OwogCkBAIC0xNDcs
OCArMTQ3LDggQEAgcHVibGljOgogICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KSB7IH0KICAg
ICB2aXJ0dWFsIH5FeGVjdXRhYmxlV2l0aERhdGFiYXNlKCkgeyB9OwogICAgIHZvaWQgc3RhcnQo
SURCRmFjdG9yeSosIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUp
OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKFJlZlB0cjxJREJEYXRhYmFzZT4mJikgPSAwOwot
ICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4pID0gMDsKKyAgICB2
aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayogcmVxdWVzdENhbGxiYWNrKCkgPSAwOwogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH07CiBwcml2
YXRlOgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKQEAgLTE1Niw5ICsx
NTYsOSBAQCBwcml2YXRlOgogCiBjbGFzcyBPcGVuRGF0YWJhc2VDYWxsYmFjayA6IHB1YmxpYyBF
dmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9wZW5EYXRhYmFzZUNhbGxi
YWNrPiBjcmVhdGUoRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSogZXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxPcGVuRGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRlKEV4
ZWN1dGFibGVXaXRoRGF0YWJhc2UqIGV4ZWN1dGFibGVXaXRoRGF0YWJhc2UpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGVuRGF0YWJhc2VDYWxsYmFjayhleGVjdXRhYmxl
V2l0aERhdGFiYXNlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlbkRhdGFiYXNl
Q2FsbGJhY2soZXhlY3V0YWJsZVdpdGhEYXRhYmFzZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwg
fk9wZW5EYXRhYmFzZUNhbGxiYWNrKCkgeyB9CkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZl
bnQqIGV2ZW50KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkgewotICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0
aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCBldmVu
dCB0eXBlLiIpOworICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0
Q2FsbGJhY2soKS0+c2VuZEZhaWx1cmUoIlVuZXhwZWN0ZWQgZXZlbnQgdHlwZS4iKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNzksMTYgKzE3OSwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBSZWZQdHI8SURCQW55PiBy
ZXF1ZXN0UmVzdWx0ID0gaWRiT3BlbkRCUmVxdWVzdC0+cmVzdWx0KGVjKTsKICAgICAgICAgaWYg
KGVjKSB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxs
YmFjaygpLnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHJlc3VsdCBpbiBjYWxsYmFjay4iKTsK
KyAgICAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCkt
PnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHJlc3VsdCBpbiBjYWxsYmFjay4iKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAocmVxdWVzdFJlc3VsdC0+dHlw
ZSgpICE9IElEQkFueTo6SURCRGF0YWJhc2VUeXBlKSB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGFi
bGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVk
IHJlc3VsdCB0eXBlLiIpOworICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5y
ZXF1ZXN0Q2FsbGJhY2soKS0+c2VuZEZhaWx1cmUoIlVuZXhwZWN0ZWQgcmVzdWx0IHR5cGUuIik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBSZWZQdHI8SURCRGF0
YWJhc2U+IGlkYkRhdGFiYXNlID0gcmVxdWVzdFJlc3VsdC0+aWRiRGF0YWJhc2UoKTsKLSAgICAg
ICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5leGVjdXRlKFdURjo6bW92ZShpZGJEYXRhYmFz
ZSkpOworICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPmV4ZWN1dGUoaWRiRGF0YWJh
c2UpOwogICAgICAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpkZWFjdGl2YXRlTmV3
VHJhbnNhY3Rpb25zKCk7CiAgICAgICAgIGlkYkRhdGFiYXNlLT5jbG9zZSgpOwogICAgIH0KQEAg
LTIwMiwxMzYgKzIwMiwxMjcgQEAgcHJpdmF0ZToKIAogdm9pZCBFeGVjdXRhYmxlV2l0aERhdGFi
YXNlOjpzdGFydChJREJGYWN0b3J5KiBpZGJGYWN0b3J5LCBTZWN1cml0eU9yaWdpbiosIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VOYW1lKQogewotICAgIFJlZjxPcGVuRGF0YWJhc2VDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBPcGVuRGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKHRoaXMpOworICAgIFJlZlB0
cjxPcGVuRGF0YWJhc2VDYWxsYmFjaz4gY2FsbGJhY2sgPSBPcGVuRGF0YWJhc2VDYWxsYmFjazo6
Y3JlYXRlKHRoaXMpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxJREJP
cGVuREJSZXF1ZXN0PiBpZGJPcGVuREJSZXF1ZXN0ID0gaWRiRmFjdG9yeS0+b3Blbihjb250ZXh0
KCksIGRhdGFiYXNlTmFtZSwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0Q2Fs
bGJhY2soKS5zZW5kRmFpbHVyZSgiQ291bGQgbm90IG9wZW4gZGF0YWJhc2UuIik7CisgICAgICAg
IHJlcXVlc3RDYWxsYmFjaygpLT5zZW5kRmFpbHVyZSgiQ291bGQgbm90IG9wZW4gZGF0YWJhc2Uu
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWRiT3BlbkRCUmVxdWVzdC0+YWRkRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBXVEY6Om1vdmUoY2FsbGJhY2sp
LCBmYWxzZSk7CisgICAgaWRiT3BlbkRCUmVxdWVzdC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuc3VjY2Vzc0V2ZW50LCBjYWxsYmFjaywgZmFsc2UpOwogfQogCi1zdGF0aWMgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIElEQkRhdGFiYXNlKiBpZGJEYXRhYmFzZSwg
Y29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kZSA9IElEQlRy
YW5zYWN0aW9uOjptb2RlUmVhZE9ubHkoKSkKK3N0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIElEQkRhdGFiYXNlKiBpZGJEYXRhYmFzZSwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kZSA9IElEQlRyYW5zYWN0aW9uOjpt
b2RlUmVhZE9ubHkoKSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9uID0gaWRiRGF0YWJhc2UtPnRyYW5zYWN0aW9u
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG9iamVjdFN0b3JlTmFtZSwgbW9kZSwgZWMpOwogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShp
ZGJUcmFuc2FjdGlvbik7CisgICAgcmV0dXJuIGlkYlRyYW5zYWN0aW9uOwogfQogCi1zdGF0aWMg
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZUZvclRyYW5zYWN0aW9uKElEQlRyYW5z
YWN0aW9uKiBpZGJUcmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCitz
dGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmVGb3JUcmFuc2FjdGlv
bihJREJUcmFuc2FjdGlvbiogaWRiVHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3Rv
cmVOYW1lKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZT4gaWRiT2JqZWN0U3RvcmUgPSBpZGJUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmVOYW1lLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gV1RGOjptb3ZlKGlkYk9iamVjdFN0b3JlKTsKKyAgICByZXR1cm4gaWRiT2Jq
ZWN0U3RvcmU7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SURCSW5kZXg+IGluZGV4Rm9yT2JqZWN0U3Rv
cmUoSURCT2JqZWN0U3RvcmUqIGlkYk9iamVjdFN0b3JlLCBjb25zdCBTdHJpbmcmIGluZGV4TmFt
ZSkKK3N0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4PiBpbmRleEZvck9iamVjdFN0b3JlKElEQk9i
amVjdFN0b3JlKiBpZGJPYmplY3RTdG9yZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpCiB7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPElEQkluZGV4PiBpZGJJbmRleCA9
IGlkYk9iamVjdFN0b3JlLT5pbmRleChpbmRleE5hbWUsIGVjKTsKICAgICBpZiAoZWMpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBXVEY6Om1vdmUoaWRiSW5kZXgpOworICAg
IHJldHVybiBpZGJJbmRleDsKIH0KIAotc3RhdGljIFJlZlB0cjxLZXlQYXRoPiBrZXlQYXRoRnJv
bUlEQktleVBhdGgoY29uc3QgSURCS2V5UGF0aCYgaWRiS2V5UGF0aCkKK3N0YXRpYyBQYXNzUmVm
UHRyPEtleVBhdGg+IGtleVBhdGhGcm9tSURCS2V5UGF0aChjb25zdCBJREJLZXlQYXRoJiBpZGJL
ZXlQYXRoKQogewogICAgIFJlZlB0cjxLZXlQYXRoPiBrZXlQYXRoOwogICAgIHN3aXRjaCAoaWRi
S2V5UGF0aC50eXBlKCkpIHsKICAgICBjYXNlIElEQktleVBhdGg6Ok51bGxUeXBlOgotICAgICAg
ICBrZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEtleVBh
dGg6OlR5cGU6Ok51bGwpCi0gICAgICAgICAgICAucmVsZWFzZSgpOworICAgICAgICBrZXlQYXRo
ID0gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpOdWxsKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlOgotICAgICAgICBrZXlQ
YXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEtleVBhdGg6OlR5
cGU6OlN0cmluZykKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIGtleVBhdGggPSBL
ZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6OlN0cmluZyk7CiAgICAgICAg
IGtleVBhdGgtPnNldFN0cmluZyhpZGJLZXlQYXRoLnN0cmluZygpKTsKLQogICAgICAgICBicmVh
azsKICAgICBjYXNlIElEQktleVBhdGg6OkFycmF5VHlwZTogewotICAgICAgICBhdXRvIGFycmF5
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAg
IGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6OkFycmF5
KTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGFy
cmF5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAg
ICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJpbmdBcnJheSA9IGlkYktleVBhdGguYXJyYXko
KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmdBcnJheS5zaXplKCk7ICsr
aSkKICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHN0cmluZ0FycmF5W2ldKTsKLSAgICAgICAg
a2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShLZXlQYXRo
OjpUeXBlOjpBcnJheSkKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgIGtleVBhdGgt
PnNldEFycmF5KFdURjo6bW92ZShhcnJheSkpOworICAgICAgICBrZXlQYXRoLT5zZXRBcnJheShh
cnJheSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKGtleVBhdGgp
OworICAgIHJldHVybiBrZXlQYXRoLnJlbGVhc2UoKTsKIH0KIAogY2xhc3MgRGF0YWJhc2VMb2Fk
ZXIgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiByZXF1
ZXN0Q2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFz
ZUxvYWRlcihjb250ZXh0LCBXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlTG9hZGVyKGNvbnRleHQsIHJlcXVlc3RDYWxsYmFj
aykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkRhdGFiYXNlTG9hZGVyKCkgeyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZShSZWZQdHI8SURCRGF0YWJhc2U+JiYgZGF0YWJhc2UpIG92ZXJy
aWRlCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gcHJw
RGF0YWJhc2UpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIXJlcXVlc3RDYWxsYmFjaygp
LmlzQWN0aXZlKCkpCisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UgPSBw
cnBEYXRhYmFzZTsKKyAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS0+aXNBY3RpdmUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
IGRhdGFiYXNlTWV0YWRhdGEgPSBkYXRhYmFzZS0+bWV0YWRhdGEoKTsKKyAgICAgICAgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSBkYXRhYmFzZU1ldGFkYXRhID0gaWRiRGF0YWJhc2UtPm1ldGFk
YXRhKCk7CiAKLSAgICAgICAgYXV0byBvYmplY3RTdG9yZXMgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPjo6Y3Jl
YXRlKCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPj4gb2JqZWN0U3RvcmVzID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpP
YmplY3RTdG9yZT46OmNyZWF0ZSgpOwogCiAgICAgICAgIGZvciAoY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA6IGRhdGFiYXNlTWV0YWRhdGEub2JqZWN0
U3RvcmVzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBhdXRvIGluZGV4ZXMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0
b3JlSW5kZXg+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5k
ZXg+PiBpbmRleGVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4Pjo6Y3JlYXRlKCk7CiAKICAgICAgICAg
ICAgIGZvciAoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA6IG9iamVjdFN0
b3JlTWV0YWRhdGEuaW5kZXhlcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIFJlZjxPYmpl
Y3RTdG9yZUluZGV4PiBvYmplY3RTdG9yZUluZGV4ID0gT2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRl
KCkKKyAgICAgICAgICAgICAgICBSZWZQdHI8T2JqZWN0U3RvcmVJbmRleD4gb2JqZWN0U3RvcmVJ
bmRleCA9IE9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5z
ZXROYW1lKGluZGV4TWV0YWRhdGEubmFtZSkKICAgICAgICAgICAgICAgICAgICAgLnNldEtleVBh
dGgoa2V5UGF0aEZyb21JREJLZXlQYXRoKGluZGV4TWV0YWRhdGEua2V5UGF0aCkpCiAgICAgICAg
ICAgICAgICAgICAgIC5zZXRVbmlxdWUoaW5kZXhNZXRhZGF0YS51bmlxdWUpCi0gICAgICAgICAg
ICAgICAgICAgIC5zZXRNdWx0aUVudHJ5KGluZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkKLSAgICAg
ICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpbmRleGVzLT5hZGRJ
dGVtKFdURjo6bW92ZShvYmplY3RTdG9yZUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIC5z
ZXRNdWx0aUVudHJ5KGluZGV4TWV0YWRhdGEubXVsdGlFbnRyeSk7CisgICAgICAgICAgICAgICAg
aW5kZXhlcy0+YWRkSXRlbShvYmplY3RTdG9yZUluZGV4KTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgUmVmPE9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IE9iamVjdFN0b3JlOjpjcmVh
dGUoKQorICAgICAgICAgICAgUmVmUHRyPE9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IE9iamVj
dFN0b3JlOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXROYW1lKG9iamVjdFN0b3JlTWV0
YWRhdGEubmFtZSkKICAgICAgICAgICAgICAgICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlEQktl
eVBhdGgob2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoKSkKICAgICAgICAgICAgICAgICAuc2V0
QXV0b0luY3JlbWVudChvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQpCi0gICAgICAg
ICAgICAgICAgLnNldEluZGV4ZXMoV1RGOjptb3ZlKGluZGV4ZXMpKQotICAgICAgICAgICAgICAg
IC5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgLnNldEluZGV4ZXMoaW5kZXhlcyk7CiAKLSAg
ICAgICAgICAgIG9iamVjdFN0b3Jlcy0+YWRkSXRlbShXVEY6Om1vdmUob2JqZWN0U3RvcmUpKTsK
KyAgICAgICAgICAgIG9iamVjdFN0b3Jlcy0+YWRkSXRlbShvYmplY3RTdG9yZSk7CiAgICAgICAg
IH0KIAotICAgICAgICBSZWY8RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzPiByZXN1bHQgPSBEYXRh
YmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0ZSgpCisgICAgICAgIFJlZlB0cjxEYXRhYmFzZVdp
dGhPYmplY3RTdG9yZXM+IHJlc3VsdCA9IERhdGFiYXNlV2l0aE9iamVjdFN0b3Jlczo6Y3JlYXRl
KCkKICAgICAgICAgICAgIC5zZXROYW1lKGRhdGFiYXNlTWV0YWRhdGEubmFtZSkKICAgICAgICAg
ICAgIC5zZXRWZXJzaW9uKGRhdGFiYXNlTWV0YWRhdGEudmVyc2lvbikKLSAgICAgICAgICAgIC5z
ZXRPYmplY3RTdG9yZXMoV1RGOjptb3ZlKG9iamVjdFN0b3JlcykpCi0gICAgICAgICAgICAucmVs
ZWFzZSgpOworICAgICAgICAgICAgLnNldE9iamVjdFN0b3JlcyhvYmplY3RTdG9yZXMpOwogCi0g
ICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEY6Om1vdmUocmVzdWx0KSk7
CisgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhyZXN1bHQpOwogICAgIH0K
IAotICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlk
ZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQorICAgIHZpcnR1YWwgUmVxdWVz
dENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RD
YWxsYmFjay5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBEYXRhYmFzZUxvYWRlcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVx
dWVzdENhbGxiYWNrKQorICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+IHJlcXVlc3RDYWxs
YmFjaykKICAgICAgICAgOiBFeGVjdXRhYmxlV2l0aERhdGFiYXNlKGNvbnRleHQpCi0gICAgICAg
ICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpIHsgfQotICAg
IFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgICAg
ICwgbV9yZXF1ZXN0Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKSB7IH0KKyAgICBSZWZQdHI8UmVx
dWVzdERhdGFiYXNlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAotc3RhdGljIFJl
ZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBr
ZXkpCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3Qo
SW5zcGVjdG9yT2JqZWN0KiBrZXkpCiB7CiAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5OwogCkBA
IC0zNjEsOSArMzUyLDcgQEAgc3RhdGljIFJlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0
b3JPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBrZXkpCiAgICAgICAgIGlkYktleSA9IElEQktleTo6
Y3JlYXRlRGF0ZShkYXRlKTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gYXJyYXlUeXBlKSB7CiAg
ICAgICAgIElEQktleTo6S2V5QXJyYXkga2V5QXJyYXk7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gYXJyYXk7Ci0gICAgICAgIGlmICgha2V5LT5nZXRBcnJheSgiYXJyYXkiLCBhcnJh
eSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcnJheSA9IGtleS0+Z2V0QXJyYXkoImFycmF5Iik7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBhcnJheS0+Z2V0KGkpOwogICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwpAQCAtMzc4LDIwICszNjcsMTYgQEAgc3RhdGlj
IFJlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9yT2JqZWN0
KiBrZXkpCiAgICAgcmV0dXJuIGlkYktleS5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8
SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKEluc3BlY3Rvck9iamVjdCoga2V5
UmFuZ2UpCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VGcm9tS2V5
UmFuZ2UoSW5zcGVjdG9yT2JqZWN0KiBrZXlSYW5nZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBsb3dlcjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRPYmplY3QoImxvd2VyIiwgbG93
ZXIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8SURCS2V5PiBpZGJMb3dl
ciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93ZXIuZ2V0KCkpOwotICAgIGlmICghaWRi
TG93ZXIpCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG93ZXIgPSBrZXlSYW5nZS0+Z2V0
T2JqZWN0KCJsb3dlciIpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYkxvd2VyID0gbG93ZXIgPyBp
ZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KGxvd2VyLmdldCgpKSA6IG51bGxwdHI7CisgICAgaWYg
KGxvd2VyICYmICFpZGJMb3dlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB1cHBlcjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRPYmplY3Qo
InVwcGVyIiwgdXBwZXIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8SURC
S2V5PiBpZGJVcHBlciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QodXBwZXIuZ2V0KCkpOwot
ICAgIGlmICghaWRiVXBwZXIpCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdXBwZXIgPSBr
ZXlSYW5nZS0+Z2V0T2JqZWN0KCJ1cHBlciIpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYlVwcGVy
ID0gdXBwZXIgPyBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KHVwcGVyLmdldCgpKSA6IG51bGxw
dHI7CisgICAgaWYgKHVwcGVyICYmICFpZGJVcHBlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBib29sIGxvd2VyT3BlbjsKQEAgLTQwNCwxNiArMzg5LDE3IEBAIHN0YXRpYyBSZWZQ
dHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKEluc3BlY3Rvck9iamVjdCog
a2V5UmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIElEQktleVJhbmdlOjpVcHBl
ckJvdW5kVHlwZSB1cHBlckJvdW5kVHlwZSA9IHVwcGVyT3BlbiA/IElEQktleVJhbmdlOjpVcHBl
ckJvdW5kT3BlbiA6IElEQktleVJhbmdlOjpVcHBlckJvdW5kQ2xvc2VkOwogCi0gICAgcmV0dXJu
IElEQktleVJhbmdlOjpjcmVhdGUoaWRiTG93ZXIsIGlkYlVwcGVyLCBsb3dlckJvdW5kVHlwZSwg
dXBwZXJCb3VuZFR5cGUpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UgPSBJ
REJLZXlSYW5nZTo6Y3JlYXRlKGlkYkxvd2VyLCBpZGJVcHBlciwgbG93ZXJCb3VuZFR5cGUsIHVw
cGVyQm91bmRUeXBlKTsKKyAgICByZXR1cm4gaWRiS2V5UmFuZ2UucmVsZWFzZSgpOwogfQogCiBj
bGFzcyBEYXRhTG9hZGVyOwogCiBjbGFzcyBPcGVuQ3Vyc29yQ2FsbGJhY2sgOiBwdWJsaWMgRXZl
bnRMaXN0ZW5lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPcGVuQ3Vyc29yQ2FsbGJhY2s+
IGNyZWF0ZShJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPFJlcXVlc3REYXRhQ2Fs
bGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6
ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxPcGVuQ3Vyc29yQ2FsbGJhY2s+IGNyZWF0ZShJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNr
PiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3BlbkN1cnNvckNhbGxiYWNrKGluamVj
dGVkU2NyaXB0LCBXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSwgc2tpcENvdW50LCBwYWdlU2l6
ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9wZW5DdXJzb3JDYWxsYmFjayhpbmpl
Y3RlZFNjcmlwdCwgcmVxdWVzdENhbGxiYWNrLCBza2lwQ291bnQsIHBhZ2VTaXplKSk7CiAgICAg
fQogCiAgICAgdmlydHVhbCB+T3BlbkN1cnNvckNhbGxiYWNrKCkgeyB9CkBAIC00NzIsOSArNDU4
LDggQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8RGF0YUVudHJ5PiBkYXRhRW50cnkgPSBEYXRh
RW50cnk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0S2V5KG1faW5qZWN0ZWRTY3JpcHQud3Jh
cE9iamVjdChpZGJDdXJzb3ItPmtleSgpLCBTdHJpbmcoKSkpCiAgICAgICAgICAgICAuc2V0UHJp
bWFyeUtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoaWRiQ3Vyc29yLT5wcmltYXJ5S2V5
KCksIFN0cmluZygpKSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZShtX2luamVjdGVkU2NyaXB0Lndy
YXBPYmplY3QoaWRiQ3Vyc29yLT52YWx1ZSgpLCBTdHJpbmcoKSkpCi0gICAgICAgICAgICAucmVs
ZWFzZSgpOwotICAgICAgICBtX3Jlc3VsdC0+YWRkSXRlbShXVEY6Om1vdmUoZGF0YUVudHJ5KSk7
CisgICAgICAgICAgICAuc2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGlkYkN1
cnNvci0+dmFsdWUoKSwgU3RyaW5nKCkpKTsKKyAgICAgICAgbV9yZXN1bHQtPmFkZEl0ZW0oZGF0
YUVudHJ5KTsKIAogICAgIH0KIApAQCAtNDgyLDQwICs0NjcsNDEgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgaWYgKCFtX3JlcXVlc3RDYWxsYmFjay0+aXNBY3RpdmUoKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKFdURjo6bW92
ZShtX3Jlc3VsdCksIGhhc01vcmUpOworICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1
Y2Nlc3MobV9yZXN1bHQucmVsZWFzZSgpLCBoYXNNb3JlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgT3BlbkN1cnNvckNhbGxiYWNrKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8
UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVu
c2lnbmVkIHBhZ2VTaXplKQorICAgIE9wZW5DdXJzb3JDYWxsYmFjayhJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiByZXF1ZXN0Q2Fs
bGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgICAgICA6IEV2ZW50
TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCiAgICAgICAgICwg
bV9pbmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKLSAgICAgICAgLCBtX3JlcXVlc3RDYWxs
YmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkKKyAgICAgICAgLCBtX3JlcXVlc3RDYWxs
YmFjayhyZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgICwgbV9za2lwQ291bnQoc2tpcENvdW50KQog
ICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpCi0gICAgICAgICwgbV9yZXN1bHQoQXJyYXk8
RGF0YUVudHJ5Pjo6Y3JlYXRlKCkpCiAgICAgeworICAgICAgICBtX3Jlc3VsdCA9IEFycmF5PERh
dGFFbnRyeT46OmNyZWF0ZSgpOwogICAgIH0KICAgICBJbmplY3RlZFNjcmlwdCBtX2luamVjdGVk
U2NyaXB0OwotICAgIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsK
KyAgICBSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAg
aW50IG1fc2tpcENvdW50OwogICAgIHVuc2lnbmVkIG1fcGFnZVNpemU7Ci0gICAgUmVmPEFycmF5
PERhdGFFbnRyeT4+IG1fcmVzdWx0OworICAgIFJlZlB0cjxBcnJheTxEYXRhRW50cnk+PiBtX3Jl
c3VsdDsKIH07CiAKIGNsYXNzIERhdGFMb2FkZXIgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRh
YmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhTG9hZGVyPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVx
dWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0
IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUmVmUHRy
PElEQktleVJhbmdlPiYmIGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdl
U2l6ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiBy
ZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29u
c3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQg
cGFnZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhTG9hZGVy
KGNvbnRleHQsIFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBpbmplY3RlZFNjcmlwdCwgb2Jq
ZWN0U3RvcmVOYW1lLCBpbmRleE5hbWUsIFdURjo6bW92ZShpZGJLZXlSYW5nZSksIHNraXBDb3Vu
dCwgcGFnZVNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhTG9hZGVyKGNv
bnRleHQsIHJlcXVlc3RDYWxsYmFjaywgaW5qZWN0ZWRTY3JpcHQsIG9iamVjdFN0b3JlTmFtZSwg
aW5kZXhOYW1lLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSkpOwogICAgIH0KIAog
ICAgIHZpcnR1YWwgfkRhdGFMb2FkZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
KFJlZlB0cjxJREJEYXRhYmFzZT4mJiBkYXRhYmFzZSkgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBwcnBEYXRhYmFzZSkgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIGlmICghcmVxdWVzdENhbGxiYWNrKCkuaXNBY3RpdmUoKSkKKyAgICAg
ICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IHBycERhdGFiYXNlOworICAgICAg
ICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLT5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9uID0gdHJhbnNh
Y3Rpb25Gb3JEYXRhYmFzZShjb250ZXh0KCksIGRhdGFiYXNlLmdldCgpLCBtX29iamVjdFN0b3Jl
TmFtZSk7CisgICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24gPSB0
cmFuc2FjdGlvbkZvckRhdGFiYXNlKGNvbnRleHQoKSwgaWRiRGF0YWJhc2UuZ2V0KCksIG1fb2Jq
ZWN0U3RvcmVOYW1lKTsKICAgICAgICAgaWYgKCFpZGJUcmFuc2FjdGlvbikgewogICAgICAgICAg
ICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IHRyYW5zYWN0
aW9uIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01MjYsNyArNTEyLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmPE9wZW5DdXJzb3JD
YWxsYmFjaz4gb3BlbkN1cnNvckNhbGxiYWNrID0gT3BlbkN1cnNvckNhbGxiYWNrOjpjcmVhdGUo
bV9pbmplY3RlZFNjcmlwdCwgbV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpLCBtX3NraXBDb3Vu
dCwgbV9wYWdlU2l6ZSk7CisgICAgICAgIFJlZlB0cjxPcGVuQ3Vyc29yQ2FsbGJhY2s+IG9wZW5D
dXJzb3JDYWxsYmFjayA9IE9wZW5DdXJzb3JDYWxsYmFjazo6Y3JlYXRlKG1faW5qZWN0ZWRTY3Jp
cHQsIG1fcmVxdWVzdENhbGxiYWNrLCBtX3NraXBDb3VudCwgbV9wYWdlU2l6ZSk7CiAKICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBpZGJS
ZXF1ZXN0OwpAQCAtNTM3LDIzICs1MjMsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWRiUmVxdWVzdCA9IGlkYkluZGV4
LT5vcGVuQ3Vyc29yKGNvbnRleHQoKSwgbV9pZGJLZXlSYW5nZS5jb3B5UmVmKCksIGVjKTsKKyAg
ICAgICAgICAgIGlkYlJlcXVlc3QgPSBpZGJJbmRleC0+b3BlbkN1cnNvcihjb250ZXh0KCksIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+KG1faWRiS2V5UmFuZ2UpLCBlYyk7CiAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgaWRiUmVxdWVzdCA9IGlkYk9iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKGNv
bnRleHQoKSwgbV9pZGJLZXlSYW5nZS5jb3B5UmVmKCksIGVjKTsKLSAgICAgICAgaWRiUmVxdWVz
dC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBXVEY6Om1vdmUo
b3BlbkN1cnNvckNhbGxiYWNrKSwgZmFsc2UpOworICAgICAgICAgICAgaWRiUmVxdWVzdCA9IGlk
Yk9iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKGNvbnRleHQoKSwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4obV9pZGJLZXlSYW5nZSksIGVjKTsKKyAgICAgICAgaWRiUmVxdWVzdC0+YWRkRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBvcGVuQ3Vyc29yQ2FsbGJhY2ssIGZhbHNl
KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNr
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KLSAgICBEYXRh
TG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJl
ZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRT
Y3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29u
c3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UsIGlu
dCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIHZpcnR1YWwgUmVxdWVzdENhbGxi
YWNrKiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFj
ay5nZXQoKTsgfQorICAgIERhdGFMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiByZXF1ZXN0
Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3Ry
aW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNp
emUpCiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShzY3JpcHRFeGVjdXRpb25Db250
ZXh0KQotICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJh
Y2spKQorICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykKICAgICAg
ICAgLCBtX2luamVjdGVkU2NyaXB0KGluamVjdGVkU2NyaXB0KQogICAgICAgICAsIG1fb2JqZWN0
U3RvcmVOYW1lKG9iamVjdFN0b3JlTmFtZSkKICAgICAgICAgLCBtX2luZGV4TmFtZShpbmRleE5h
bWUpCi0gICAgICAgICwgbV9pZGJLZXlSYW5nZShXVEY6Om1vdmUoaWRiS2V5UmFuZ2UpKQorICAg
ICAgICAsIG1faWRiS2V5UmFuZ2UoaWRiS2V5UmFuZ2UpCiAgICAgICAgICwgbV9za2lwQ291bnQo
c2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpIHsgfQotICAgIFJlZjxS
ZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWZQdHI8UmVxdWVz
dERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAgSW5qZWN0ZWRTY3JpcHQgbV9p
bmplY3RlZFNjcmlwdDsKICAgICBTdHJpbmcgbV9vYmplY3RTdG9yZU5hbWU7CiAgICAgU3RyaW5n
IG1faW5kZXhOYW1lOwpAQCAtNjE5LDcgKzYwNSw3IEBAIHN0YXRpYyBJREJGYWN0b3J5KiBhc3Nl
cnRJREJGYWN0b3J5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50
CiAgICAgcmV0dXJuIGlkYkZhY3Rvcnk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQ6OnJlcXVlc3REYXRhYmFzZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+
JiYgcmVxdWVzdENhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVz
dERhdGFiYXNlTmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNl
Y3VyaXR5T3JpZ2luLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+IHJl
cXVlc3RDYWxsYmFjaykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZmluZEZy
YW1lV2l0aFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBhc3NlcnREb2N1bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNjM3LDEwICs2
MjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlTmFt
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nlc3NF
dmVudCwgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOjpjcmVhdGUoV1RGOjptb3ZlKHJlcXVlc3RD
YWxsYmFjayksIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1Jhd1N0cmluZygpKSwgZmFs
c2UpOworICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCwgR2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOjpjcmVhdGUocmVxdWVzdENhbGxiYWNr
LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSksIGZhbHNlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZU5hbWUsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0
Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YWJhc2Uo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VDYWxs
YmFjaz4gcmVxdWVzdENhbGxiYWNrKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50
LT5maW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGFzc2VydERvY3VtZW50KGVycm9yU3RyaW5nLCBmcmFtZSk7CkBAIC02
NTEsMTEgKzYzNywxMSBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0
YWJhc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdAogICAgIGlmICghaWRiRmFj
dG9yeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmPERhdGFiYXNlTG9hZGVyPiBkYXRhYmFz
ZUxvYWRlciA9IERhdGFiYXNlTG9hZGVyOjpjcmVhdGUoZG9jdW1lbnQsIFdURjo6bW92ZShyZXF1
ZXN0Q2FsbGJhY2spKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VMb2FkZXI+IGRhdGFiYXNlTG9hZGVy
ID0gRGF0YWJhc2VMb2FkZXI6OmNyZWF0ZShkb2N1bWVudCwgcmVxdWVzdENhbGxiYWNrKTsKICAg
ICBkYXRhYmFzZUxvYWRlci0+c3RhcnQoaWRiRmFjdG9yeSwgZG9jdW1lbnQtPnNlY3VyaXR5T3Jp
Z2luKCksIGRhdGFiYXNlTmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6
OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50
IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGtleVJhbmdlLCBSZWY8
UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGludCBz
a2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGtl
eVJhbmdlLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZmluZEZyYW1lV2l0aFNlY3VyaXR5
T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnRE
b2N1bWVudChlcnJvclN0cmluZywgZnJhbWUpOwpAQCAtNjY4LDIyICs2NTQsMjIgQEAgdm9pZCBJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcKIAogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKG1haW5Xb3JsZEV4ZWNT
dGF0ZShmcmFtZSkpOwogCi0gICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSA9IGtl
eVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UuZ2V0KCkpIDogbnVsbHB0
cjsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlID0ga2V5UmFuZ2UgPyBpZGJL
ZXlSYW5nZUZyb21LZXlSYW5nZShrZXlSYW5nZS0+Z2V0KCkpIDogbnVsbHB0cjsKICAgICBpZiAo
a2V5UmFuZ2UgJiYgIWlkYktleVJhbmdlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlM
aXRlcmFsKCJDYW4gbm90IHBhcnNlIGtleSByYW5nZS4iKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFJlZjxEYXRhTG9hZGVyPiBkYXRhTG9hZGVyID0gRGF0YUxvYWRlcjo6Y3JlYXRl
KGRvY3VtZW50LCBXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSwgaW5qZWN0ZWRTY3JpcHQsIG9i
amVjdFN0b3JlTmFtZSwgaW5kZXhOYW1lLCBXVEY6Om1vdmUoaWRiS2V5UmFuZ2UpLCBza2lwQ291
bnQsIHBhZ2VTaXplKTsKKyAgICBSZWZQdHI8RGF0YUxvYWRlcj4gZGF0YUxvYWRlciA9IERhdGFM
b2FkZXI6OmNyZWF0ZShkb2N1bWVudCwgcmVxdWVzdENhbGxiYWNrLCBpbmplY3RlZFNjcmlwdCwg
b2JqZWN0U3RvcmVOYW1lLCBpbmRleE5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VT
aXplKTsKICAgICBkYXRhTG9hZGVyLT5zdGFydChpZGJGYWN0b3J5LCBkb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKSwgZGF0YWJhc2VOYW1lKTsKIH0KIAogY2xhc3MgQ2xlYXJPYmplY3RTdG9yZUxp
c3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVh
ck9iamVjdFN0b3JlTGlzdGVuZXI+IGNyZWF0ZShSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNr
PiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xlYXJPYmplY3RTdG9y
ZUxpc3RlbmVyPiBjcmVhdGUoUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJl
cXVlc3RDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFy
T2JqZWN0U3RvcmVMaXN0ZW5lcihXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcihyZXF1ZXN0Q2Fs
bGJhY2spKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5DbGVhck9iamVjdFN0b3JlTGlzdGVuZXIo
KSB7IH0KQEAgLTcwNSwzNSArNjkxLDM2IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2Fs
bGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBDbGVhck9iamVjdFN0
b3JlTGlzdGVuZXIoUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJh
Y2spCisgICAgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKFBhc3NSZWZQdHI8Q2xlYXJPYmplY3RT
dG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihF
dmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAgICAgLCBtX3JlcXVlc3RD
YWxsYmFjayhXVEY6Om1vdmUocmVxdWVzdENhbGxiYWNrKSkKKyAgICAgICAgLCBtX3JlcXVlc3RD
YWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2spCiAgICAgewogICAgIH0KIAotICAgIFJlZjxDbGVhck9i
amVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJlZlB0cjxDbGVhck9i
amVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogCiBjbGFzcyBDbGVh
ck9iamVjdFN0b3JlIDogcHVibGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJP
YmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDbGVhck9iamVjdFN0b3JlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFBhc3NSZWZQdHI8Q2xlYXJPYmpl
Y3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlKGNvbnRleHQsIG9iamVjdFN0b3JlTmFtZSwg
V1RGOjptb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDbGVhck9iamVjdFN0b3JlKGNvbnRleHQsIG9iamVjdFN0b3JlTmFtZSwgcmVxdWVzdENhbGxi
YWNrKSk7CiAgICAgfQogCi0gICAgQ2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgQ2xlYXJPYmplY3RTdG9y
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0
b3JlTmFtZSwgUGFzc1JlZlB0cjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxs
YmFjaykKICAgICAgICAgOiBFeGVjdXRhYmxlV2l0aERhdGFiYXNlKGNvbnRleHQpCiAgICAgICAg
ICwgbV9vYmplY3RTdG9yZU5hbWUob2JqZWN0U3RvcmVOYW1lKQotICAgICAgICAsIG1fcmVxdWVz
dENhbGxiYWNrKFdURjo6bW92ZShyZXF1ZXN0Q2FsbGJhY2spKQorICAgICAgICAsIG1fcmVxdWVz
dENhbGxiYWNrKHJlcXVlc3RDYWxsYmFjaykKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGUoUmVmUHRyPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKSBvdmVycmlkZQorICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IHBycERhdGFiYXNl
KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS5pc0FjdGl2
ZSgpKQorICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IGlkYkRhdGFiYXNlID0gcHJwRGF0YWJh
c2U7CisgICAgICAgIGlmICghcmVxdWVzdENhbGxiYWNrKCktPmlzQWN0aXZlKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rp
b24gPSB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKGNvbnRleHQoKSwgZGF0YWJhc2UuZ2V0KCksIG1f
b2JqZWN0U3RvcmVOYW1lLCBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZSgpKTsKKyAgICAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uRm9y
RGF0YWJhc2UoY29udGV4dCgpLCBpZGJEYXRhYmFzZS5nZXQoKSwgbV9vYmplY3RTdG9yZU5hbWUs
IElEQlRyYW5zYWN0aW9uOjptb2RlUmVhZFdyaXRlKCkpOwogICAgICAgICBpZiAoIWlkYlRyYW5z
YWN0aW9uKSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNv
dWxkIG5vdCBnZXQgdHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc1MSwx
NiArNzM4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5k
RmFpbHVyZShTdHJpbmc6OmZvcm1hdCgiQ291bGQgbm90IGNsZWFyIG9iamVjdCBzdG9yZSAnJXMn
OiAlZCIsIG1fb2JqZWN0U3RvcmVOYW1lLnV0ZjgoKS5kYXRhKCksIGVjKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWRiVHJhbnNhY3Rpb24tPmFkZEV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5l
cjo6Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrLmNvcHlSZWYoKSksIGZhbHNlKTsKKyAgICAgICAg
aWRiVHJhbnNhY3Rpb24tPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZl
bnQsIENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcjo6Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrKSwg
ZmFsc2UpOwogICAgIH0KIAotICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2Fs
bGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQorICAg
IHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrKiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJl
dHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQogcHJpdmF0ZToKICAgICBjb25zdCBTdHJp
bmcgbV9vYmplY3RTdG9yZU5hbWU7Ci0gICAgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4g
bV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4g
bV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCi12b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50Ojpj
bGVhck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
ZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYg
b2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RD
YWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmNsZWFyT2JqZWN0U3RvcmUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUs
IFBhc3NSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiB7
CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZpbmRGcmFtZVdpdGhTZWN1cml0eU9y
aWdpbihzZWN1cml0eU9yaWdpbik7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYXNzZXJ0RG9j
dW1lbnQoZXJyb3JTdHJpbmcsIGZyYW1lKTsKQEAgLTc3MCw3ICs3NTcsNyBAQCB2b2lkIEluc3Bl
Y3RvckluZGV4ZWREQkFnZW50OjpjbGVhck9iamVjdFN0b3JlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgUwogICAgIGlmICghaWRiRmFjdG9yeSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmPENsZWFyT2JqZWN0U3RvcmU+IGNsZWFyT2JqZWN0U3RvcmUgPSBDbGVhck9iamVjdFN0
b3JlOjpjcmVhdGUoZG9jdW1lbnQsIG9iamVjdFN0b3JlTmFtZSwgV1RGOjptb3ZlKHJlcXVlc3RD
YWxsYmFjaykpOworICAgIFJlZlB0cjxDbGVhck9iamVjdFN0b3JlPiBjbGVhck9iamVjdFN0b3Jl
ID0gQ2xlYXJPYmplY3RTdG9yZTo6Y3JlYXRlKGRvY3VtZW50LCBvYmplY3RTdG9yZU5hbWUsIHJl
cXVlc3RDYWxsYmFjayk7CiAgICAgY2xlYXJPYmplY3RTdG9yZS0+c3RhcnQoaWRiRmFjdG9yeSwg
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlTmFtZSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKaW5kZXgg
M2IwZTlmYTEwYjU3MWMzNDBkYWFhY2I5OGVmNGFjOGE0OWM1MzlkYS4uOGFmNGUxN2I5NzQ5NDk2
NTIxNTRlYjlhZWRkNzJhMWZkMDkxOTgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKQEAgLTU4LDEwICs1OCwxMCBAQCBwdWJs
aWM6CiAgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KICAgICB2aXJ0dWFsIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGFiYXNl
TmFtZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBSZWY8UmVx
dWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJh
Y2s+JiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0YShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VO
YW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5h
bWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGluX3NlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGluX2RhdGFi
YXNlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RTdG9yZU5hbWUsIFJlZjxDbGVhck9iamVj
dFN0b3JlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0
YWJhc2VOYW1lcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIFBh
c3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4pIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNl
Y3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgUGFzc1JlZlB0cjxSZXF1
ZXN0RGF0YWJhc2VDYWxsYmFjaz4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
RGF0YShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3Qg
U3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Pioga2V5UmFuZ2UsIFBhc3NSZWZQdHI8UmVx
dWVzdERhdGFDYWxsYmFjaz4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVj
dFN0b3JlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9zZWN1cml0eU9yaWdpbiwgY29u
c3QgU3RyaW5nJiBpbl9kYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0U3RvcmVO
YW1lLCBQYXNzUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4pIG92ZXJyaWRlOwogCiBw
cml2YXRlOgogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVk
U2NyaXB0TWFuYWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggODM5OTAzNzFhNDkxMTVhZDU2MDcwYzQ4NTNk
ZDAzZWExZDRkYmUzOC4uMzU4OWVmZmQzNzhlYTczNTZlMDgzZWMwNDdkN2FmMTQ1ODExOTNmZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKQEAgLTY4OSwxMCArNjg5LDEwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkb2N1bWVudFRocmVhZGFibGVMb2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudElt
CiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0YXJ0ZWRM
b2FkaW5nRm9yQ2xpZW50KGlkZW50aWZpZXIsIGNsaWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5z
dHJ1bWVudGluZ0FnZW50cywgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFJlZlB0cjxGb3JtRGF0
YT4mJiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRl
Q3JlZGVudGlhbHMpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFRocmVhZGFibGVM
b2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYgdXJs
LCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSwgY29uc3QgSFRUUEhl
YWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpCiB7CiAgICAgaWYgKElu
c3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Lmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKLSAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbExv
YWRYSFIoY2xpZW50LCBtZXRob2QsIHVybCwgYXN5bmMsIFdURjo6bW92ZShmb3JtRGF0YSksIGhl
YWRlcnMsIGluY2x1ZGVDcmVkZW50aWFscyk7CisgICAgICAgIHJlc291cmNlQWdlbnQtPndpbGxM
b2FkWEhSKGNsaWVudCwgbWV0aG9kLCB1cmwsIGFzeW5jLCBmb3JtRGF0YSwgaGVhZGVycywgaW5j
bHVkZUNyZWRlbnRpYWxzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZEZhaWxYSFJMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQpCkBAIC05MTYsNyArOTE2LDcgQEAg
c3RhdGljIGJvb2wgaXNDb25zb2xlQXNzZXJ0TWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwg
TWVzc2FnZVR5cGUgdHlwZSkKIH0KIAogLy8gRklYTUU6IERyb3AgdGhpcyBvbmNlIHdlIG5vIGxv
bmdlciBnZW5lcmF0ZSBzdGFja3Mgb3V0c2lkZSBvZiBJbnNwZWN0b3IuCi12b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VU
eXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBSZWZQ
dHI8U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRl
bnRpZmllcikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25z
b2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ss
IHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgaWYgKFdlYkNvbnNvbGVB
Z2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQo
KSkKICAgICAgICAgY29uc29sZUFnZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgdHlw
ZSwgbGV2ZWwsIG1lc3NhZ2UsIGNhbGxTdGFjaywgcmVxdWVzdElkZW50aWZpZXIpOwpAQCAtOTI3
LDcgKzkyNyw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9D
b25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0CiAgICAgfQogfQogCi12b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1l
c3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1l
bnRzLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0
eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCB1bnNp
Z25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmIChXZWJDb25zb2xlQWdlbnQq
IGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAg
ICAgICAgIGNvbnNvbGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxl
dmVsLCBtZXNzYWdlLCBzdGF0ZSwgYXJndW1lbnRzLCByZXF1ZXN0SWRlbnRpZmllcik7CkBAIC05
NDksNyArOTQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VU
b0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3QKICAgICB9CiB9CiAKLXZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmUHRy
PFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Y29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRz
PiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKFdlYkNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFn
ZW50LT5jb3VudChzdGF0ZSwgYXJndW1lbnRzKTsKQEAgLTk2Myw3ICs5NjMsNyBAQCB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cgogICAgICAgICBjb25zb2xlQWdlbnQtPnN0YXJ0VGltaW5nKHRpdGxl
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5n
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJh
bWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+JiYgc3RhY2sp
Cit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmdJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSwgY29u
c3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrKQogewog
ICAgIGlmIChXZWJDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+c3RvcFRpbWluZyh0
aXRsZSwgc3RhY2spOwpAQCAtOTcxLDcgKzk3MSw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPnRpbWVFbmQoZnJhbWUsIHRpdGxlKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXBJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lJiBmcmFtZSwgUmVmUHRyPFNj
cmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6Y29uc29sZVRpbWVTdGFtcEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGlu
Z0FnZW50cywgRnJhbWUmIGZyYW1lLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1l
bnRzKQogewogICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAgICAg
U3RyaW5nIG1lc3NhZ2U7CkBAIC05ODYsNyArOTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnN0YXJ0UHJvZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW4KICAgICAgICAgdGltZWxpbmVBZ2VudC0+c3RhcnRGcm9tQ29uc29sZShleGVjLCB0aXRsZSk7
CiB9CiAKLVJlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3Rv
cFByb2ZpbGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCitQYXNzUmVmUHRyPEpT
Qzo6UHJvZmlsZT4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgcmV0dXJuIHRpbWVsaW5lQWdlbnQtPnN0b3BG
cm9tQ29uc29sZShleGVjLCB0aXRsZSk7CkBAIC05OTQsNyArOTk0LDcgQEAgUmVmUHRyPEpTQzo6
UHJvZmlsZT4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nSW1wbChJbnN0
cnVtZW50aW5nQWcKIH0KIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi12b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiBpbnN0cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8RGF0YWJhc2U+JiYgZGF0YWJhc2UsIGNvbnN0
IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lv
bikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2VJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8RGF0YWJh
c2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZlcnNpb24pCiB7CiAgICAgaWYgKCFpbnN0cnVtZW50aW5nQWdlbnRzLmlu
c3BlY3RvckVudmlyb25tZW50KCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMTA3LDQwICsxMTA3LDQwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRTZW5kV2ViU29ja2V0RnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlc3Npb25DcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQordm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25DcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24p
CiB7CiAgICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKLSAgICAgICAgcmVwbGF5QWdlbnQt
PnNlc3Npb25DcmVhdGVkKFdURjo6bW92ZShzZXNzaW9uKSk7CisgICAgICAgIHJlcGxheUFnZW50
LT5zZXNzaW9uQ3JlYXRlZChzZXNzaW9uKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlc3Npb25Mb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRp
bmdBZ2VudHMsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCit2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uKQog
ewogICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50LT5z
ZXNzaW9uTG9hZGVkKFdURjo6bW92ZShzZXNzaW9uKSk7CisgICAgICAgIHJlcGxheUFnZW50LT5z
ZXNzaW9uTG9hZGVkKHNlc3Npb24pOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c2Vzc2lvbk1vZGlmaWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnNlc3Npb25Nb2RpZmllZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uKQog
ewogICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLmluc3BlY3RvclJlcGxheUFnZW50KCkpCi0gICAgICAgIHJlcGxheUFnZW50LT5z
ZXNzaW9uTW9kaWZpZWQoV1RGOjptb3ZlKHNlc3Npb24pKTsKKyAgICAgICAgcmVwbGF5QWdlbnQt
PnNlc3Npb25Nb2RpZmllZChzZXNzaW9uKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKK3ZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4gc2VnbWVudCkKIHsKICAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJlcGxheUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQotICAgICAg
ICByZXBsYXlBZ2VudC0+c2VnbWVudENyZWF0ZWQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKKyAgICAg
ICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRDcmVhdGVkKHNlZ21lbnQpOwogfQogCi12b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYm
IHNlZ21lbnQpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRl
ZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgUGFzc1JlZlB0
cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKIHsKICAgICBpZiAoSW5zcGVjdG9yUmVw
bGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JSZXBs
YXlBZ2VudCgpKQotICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVudENvbXBsZXRlZChXVEY6Om1v
dmUoc2VnbWVudCkpOworICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVudENvbXBsZXRlZChzZWdt
ZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIFJlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnNlZ21lbnRMb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnQpCiB7CiAgICAg
aWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMuaW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkKLSAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRM
b2FkZWQoV1RGOjptb3ZlKHNlZ21lbnQpKTsKKyAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRM
b2FkZWQoc2VnbWVudCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdt
ZW50VW5sb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgKaW5kZXggMzIyMTgyODI3NWQ1ODJkNDg0MzE5OTRkYWUyZTk2OTQ2ODUyMWE2Ni4uZDdj
YWE1OTEyNTE3MmIxNjUyMmU1MDM3NTlmYTAyNDJmNTQ2ZDc1MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMTg2LDcg
KzE4Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKEZyYW1l
KiwgRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5p
c2hUaW1lKTsKICAgICBzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZGluZyhGcmFtZSosIERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7
CiAgICAgc3RhdGljIHZvaWQgZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdG
b3JDbGllbnQoRG9jdW1lbnQmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFRocmVhZGFibGVM
b2FkZXJDbGllbnQqKTsKLSAgICBzdGF0aWMgdm9pZCB3aWxsTG9hZFhIUihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFVSTCYsIGJvb2wsIFJlZlB0cjxGb3JtRGF0YT4mJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIGJv
b2wpOworICAgIHN0YXRpYyB2b2lkIHdpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiwgYm9v
bCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4sIGNvbnN0IEhUVFBIZWFkZXJNYXAmLCBib29sKTsKICAg
ICBzdGF0aWMgdm9pZCBkaWRGYWlsWEhSTG9hZGluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
VGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwogICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaFhIUkxv
YWRpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51
bWJlciwgdW5zaWduZWQgc2VuZENvbHVtbk51bWJlcik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVj
ZWl2ZVhIUlJlc3BvbnNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIpOwpAQCAtMjEzLDE4ICsyMTMsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGRpZFdyaXRlSFRNTChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmLCB1bnNp
Z25lZCBlbmRMaW5lKTsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB3ZSBubyBsb25nZXIg
Z2VuZXJhdGUgc3RhY2tzIG91dHNpZGUgb2YgSW5zcGVjdG9yLgotICAgIHN0YXRpYyB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYsIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrPiYmLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCk7Ci0gICAg
c3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlJiwgTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNT
dGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiwgdW5zaWduZWQgbG9u
ZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0Nv
bnNvbGUoUGFnZSYsIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFj
az4sIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICBzdGF0aWMgdm9p
ZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwg
TWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4sIHVuc2lnbmVkIGxvbmcgcmVxdWVz
dElkZW50aWZpZXIgPSAwKTsKICAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBh
Z2UmLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogCiAgICAgLy8gRklYTUU6IENvbnZlcnQg
dG8gU2NyaXB0QXJndW1lbnRzIHRvIG1hdGNoIG5vbi13b3JrZXIgY29udGV4dC4KLSAgICBzdGF0
aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3BlKiwgTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYsIHVuc2lnbmVkIGxvbmcgcmVxdWVz
dElkZW50aWZpZXIgPSAwKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFdv
cmtlckdsb2JhbFNjb3BlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIHN0YXRp
YyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUqLCBNZXNzYWdlU291
cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc2NyaXB0SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVt
bk51bWJlciwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0
SWRlbnRpZmllciA9IDApOwogCi0gICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50KFBhZ2UmLCBK
U0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7Cisg
ICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50KFBhZ2UmLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+KTsKICAgICBzdGF0aWMgdm9pZCBzdGFy
dENvbnNvbGVUaW1pbmcoRnJhbWUmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMg
dm9pZCBzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFJlZlB0
cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJik7Ci0gICAgc3RhdGljIHZvaWQgY29uc29s
ZVRpbWVTdGFtcChGcmFtZSYsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7
CisgICAgc3RhdGljIHZvaWQgc3RvcENvbnNvbGVUaW1pbmcoRnJhbWUmLCBjb25zdCBTdHJpbmcm
IHRpdGxlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPik7CisgICAgc3Rh
dGljIHZvaWQgY29uc29sZVRpbWVTdGFtcChGcmFtZSYsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRBcmd1bWVudHM+KTsKIAogICAgIHN0YXRpYyB2b2lkIGRpZFJlcXVlc3RBbmltYXRpb25G
cmFtZShEb2N1bWVudCosIGludCBjYWxsYmFja0lkKTsKICAgICBzdGF0aWMgdm9pZCBkaWRDYW5j
ZWxBbmltYXRpb25GcmFtZShEb2N1bWVudCosIGludCBjYWxsYmFja0lkKTsKQEAgLTIzMiwxMCAr
MjMyLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaWRGaXJlQW5pbWF0aW9uRnJhbWUo
Y29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAKICAgICBzdGF0aWMgdm9p
ZCBzdGFydFByb2ZpbGluZyhQYWdlJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRp
dGxlKTsKLSAgICBzdGF0aWMgUmVmUHRyPEpTQzo6UHJvZmlsZT4gc3RvcFByb2ZpbGluZyhQYWdl
JiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxKU0M6OlByb2ZpbGU+IHN0b3BQcm9maWxpbmcoUGFnZSYsIEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAg
IHN0YXRpYyB2b2lkIGRpZE9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUmVm
UHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAgIHN0YXRpYyB2b2lkIGRpZE9wZW5EYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0
cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7
CiAjZW5kaWYKIAogICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7CkBAIC0yNDYsMTMg
KzI0NiwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgd2lsbEV2YWx1YXRlV29ya2VyU2Ny
aXB0KFdvcmtlckdsb2JhbFNjb3BlKiwgaW50IHdvcmtlclRocmVhZFN0YXJ0TW9kZSk7CiAKICNp
ZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAgICBzdGF0aWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChQYWdl
JiwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOwotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2Fk
ZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKLSAgICBzdGF0aWMgdm9pZCBzZXNz
aW9uTW9kaWZpZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmKTsKKyAgICBzdGF0aWMg
dm9pZCBzZXNzaW9uQ3JlYXRlZChQYWdlJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7Cisg
ICAgc3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZChQYWdlJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNz
aW9uPik7CisgICAgc3RhdGljIHZvaWQgc2Vzc2lvbk1vZGlmaWVkKFBhZ2UmLCBQYXNzUmVmUHRy
PFJlcGxheVNlc3Npb24+KTsKIAotICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDcmVhdGVkKFBhZ2Um
LCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYpOwotICAgIHN0YXRpYyB2b2lkIHNlZ21l
bnRDb21wbGV0ZWQoUGFnZSYsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJik7Ci0gICAg
c3RhdGljIHZvaWQgc2VnbWVudExvYWRlZChQYWdlJiwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdt
ZW50PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50Q3JlYXRlZChQYWdlJiwgUGFzc1JlZlB0
cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDb21wbGV0
ZWQoUGFnZSYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAgICBzdGF0aWMg
dm9pZCBzZWdtZW50TG9hZGVkKFBhZ2UmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50
Pik7CiAgICAgc3RhdGljIHZvaWQgc2VnbWVudFVubG9hZGVkKFBhZ2UmKTsKIAogICAgIHN0YXRp
YyB2b2lkIGNhcHR1cmVTdGFydGVkKFBhZ2UmKTsKQEAgLTM4Niw3ICszODYsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgZG91YmxlIGZp
bmlzaFRpbWUpOwogICAgIHN0YXRpYyB2b2lkIGRpZEZhaWxMb2FkaW5nSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKICAgICBzdGF0aWMgdm9pZCBkb2N1bWVudFRocmVhZGFibGVM
b2FkZXJTdGFydGVkTG9hZGluZ0ZvckNsaWVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwotICAgIHN0
YXRpYyB2b2lkIHdpbGxMb2FkWEhSSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGJvb2wsIFJlZlB0cjxG
b3JtRGF0YT4mJiwgY29uc3QgSFRUUEhlYWRlck1hcCYsIGJvb2wpOworICAgIHN0YXRpYyB2b2lk
IHdpbGxMb2FkWEhSSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGJvb2wsIFBhc3NSZWZQdHI8Rm9ybURh
dGE+LCBjb25zdCBIVFRQSGVhZGVyTWFwJiwgYm9vbCk7CiAgICAgc3RhdGljIHZvaWQgZGlkRmFp
bFhIUkxvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkRmluaXNoWEhSTG9hZGluZ0ltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlciwgdW5zaWduZWQgc2Vu
ZENvbHVtbk51bWJlcik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVhIUlJlc3BvbnNlSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKQEAgLTQx
MiwxNiArNDEyLDE2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSB3aWxsV3JpdGVIVE1MSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgdW5zaWdu
ZWQgc3RhcnRMaW5lLCBGcmFtZSopOwogICAgIHN0YXRpYyB2b2lkIGRpZFdyaXRlSFRNTEltcGwo
Y29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwgdW5zaWduZWQgZW5kTGluZSk7
CiAKLSAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4mJiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgc3Rh
dGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgc3RhdGljIHZvaWQg
YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzY3JpcHRJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1u
TnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIp
OwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHdlIG5vIGxvbmdlciBnZW5lcmF0ZSBzdGFj
a3Mgb3V0c2lkZSBvZiBJbnNwZWN0b3IuCi0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29u
c29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBl
LCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0Q2FsbFN0YWNrPiYmLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAg
ICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiwgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcik7CiAKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291
bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxJbnNw
ZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CisgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPik7CiAgICAgc3RhdGljIHZvaWQgc3RhcnRDb25zb2xl
VGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmLCBjb25zdCBTdHJpbmcmIHRp
dGxlKTsKLSAgICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYsIEZyYW1lJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0Q2FsbFN0YWNrPiYmKTsKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+JiYpOworICAgIHN0YXRpYyB2b2lkIHN0b3BDb25zb2xlVGltaW5nSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPik7CisgICAgc3RhdGljIHZvaWQgY29uc29sZVRp
bWVTdGFtcEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4pOwogCiAgICAgc3RhdGljIHZvaWQgZGlkUmVxdWVzdEFu
aW1hdGlvbkZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgaW50IGNhbGxiYWNrSWQsIEZy
YW1lKik7CiAgICAgc3RhdGljIHZvaWQgZGlkQ2FuY2VsQW5pbWF0aW9uRnJhbWVJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmLCBpbnQgY2FsbGJhY2tJZCwgRnJhbWUqKTsKQEAgLTQyOSwxMCArNDI5
LDEwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGlkRmlyZUFuaW1hdGlvbkZyYW1lSW1w
bChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKIAogICAgIHN0YXRpYyB2
b2lkIHN0YXJ0UHJvZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgUmVmUHRyPEpTQzo6UHJvZmls
ZT4gc3RvcFByb2ZpbGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpQcm9m
aWxlPiBzdG9wUHJvZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0g
ICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwg
UmVmUHRyPERhdGFiYXNlPiYmLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAgIHN0YXRpYyB2b2lkIGRpZE9wZW5EYXRh
YmFzZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBjb25z
dCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24pOwogI2VuZGlmCiAKICAgICBzdGF0aWMgdm9pZCBkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVu
dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJp
dHlPcmlnaW4qLCBQYWdlKik7CkBAIC00NDIsMTMgKzQ0MiwxMyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlVGVybWluYXRlZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYsIFdvcmtlckdsb2JhbFNjb3BlUHJveHkqKTsKIAogI2lmIEVOQUJMRShXRUJfUkVQTEFZ
KQotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25DcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOwotICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2Fk
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJik7Ci0g
ICAgc3RhdGljIHZvaWQgc2Vzc2lvbk1vZGlmaWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwg
UmVmUHRyPFJlcGxheVNlc3Npb24+JiYpOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25DcmVhdGVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7Cisg
ICAgc3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBh
c3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Nb2RpZmll
ZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOwog
Ci0gICAgc3RhdGljIHZvaWQgc2VnbWVudENyZWF0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
LCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYpOwotICAgIHN0YXRpYyB2b2lkIHNlZ21l
bnRDb21wbGV0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBSZWZQdHI8UmVwbGF5U2Vzc2lv
blNlZ21lbnQ+JiYpOwotICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRMb2FkZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYpOworICAgIHN0YXRp
YyB2b2lkIHNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgUGFzc1JlZlB0
cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDb21wbGV0
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdt
ZW50Pik7CisgICAgc3RhdGljIHZvaWQgc2VnbWVudExvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKICAgICBzdGF0aWMgdm9p
ZCBzZWdtZW50VW5sb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmKTsKIAogICAgIHN0YXRp
YyB2b2lkIGNhcHR1cmVTdGFydGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJik7CkBAIC0xMzg2
LDExICsxMzg2LDExIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyU3RhcnRlZExvYWRpbmdGb3JDCiAjZW5kaWYKIH0KIAotaW5s
aW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywgUmVmUHRyPEZv
cm1EYXRhPiYmIGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBib29sIGlu
Y2x1ZGVDcmVkZW50aWFscykKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbExvYWRYSFIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgVVJMJiB1cmws
IGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBjb25zdCBIVFRQSGVh
ZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKIHsKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIHdp
bGxMb2FkWEhSSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgY2xpZW50LCBtZXRob2QsIHVybCwg
YXN5bmMsIFdURjo6bW92ZShmb3JtRGF0YSksIGhlYWRlcnMsIGluY2x1ZGVDcmVkZW50aWFscyk7
CisgICAgICAgIHdpbGxMb2FkWEhSSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgY2xpZW50LCBt
ZXRob2QsIHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVudGlhbHMp
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGNs
aWVudCk7CkBAIC0xNzk2LDcyICsxNzk2LDcyIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lKERvY3VtZW50KiBkb2N1bWVudCwKICNl
bmRpZgogCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnNlc3Npb25DcmVhdGVkKFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNz
aW9uPiYmIHNlc3Npb24pCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNl
c3Npb25DcmVhdGVkKFBhZ2UmIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lv
bikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05U
RU5EUyh2b2lkKCkpOwogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIHNlc3Np
b25DcmVhdGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgV1RGOjptb3ZlKHNlc3Npb24pKTsK
KyAgICAgICAgc2Vzc2lvbkNyZWF0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzZXNzaW9u
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzZXNz
aW9uKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlc3Npb25Mb2FkZWQoUGFnZSYgcGFnZSwgUmVmUHRyPFJlcGxheVNlc3Npb24+JiYgc2Vzc2lv
bikKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkxvYWRlZChQ
YWdlJiBwYWdlLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsK
ICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBzZXNzaW9uTG9hZGVkSW1wbCgq
aW5zdHJ1bWVudGluZ0FnZW50cywgV1RGOjptb3ZlKHNlc3Npb24pKTsKKyAgICAgICAgc2Vzc2lv
bkxvYWRlZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNlc3Npb24pOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOwogI2VuZGlmCiB9
CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVk
KFBhZ2UmIHBhZ2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiYmIHNlc3Npb24pCitpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Nb2RpZmllZChQYWdlJiBwYWdlLCBQ
YXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKICAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JQYWdlKHBhZ2UpKQotICAgICAgICBzZXNzaW9uTW9kaWZpZWRJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzLCBXVEY6Om1vdmUoc2Vzc2lvbikpOworICAgICAgICBzZXNzaW9uTW9kaWZpZWRJ
bXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzZXNzaW9uKTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKICNlbmRpZgogfQogCi1pbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVkKFBhZ2UmIHBh
Z2UsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4mJiBzZWdtZW50KQoraW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZChQYWdlJiBwYWdlLCBQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQogewogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAgICAgc2VnbWVudENyZWF0ZWRJbXBsKCppbnN0cnVt
ZW50aW5nQWdlbnRzLCBXVEY6Om1vdmUoc2VnbWVudCkpOworICAgICAgICBzZWdtZW50Q3JlYXRl
ZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHNlZ21lbnQpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0ocGFnZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNlZ21lbnQpOwogI2VuZGlmCiB9CiAKLWlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZChQYWdl
JiBwYWdlLCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+JiYgc2VnbWVudCkKK2lubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZChQYWdlJiBwYWdl
LCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAg
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAgICAgICAgc2VnbWVudENvbXBsZXRlZEltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIFdURjo6bW92ZShzZWdtZW50KSk7CisgICAgICAgIHNlZ21l
bnRDb21wbGV0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBzZWdtZW50KTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzZWdtZW50KTsKICNlbmRp
ZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2Fk
ZWQoUGFnZSYgcGFnZSwgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiYmIHNlZ21lbnQpCitp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWQoUGFnZSYg
cGFnZSwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKIHsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkp
OwogICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIHNlZ21lbnRMb2FkZWRJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBXVEY6Om1vdmUoc2VnbWVudCkpOworICAgICAgICBzZWdt
ZW50TG9hZGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgc2VnbWVudCk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICBVTlVTRURfUEFSQU0oc2VnbWVudCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcApp
bmRleCA0NTU1ZGIyMTM1M2I2ZjE2N2E3ODMxNThlZTVlYmYzZTRjZjY5Y2M1Li42Y2IyMTI0NWYy
ZmFkZGI5Zjk5NTc1NTUzOGIwODExZTAzZDQ1MjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTE0Niw3ICsxNDYs
NyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRl
ckxheWVySGllcmFyY2h5KEVycm9yU3RyaW5nJgogICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1Jl
bmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5nLCByZW5kZXJMYXllciwgbGF5ZXJzKTsKIH0K
IAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmpl
Y3RGb3JMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5kZXJM
YXllcikKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gJnJlbmRlckxheWVyLT5yZW5k
ZXJlcigpOwogICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5i
YWNraW5nKCk7CkBAIC0xNjYsMTQgKzE2NiwxMyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpMYXllcj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rgog
ICAgICAgICBub2RlID0gcmVuZGVyZXItPnBhcmVudCgpLT5lbGVtZW50KCk7CiAKICAgICAvLyBC
YXNpYyBzZXQgb2YgcHJvcGVydGllcy4KLSAgICBhdXRvIGxheWVyT2JqZWN0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcjo6Y3JlYXRlKCkKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gbGF5ZXJPYmplY3QgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpjcmVhdGUoKQogICAgICAgICAuc2V0TGF5ZXJJ
ZChiaW5kKHJlbmRlckxheWVyKSkKICAgICAgICAgLnNldE5vZGVJZChpZEZvck5vZGUoZXJyb3JT
dHJpbmcsIG5vZGUpKQogICAgICAgICAuc2V0Qm91bmRzKGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChy
ZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpCiAgICAgICAgIC5zZXRNZW1vcnko
YmFja2luZy0+YmFja2luZ1N0b3JlTWVtb3J5RXN0aW1hdGUoKSkKICAgICAgICAgLnNldENvbXBv
c2l0ZWRCb3VuZHMoYnVpbGRPYmplY3RGb3JJbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYmFja2lu
Zy0+Y29tcG9zaXRlZEJvdW5kcygpKSkpCi0gICAgICAgIC5zZXRQYWludENvdW50KGJhY2tpbmct
PmdyYXBoaWNzTGF5ZXIoKS0+cmVwYWludENvdW50KCkpCi0gICAgICAgIC5yZWxlYXNlKCk7Cisg
ICAgICAgIC5zZXRQYWludENvdW50KGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+cmVwYWludENv
dW50KCkpOwogCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+c2hhZG93SG9zdCgpKQogICAgICAgICBs
YXllck9iamVjdC0+c2V0SXNJblNoYWRvd1RyZWUodHJ1ZSk7CkBAIC0yMDIsNyArMjAxLDcgQEAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpidWlsZE9iamVjdEYKICAgICAgICAgICAgIGxheWVyT2JqZWN0LT5zZXRQc2V1
ZG9FbGVtZW50KCJmaXJzdC1saW5lIik7CiAgICAgfQogCi0gICAgcmV0dXJuIFdURjo6bW92ZShs
YXllck9iamVjdCk7CisgICAgcmV0dXJuIGxheWVyT2JqZWN0OwogfQogCiBpbnQgSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUq
IG5vZGUpCkBAIC0yMTksMTcgKzIxOCwxNiBAQCBpbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6
OmlkRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCiAgICAgcmV0
dXJuIG5vZGVJZDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50
UmVjdD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpJbnRSZWN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0WChyZWN0LngoKSkK
ICAgICAgICAgLnNldFkocmVjdC55KCkpCiAgICAgICAgIC5zZXRXaWR0aChyZWN0LndpZHRoKCkp
Ci0gICAgICAgIC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSkKLSAgICAgICAgLnJlbGVhc2UoKTsK
KyAgICAgICAgLnNldEhlaWdodChyZWN0LmhlaWdodCgpKS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBsYXllcklkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+JiBjb21wb3NpdGlu
Z1JlYXNvbnNSZXN1bHQpCit2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9y
Q29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
bGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRp
bmdSZWFzb25zPiYgY29tcG9zaXRpbmdSZWFzb25zKQogewogICAgIGNvbnN0IFJlbmRlckxheWVy
KiByZW5kZXJMYXllciA9IG1faWRUb0xheWVyLmdldChsYXllcklkKTsKIApAQCAtMjM5LDcgKzIz
Nyw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGlu
Z0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgfQogCiAgICAgQ29tcG9zaXRpbmdS
ZWFzb25zIHJlYXNvbnNCaXRtYXNrID0gcmVuZGVyTGF5ZXItPmNvbXBvc2l0b3IoKS5yZWFzb25z
Rm9yQ29tcG9zaXRpbmcoKnJlbmRlckxheWVyKTsKLSAgICBhdXRvIGNvbXBvc2l0aW5nUmVhc29u
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zOjpj
cmVhdGUoKS5yZWxlYXNlKCk7CisgICAgY29tcG9zaXRpbmdSZWFzb25zID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM6OmNyZWF0ZSgpOwogCiAgICAg
aWYgKHJlYXNvbnNCaXRtYXNrICYgQ29tcG9zaXRpbmdSZWFzb24zRFRyYW5zZm9ybSkKICAgICAg
ICAgY29tcG9zaXRpbmdSZWFzb25zLT5zZXRUcmFuc2Zvcm0zRCh0cnVlKTsKQEAgLTMxMiw4ICsz
MTAsNiBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRp
bmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogCiAgICAgaWYgKHJlYXNvbnNCaXRtYXNr
ICYgQ29tcG9zaXRpbmdSZWFzb25Sb290KQogICAgICAgICBjb21wb3NpdGluZ1JlYXNvbnMtPnNl
dFJvb3QodHJ1ZSk7Ci0gICAgCi0gICAgY29tcG9zaXRpbmdSZWFzb25zUmVzdWx0ID0gV1RGOjpt
b3ZlKGNvbXBvc2l0aW5nUmVhc29ucyk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6YmluZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCmluZGV4IDI3NGUyM2VmNGM4
ODAzOWMzMzU2ZjQwMmY5YmMxZDVjMDdiMmEyNTMuLjY2MzM5MzI3Y2QwZmRmMzdiOGRkY2I5NmQ0
YWNiYzhiMzgwZWM0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5oCkBAIC03NSw4ICs3NSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYsIFJl
bmRlck9iamVjdCosIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mKTsKICAgICB2b2lkIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciosIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPj4mKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6
OkxheWVyPiBidWlsZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5nJiwgUmVuZGVyTGF5ZXIqKTsK
LSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBidWlsZE9i
amVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gYnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0
cmluZyYsIFJlbmRlckxheWVyKik7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpMYXllclRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25zdCBJbnRSZWN0
Jik7CiAKICAgICBpbnQgaWRGb3JOb2RlKEVycm9yU3RyaW5nJiwgTm9kZSopOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggMjk0YzA0ZDQx
ZjQzZjc3ODRmMGQ2MDQ5ODI3NGMwYTc2Y2JjM2VmMS4uYzg0NzQ1YzJkZjUxZGEzZWMwOTk2MmUw
ZTNhYmZhNjU0MjBhMjZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5LmNwcApAQCAtMzMxLDUwICszMzEsNTAgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5
Ojp1cGRhdGUoKQogICAgIGZvcmNlUGFpbnQoKTsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCitzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG9iamVjdC0+c2V0RG91Ymxl
KEFTQ0lJTGl0ZXJhbCgieCIpLCBwb2ludC54KCkpOwogICAgIG9iamVjdC0+c2V0RG91YmxlKEFT
Q0lJTGl0ZXJhbCgieSIpLCBwb2ludC55KCkpOwotICAgIHJldHVybiBXVEY6Om1vdmUob2JqZWN0
KTsKKyAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG9iamVjdC0+c2V0RG91YmxlKEFT
Q0lJTGl0ZXJhbCgieCIpLCByZWN0LngoKSk7CiAgICAgb2JqZWN0LT5zZXREb3VibGUoQVNDSUlM
aXRlcmFsKCJ5IiksIHJlY3QueSgpKTsKICAgICBvYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVy
YWwoIndpZHRoIiksIHJlY3Qud2lkdGgoKSk7CiAgICAgb2JqZWN0LT5zZXREb3VibGUoQVNDSUlM
aXRlcmFsKCJoZWlnaHQiKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShv
YmplY3QpOworICAgIHJldHVybiBvYmplY3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUmVmPElu
c3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yUXVhZChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCitz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclF1YWQoY29uc3Qg
RmxvYXRRdWFkJiBxdWFkKQogewotICAgIFJlZjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9i
amVjdEZvclBvaW50KHF1YWQucDEoKSkpOwogICAgIGFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2Jq
ZWN0Rm9yUG9pbnQocXVhZC5wMigpKSk7CiAgICAgYXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmpl
Y3RGb3JQb2ludChxdWFkLnAzKCkpKTsKICAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVj
dEZvclBvaW50KHF1YWQucDQoKSkpOwotICAgIHJldHVybiBXVEY6Om1vdmUoYXJyYXkpOworICAg
IHJldHVybiBhcnJheS5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodChjb25zdCBIaWdobGlnaHQmIGhpZ2hsaWdodCkKK3N0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQo
Y29uc3QgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
b2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWY8SW5zcGVjdG9yQXJy
YXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGhpZ2hsaWdodC5xdWFkcy5zaXplKCk7ICsraSkKICAgICAg
ICAgYXJyYXktPnB1c2hBcnJheShidWlsZEFycmF5Rm9yUXVhZChoaWdobGlnaHQucXVhZHNbaV0p
KTsKLSAgICBvYmplY3QtPnNldEFycmF5KCJxdWFkcyIsIFdURjo6bW92ZShhcnJheSkpOworICAg
IG9iamVjdC0+c2V0QXJyYXkoInF1YWRzIiwgYXJyYXkucmVsZWFzZSgpKTsKICAgICBvYmplY3Qt
PnNldFN0cmluZygiY29udGVudENvbG9yIiwgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvci5zZXJpYWxp
emVkKCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGln
aGxpZ2h0LmNvbnRlbnRPdXRsaW5lQ29sb3Iuc2VyaWFsaXplZCgpKTsKICAgICBvYmplY3QtPnNl
dFN0cmluZygicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0LnBhZGRpbmdDb2xvci5zZXJpYWxpemVk
KCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJib3JkZXJDb2xvciIsIGhpZ2hsaWdodC5ib3Jk
ZXJDb2xvci5zZXJpYWxpemVkKCkpOwogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJtYXJnaW5Db2xv
ciIsIGhpZ2hsaWdodC5tYXJnaW5Db2xvci5zZXJpYWxpemVkKCkpOwotICAgIHJldHVybiBXVEY6
Om1vdmUob2JqZWN0KTsKKyAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGlj
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVnaW9uSGlnaGxpZ2h0KEZy
YW1lVmlldyogbWFpblZpZXcsIFJlbmRlclJlZ2lvbiogcmVnaW9uKQorc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlZ2lvbkhpZ2hsaWdodChGcmFtZVZp
ZXcqIG1haW5WaWV3LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKIHsKICAgICBGcmFtZVZpZXcqIGNv
bnRhaW5pbmdWaWV3ID0gcmVnaW9uLT5mcmFtZSgpLnZpZXcoKTsKICAgICBpZiAoIWNvbnRhaW5p
bmdWaWV3KQpAQCAtNDA2LDIwICs0MDYsMjAgQEAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJ1aWxkT2JqZWN0Rm9yUmVnaW9uSGlnaGxpZ2h0KEZyYW1lVmlldyogbWFpblZpZXcKICAg
ICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBpbmNvbWluZ1Jl
Y3RRdWFkKTsKICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3
LCBvdXRnb2luZ1JlY3RRdWFkKTsKIAotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlZ2lvbk9i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVnaW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKIAogICAgIHJl
Z2lvbk9iamVjdC0+c2V0QXJyYXkoImJvcmRlclF1YWQiLCBidWlsZEFycmF5Rm9yUXVhZChib3Jk
ZXJSZWN0UXVhZCkpOwogICAgIHJlZ2lvbk9iamVjdC0+c2V0QXJyYXkoImluY29taW5nUXVhZCIs
IGJ1aWxkQXJyYXlGb3JRdWFkKGluY29taW5nUmVjdFF1YWQpKTsKICAgICByZWdpb25PYmplY3Qt
PnNldEFycmF5KCJvdXRnb2luZ1F1YWQiLCBidWlsZEFycmF5Rm9yUXVhZChvdXRnb2luZ1JlY3RR
dWFkKSk7CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlZ2lvbk9iamVjdCk7CisgICAgcmV0dXJu
IHJlZ2lvbk9iamVjdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yQXJyYXk+
IGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uc0hpZ2hsaWdodChSZW5kZXJSZWdpb24qIHJlZ2lvbiwg
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNIaWdobGlnaHQoUmVuZGVyUmVnaW9uKiBy
ZWdpb24sIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCiB7CiAgICAgRnJhbWVWaWV3KiBt
YWluRnJhbWVWaWV3ID0gcmVnaW9uLT5kb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCkudmll
dygpOwogCi0gICAgUmVmPEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogCiAgICAgY29uc3QgUmVuZGVyUmVnaW9uTGlzdCYgcmVnaW9uTGlzdCA9
IGZsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsKICAgICBmb3IgKGF1dG8mIGl0ZXJSZWdp
b24gOiByZWdpb25MaXN0KSB7CkBAIC00MzUsMTggKzQzNSwxOCBAQCBzdGF0aWMgUmVmPEluc3Bl
Y3RvckFycmF5PiBidWlsZE9iamVjdEZvckNTU1JlZ2lvbnNIaWdobGlnaHQoUmVuZGVyUmVnaW9u
KiByZWdpbwogICAgICAgICBhcnJheS0+cHVzaE9iamVjdChyZWdpb25IaWdobGlnaHRPYmplY3Qu
cmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKGFycmF5KTsKKyAgICBy
ZXR1cm4gYXJyYXkucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvck9iamVjdD4g
YnVpbGRPYmplY3RGb3JTaXplKGNvbnN0IEludFNpemUmIHNpemUpCitzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQogewotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXN1bHQtPnNldEludGVnZXIoIndpZHRoIiwgc2l6ZS53
aWR0aCgpKTsKICAgICByZXN1bHQtPnNldEludGVnZXIoImhlaWdodCIsIHNpemUuaGVpZ2h0KCkp
OwotICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKIH0KIAotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
Q1NTUmVnaW9uQ29udGVudENsaXAoUmVuZGVyUmVnaW9uKiByZWdpb24pCitzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQ1NTUmVnaW9uQ29udGVudENsaXAo
UmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IHJl
Z2lvbi0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghY29udGFpbmluZ0ZyYW1lKQpAQCAt
NDY2LDkgKzQ2Niw5IEBAIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVj
dEZvckNTU1JlZ2lvbkNvbnRlbnRDbGlwKFJlbmRlclJlZ2lvbioKICAgICBGbG9hdFF1YWQgY2xp
cFF1YWQgPSByZWdpb24tPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGZsaXBwZWRSZWdp
b25SZWN0KSk7CiAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmll
dywgY2xpcFF1YWQpOwogCi0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVnaW9uT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZWdpb25PYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlZ2lvbk9iamVj
dC0+c2V0QXJyYXkoInF1YWQiLCBidWlsZEFycmF5Rm9yUXVhZChjbGlwUXVhZCkpOwotICAgIHJl
dHVybiBXVEY6Om1vdmUocmVnaW9uT2JqZWN0KTsKKyAgICByZXR1cm4gcmVnaW9uT2JqZWN0LnJl
bGVhc2UoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRTaG93aW5nUGFpbnRSZWN0
cyhib29sIHNob3dpbmdQYWludFJlY3RzKQpAQCAtNTI2LDExICs1MjYsMTEgQEAgdm9pZCBJbnNw
ZWN0b3JPdmVybGF5Ojp1cGRhdGVQYWludFJlY3RzVGltZXJGaXJlZCgpCiAKIHZvaWQgSW5zcGVj
dG9yT3ZlcmxheTo6ZHJhd1BhaW50UmVjdHMoKQogewotICAgIFJlZjxJbnNwZWN0b3JBcnJheT4g
ZnJhZ21lbnRzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBmcmFnbWVudHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBtX3BhaW50UmVjdHMpCiAgICAgICAgIGZyYWdt
ZW50c0FycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUmVjdChwYWlyLnNlY29uZCkpOwog
Ci0gICAgZXZhbHVhdGVJbk92ZXJsYXkoQVNDSUlMaXRlcmFsKCJ1cGRhdGVQYWludFJlY3RzIiks
IFdURjo6bW92ZShmcmFnbWVudHNBcnJheSkpOworICAgIGV2YWx1YXRlSW5PdmVybGF5KEFTQ0lJ
TGl0ZXJhbCgidXBkYXRlUGFpbnRSZWN0cyIpLCBmcmFnbWVudHNBcnJheS5yZWxlYXNlKCkpOwog
fQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHdXR0ZXIoKQpAQCAtNTM4LDkgKzUzOCw5
IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0d1dHRlcigpCiAgICAgZXZhbHVhdGVJbk92
ZXJsYXkoQVNDSUlMaXRlcmFsKCJkcmF3R3V0dGVyIikpOwogfQogCi1zdGF0aWMgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBidWlsZE9iamVjdEZvclJlbmRlcmVyRnJhZ21lbnRzKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgY29uZmlnKQorc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkT2JqZWN0Rm9yUmVuZGVyZXJGcmFnbWVudHMoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBjb25maWcpCiB7Ci0g
ICAgUmVmPEluc3BlY3RvckFycmF5PiBmcmFnbWVudHNBcnJheSA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGZyYWdtZW50c0FycmF5ID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogY29udGFpbmlu
Z0Zsb3dUaHJlYWQgPSByZW5kZXJlci0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAg
IGlmICghY29udGFpbmluZ0Zsb3dUaHJlYWQpIHsKQEAgLTU2MiwxOCArNTYyLDE4IEBAIHN0YXRp
YyBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkT2JqZWN0Rm9yUmVuZGVyZXJGcmFnbWVudHMo
UmVuZGVyT2JqZWN0KiByZW5kCiAgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgaGlnaGxp
Z2h0IG9mIHRoZSBmcmFnbWVudCBpbnNpZGUgdGhlIGN1cnJlbnQgcmVnaW9uLgogICAgICAgICAg
ICAgICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7CiAgICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJl
ckhpZ2hsaWdodChyZW5kZXJlciwgcmVnaW9uLCBjb25maWcsICZoaWdobGlnaHQsIEluc3BlY3Rv
ck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXcpOwotICAgICAgICAgICAgICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IGZyYWdtZW50T2JqZWN0ID0gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQo
aGlnaGxpZ2h0KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFn
bWVudE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7CiAKICAgICAg
ICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjbGlwcGluZyBhcmVhIG9mIHRoZSByZWdpb24uCiAg
ICAgICAgICAgICAgICAgZnJhZ21lbnRPYmplY3QtPnNldE9iamVjdCgicmVnaW9uIiwgYnVpbGRP
YmplY3RGb3JDU1NSZWdpb25Db250ZW50Q2xpcChyZWdpb24pKTsKLSAgICAgICAgICAgICAgICBm
cmFnbWVudHNBcnJheS0+cHVzaE9iamVjdChXVEY6Om1vdmUoZnJhZ21lbnRPYmplY3QpKTsKKyAg
ICAgICAgICAgICAgICBmcmFnbWVudHNBcnJheS0+cHVzaE9iamVjdChmcmFnbWVudE9iamVjdC5y
ZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRS
ZWdpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gV1RGOjptb3ZlKGZyYWdtZW50c0FycmF5KTsKKyAgICByZXR1cm4gZnJhZ21lbnRzQXJy
YXkucmVsZWFzZSgpOwogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCkBAIC02MzMsMTMgKzYz
MywxMyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRQYXRoU2VnbWVudCh2b2lkKiBpbmZvLCBjb25zdCBQ
YXRoRWxlbWVudCogcGF0aEVsZW1lbnQpCiAgICAgfQogfQogCi1zdGF0aWMgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTaGFwZU91dHNpZGUoRnJhbWUqIGNvbnRhaW5pbmdG
cmFtZSwgUmVuZGVyQm94KiByZW5kZXJlcikKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JTaGFwZU91dHNpZGUoRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSwg
UmVuZGVyQm94KiByZW5kZXJlcikKIHsKICAgICBjb25zdCBTaGFwZU91dHNpZGVJbmZvKiBzaGFw
ZU91dHNpZGVJbmZvID0gcmVuZGVyZXItPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICBpZiAoIXNo
YXBlT3V0c2lkZUluZm8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gc2hhcGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNoYXBlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBMYXlvdXRSZWN0IHNoYXBlQm91bmRzID0gc2hhcGVPdXRzaWRlSW5mby0+
Y29tcHV0ZWRTaGFwZVBoeXNpY2FsQm91bmRpbmdCb3goKTsKICAgICBGbG9hdFF1YWQgc2hhcGVR
dWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHNoYXBlQm91bmRz
KSk7CiAgICAgY29udGVudHNRdWFkVG9QYWdlKGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5tYWlu
RnJhbWUoKS52aWV3KCksIGNvbnRhaW5pbmdGcmFtZS0+dmlldygpLCBzaGFwZVF1YWQpOwpAQCAt
NjQ5LDM5ICs2NDksMzkgQEAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2Jq
ZWN0Rm9yU2hhcGVPdXRzaWRlKEZyYW1lKiBjb250YWluaW5nRnJhbWUKICAgICBzaGFwZU91dHNp
ZGVJbmZvLT5jb21wdXRlZFNoYXBlKCkuYnVpbGREaXNwbGF5UGF0aHMocGF0aHMpOwogCiAgICAg
aWYgKHBhdGhzLnNoYXBlLmxlbmd0aCgpKSB7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3JBcnJheT4g
c2hhcGVQYXRoID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHNoYXBlUGF0aCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAg
ICAgUGF0aEFwcGx5SW5mbyBpbmZvOwogICAgICAgICBpbmZvLnJvb3RWaWV3ID0gY29udGFpbmlu
Z0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKICAgICAgICAgaW5mby52aWV3ID0g
Y29udGFpbmluZ0ZyYW1lLT52aWV3KCk7Ci0gICAgICAgIGluZm8uYXJyYXkgPSAmc2hhcGVQYXRo
LmdldCgpOworICAgICAgICBpbmZvLmFycmF5ID0gc2hhcGVQYXRoLmdldCgpOwogICAgICAgICBp
bmZvLnJlbmRlcmVyID0gcmVuZGVyZXI7CiAgICAgICAgIGluZm8uc2hhcGVPdXRzaWRlSW5mbyA9
IHNoYXBlT3V0c2lkZUluZm87CiAKICAgICAgICAgcGF0aHMuc2hhcGUuYXBwbHkoJmluZm8sICZh
cHBlbmRQYXRoU2VnbWVudCk7CiAKLSAgICAgICAgc2hhcGVPYmplY3QtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgic2hhcGUiKSwgc2hhcGVQYXRoLmNvcHlSZWYoKSk7CisgICAgICAgIHNoYXBlT2Jq
ZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoInNoYXBlIiksIHNoYXBlUGF0aC5yZWxlYXNlKCkp
OwogCiAgICAgICAgIGlmIChwYXRocy5tYXJnaW5TaGFwZS5sZW5ndGgoKSkgewogICAgICAgICAg
ICAgc2hhcGVQYXRoID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgaW5m
by5hcnJheSA9ICZzaGFwZVBhdGguZ2V0KCk7CisgICAgICAgICAgICBpbmZvLmFycmF5ID0gc2hh
cGVQYXRoLmdldCgpOwogCiAgICAgICAgICAgICBwYXRocy5tYXJnaW5TaGFwZS5hcHBseSgmaW5m
bywgJmFwcGVuZFBhdGhTZWdtZW50KTsKIAotICAgICAgICAgICAgc2hhcGVPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgibWFyZ2luU2hhcGUiKSwgc2hhcGVQYXRoLmNvcHlSZWYoKSk7Cisg
ICAgICAgICAgICBzaGFwZU9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJtYXJnaW5TaGFw
ZSIpLCBzaGFwZVBhdGgucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBXVEY6Om1vdmUoc2hhcGVPYmplY3QpOworICAgIHJldHVybiBzaGFwZU9iamVjdC5yZWxlYXNl
KCk7CiB9CiAjZW5kaWYKIAotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2Jq
ZWN0Rm9yRWxlbWVudEluZm8oTm9kZSogbm9kZSkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogewogICAgIEFT
U0VSVChub2RlKTsKICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSB8fCAhbm9kZS0+ZG9jdW1l
bnQoKS5mcmFtZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IGVsZW1lbnRJbmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlbGVtZW50SW5mbyA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUp
OwogICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc1hIVE1MRG9jdW1lbnQo
KTsKQEAgLTc0NiwxMCArNzQ2LDEwIEBAIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZE9iamVjdEZvckVsZW1lbnRJbmZvKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBlbGVtZW50
SW5mby0+c2V0U3RyaW5nKCJyb2xlIiwgYXhPYmplY3QtPmNvbXB1dGVkUm9sZVN0cmluZygpKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKGVsZW1lbnRJbmZvKTsKKyAgICByZXR1cm4g
ZWxlbWVudEluZm8ucmVsZWFzZSgpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JPdmVybGF5OjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0CitQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT3ZlcmxheTo6YnVpbGRPYmplY3RGb3JI
aWdobGlnaHRlZE5vZGUoKSBjb25zdAogewogICAgIGlmICghbV9oaWdobGlnaHROb2RlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc2Myw3ICs3NjMsNyBAQCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBJbnNwZWN0b3JPdmVybGF5OjpidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZSgp
IGNvbnN0CiAgICAgaWYgKCFoaWdobGlnaHRGcmFnbWVudHMpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gaGlnaGxpZ2h0T2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaWdobGln
aHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogCiAgICAgLy8gVGhlIG1haW4g
dmlldydzIHNjcm9sbCBvZmZzZXQgaXMgc2hhcmVkIGFjcm9zcyBhbGwgcXVhZHMuCiAgICAgRnJh
bWVWaWV3KiBtYWluVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCk7CkBAIC03NzcsNyAr
Nzc3LDcgQEAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT3ZlcmxheTo6YnVpbGRP
YmplY3RGb3JIaWdobGlnaHRlZE5vZGUoKSBjb25zdAogICAgICAgICAgICAgaGlnaGxpZ2h0T2Jq
ZWN0LT5zZXRPYmplY3QoImVsZW1lbnRJbmZvIiwgZWxlbWVudEluZm8ucmVsZWFzZSgpKTsKICAg
ICB9CiAgICAgICAgIAotICAgIHJldHVybiBXVEY6Om1vdmUoaGlnaGxpZ2h0T2JqZWN0KTsKKyAg
ICByZXR1cm4gaGlnaGxpZ2h0T2JqZWN0LnJlbGVhc2UoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JP
dmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCgpCkBAIC04NTksMzMgKzg1OSwzMyBAQCB2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OmZvcmNlUGFpbnQoKQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnJl
c2V0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgZnJhbWVWaWV3
RnVsbFNpemUpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzZXREYXRhID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNldERh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlc2V0RGF0YS0+c2V0RG91Ymxl
KCJkZXZpY2VTY2FsZUZhY3RvciIsIG1fcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBy
ZXNldERhdGEtPnNldE9iamVjdCgidmlld3BvcnRTaXplIiwgYnVpbGRPYmplY3RGb3JTaXplKHZp
ZXdwb3J0U2l6ZSkpOwogICAgIHJlc2V0RGF0YS0+c2V0T2JqZWN0KCJmcmFtZVZpZXdGdWxsU2l6
ZSIsIGJ1aWxkT2JqZWN0Rm9yU2l6ZShmcmFtZVZpZXdGdWxsU2l6ZSkpOwotICAgIGV2YWx1YXRl
SW5PdmVybGF5KCJyZXNldCIsIFdURjo6bW92ZShyZXNldERhdGEpKTsKKyAgICBldmFsdWF0ZUlu
T3ZlcmxheSgicmVzZXQiLCByZXNldERhdGEucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCkKIHsKLSAg
ICBSZWY8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwogICAgIGNvbW1hbmQtPnB1c2hTdHJpbmcobWV0aG9kKTsKICAgICBvdmVybGF5UGFn
ZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VT
dHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNPTlN0cmluZygpLCAnKScpKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJbk92ZXJsYXkoY29uc3QgU3RyaW5nJiBt
ZXRob2QsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgUmVmPEluc3BlY3RvckFycmF5
PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gY29tbWFuZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBjb21tYW5k
LT5wdXNoU3RyaW5nKG1ldGhvZCk7CiAgICAgY29tbWFuZC0+cHVzaFN0cmluZyhhcmd1bWVudCk7
CiAgICAgb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXZhbHVhdGUoU2NyaXB0
U291cmNlQ29kZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5kLT50b0pTT05TdHJpbmco
KSwgJyknKSkpOwogfQogCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVybGF5
KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgYXJndW1lbnQp
Cit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBhcmd1bWVudCkKIHsKLSAgICBSZWY8
SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwogICAgIGNvbW1hbmQtPnB1c2hTdHJpbmcobWV0aG9kKTsKLSAgICBjb21tYW5kLT5wdXNoVmFs
dWUoV1RGOjptb3ZlKGFyZ3VtZW50KSk7CisgICAgY29tbWFuZC0+cHVzaFZhbHVlKGFyZ3VtZW50
KTsKICAgICBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5ldmFsdWF0ZShTY3Jp
cHRTb3VyY2VDb2RlKG1ha2VTdHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNPTlN0cmlu
ZygpLCAnKScpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5oCmluZGV4IGU1Y2ZlZWYyNTc1NmZiZWZmMmUwZDcyZWYyYmM5YWZlMGVjOGE3ZjUuLjRl
ZmI0NTg1ZTcyYWFmZjJhYTZiNTkyODc0N2JmMWQ4NWEyMzExMWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaApAQCAtMTI5LDcgKzEyOSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpOwogCi0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodGVk
Tm9kZSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CiAKICAgICB2b2lkIGZyZWVQ
YWdlKCk7CiBwcml2YXRlOgpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZXNldChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGZyYW1lVmll
d0Z1bGxTaXplKTsKICAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0
aG9kKTsKICAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBj
b25zdCBTdHJpbmcmIGFyZ3VtZW50KTsKLSAgICB2b2lkIGV2YWx1YXRlSW5PdmVybGF5KGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiBhcmd1
bWVudCk7CisgICAgdm9pZCBldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBhcmd1bWVudCk7CiAKICAgICBQ
YWdlJiBtX3BhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggMTBkZWY3Mzg2
YTJmZjFmYzkwZTBlNThhYWMxNTE2OTUyYWQwZTc1Yy4uN2UyY2JkYjY1OTc3ODg0Y2FmNGIwZjkw
MDNjMzkyOWNmOGJmOTkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0aWMgYm9vbCBoYXNUZXh0
Q29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiAgICAgcmV0dXJuIHR5cGUg
PT0gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVj
dG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3VyY2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdl
QWdlbnQ6OlNjcmlwdFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpYSFJS
ZXNvdXJjZTsKIH0KIAotc3RhdGljIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGVY
SFJUZXh0RGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHRleHRF
bmNvZGluZ05hbWUpCitzdGF0aWMgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVh
dGVYSFJUZXh0RGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHRl
eHRFbmNvZGluZ05hbWUpCiB7CiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29k
ZXI7CiAgICAgaWYgKCF0ZXh0RW5jb2RpbmdOYW1lLmlzRW1wdHkoKSkKQEAgLTEzMCw3ICsxMzAs
NyBAQCBzdGF0aWMgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZVhIUlRleHREZWNv
ZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsCiAgICAgICAgIGRlY29kZXIgPSBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpjcmVhdGUoInRleHQvaHRtbCIsICJVVEYtOCIpOwogICAgIGVsc2UKICAgICAg
ICAgZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsICJV
VEYtOCIpOwotICAgIHJldHVybiBXVEY6Om1vdmUoZGVjb2Rlcik7CisgICAgcmV0dXJuIGRlY29k
ZXI7CiB9CiAKIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQo
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFz
ZTY0RW5jb2RlZCkKQEAgLTQyMCw3ICs0MjAsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
bmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkKICAgICBmcmFtZS5sb2Fk
ZXIoKS5jaGFuZ2VMb2NhdGlvbihmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBm
cmFtZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLCAiIiwgTG9ja0hpc3Rvcnk6Ok5vLCBM
b2NrQmFja0ZvcndhcmRMaXN0OjpObyk7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmIGNv
b2tpZSkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tp
ZT4gYnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCiB7CiAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6Y3JlYXRlKCkKICAgICAgICAg
LnNldE5hbWUoY29va2llLm5hbWUpCkBAIC00MzUsMTQgKzQzNSwxNCBAQCBzdGF0aWMgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29raWUoY29u
c3QgQ29va2llJgogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGJ1
aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4mIGNvb2tpZXNMaXN0KQorc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6Q29va2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29v
a2llPiYgY29va2llc0xpc3QpCiB7Ci0gICAgYXV0byBjb29raWVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPjo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZT4+IGNvb2tpZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKIAotICAgIGZvciAo
Y29uc3QgYXV0byYgY29va2llIDogY29va2llc0xpc3QpCisgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzTGlzdCkKICAgICAgICAgY29va2llcy0+YWRkSXRlbShidWlsZE9iamVjdEZvckNv
b2tpZShjb29raWUpKTsKIAotICAgIHJldHVybiBXVEY6Om1vdmUoY29va2llcyk7CisgICAgcmV0
dXJuIGNvb2tpZXM7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRS
ZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUpCkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQsIGMKICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyhjb250ZW50LCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdl
eCk7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVz
dWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQorc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJj
aFJlc3VsdChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0
Y2hlc0NvdW50KQogewogICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFy
Y2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwodXJsKQpAQCAtODUxLDEzICs4NTEs
MTMgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFBhaW50KFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QKIAogICAgIExheW91dFJlY3QgYWJzb2x1dGVS
ZWN0ID0gTGF5b3V0UmVjdChyZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
cmVjdCkpLmJvdW5kaW5nQm94KCkpOwogICAgIEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVyLT5k
b2N1bWVudCgpLnZpZXcoKTsKLQorICAgIAogICAgIExheW91dFJlY3Qgcm9vdFJlY3QgPSBhYnNv
bHV0ZVJlY3Q7CiAgICAgaWYgKCF2aWV3LT5mcmFtZSgpLmlzTWFpbkZyYW1lKCkpIHsKICAgICAg
ICAgSW50UmVjdCByb290Vmlld1JlY3QgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoc25hcHBl
ZEludFJlY3QoYWJzb2x1dGVSZWN0KSk7CiAgICAgICAgIHJvb3RSZWN0ID0gdmlldy0+ZnJhbWUo
KS5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhyb290Vmlld1JlY3QpOwog
ICAgIH0KLQorICAgIAogICAgIGlmIChtX2NsaWVudC0+b3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMo
KSkgewogICAgICAgICBtX2NsaWVudC0+c2hvd1BhaW50UmVjdChyb290UmVjdCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTg5OCwxNSArODk4LDE0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpz
Y3JpcHRzRW5hYmxlZChib29sIGlzRW5hYmxlZCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
c2NyaXB0c0VuYWJsZWQoaXNFbmFibGVkKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJh
bWUqIGZyYW1lKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4g
SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsK
LSAgICBhdXRvIGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU6
OmNyZWF0ZSgpCisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBm
cmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0SWQoZnJhbWVJZChmcmFtZSkpCiAgICAgICAgIC5zZXRMb2FkZXJJZChsb2Fk
ZXJJZChmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkpCiAgICAgICAgIC5zZXRVcmwo
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKQogICAgICAgICAuc2V0TWltZVR5cGUo
ZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSkKLSAg
ICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT50b1Jhd1N0cmluZygpKQotICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAuc2V0U2Vj
dXJpdHlPcmlnaW4oZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvUmF3U3Ry
aW5nKCkpOwogICAgIGlmIChmcmFtZS0+dHJlZSgpLnBhcmVudCgpKQogICAgICAgICBmcmFtZU9i
amVjdC0+c2V0UGFyZW50SWQoZnJhbWVJZChmcmFtZS0+dHJlZSgpLnBhcmVudCgpKSk7CiAgICAg
aWYgKGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewpAQCAtOTE2LDI0ICs5MTUsMjIgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRnJhbWUoRnIKICAgICAgICAgZnJhbWVPYmplY3QtPnNldE5hbWUobmFtZSk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFdURjo6bW92ZShmcmFtZU9iamVjdCk7CisgICAgcmV0dXJuIGZy
YW1lT2JqZWN0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNv
dXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJh
bWUqIGZyYW1lKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJl
c291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShG
cmFtZSogZnJhbWUpCiB7Ci0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
PiBmcmFtZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOwotICAgIGF1dG8gc3Vi
cmVzb3VyY2VzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOwotICAgIGF1dG8gcmVzdWx0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCi0gICAg
ICAgIC5zZXRGcmFtZShXVEY6Om1vdmUoZnJhbWVPYmplY3QpKQotICAgICAgICAuc2V0UmVzb3Vy
Y2VzKHN1YnJlc291cmNlcy5jb3B5UmVmKCkpCi0gICAgICAgIC5yZWxlYXNlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxk
T2JqZWN0Rm9yRnJhbWUoZnJhbWUpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlPj4gc3VicmVzb3Vy
Y2VzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCisgICAgICAgICAuc2V0RnJhbWUo
ZnJhbWVPYmplY3QpCisgICAgICAgICAuc2V0UmVzb3VyY2VzKHN1YnJlc291cmNlcyk7CiAKICAg
ICBmb3IgKGF1dG8qIGNhY2hlZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJh
bWUpKSB7Ci0gICAgICAgIGF1dG8gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQorICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAgICAg
LnNldFVybChjYWNoZWRSZXNvdXJjZS0+dXJsKCkpCiAgICAgICAgICAgICAuc2V0VHlwZShjYWNo
ZWRSZXNvdXJjZVR5cGVKc29uKCpjYWNoZWRSZXNvdXJjZSkpCi0gICAgICAgICAgICAuc2V0TWlt
ZVR5cGUoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSkKLSAgICAgICAgICAg
IC5yZWxlYXNlKCk7CisgICAgICAgICAgICAuc2V0TWltZVR5cGUoY2FjaGVkUmVzb3VyY2UtPnJl
c3BvbnNlKCkubWltZVR5cGUoKSk7CiAgICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZS0+d2FzQ2Fu
Y2VsZWQoKSkKICAgICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRDYW5jZWxlZCh0cnVlKTsK
ICAgICAgICAgZWxzZSBpZiAoY2FjaGVkUmVzb3VyY2UtPnN0YXR1cygpID09IENhY2hlZFJlc291
cmNlOjpMb2FkRXJyb3IpCkBAIC05NDEsNyArOTM4LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2Jq
ZWMKICAgICAgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6
OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKGNhY2hlZFJlc291cmNlKTsKICAgICAgICAgaWYgKCFz
b3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlc291cmNlT2JqZWN0LT5z
ZXRTb3VyY2VNYXBVUkwoc291cmNlTWFwcGluZ1VSTCk7Ci0gICAgICAgIHN1YnJlc291cmNlcy0+
YWRkSXRlbShXVEY6Om1vdmUocmVzb3VyY2VPYmplY3QpKTsKKyAgICAgICAgc3VicmVzb3VyY2Vz
LT5hZGRJdGVtKHJlc291cmNlT2JqZWN0KTsKICAgICB9CiAKICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJj
ZVRyZWU+PiBjaGlsZHJlbkFycmF5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oCmluZGV4IGJmMjY0YTdkMjhmMzEzM2ZkOWQyMmE2ZGU4MGY2ZDFjYjJi
NDM5ZjYuLjUzNDNhZjg5MjYxMjUyYThmYTE4ZTEzMGM0ZGNhMGM3YjUyNDQ5ZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTE2Niw4ICsx
NjYsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIG1haW5SZXNvdXJjZUNvbnRlbnQoRnJh
bWUqLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KTsKICAgICBzdGF0aWMg
Ym9vbCBkYXRhQ29udGVudChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBzaXplLCBjb25zdCBT
dHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiBy
ZXN1bHQpOwogCi0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBidWls
ZE9iamVjdEZvckZyYW1lKEZyYW1lKik7Ci0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSopOwor
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IGJ1aWxkT2Jq
ZWN0Rm9yRnJhbWUoRnJhbWUqKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSop
OwogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6Okluc3BlY3RvclBhZ2VGcm9udGVuZERpc3BhdGNo
ZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAKaW5kZXggOGZjNDQxZTEzMWYwYWRmYjdiOWNiZDIy
NGQ1ZTFiY2I3ZTJiMmNkYy4uNzc5YmU2MjhiMzhhOGQ2Y2Q1ODlmZmE5MDU5ZDFjYzlmMjJlZWM3
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdl
bnQuY3BwCkBAIC01NCwzNiArNTQsNDAgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
cGxheTo6UmVwbGF5UG9zaXRpb24+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24oY29u
c3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4gYnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JQb3NpdGlvbihjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb246OmNyZWF0ZSgpCisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+IHBv
c2l0aW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlQb3NpdGlv
bjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlZ21lbnRPZmZzZXQocG9zaXRpb24uc2VnbWVudE9m
ZnNldCkKLSAgICAgICAgLnNldElucHV0T2Zmc2V0KHBvc2l0aW9uLmlucHV0T2Zmc2V0KQotICAg
ICAgICAucmVsZWFzZSgpOworICAgICAgICAuc2V0SW5wdXRPZmZzZXQocG9zaXRpb24uaW5wdXRP
ZmZzZXQpOworCisgICAgcmV0dXJuIHBvc2l0aW9uT2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3Rh
dGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0PiBidWlsZElu
c3BlY3Rvck9iamVjdEZvcklucHV0KGNvbnN0IE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2UmIGlu
cHV0LCBzaXplX3Qgb2Zmc2V0KQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJbnB1dChjb25z
dCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCwgc2l6ZV90IG9mZnNldCkKIHsKICAg
ICBFbmNvZGVkVmFsdWUgZW5jb2RlZElucHV0ID0gRW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5p
c3RpY0lucHV0QmFzZT46OmVuY29kZVZhbHVlKGlucHV0KTsKLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dDo6Y3JlYXRlKCkKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gaW5wdXRPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0OjpjcmVhdGUoKQogICAgICAgICAu
c2V0VHlwZShpbnB1dC50eXBlKCkpCiAgICAgICAgIC5zZXRPZmZzZXQob2Zmc2V0KQotICAgICAg
ICAuc2V0RGF0YShlbmNvZGVkSW5wdXQuYXNPYmplY3QoKSkKLSAgICAgICAgLnJlbGVhc2UoKTsK
KyAgICAgICAgLnNldERhdGEoZW5jb2RlZElucHV0LmFzT2JqZWN0KCkpOworCisgICAgcmV0dXJu
IGlucHV0T2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lv
bihSZWZQdHI8UmVwbGF5U2Vzc2lvbj4mJiBzZXNzaW9uKQorc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBidWlsZEluc3BlY3Rvck9i
amVjdEZvclNlc3Npb24oUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBwcnBTZXNzaW9uKQogewot
ICAgIGF1dG8gc2VnbWVudHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTZWdtZW50SWRl
bnRpZmllcj46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0g
cHJwU2Vzc2lvbjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U2VnbWVu
dElkZW50aWZpZXI+PiBzZWdtZW50cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFNlZ21l
bnRJZGVudGlmaWVyPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKGF1dG8gaXQgPSBzZXNzaW9uLT5i
ZWdpbigpOyBpdCAhPSBzZXNzaW9uLT5lbmQoKTsgKytpdCkKICAgICAgICAgc2VnbWVudHMtPmFk
ZEl0ZW0oKCppdCktPmlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uOjpjcmVhdGUoKQorICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+IHNlc3Npb25PYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheVNlc3Npb246OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRJZChzZXNzaW9uLT5pZGVudGlmaWVyKCkpCiAgICAgICAgIC5zZXRUaW1lc3RhbXAoc2Vz
c2lvbi0+dGltZXN0YW1wKCkpCi0gICAgICAgIC5zZXRTZWdtZW50cyhXVEY6Om1vdmUoc2VnbWVu
dHMpKQotICAgICAgICAucmVsZWFzZSgpOworICAgICAgICAuc2V0U2VnbWVudHMoc2VnbWVudHMu
cmVsZWFzZSgpKTsKKworICAgIHJldHVybiBzZXNzaW9uT2JqZWN0LnJlbGVhc2UoKTsKIH0KIAog
c3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblN0YXRlIGJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFdlYkNvcmU6OlNlc3Npb25TdGF0ZSBzZXNzaW9u
U3RhdGUpCkBAIC0xMDcsNyArMTExLDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
cGxheTo6U2VnbWVudFN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFMKIAogY2xh
c3MgU2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9yIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBs
YXk6OlJlcGxheUlucHV0Pj4gUmV0dXJuVHlwZTsKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBs
YXlJbnB1dD4+IFJldHVyblR5cGU7CiAKICAgICBTZXJpYWxpemVJbnB1dFRvSlNPTkZ1bmN0b3Io
KQogICAgICAgICA6IG1faW5wdXRzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJlcGxheTo6UmVwbGF5SW5wdXQ+OjpjcmVhdGUoKSkgeyB9CkBAIC0xMjYs
MjggKzEzMCwzMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0Pj4gbV9pbnB1dHM7
CiB9OwogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblNl
Z21lbnQ+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudChSZWZQdHI8UmVwbGF5U2Vzc2lv
blNlZ21lbnQ+JiYgc2VnbWVudCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVu
dChQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBwcnBTZWdtZW50KQogewotICAgIGF1
dG8gcXVldWVzT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50ID0gcHJwU2VnbWVudDsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpS
ZXBsYXlJbnB1dFF1ZXVlPj4gcXVldWVzT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlPjo6Y3JlYXRl
KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4oSW5w
dXRRdWV1ZTo6Q291bnQpOyBpKyspIHsKICAgICAgICAgU2VyaWFsaXplSW5wdXRUb0pTT05GdW5j
dG9yIGNvbGxlY3RvcjsKICAgICAgICAgSW5wdXRRdWV1ZSBxdWV1ZSA9IHN0YXRpY19jYXN0PElu
cHV0UXVldWU+KGkpOwotICAgICAgICBSZWZQdHI8RnVuY3RvcklucHV0Q3Vyc29yPiBmdW5jdG9y
Q3Vyc29yID0gRnVuY3RvcklucHV0Q3Vyc29yOjpjcmVhdGUoc2VnbWVudC5jb3B5UmVmKCkpOwor
ICAgICAgICBSZWZQdHI8RnVuY3RvcklucHV0Q3Vyc29yPiBmdW5jdG9yQ3Vyc29yID0gRnVuY3Rv
cklucHV0Q3Vyc29yOjpjcmVhdGUoc2VnbWVudCk7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0
Pj4gcXVldWVJbnB1dHMgPSBmdW5jdG9yQ3Vyc29yLT5mb3JFYWNoSW5wdXRJblF1ZXVlKHF1ZXVl
LCBjb2xsZWN0b3IpOwogCi0gICAgICAgIGF1dG8gcXVldWVPYmplY3QgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0UXVldWU6OmNyZWF0ZSgpCisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlJlcGxheUlucHV0UXVldWU+IHF1ZXVlT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlOjpjcmVh
dGUoKQogICAgICAgICAgICAgLnNldFR5cGUoRW5jb2RpbmdUcmFpdHM8SW5wdXRRdWV1ZT46OmVu
Y29kZVZhbHVlKHF1ZXVlKS5jb252ZXJ0VG88U3RyaW5nPigpKQotICAgICAgICAgICAgLnNldElu
cHV0cyhxdWV1ZUlucHV0cykKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgIHF1ZXVl
c09iamVjdC0+YWRkSXRlbShXVEY6Om1vdmUocXVldWVPYmplY3QpKTsKKyAgICAgICAgICAgIC5z
ZXRJbnB1dHMocXVldWVJbnB1dHMpOworCisgICAgICAgIHF1ZXVlc09iamVjdC0+YWRkSXRlbShx
dWV1ZU9iamVjdC5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50OjpjcmVhdGUoKQorICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiBzZWdtZW50T2JqZWN0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudDo6Y3JlYXRlKCkKICAg
ICAgICAgLnNldElkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSkKICAgICAgICAgLnNldFRpbWVzdGFt
cChzZWdtZW50LT50aW1lc3RhbXAoKSkKLSAgICAgICAgLnNldFF1ZXVlcyhXVEY6Om1vdmUocXVl
dWVzT2JqZWN0KSkKLSAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgLnNldFF1ZXVlcyhxdWV1
ZXNPYmplY3QucmVsZWFzZSgpKTsKKworICAgIHJldHVybiBzZWdtZW50T2JqZWN0LnJlbGVhc2Uo
KTsKIH0KIAogSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Okluc3BlY3RvclJlcGxheUFnZW50KEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCog
cGFnZUFnZW50KQpAQCAtMzMxLDcgKzMzNyw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIG1fcGFnZS5yZXBs
YXlDb250cm9sbGVyKCkuc3RvcENhcHR1cmluZygpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxh
eUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwb3NpdGlvbk9iamVjdCwgYm9vbCBmYXN0UmVwbGF5
KQordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Qb3NpdGlvbihFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBwb3NpdGlvbk9i
amVjdCwgYm9vbCBmYXN0UmVwbGF5KQogewogICAgIFJlcGxheVBvc2l0aW9uIHBvc2l0aW9uOwog
ICAgIGlmICghcG9zaXRpb25PYmplY3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJzZWdtZW50
T2Zmc2V0IiksIHBvc2l0aW9uLnNlZ21lbnRPZmZzZXQpKSB7CkBAIC01MDEsNyArNTA3LDcgQEAg
dm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBJbnNwZWN0b3I6OlAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNl
cmlhbGl6ZWRPYmplY3QgPSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24oV1RGOjptb3Zl
KHNlc3Npb24pKTsKKyAgICBzZXJpYWxpemVkT2JqZWN0ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JTZXNzaW9uKHNlc3Npb24pOwogfQogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRT
ZWdtZW50RGF0YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+JiBzZXJpYWxpemVkT2JqZWN0KQpAQCAt
NTEyLDcgKzUxOCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlZ21lbnREYXRh
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSW5zcGVjdG9yOjpQCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBzZXJpYWxpemVkT2JqZWN0ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JT
ZWdtZW50KFdURjo6bW92ZShzZWdtZW50KSk7CisgICAgc2VyaWFsaXplZE9iamVjdCA9IGJ1aWxk
SW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudChzZWdtZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
cGxheUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdl
bnQuaAppbmRleCA5NDI5NTExOWU5NDFhZGNiZTM0OTQ5NjBhNGJhZTU2NTUwNjFmNmI0Li4xNzNh
ZWE3YjgyNjE4YjhkMjkzMDNiYzVhMDhkOGIwYWMwNTU1OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaApAQCAtOTUsNyArOTUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0Q2FwdHVyaW5nKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCByZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nJiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmLCBib29sIHNob3VsZEZh
c3RGb3J3YXJkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwbGF5VG9Qb3NpdGlvbihF
cnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mLCBi
b29sIHNob3VsZEZhc3RGb3J3YXJkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwbGF5
VG9Db21wbGV0aW9uKEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRGYXN0Rm9yd2FyZCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUGxheWJhY2soRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGxheWJhY2soRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFn
ZW50LmNwcAppbmRleCBiMDAyMjZlYTExN2Y5YTNjZmI3ZDM5YTdiN2Y2OGE5NmRlZDQzMWNhLi5m
MzZlODIzOGE4YzFkZTA0YTQ0ZTNmNWRmNTBkMzQyNDdjNDZmNjM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0xOTAs
MTYgKzE5MCwxNiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZQogICAgIGRpc2FibGUodW51c2Vk
KTsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGVhZGVy
cyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVh
ZGVycykKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJz
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmlu
ZyhoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwotICAgIHJldHVybiBXVEY6Om1vdmUoaGVhZGVy
c09iamVjdCk7CisgICAgcmV0dXJuIGhlYWRlcnNPYmplY3Q7CiB9CiAKLXN0YXRpYyBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2JqZWN0Rm9y
VGltaW5nKGNvbnN0IFJlc291cmNlTG9hZFRpbWluZyYgdGltaW5nLCBEb2N1bWVudExvYWRlciog
bG9hZGVyKQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNvbnN0IFJlc291cmNlTG9hZFRp
bWluZyYgdGltaW5nLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKICAgICAg
ICAgLnNldE5hdmlnYXRpb25TdGFydChsb2FkZXItPnRpbWluZygpLT5uYXZpZ2F0aW9uU3RhcnQo
KSkKQEAgLTIxMyw1NiArMjEzLDU0IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNvCiAgICAgICAg
IC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVxdWVzdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVxdWVzdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q6OmNyZWF0ZSgpCisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IHJlcXVlc3RPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0
VXJsKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRNZXRob2QocmVxdWVzdC5o
dHRwTWV0aG9kKCkpCi0gICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhy
ZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCi0gICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAg
IC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVs
ZHMoKSkpOwogICAgIGlmIChyZXF1ZXN0Lmh0dHBCb2R5KCkgJiYgIXJlcXVlc3QuaHR0cEJvZHko
KS0+aXNFbXB0eSgpKQogICAgICAgICByZXF1ZXN0T2JqZWN0LT5zZXRQb3N0RGF0YShyZXF1ZXN0
Lmh0dHBCb2R5KCktPmZsYXR0ZW5Ub1N0cmluZygpKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJl
cXVlc3RPYmplY3QpOworICAgIHJldHVybiByZXF1ZXN0T2JqZWN0OwogfQogCi1zdGF0aWMgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBidWlsZE9iamVjdEZv
clJlc291cmNlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpSZXNwb25zZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewog
ICAgIGlmIChyZXNwb25zZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBkb3VibGUgc3RhdHVzID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBoZWFkZXJzID0gYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZHMoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycyA9
IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOwogCi0g
ICAgYXV0byByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJl
c3BvbnNlOjpjcmVhdGUoKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXNwb25zZT4gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChyZXNwb25zZS51cmwoKS5zdHJp
bmcoKSkKICAgICAgICAgLnNldFN0YXR1cyhzdGF0dXMpCiAgICAgICAgIC5zZXRTdGF0dXNUZXh0
KHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpCi0gICAgICAgIC5zZXRIZWFkZXJzKFdURjo6bW92
ZShoZWFkZXJzKSkKLSAgICAgICAgLnNldE1pbWVUeXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpCi0g
ICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIC5zZXRIZWFkZXJzKGhlYWRlcnMpCisgICAgICAg
IC5zZXRNaW1lVHlwZShyZXNwb25zZS5taW1lVHlwZSgpKTsKIAogICAgIHJlc3BvbnNlT2JqZWN0
LT5zZXRGcm9tRGlza0NhY2hlKHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9uc2U6
OlNvdXJjZTo6RGlza0NhY2hlIHx8IHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9u
c2U6OlNvdXJjZTo6RGlza0NhY2hlQWZ0ZXJWYWxpZGF0aW9uKTsKICAgICByZXNwb25zZU9iamVj
dC0+c2V0VGltaW5nKGJ1aWxkT2JqZWN0Rm9yVGltaW5nKHJlc3BvbnNlLnJlc291cmNlTG9hZFRp
bWluZygpLCBsb2FkZXIpKTsKIAotICAgIHJldHVybiBXVEY6Om1vdmUocmVzcG9uc2VPYmplY3Qp
OworICAgIHJldHVybiByZXNwb25zZU9iamVjdDsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4gYnVpbGRPYmplY3RGb3JDYWNoZWRS
ZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIERvY3VtZW50TG9hZGVyKiBs
b2FkZXIpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpD
YWNoZWRSZXNvdXJjZT4gYnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkUmVzb3VyY2UsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAgYXV0byBy
ZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291
cmNlOjpjcmVhdGUoKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpD
YWNoZWRSZXNvdXJjZT4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3
b3JrOjpDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChjYWNoZWRSZXNv
dXJjZS0+dXJsKCkpCiAgICAgICAgIC5zZXRUeXBlKEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVk
UmVzb3VyY2VUeXBlSnNvbigqY2FjaGVkUmVzb3VyY2UpKQotICAgICAgICAuc2V0Qm9keVNpemUo
Y2FjaGVkUmVzb3VyY2UtPmVuY29kZWRTaXplKCkpCi0gICAgICAgIC5yZWxlYXNlKCk7CisgICAg
ICAgIC5zZXRCb2R5U2l6ZShjYWNoZWRSZXNvdXJjZS0+ZW5jb2RlZFNpemUoKSk7CiAKLSAgICBh
dXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UoY2Fj
aGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGxvYWRlcik7Ci0gICAgcmVzb3VyY2VPYmplY3QtPnNl
dFJlc3BvbnNlKFdURjo6bW92ZShyZXNvdXJjZVJlc3BvbnNlKSk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNvdXJjZVJlc3BvbnNlID0gYnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCBs
b2FkZXIpOworICAgIGlmIChyZXNvdXJjZVJlc3BvbnNlKQorICAgICAgICByZXNvdXJjZU9iamVj
dC0+c2V0UmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZSk7CiAKICAgICBTdHJpbmcgc291cmNlTWFw
cGluZ1VSTCA9IEluc3BlY3RvclBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoY2Fj
aGVkUmVzb3VyY2UpOwogICAgIGlmICghc291cmNlTWFwcGluZ1VSTC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJlc291cmNlT2JqZWN0LT5zZXRTb3VyY2VNYXBVUkwoc291cmNlTWFwcGluZ1VSTCk7CiAK
LSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc291cmNlT2JqZWN0KTsKKyAgICByZXR1cm4gcmVzb3Vy
Y2VPYmplY3Q7CiB9CiAKIEluc3BlY3RvclJlc291cmNlQWdlbnQ6On5JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50KCkKQEAgLTQ4NCw5ICs0ODIsOSBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6
OmRvY3VtZW50VGhyZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KHVucwogICAg
IG1fcmVzb3VyY2VzRGF0YS0+c2V0WEhSUmVwbGF5RGF0YShyZXF1ZXN0SWQsIHhoclJlcGxheURh
dGEpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxMb2FkWEhSKFRocmVh
ZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVS
TCYgdXJsLCBib29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYgZm9ybURhdGEsIGNvbnN0IEhU
VFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQordm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBj
bGllbnQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmIHVybCwgYm9vbCBhc3luYywg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRl
cnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQogewotICAgIFJlZlB0cjxYSFJSZXBsYXlEYXRh
PiB4aHJSZXBsYXlEYXRhID0gWEhSUmVwbGF5RGF0YTo6Y3JlYXRlKG1ldGhvZCwgdXJsLCBhc3lu
YywgV1RGOjptb3ZlKGZvcm1EYXRhKSwgaGVhZGVycywgaW5jbHVkZUNyZWRlbnRpYWxzKTsKKyAg
ICBSZWZQdHI8WEhSUmVwbGF5RGF0YT4geGhyUmVwbGF5RGF0YSA9IFhIUlJlcGxheURhdGE6OmNy
ZWF0ZShtZXRob2QsIHVybCwgYXN5bmMsIGZvcm1EYXRhLCBoZWFkZXJzLCBpbmNsdWRlQ3JlZGVu
dGlhbHMpOwogCiAgICAgbV9wZW5kaW5nWEhSUmVwbGF5RGF0YS5zZXQoY2xpZW50LCBXVEY6Om1v
dmUoeGhyUmVwbGF5RGF0YSkpOwogfQpAQCAtNTUyLDI0ICs1NTAsMjIgQEAgdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1bWVudCYg
ZG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yID0gYnVpbGRJ
bml0aWF0b3JPYmplY3QoJmRvY3VtZW50KTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6YnVpbGRJbml0
aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmJ1aWxk
SW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiBzdGFja1RyYWNlID0gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKEpTTWFpblRocmVh
ZEV4ZWNTdGF0ZTo6Y3VycmVudFN0YXRlKCksIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNr
U2l6ZVRvQ2FwdHVyZSk7CiAgICAgaWYgKHN0YWNrVHJhY2UgJiYgc3RhY2tUcmFjZS0+c2l6ZSgp
ID4gMCkgewotICAgICAgICBhdXRvIGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6U2NyaXB0KQotICAg
ICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFR5cGUoSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpOwogICAg
ICAgICBpbml0aWF0b3JPYmplY3QtPnNldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZS0+YnVpbGRJbnNw
ZWN0b3JBcnJheSgpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6bW92ZShpbml0aWF0b3JPYmplY3Qp
OworICAgICAgICByZXR1cm4gaW5pdGlhdG9yT2JqZWN0OwogICAgIH0KIAogICAgIGlmIChkb2N1
bWVudCAmJiBkb2N1bWVudC0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCkpIHsKLSAgICAgICAg
YXV0byBpbml0aWF0b3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0
aWF0b3I6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6OlBhcnNlcikKLSAgICAgICAgICAgIC5yZWxlYXNl
KCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRp
YXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6UGFyc2VyKTsKICAgICAgICAgaW5pdGlhdG9yT2Jq
ZWN0LT5zZXRVcmwoZG9jdW1lbnQtPnVybCgpLnN0cmluZygpKTsKICAgICAgICAgaW5pdGlhdG9y
T2JqZWN0LT5zZXRMaW5lTnVtYmVyKGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIo
KS0+dGV4dFBvc2l0aW9uKCkubV9saW5lLm9uZUJhc2VkSW50KCkpOwotICAgICAgICByZXR1cm4g
V1RGOjptb3ZlKGluaXRpYXRvck9iamVjdCk7CisgICAgICAgIHJldHVybiBpbml0aWF0b3JPYmpl
Y3Q7CiAgICAgfQogCiAgICAgaWYgKG1faXNSZWNhbGN1bGF0aW5nU3R5bGUgJiYgbV9zdHlsZVJl
Y2FsY3VsYXRpb25Jbml0aWF0b3IpCkBAIC01ODksMjAgKzU4NSwxOCBAQCB2b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRXZWJTb2Nr
ZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCi0gICAgICAg
IC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVs
ZHMoKSkpCi0gICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndl
YlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVl
c3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92ZShyZXF1ZXN0T2JqZWN0KSk7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVl
c3Q+IHJlcXVlc3RPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2Nr
ZXRSZXF1ZXN0OjpjcmVhdGUoKQorICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhl
YWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+d2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0KElkZW50aWZpZXJzRmFjdG9y
eTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgcmVxdWVzdE9iamVjdCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRz
aGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgYXV0byByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQorICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZT4gcmVzcG9u
c2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25z
ZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXR1cyhyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
KQogICAgICAgICAuc2V0U3RhdHVzVGV4dChyZXNwb25zZS5odHRwU3RhdHVzVGV4dCgpKQotICAg
ICAgICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkcygpKSkKLSAgICAgICAgLnJlbGVhc2UoKTsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+d2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZChJZGVudGlmaWVyc0ZhY3Rvcnk6
OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdURjo6bW92ZShyZXNwb25zZU9i
amVjdCkpOworICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkcygpKSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNv
Y2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0
SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCByZXNwb25zZU9iamVjdCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyKQpAQCAtNjEyLDIyICs2MDYsMjAgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpkaWRDbG9zZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiAKIHZvaWQg
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEZyYW1lKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQogewotICAgIGF1
dG8gZnJhbWVPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRG
cmFtZTo6Y3JlYXRlKCkKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
V2ViU29ja2V0RnJhbWU+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BD
b2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2Fk
RGF0YShTdHJpbmcoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCi0gICAgICAg
IC5yZWxlYXNlKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1lUmVj
ZWl2ZWQoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFt
cCgpLCBXVEY6Om1vdmUoZnJhbWVPYmplY3QpKTsKKyAgICAgICAgLnNldFBheWxvYWREYXRhKFN0
cmluZyhmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1lUmVjZWl2ZWQoSWRlbnRpZmllcnNGYWN0b3J5Ojpy
ZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgpLCBmcmFtZU9iamVjdCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQogewotICAgIGF1
dG8gZnJhbWVPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRG
cmFtZTo6Y3JlYXRlKCkKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
V2ViU29ja2V0RnJhbWU+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNvZGUoZnJhbWUub3BD
b2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCi0gICAgICAgIC5zZXRQYXlsb2Fk
RGF0YShTdHJpbmcoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCi0gICAgICAg
IC5yZWxlYXNlKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1lU2Vu
dChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCks
IFdURjo6bW92ZShmcmFtZU9iamVjdCkpOworICAgICAgICAuc2V0UGF5bG9hZERhdGEoU3RyaW5n
KGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKTsKKyAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+d2ViU29ja2V0RnJhbWVTZW50KElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElk
KGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgZnJhbWVPYmplY3QpOwogfQogCiB2b2lkIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZUVycm9yKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCkBAIC02NTgsOSAr
NjUwLDkgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
JikKICAgICBtX2V4dHJhUmVxdWVzdEhlYWRlcnMuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBoZWFkZXJzKQordm9pZCBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIGhlYWRlcnMpCiB7Ci0gICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzID0g
aGVhZGVycy5jb3B5UmVmKCk7CisgICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzID0gaGVhZGVyczsK
IH0KIAogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpnZXRSZXNwb25zZUJvZHkoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250
ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKQpAQCAtNzQ3LDcgKzczOSw3IEBAIHZvaWQgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6c2V0Q2FjaGVEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgY2Fj
aGVEaXNhYmxlZCkKICAgICAgICAgbWVtb3J5Q2FjaGUoKS5ldmljdFJlc291cmNlcygpOwogfQog
Ci12b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudDo6bG9hZFJlc291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgUGFzc1JlZlB0cjxM
b2FkUmVzb3VyY2VDYWxsYmFjaz4gcHJwQ2FsbGJhY2spCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
bV9wYWdlQWdlbnQtPmFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAo
IWZyYW1lKQpAQCAtNzU5LDYgKzc1MSw4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
bG9hZFJlc291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKKyAgICBSZWZQdHI8TG9hZFJlc291cmNlQ2FsbGJhY2s+IGNh
bGxiYWNrID0gcHJwQ2FsbGJhY2s7CisKICAgICBVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRl
VVJMKHVybFN0cmluZyk7CiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKICAgICBy
ZXF1ZXN0LnNldEhUVFBNZXRob2QoQVNDSUlMaXRlcmFsKCJHRVQiKSk7CkBAIC03NzAsNyArNzY0
LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpsb2FkUmVzb3VyY2UoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVx
dWVzdFBvbGljeSA9IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKIAogICAgIC8vIEluc3BlY3Rv
clRocmVhZGFibGVMb2FkZXJDbGllbnQgZGVsZXRlcyBpdHNlbGYgd2hlbiB0aGUgbG9hZCBjb21w
bGV0ZXMuCi0gICAgSW5zcGVjdG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudCogaW5zcGVjdG9yVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCA9IG5ldyBJbnNwZWN0b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
KFdURjo6bW92ZShjYWxsYmFjaykpOworICAgIEluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGll
bnQqIGluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQgPSBuZXcgSW5zcGVjdG9yVGhyZWFk
YWJsZUxvYWRlckNsaWVudChjYWxsYmFjayk7CiAKICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyPiBsb2FkZXIgPSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSgqZG9j
dW1lbnQsICppbnNwZWN0b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LCByZXF1ZXN0LCBvcHRpb25z
KTsKICAgICBpZiAoIWxvYWRlcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKaW5kZXggNzAwY2YzNTg2NDAxYWQ5YTIzOGZiYzM1ZWYz
NDVhYzA4YzcxMTM2Zi4uOWMzMTMzYjE1OGZmYThiMzY2M2FmN2NkMWEwMTRjOWU0MzhhODBiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZhaWxMb2FkaW5nKHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXImLCBjb25zdCBSZXNvdXJjZUVy
cm9yJik7CiAgICAgdm9pZCBkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRM
b2FkZXImLCBDYWNoZWRSZXNvdXJjZSYpOwogICAgIHZvaWQgZG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyU3RhcnRlZExvYWRpbmdGb3JDbGllbnQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50Kik7Ci0gICAgdm9pZCB3aWxsTG9hZFhIUihUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFVSTCYsIGJvb2wgYXN5bmMs
IFJlZlB0cjxGb3JtRGF0YT4mJiBib2R5LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBi
b29sIGluY2x1ZGVDcmVuZGVudGlhbHMpOworICAgIHZvaWQgd2lsbExvYWRYSFIoVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFz
eW5jLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBib2R5LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFk
ZXJzLCBib29sIGluY2x1ZGVDcmVuZGVudGlhbHMpOwogICAgIHZvaWQgZGlkRmFpbFhIUkxvYWRp
bmcoVGhyZWFkYWJsZUxvYWRlckNsaWVudCopOwogICAgIHZvaWQgZGlkRmluaXNoWEhSTG9hZGlu
ZyhUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVN0cmluZyk7CiAgICAgdm9pZCBkaWRSZWNlaXZlWEhSUmVzcG9uc2Uo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKQEAgLTExOCwxMiArMTE4LDEyIEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oRG9jdW1lbnQmKTsKIAot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IGJ1aWxk
SW5pdGlhdG9yT2JqZWN0KERvY3VtZW50Kik7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50
Kik7CiAKICAgICAvLyBDYWxsZWQgZnJvbSBmcm9udGVuZC4KICAgICB2aXJ0dWFsIHZvaWQgZW5h
YmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0cmFIVFRQSGVhZGVy
cyhFcnJvclN0cmluZyYsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4m
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJyb3JT
dHJpbmcmLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+Jikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZXBsYXlYSFIoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNhbkNsZWFy
QnJvd3NlckNhY2hlKEVycm9yU3RyaW5nJiwgYm9vbCopIG92ZXJyaWRlOwpAQCAtMTMxLDcgKzEz
MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FuQ2xlYXJCcm93c2VyQ29va2llcyhF
cnJvclN0cmluZyYsIGJvb2wqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93
c2VyQ29va2llcyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRD
YWNoZURpc2FibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBjYWNoZURpc2FibGVkKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYm
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxMb2Fk
UmVzb3VyY2VDYWxsYmFjaz4pIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHZvaWQgZW5hYmxl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKaW5kZXggYTQzYTMwNGIwMDU4Yzk4MmQyMmVmZmU2N2Q0MWVkN2JjYTkyOGEwOS4uNzBmMDhk
MjhjNWZhNTM2YzMzYmI5ZmNjZWEzMDBjZGEwZDRhMWFmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtNzYsNyArNzYsNyBAQCBw
dWJsaWM6CiAgICAgUnVsZVNvdXJjZURhdGFMaXN0KiBzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VEYXRhLmdldCgpOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VEYXRhKHN0ZDo6dW5p
cXVlX3B0cjxSdWxlU291cmNlRGF0YUxpc3Q+KTsKICAgICBib29sIGhhc1NvdXJjZURhdGEoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZURhdGEgIT0gbnVsbHB0cjsgfQotICAgIFJlZlB0cjxXZWJD
b3JlOjpDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURh
dGFBdCh1bnNpZ25lZCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCB2
b2lkIFBhcnNlZFN0eWxlU2hlZXQ6OnNldFNvdXJjZURhdGEoc3RkOjp1bmlxdWVfcHRyPFJ1bGVT
b3VyY2VEYXRhTGlzdD4gc291cmNlRAogICAgIGZsYXR0ZW5Tb3VyY2VEYXRhKHNvdXJjZURhdGEu
Z2V0KCksIG1fc291cmNlRGF0YS5nZXQoKSk7CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpDU1NSdWxl
U291cmNlRGF0YT4gUGFyc2VkU3R5bGVTaGVldDo6cnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IFBhcnNl
ZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFoYXNTb3VyY2VEYXRhKCkgfHwgaW5kZXggPj0gbV9zb3VyY2VEYXRhLT5zaXplKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIGVudW0gTWVkaWFM
aXN0U291cmNlIHsKICAgICBNZWRpYUxpc3RTb3VyY2VJbXBvcnRSdWxlCiB9OwogCi1zdGF0aWMg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U+IGJ1aWxkU291cmNl
UmFuZ2VPYmplY3QoY29uc3QgU291cmNlUmFuZ2UmIHJhbmdlLCBWZWN0b3I8c2l6ZV90PiogbGlu
ZUVuZGluZ3MpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNv
dXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5n
ZSwgVmVjdG9yPHNpemVfdD4qIGxpbmVFbmRpbmdzKQogewogICAgIGlmICghbGluZUVuZGluZ3Mp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHN0YXRpYyBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VSYW5n
ZU9iamVjdChjb25zCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4gYnVpbGRNZWRpYU9iamVjdChjb25zdCBNZWRp
YUxpc3QqIG1lZGlhLCBNZWRpYUxpc3RTb3VyY2UgbWVkaWFMaXN0U291cmNlLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTTWVkaWE+IGJ1aWxkTWVkaWFPYmplY3QoY29uc3QgTWVkaWFMaXN0KiBtZWRpYSwgTWVk
aWFMaXN0U291cmNlIG1lZGlhTGlzdFNvdXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7
CiAgICAgLy8gTWFrZSBjZXJ0YWluIGNvbXBpbGVycyBoYXBweSBieSBpbml0aWFsaXppbmcgfHNv
dXJjZXwgdXAtZnJvbnQuCiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYTo6
U291cmNlIHNvdXJjZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE6OlNvdXJj
ZTo6SW5saW5lU2hlZXQ7CkBAIC0xNzgsMTkgKzE3OCwxOCBAQCBzdGF0aWMgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE+IGJ1aWxkTWVkaWFPYmplY3QoY29uc3QgTWVkaWFM
aXN0KgogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBhdXRvIG1lZGlhT2JqZWN0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYTo6Y3JlYXRlKCkKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4gbWVkaWFPYmplY3QgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU01lZGlhOjpjcmVhdGUoKQogICAgICAgICAuc2V0VGV4dChtZWRp
YS0+bWVkaWFUZXh0KCkpCi0gICAgICAgIC5zZXRTb3VyY2Uoc291cmNlKQotICAgICAgICAucmVs
ZWFzZSgpOworICAgICAgICAuc2V0U291cmNlKHNvdXJjZSk7CiAKICAgICBpZiAoIXNvdXJjZVVS
TC5pc0VtcHR5KCkpIHsKICAgICAgICAgbWVkaWFPYmplY3QtPnNldFNvdXJjZVVSTChzb3VyY2VV
UkwpOwogICAgICAgICBtZWRpYU9iamVjdC0+c2V0U291cmNlTGluZShtZWRpYS0+cXVlcmllcygp
LT5sYXN0TGluZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIFdURjo6bW92ZShtZWRpYU9iamVjdCk7
CisgICAgcmV0dXJuIG1lZGlhT2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFJlZlB0cjxD
U1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQorc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3QoQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCkKIHsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMjAzLDEwICsyMDIsMTAgQEAgc3RhdGljIFJlZlB0cjxDU1NSdWxlTGlzdD4gYXND
U1NSdWxlTGlzdChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGxpc3RSdWxlcy5hcHBlbmQoaXRlbSk7CiAgICAgfQotICAgIHJldHVybiBX
VEY6Om1vdmUobGlzdCk7CisgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMg
UmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCitzdGF0aWMg
UGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBydWxlKQogewog
ICAgIGlmICghcnVsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMjMsNyArMjIyLDcg
QEAgc3RhdGljIFJlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBydWxl
KQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hh
aW4oQ1NTUnVsZSogcnVsZSwgQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRp
YT4mIG1lZGlhQXJyYXkpCitzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSog
cnVsZSwgQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NNZWRpYT4qIG1lZGlhQXJy
YXkpCiB7CiAgICAgTWVkaWFMaXN0KiBtZWRpYUxpc3Q7CiAgICAgQ1NTUnVsZSogcGFyZW50UnVs
ZSA9IHJ1bGU7CkBAIC0yNTEsNyArMjUwLDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENo
YWluKENTU1J1bGUqIHJ1bGUsIEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1MKICAg
ICAgICAgICAgIHNvdXJjZVVSTCA9ICIiOwogCiAgICAgICAgIGlmIChtZWRpYUxpc3QgJiYgbWVk
aWFMaXN0LT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG1lZGlhQXJyYXkuYWRkSXRlbShidWlsZE1l
ZGlhT2JqZWN0KG1lZGlhTGlzdCwgaXNNZWRpYVJ1bGUgPyBNZWRpYUxpc3RTb3VyY2VNZWRpYVJ1
bGUgOiBNZWRpYUxpc3RTb3VyY2VJbXBvcnRSdWxlLCBzb3VyY2VVUkwpKTsKKyAgICAgICAgICAg
IG1lZGlhQXJyYXktPmFkZEl0ZW0oYnVpbGRNZWRpYU9iamVjdChtZWRpYUxpc3QsIGlzTWVkaWFS
dWxlID8gTWVkaWFMaXN0U291cmNlTWVkaWFSdWxlIDogTWVkaWFMaXN0U291cmNlSW1wb3J0UnVs
ZSwgc291cmNlVVJMKSk7CiAKICAgICAgICAgaWYgKHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUoKSkK
ICAgICAgICAgICAgIHBhcmVudFJ1bGUgPSBwYXJlbnRSdWxlLT5wYXJlbnRSdWxlKCk7CkBAIC0y
NjcsNyArMjY2LDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUqIHJ1
bGUsIEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1MKICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZVVSTCA9IHN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuYmFzZVVSTCgpOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwg
PSAiIjsKLSAgICAgICAgICAgICAgICAgICAgbWVkaWFBcnJheS5hZGRJdGVtKGJ1aWxkTWVkaWFP
YmplY3QobWVkaWFMaXN0LCBzdHlsZVNoZWV0LT5vd25lck5vZGUoKSA/IE1lZGlhTGlzdFNvdXJj
ZUxpbmtlZFNoZWV0IDogTWVkaWFMaXN0U291cmNlSW5saW5lU2hlZXQsIHNvdXJjZVVSTCkpOwor
ICAgICAgICAgICAgICAgICAgICBtZWRpYUFycmF5LT5hZGRJdGVtKGJ1aWxkTWVkaWFPYmplY3Qo
bWVkaWFMaXN0LCBzdHlsZVNoZWV0LT5vd25lck5vZGUoKSA/IE1lZGlhTGlzdFNvdXJjZUxpbmtl
ZFNoZWV0IDogTWVkaWFMaXN0U291cmNlSW5saW5lU2hlZXQsIHNvdXJjZVVSTCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwYXJlbnRSdWxlID0gc3R5bGVTaGVldC0+b3du
ZXJSdWxlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFJ1bGUpCkBAIC0yODMsMTIgKzI4
MiwxMiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlcj4gY3JlYXRlQ1NTUGFyc2Vy
KERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJz
ZXI+KGRvY3VtZW50ID8gQ1NTUGFyc2VyQ29udGV4dCgqZG9jdW1lbnQpIDogc3RyaWN0Q1NTUGFy
c2VyQ29udGV4dCgpKTsKIH0KIAotUmVmPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZTo6
Y3JlYXRlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBSZWZQdHI8Q1NTU3R5bGVEZWNs
YXJhdGlvbj4mJiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCkK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmIHN0eWxlSWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4g
c3R5bGUsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3R5bGUoc3R5bGVJZCwgV1RGOjptb3ZlKHN0eWxl
KSwgcGFyZW50U3R5bGVTaGVldCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
U3R5bGUoc3R5bGVJZCwgc3R5bGUsIHBhcmVudFN0eWxlU2hlZXQpKTsKIH0KIAotSW5zcGVjdG9y
U3R5bGU6Okluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4mJiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFy
ZW50U3R5bGVTaGVldCkKK0luc3BlY3RvclN0eWxlOjpJbnNwZWN0b3JTdHlsZShjb25zdCBJbnNw
ZWN0b3JDU1NJZCYgc3R5bGVJZCwgUGFzc1JlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHls
ZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCkKICAgICA6IG1fc3R5bGVJ
ZChzdHlsZUlkKQogICAgICwgbV9zdHlsZShzdHlsZSkKICAgICAsIG1fcGFyZW50U3R5bGVTaGVl
dChwYXJlbnRTdHlsZVNoZWV0KQpAQCAtMzAxLDkgKzMwMCw5IEBAIEluc3BlY3RvclN0eWxlOjp+
SW5zcGVjdG9yU3R5bGUoKQogewogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAor
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JT
dHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0CiB7Ci0gICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHJlc3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0g
c3R5bGVXaXRoUHJvcGVydGllcygpOwogICAgIGlmICghbV9zdHlsZUlkLmlzRW1wdHkoKSkKICAg
ICAgICAgcmVzdWx0LT5zZXRTdHlsZUlkKG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZUlkPigpKTsKIApAQCAtMzE0LDI1ICszMTMsMjQg
QEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0
eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkKICAgICBpZiAoc291cmNlRGF0YSkKICAgICAgICAg
cmVzdWx0LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVC
b2R5UmFuZ2UsIG1fcGFyZW50U3R5bGVTaGVldC0+bGluZUVuZGluZ3MoKS5nZXQoKSkpOwogCi0g
ICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRB
cnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdAorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9w
ZXJ0eT4+IEluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0
CiB7Ci0gICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT46OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVBy
b3BlcnR5Pjo6Y3JlYXRlKCk7CiAgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IHBy
b3BlcnRpZXM7CiAgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZwcm9wZXJ0aWVzKTsKIAogICAg
IGZvciAoVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+OjppdGVyYXRvciBpdCA9IHByb3Bl
cnRpZXMuYmVnaW4oKSwgaXRFbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOyBpdCAhPSBpdEVuZDsgKytp
dCkgewogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkg
PSBpdC0+c291cmNlRGF0YTsKLSAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQorICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+IGVu
dHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk6
OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShwcm9wZXJ0eUVudHJ5Lm5hbWUpCi0gICAg
ICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSkKLSAgICAgICAgICAgIC5yZWxl
YXNlKCk7Ci0gICAgICAgIHJlc3VsdC0+YWRkSXRlbShXVEY6Om1vdmUoZW50cnkpKTsKKyAgICAg
ICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5h
ZGRJdGVtKGVudHJ5LnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFdURjo6bW92ZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiAvLyBUaGlzIG1ldGhv
ZCBkb2VzIHRoZSBmb2xsb3dpbmcgcHJlcHJvY2Vzc2luZyBvZiB8cHJvcGVydHlUZXh0fCB3aXRo
IHxvdmVyd3JpdGV8ID09IGZhbHNlIGFuZCB8aW5kZXh8IHBhc3QgdGhlIGxhc3QgYWN0aXZlIHBy
b3BlcnR5OgpAQCAtNTA1LDEzICs1MDMsMTMgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6cG9wdWxh
dGVBbGxQcm9wZXJ0aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWwKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3QKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjb25zdAogewogICAgIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVBy
b3BlcnR5PiBwcm9wZXJ0aWVzOwogICAgIHBvcHVsYXRlQWxsUHJvcGVydGllcygmcHJvcGVydGll
cyk7CiAKLSAgICBhdXRvIHByb3BlcnRpZXNPYmplY3QgPSBBcnJheTxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7Ci0gICAgYXV0byBzaG9ydGhhbmRFbnRy
aWVzID0gQXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT46OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1By
b3BlcnR5Pj4gcHJvcGVydGllc09iamVjdCA9IEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT4+IHNob3J0aGFuZEVudHJpZXMgPSBBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAg
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5Pj4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OwogICAgIEhhc2hTZXQ8
U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7CiAgICAgU3RyaW5nIHByZXZpb3VzUHJpb3JpdHk7CkBA
IC01MzQsMTAgKzUzMiw5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvCiAKICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+IHByb3BlcnR5ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAg
IC5zZXROYW1lKG5hbWUubG93ZXIoKSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVu
dHJ5LnZhbHVlKQotICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIC5zZXRWYWx1
ZShwcm9wZXJ0eUVudHJ5LnZhbHVlKTsKIAotICAgICAgICBwcm9wZXJ0aWVzT2JqZWN0LT5hZGRJ
dGVtKHByb3BlcnR5LmNvcHlSZWYoKSk7CisgICAgICAgIHByb3BlcnRpZXNPYmplY3QtPmFkZEl0
ZW0ocHJvcGVydHkpOwogCiAgICAgICAgIC8vIERlZmF1bHQgInBhcnNlZE9rIiA9PSB0cnVlLgog
ICAgICAgICBpZiAoIXByb3BlcnR5RW50cnkucGFyc2VkT2spCkBAIC02MDMsMTEgKzYwMCwxMCBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6
OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgICAgIGlmICghc2hvcnRoYW5k
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU2hvcnRoYW5kcy5j
b250YWlucyhzaG9ydGhhbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFNob3J0
aGFuZHMuYWRkKHNob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVudHJ5
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeTo6Y3JlYXRlKCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNo
b3J0aGFuZEVudHJ5PiBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5k
RW50cnk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUoc2hv
cnRoYW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzaG9ydGhhbmRW
YWx1ZShzaG9ydGhhbmQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRFbnRyaWVzLT5hZGRJdGVtKFdURjo6
bW92ZShlbnRyeSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzaG9y
dGhhbmRWYWx1ZShzaG9ydGhhbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFu
ZEVudHJpZXMtPmFkZEl0ZW0oZW50cnkucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTYxOSwxMiArNjE1LDEyIEBA
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6
c3R5bGVXaXRoUHJvcGVydGllcygpIGNvCiAgICAgfQogCiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRDc3NQcm9wZXJ0
aWVzKFdURjo6bW92ZShwcm9wZXJ0aWVzT2JqZWN0KSkKLSAgICAgICAgLnNldFNob3J0aGFuZEVu
dHJpZXMoV1RGOjptb3ZlKHNob3J0aGFuZEVudHJpZXMpKQorICAgICAgICAuc2V0Q3NzUHJvcGVy
dGllcyhwcm9wZXJ0aWVzT2JqZWN0LnJlbGVhc2UoKSkKKyAgICAgICAgLnNldFNob3J0aGFuZEVu
dHJpZXMoc2hvcnRoYW5kRW50cmllcy5yZWxlYXNlKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9
CiAKLVJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gSW5zcGVjdG9yU3R5bGU6OmV4dHJhY3RTb3Vy
Y2VEYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0
eWxlOjpleHRyYWN0U291cmNlRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhcmVudFN0eWxl
U2hlZXQgfHwgIW1fcGFyZW50U3R5bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzUzLDkgKzc0OSw5IEBAIE5ld0xpbmVBbmRXaGl0
ZXNwYWNlJiBJbnNwZWN0b3JTdHlsZTo6bmV3TGluZUFuZFdoaXRlc3BhY2VEZWxpbWl0ZXJzKCkg
Y29uc3QKICAgICByZXR1cm4gbV9mb3JtYXQ7CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdl
bnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNo
ZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitQYXNzUmVmUHRy
PEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NT
dHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIq
IGxpc3RlbmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvclN0eWxlU2hl
ZXQocGFnZUFnZW50LCBpZCwgV1RGOjptb3ZlKHBhZ2VTdHlsZVNoZWV0KSwgb3JpZ2luLCBkb2N1
bWVudFVSTCwgbGlzdGVuZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0
eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgcGFnZVN0eWxlU2hlZXQsIG9yaWdpbiwgZG9jdW1lbnRV
UkwsIGxpc3RlbmVyKSk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtNzY2LDEwICs3NjIsMTAgQEAgU3Ry
aW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVldCogcGFn
ZVN0eWxlU2hlZXQpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLUluc3BlY3RvclN0
eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdl
bnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNo
ZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitJbnNwZWN0b3JT
dHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFn
ZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHls
ZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAgOiBt
X3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQotICAgICwgbV9wYWdlU3R5bGVT
aGVldChXVEY6Om1vdmUocGFnZVN0eWxlU2hlZXQpKQorICAgICwgbV9wYWdlU3R5bGVTaGVldChw
YWdlU3R5bGVTaGVldCkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAsIG1fZG9jdW1lbnRV
UkwoZG9jdW1lbnRVUkwpCiAgICAgLCBtX2lzUmV2YWxpZGF0aW5nKGZhbHNlKQpAQCAtOTU3LDcg
Kzk1Myw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUZvcklkKGNv
bnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKIAogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RG
b3JTdHlsZVNoZWV0KCkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0
eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCkBAIC05NjUsMjAgKzk2MSwxOSBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVj
dG9yU3R5bGVTaGVldDo6YnVpbGRPYgogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxl
TGlzdCA9IGFzQ1NTUnVsZUxpc3Qoc3R5bGVTaGVldCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IHJlc3Vs
dCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgp
CiAgICAgICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQoKSkKLSAgICAgICAgLnNldFJ1bGVzKGJ1aWxk
QXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSkpCi0gICAgICAgIC5yZWxlYXNlKCk7
CisgICAgICAgIC5zZXRSdWxlcyhidWlsZEFycmF5Rm9yUnVsZUxpc3QoY3NzUnVsZUxpc3QuZ2V0
KCkpKTsKIAogICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKICAgICBib29sIHN1Y2Nlc3MgPSBn
ZXRUZXh0KCZzdHlsZVNoZWV0VGV4dCk7CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJlc3Vs
dC0+c2V0VGV4dChzdHlsZVNoZWV0VGV4dCk7CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1
aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKQogewogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxl
U2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKQEAgLTk5Niwz
MSArOTkxLDMwIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hl
ZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkCiAgICAgICAgIC5yZWxlYXNlKCk7
CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4g
YnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwg
Y29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBl
cihjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9y
KQogewotICAgIGF1dG8gaW5zcGVjdG9yU2VsZWN0b3IgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1NlbGVjdG9yOjpjcmVhdGUoKQotICAgICAgICAuc2V0VGV4dChzZWxlY3RvclRleHQp
Ci0gICAgICAgIC5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU2VsZWN0b3I+IGluc3BlY3RvclNlbGVjdG9yID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTZWxlY3Rvcjo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0
KTsKIAogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkgPSBzZWxlY3Rvci5z
dGF0aWNTcGVjaWZpY2l0eShvayk7CiAKICAgICBpZiAob2spIHsKLSAgICAgICAgYXV0byB0dXBs
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD46OmNyZWF0ZSgpOworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50Pj4gdHVwbGUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxpbnQ+OjpjcmVhdGUoKTsKICAgICAgICAgdHVwbGUtPmFkZEl0ZW0o
c3RhdGljX2Nhc3Q8aW50Pigoc3BlY2lmaWNpdHkgJiBDU1NTZWxlY3Rvcjo6aWRNYXNrKSA+PiAx
NikpOwogICAgICAgICB0dXBsZS0+YWRkSXRlbShzdGF0aWNfY2FzdDxpbnQ+KChzcGVjaWZpY2l0
eSAmIENTU1NlbGVjdG9yOjpjbGFzc01hc2spID4+IDgpKTsKICAgICAgICAgdHVwbGUtPmFkZEl0
ZW0oc3RhdGljX2Nhc3Q8aW50PihzcGVjaWZpY2l0eSAmIENTU1NlbGVjdG9yOjplbGVtZW50TWFz
aykpOwotICAgICAgICBpbnNwZWN0b3JTZWxlY3Rvci0+c2V0U3BlY2lmaWNpdHkoV1RGOjptb3Zl
KHR1cGxlKSk7CisgICAgICAgIGluc3BlY3RvclNlbGVjdG9yLT5zZXRTcGVjaWZpY2l0eSh0dXBs
ZS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIHJldHVybiBXVEY6Om1vdmUoaW5zcGVjdG9yU2Vs
ZWN0b3IpOworICAgIHJldHVybiBpbnNwZWN0b3JTZWxlY3Rvci5yZWxlYXNlKCk7CiB9CiAKLXN0
YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9yc0Zyb21Tb3VyY2UoY29uc3QgQ1NTUnVsZVNvdXJj
ZURhdGEqIHNvdXJjZURhdGEsIGNvbnN0IFN0cmluZyYgc2hlZXRUZXh0LCBjb25zdCBDU1NTZWxl
Y3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxl
Y3RvcnNGcm9tU291cmNlKGNvbnN0IENTU1J1bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBjb25z
dCBTdHJpbmcmIHNoZWV0VGV4dCwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3Qp
CiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEpTQzo6WWFycjo6UmVndWxh
ckV4cHJlc3Npb24sIGNvbW1lbnQsICgiL1xcKlteXSo/XFwqLyIsIFRleHRDYXNlU2Vuc2l0aXZl
LCBKU0M6OllhcnI6Ok11bHRpbGluZUVuYWJsZWQpKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxl
Y3Rvcj46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gcmVzdWx0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46
OmNyZWF0ZSgpOwogICAgIGNvbnN0IFNlbGVjdG9yUmFuZ2VMaXN0JiByYW5nZXMgPSBzb3VyY2VE
YXRhLT5zZWxlY3RvclJhbmdlczsKICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBz
ZWxlY3Rvckxpc3QuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJhbmdl
cy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKQEAgLTEwMzMsMTUgKzEwMjcsMTUgQEAgc3RhdGlj
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1NlbGVjdG9yPj4gc2UKIAogICAgICAgICBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzZWxlY3Rvcik7CiAgICAgfQotICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICByZXR1
cm4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0b3JUZXh0KCks
ICpzZWxlY3Rvcik7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9y
TGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NT
U3R5bGVSdWxlKiBydWxlKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNl
bGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rvckxp
c3QoQ1NTU3R5bGVSdWxlKiBydWxlKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YTsKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMDU5LDI3
ICsxMDUzLDI2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTCiAgICAgICAgIGZvciAoY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBz
ZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAgICAgICAgICAgICBz
ZWxlY3RvcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxlY3RvcikpOwogICAg
IH0KLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JM
aXN0OjpjcmVhdGUoKQorICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVj
dG9yTGlzdD4gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q6
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTZWxlY3RvcnMoc2VsZWN0b3JzLnJlbGVhc2UoKSkKICAg
ICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgpOwogICAgIGlm
IChzb3VyY2VEYXRhKQogICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291cmNlUmFuZ2VP
YmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygpLmdldCgpKSk7
Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQucmVsZWFz
ZSgpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQor
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAg
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFz
dHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gcmVzdWx0ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQorICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFNlbGVjdG9yTGlzdChi
dWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChydWxlKSkKICAgICAgICAgLnNldFNvdXJjZUxpbmUo
cnVsZS0+c3R5bGVSdWxlKCkuc291cmNlTGluZSgpKQogICAgICAgICAuc2V0T3JpZ2luKG1fb3Jp
Z2luKQotICAgICAgICAuc2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZSgmcnVsZS0+c3R5bGUo
KSkpCi0gICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgIC5zZXRTdHlsZShidWlsZE9iamVjdEZv
clN0eWxlKCZydWxlLT5zdHlsZSgpKSk7CiAKICAgICAvLyAic291cmNlVVJMIiBpcyBwcmVzZW50
IG9ubHkgZm9yIHJlZ3VsYXIgcnVsZXMsIG90aGVyd2lzZSAib3JpZ2luIiBzaG91bGQgYmUgdXNl
ZCBpbiB0aGUgZnJvbnRlbmQuCiAgICAgaWYgKG1fb3JpZ2luID09IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVndWxhcikKQEAgLTEwOTEsMTYgKzEwODQsMTYg
QEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWwKICAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlk
KGlkLmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJZD4o
KSk7CiAgICAgfQogCi0gICAgYXV0byBtZWRpYUFycmF5ID0gQXJyYXk8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NNZWRpYT46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU01lZGlhPj4gbWVkaWFBcnJheSA9IEFycmF5PEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTTWVkaWE+OjpjcmVhdGUoKTsKIAogICAgIGZpbGxNZWRpYUxp
c3RDaGFpbihydWxlLCBtZWRpYUFycmF5LmdldCgpKTsKICAgICBpZiAobWVkaWFBcnJheS0+bGVu
Z3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0TWVkaWEoV1RGOjptb3ZlKG1lZGlhQXJyYXkpKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRNZWRpYShtZWRpYUFycmF5LnJlbGVhc2UoKSk7CiAKLSAgICBy
ZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9
CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKICAgICBp
ZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMTI2LDcgKzExMTksNyBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6
YnVpbGRPYmplY3RGb3JTdAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIFdURjo6bW92
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiBib29sIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnNldFN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIGNv
bnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAg
LTExNzEsNyArMTE2NCw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVy
dHkoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCB1bnNpZ25lZCBwcm9wCiAgICAgYm9vbCBzdWNj
ZXNzID0gaW5zcGVjdG9yU3R5bGUtPnRvZ2dsZVByb3BlcnR5KHByb3BlcnR5SW5kZXgsIGRpc2Fi
bGUsIGVjKTsKICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICBpZiAoZGlzYWJsZSkKLSAgICAg
ICAgICAgIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUuY29weVJlZigpKTsK
KyAgICAgICAgICAgIHJlbWVtYmVySW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUpOwogICAg
ICAgICBlbHNlIGlmICghaW5zcGVjdG9yU3R5bGUtPmhhc0Rpc2FibGVkUHJvcGVydGllcygpKQog
ICAgICAgICAgICAgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoaW5zcGVjdG9yU3R5bGUtPmNzc1N0eWxl
KCkpOwogICAgICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKQEAgLTEyMDIsNyArMTE5NSw3
IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCkKICAg
ICAgICAgbV9saXN0ZW5lci0+c3R5bGVTaGVldENoYW5nZWQodGhpcyk7CiB9CiAKLVJlZlB0cjxJ
bnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZChj
b25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpCitQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lk
JiBpZCkKIHsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0eWxlRm9ySWQoaWQp
OwogICAgIGlmICghc3R5bGUpCkBAIC0xMjE0LDcgKzEyMDcsNyBAQCBSZWZQdHI8SW5zcGVjdG9y
U3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6Omluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5z
cGVjdG9yQwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5bGVT
aGVldDo6cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+JiYgaW5z
cGVjdG9yU3R5bGUpCit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJlbWVtYmVySW5zcGVjdG9y
U3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSkKIHsKICAgICBtX2lu
c3BlY3RvclN0eWxlcy5zZXQoaW5zcGVjdG9yU3R5bGUtPmNzc1N0eWxlKCksIGluc3BlY3RvclN0
eWxlKTsKIH0KQEAgLTE0MjQsMjMgKzE0MTcsMjMgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0
OjppbmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JS
dWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3QpCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3Qp
CiB7Ci0gICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4g
cmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPjo6Y3JlYXRlKCk7CiAgICAgaWYgKCFydWxlTGlzdCkKLSAgICAgICAgcmV0
dXJuIFdURjo6bW92ZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
IAogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcmVmUnVsZUxpc3QgPSBydWxlTGlzdDsKICAgICBD
U1NTdHlsZVJ1bGVWZWN0b3IgcnVsZXM7Ci0gICAgY29sbGVjdEZsYXRSdWxlcyhXVEY6Om1vdmUo
cmVmUnVsZUxpc3QpLCAmcnVsZXMpOworICAgIGNvbGxlY3RGbGF0UnVsZXMocmVmUnVsZUxpc3Qs
ICZydWxlcyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZXMuc2l6ZSgp
OyBpIDwgc2l6ZTsgKytpKQogICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JS
dWxlKHJ1bGVzLmF0KGkpLmdldCgpKSk7CiAKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5bGVT
aGVldDo6Y29sbGVjdEZsYXRSdWxlcyhSZWZQdHI8Q1NTUnVsZUxpc3Q+JiYgcnVsZUxpc3QsIENT
U1N0eWxlUnVsZVZlY3RvciogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xs
ZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0LCBDU1NTdHlsZVJ1
bGVWZWN0b3IqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAgICAgICByZXR1cm47
CkBAIC0xNDUzLDE5ICsxNDQ2LDE5IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVj
dEZsYXRSdWxlcyhSZWZQdHI8Q1NTUnVsZUxpc3Q+JiYgcnVsZUxpc3QsIENTU1N0CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjaGlsZFJ1bGVMaXN0ID0g
YXNDU1NSdWxlTGlzdChydWxlKTsKICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVMaXN0KQotICAg
ICAgICAgICAgICAgIGNvbGxlY3RGbGF0UnVsZXMoV1RGOjptb3ZlKGNoaWxkUnVsZUxpc3QpLCBy
ZXN1bHQpOworICAgICAgICAgICAgICAgIGNvbGxlY3RGbGF0UnVsZXMoY2hpbGRSdWxlTGlzdCwg
cmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotUmVmPEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUo
SW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxF
bGVtZW50PiYmIGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6
OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwg
UGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKHBhZ2VBZ2Vu
dCwgaWQsIFdURjo6bW92ZShlbGVtZW50KSwgb3JpZ2luLCBsaXN0ZW5lcikpOworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKHBhZ2VBZ2Vu
dCwgaWQsIGVsZW1lbnQsIG9yaWdpbiwgbGlzdGVuZXIpKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5z
cGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVt
ZW50PiYmIGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VB
Z2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4s
IExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50
LCBpZCwgbnVsbHB0ciwgb3JpZ2luLCAiIiwgbGlzdGVuZXIpCi0gICAgLCBtX2VsZW1lbnQoV1RG
Ojptb3ZlKGVsZW1lbnQpKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCiAgICAgLCBtX3J1bGVT
b3VyY2VEYXRhKG51bGxwdHIpCiAgICAgLCBtX2lzU3R5bGVUZXh0VmFsaWQoZmFsc2UpCiB7CkBA
IC0xNTM4LDEwICsxNTMxLDEwIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQ
dHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6aW5z
cGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpCitQYXNzUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Omluc3BlY3Rv
clN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQogewogICAgIEFTU0VSVF9VTlVT
RUQoaWQsICFpZC5vcmRpbmFsKCkpOwotICAgIHJldHVybiBtX2luc3BlY3RvclN0eWxlLmNvcHlS
ZWYoKTsKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JTdHlsZTsKIH0KIAogQ1NTU3R5bGVEZWNsYXJh
dGlvbiogSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjppbmxpbmVTdHlsZSgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApp
bmRleCBkZWNkMzE5YjY1MzU2YTQyMmQxODExZGVhZjMxYTNhNjBlNmRmYjJkLi5mZGJmNzhkYTgy
YTRkYWY2NzkzMWU5MDQzN2VhODU1YTZmOTdkNjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYzLDEzICs2NCwxMyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIGV4cGxpY2l0IEluc3BlY3RvckNTU0lkKGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJiB2YWx1ZSkKKyAgICBleHBsaWNpdCBJbnNwZWN0b3JD
U1NJZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKCF2YWx1ZS0+Z2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBtX3N0eWxlU2hlZXRJ
ZCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaW50IG9yZGluYWxWYWx1ZTsKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+Z2V0SW50ZWdlcigib3JkaW5hbCIsIG9yZGluYWxWYWx1ZSkpCisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvcmRpbmFsVmFsdWUgPSB2
YWx1ZS0+Z2V0KCJvcmRpbmFsIik7CisgICAgICAgIGlmICghb3JkaW5hbFZhbHVlIHx8ICFvcmRp
bmFsVmFsdWUtPmFzSW50ZWdlcihtX29yZGluYWwpKQogICAgICAgICAgICAgbV9zdHlsZVNoZWV0
SWQgPSAiIjsKICAgICB9CiAKQEAgLTg2LDE1ICs4NywxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJ
RCB0eXBlIGlzIGVpdGhlciBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQgb3Ig
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlSWQuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSUQ+Ci0gICAgUmVmUHRyPElEPiBhc1Byb3RvY29sVmFsdWUoKSBjb25zdAorICAgIFBhc3NS
ZWZQdHI8SUQ+IGFzUHJvdG9jb2xWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgcmV0dXJuIElE
OjpjcmVhdGUoKQorICAgICAgICBSZWZQdHI8SUQ+IHJlc3VsdCA9IElEOjpjcmVhdGUoKQogICAg
ICAgICAgICAgLnNldFN0eWxlU2hlZXRJZChtX3N0eWxlU2hlZXRJZCkKLSAgICAgICAgICAgIC5z
ZXRPcmRpbmFsKG1fb3JkaW5hbCkKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgICAg
ICAuc2V0T3JkaW5hbChtX29yZGluYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMzUsMTIgKzEzNiwxMiBAQCBzdHJ1Y3QgSW5zcGVj
dG9yU3R5bGVQcm9wZXJ0eSB7CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlIGZpbmFsIDogcHVibGlj
IFJlZkNvdW50ZWQ8SW5zcGVjdG9yU3R5bGU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElu
c3BlY3RvclN0eWxlPiBjcmVhdGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxlSWQsIFJlZlB0
cjxDU1NTdHlsZURlY2xhcmF0aW9uPiYmLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHls
ZVNoZWV0KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gY3JlYXRlKGNv
bnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRp
b24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKICAgICB+
SW5zcGVjdG9yU3R5bGUoKTsKIAogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7Ci0gICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHls
ZVByb3BlcnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdDsKICAgICBib29s
IGhhc0Rpc2FibGVkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuICFtX2Rpc2FibGVkUHJvcGVy
dGllcy5pc0VtcHR5KCk7IH0KICAgICBib29sIHNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRl
eCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgU3RyaW5nKiBvbGRUZXh0LCBF
eGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCB0b2dnbGVQcm9wZXJ0eSh1bnNpZ25lZCBpbmRleCwg
Ym9vbCBkaXNhYmxlLCBFeGNlcHRpb25Db2RlJik7CkBAIC0xNDksMTUgKzE1MCwxNSBAQCBwdWJs
aWM6CiAgICAgYm9vbCBzZXRUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAog
cHJpdmF0ZToKLSAgICBJbnNwZWN0b3JTdHlsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJ
ZCwgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+JiYsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBh
cmVudFN0eWxlU2hlZXQpOworICAgIEluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3RvckNTU0lk
JiBzdHlsZUlkLCBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0
b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhlc2UgYWxpYXNlcyBhbmQgdXBkYXRlIGFsbCB0aGUgY3VycmVudCBjYWxsIHNpdGVzIHRvIHVz
ZSB0aGUgbmV3IHB1YmxpYyBtZXRob2RzLgogICAgIGJvb2wgc3R5bGVUZXh0KFN0cmluZyogcmVz
dWx0KSBjb25zdCB7IHJldHVybiBnZXRUZXh0KHJlc3VsdCk7IH0KICAgICBib29sIGFwcGx5U3R5
bGVUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkgeyBFeGNlcHRpb25Db2RlIGVjID0gMDsgcmV0dXJu
IHNldFRleHQodGV4dCwgZWMpOyB9CiAKICAgICBib29sIHBvcHVsYXRlQWxsUHJvcGVydGllcyhW
ZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4qIHJlc3VsdCkgY29uc3Q7Ci0gICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHN0eWxlV2l0aFByb3BlcnRpZXMoKSBj
b25zdDsKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGV4dHJhY3RTb3VyY2VEYXRhKCkg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiBzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxDU1NSdWxlU291
cmNlRGF0YT4gZXh0cmFjdFNvdXJjZURhdGEoKSBjb25zdDsKICAgICBTdHJpbmcgc2hvcnRoYW5k
VmFsdWUoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3Q7CiAgICAgU3RyaW5n
IHNob3J0aGFuZFByaW9yaXR5KGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0
OwogICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHNo
b3J0aGFuZFByb3BlcnR5KSBjb25zdDsKQEAgLTE4MSw3ICsxODIsNyBAQCBwdWJsaWM6CiAgICAg
fTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmVmUHRyPElu
c3BlY3RvclN0eWxlPj4gSW5zcGVjdG9yU3R5bGVNYXA7Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0
b3JTdHlsZVNoZWV0PiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBp
ZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwg
TGlzdGVuZXIqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBj
cmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxD
U1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwog
ICAgIHN0YXRpYyBTdHJpbmcgc3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVT
aGVldCk7CiAKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7CkBAIC0xOTYsMTAg
KzE5NywxMCBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGRlbGV0ZVJ1bGUoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgQ1NTU3R5bGVSdWxlKiBydWxl
Rm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBjb25zdDsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gYnVpbGRPYmplY3RGb3JTdHlsZVNo
ZWV0KCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcj4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHls
ZVJ1bGUqKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4g
YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBidWlsZE9iamVj
dEZvclN0eWxlU2hlZXQoKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpOwor
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9i
amVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qKTsKICAgICBib29sIHNldFN0eWxlVGV4dChjb25zdCBJbnNwZWN0b3JDU1NJZCYsIGNv
bnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0LCBFeGNlcHRpb25Db2RlJik7CiAgICAg
Ym9vbCBzZXRQcm9wZXJ0eVRleHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9w
ZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBTdHJpbmcqIG9s
ZFByb3BlcnR5VGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgdG9nZ2xlUHJvcGVydHko
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2Fi
bGUsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTIxMiwxNyArMjEzLDE3IEBAIHB1YmxpYzoKICAgICBJ
bnNwZWN0b3JDU1NJZCBzdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7
IHJldHVybiBydWxlT3JTdHlsZUlkKHN0eWxlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVj
dG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5l
ciopOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3Qg
U3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRv
Y3VtZW50VVJMLCBMaXN0ZW5lciopOwogCiAgICAgYm9vbCBjYW5CaW5kKCkgY29uc3QgeyByZXR1
cm4gbV9vcmlnaW4gIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
OjpVc2VyQWdlbnQgJiYgbV9vcmlnaW4gIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luOjpVc2VyOyB9Ci0gICAgSW5zcGVjdG9yQ1NTSWQgcnVsZU9yU3R5bGVJZChD
U1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CisgICAgSW5zcGVjdG9yQ1NTSWQgcnVsZU9yU3R5
bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CiAgICAgdmlydHVhbCBEb2N1
bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVT
b3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7
CisgICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9y
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBlbnN1cmVQYXJzZWREYXRhUmVhZHkoKTsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbnNw
ZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYpOwot
ICAgIHZpcnR1YWwgdm9pZCByZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0cjxJbnNwZWN0b3JT
dHlsZT4mJik7Ci0gICAgdmlydHVhbCB2b2lkIGZvcmdldEluc3BlY3RvclN0eWxlKENTU1N0eWxl
RGVjbGFyYXRpb24qKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGlu
c3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3Rv
clN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpOwogCiAgICAgLy8gQWxzbyBhY2Nlc3NlZCBieSBmcmllbmQgY2xh
c3MgSW5zcGVjdG9yU3R5bGUuCiAgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChDU1NTdHls
ZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMjMyLDcg
KzIzMyw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENTU1N0eWxlUnVs
ZT4+IENTU1N0eWxlUnVsZVZlY3RvcjsKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5bGU7
CiAKLSAgICBzdGF0aWMgdm9pZCBjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0cjxDU1NSdWxlTGlzdD4m
JiwgQ1NTU3R5bGVSdWxlVmVjdG9yKiByZXN1bHQpOworICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RG
bGF0UnVsZXMoUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4sIENTU1N0eWxlUnVsZVZlY3RvciogcmVz
dWx0KTsKICAgICBib29sIGNoZWNrUGFnZVN0eWxlU2hlZXQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OwogICAgIGJvb2wgZW5zdXJlVGV4dCgpIGNvbnN0OwogICAgIGJvb2wgZW5zdXJlU291cmNlRGF0
YSgpOwpAQCAtMjQyLDkgKzI0Myw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBvcmlnaW5hbFN0eWxl
U2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKICAgICBib29sIHJlc291cmNlU3R5bGVT
aGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wgaW5saW5lU3R5bGVTaGVl
dFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBidWlsZEFycmF5Rm9y
UnVsZUxpc3QoQ1NTUnVsZUxpc3QqKTsKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciop
OwotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4gYnVpbGRP
YmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NTU3R5bGVSdWxlKik7CisgICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+
PiBidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0
b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U2VsZWN0b3JMaXN0PiBidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChDU1NTdHls
ZVJ1bGUqKTsKIAogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgU3Ry
aW5nIG1faWQ7CkBAIC0yNjAsMjEgKzI2MSwyMSBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yU3R5bGVT
aGVldCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGU+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBS
ZWZQdHI8RWxlbWVudD4mJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luLCBMaXN0ZW5lciopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZT4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmlu
ZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZvaWQgZGlkTW9kaWZ5RWxlbWVudEF0
dHJpYnV0ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQo
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9VTlVTRUQo
aWQsICFpZC5vcmRpbmFsKCkpOyByZXR1cm4gaW5saW5lU3R5bGUoKTsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2Vu
dCosIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxFbGVtZW50PiYmLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIExpc3RlbmVyKik7CisgICAgSW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYg
aWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9j
dW1lbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0
IG92ZXJyaWRlIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7
IHJldHVybiBtX3J1bGVTb3VyY2VEYXRhOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5k
ZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAw
OyB9CiAgICAgdmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZUZvcklkKGNv
bnN0IEluc3BlY3RvckNTU0lkJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbWVtYmVy
SW5zcGVjdG9yU3R5bGUoUmVmUHRyPEluc3BlY3RvclN0eWxlPiYmKSBvdmVycmlkZSB7IH0KKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlRm9ySWQo
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtZW1i
ZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+KSBvdmVycmlkZSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiop
IG92ZXJyaWRlIHsgfQogCiAgICAgLy8gQWxzbyBhY2Nlc3NlZCBieSBmcmllbmQgY2xhc3MgSW5z
cGVjdG9yU3R5bGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5jcHAKaW5kZXggODhjY2RiMWQ0YjU4YjIzMmI3MjIxOWI5YTY0OTNlNGU4
NWFjN2UxZi4uYmQzMjc4ZTgwMmRlZDA0MzYyNzNkODRjNzBmMjM2YmIzMTVlMGFlNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNw
cApAQCAtMTk3LDkgKzE5Nyw5IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRG
cm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nCiAKICAgICAvLyBV
c2UgYW4gaW5kZXBlbmRlbnQgc3RvcHdhdGNoIGZvciBjb25zb2xlLWluaXRpYXRlZCBwcm9maWxp
bmcsIHNpbmNlIHRoZSB1c2VyIHdpbGwgZXhwZWN0IGl0CiAgICAgLy8gdG8gYmUgcmVsYXRpdmUg
dG8gd2hlbiB0aGVpciBjb21tYW5kIHdhcyBpc3N1ZWQuCi0gICAgUmVmPFN0b3B3YXRjaD4gcHJv
ZmlsZXJTdG9wd2F0Y2ggPSBTdG9wd2F0Y2g6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTdG9wd2F0
Y2g+IHByb2ZpbGVyU3RvcHdhdGNoID0gU3RvcHdhdGNoOjpjcmVhdGUoKTsKICAgICBwcm9maWxl
clN0b3B3YXRjaC0+c3RhcnQoKTsKLSAgICBzdGFydFByb2ZpbGluZyhleGVjLCB0aXRsZSwgV1RG
Ojptb3ZlKHByb2ZpbGVyU3RvcHdhdGNoKSk7CisgICAgc3RhcnRQcm9maWxpbmcoZXhlYywgdGl0
bGUsIHByb2ZpbGVyU3RvcHdhdGNoLnJlbGVhc2UoKSk7CiAKICAgICBtX3BlbmRpbmdDb25zb2xl
UHJvZmlsZVJlY29yZHMuYXBwZW5kKGNyZWF0ZVJlY29yZEVudHJ5KFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlQ29uc29sZVByb2ZpbGVEYXRhKHRpdGxlKSwgVGltZWxpbmVSZWNvcmRUeXBl
OjpDb25zb2xlUHJvZmlsZSwgdHJ1ZSwgZnJhbWVGcm9tRXhlY1N0YXRlKGV4ZWMpKSk7CiB9CkBA
IC0yMTcsNyArMjE3LDcgQEAgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSoKICAgICAgICAgaWYgKHRp
dGxlLmlzRW1wdHkoKSB8fCByZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAgICAgICAgICAgUmVm
UHRyPEpTQzo6UHJvZmlsZT4gcHJvZmlsZSA9IHN0b3BQcm9maWxpbmcoZXhlYywgdGl0bGUpOwog
ICAgICAgICAgICAgaWYgKHByb2ZpbGUpCi0gICAgICAgICAgICAgICAgVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjphcHBlbmRQcm9maWxlKHJlY29yZC5kYXRhLmdldCgpLCBwcm9maWxlLmNvcHlSZWYo
KSk7CisgICAgICAgICAgICAgICAgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRQcm9maWxl
KHJlY29yZC5kYXRhLmdldCgpLCBwcm9maWxlKTsKIAogICAgICAgICAgICAgZGlkQ29tcGxldGVS
ZWNvcmRFbnRyeShyZWNvcmQpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgUGFzc1JlZlB0cjxKU0M6
OlByb2ZpbGU+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6OkV4
ZWNTdGF0ZSoKICAgICAgICAgICAgIGlmICghbV9lbmFibGVkRnJvbUZyb250ZW5kICYmIG1fcGVu
ZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgaW50
ZXJuYWxTdG9wKCk7CiAKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUocHJvZmlsZSk7Cisg
ICAgICAgICAgICByZXR1cm4gcHJvZmlsZS5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTY0NywxNyArNjQ3LDE3IEBAIHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGlu
ZTo6RXZlbnRUeXBlIHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5CiAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKIH0K
IAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKK3Zv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcHJwUmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsK
LSAgICBBU1NFUlRfQVJHKHJlY29yZCwgcmVjb3JkKTsKLSAgICByZWNvcmQtPnNldFN0cmluZygi
dHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHRvUHJvdG9j
b2wodHlwZSkpKTsKKyAgICBwcnBSZWNvcmQtPnNldFN0cmluZygidHlwZSIsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKIAotICAg
IGlmIChtX3JlY29yZFN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIHJlY29yZE9iamVj
dCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5l
RXZlbnQ+OjpydW50aW1lQ2FzdChXVEY6Om1vdmUocmVjb3JkKSk7Ci0gICAgICAgIHNlbmRFdmVu
dChXVEY6Om1vdmUocmVjb3JkT2JqZWN0KSk7Ci0gICAgfSBlbHNlIHsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+IHJlY29yZCA9IEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ojpy
dW50aW1lQ2FzdChwcnBSZWNvcmQpOworCisgICAgaWYgKG1fcmVjb3JkU3RhY2suaXNFbXB0eSgp
KQorICAgICAgICBzZW5kRXZlbnQocmVjb3JkLnJlbGVhc2UoKSk7CisgICAgZWxzZSB7CiAgICAg
ICAgIGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHBhcmVudCA9IG1fcmVjb3JkU3RhY2subGFz
dCgpOwotICAgICAgICBwYXJlbnQuY2hpbGRyZW4tPnB1c2hPYmplY3QoV1RGOjptb3ZlKHJlY29y
ZCkpOworICAgICAgICBwYXJlbnQuY2hpbGRyZW4tPnB1c2hPYmplY3QocmVjb3JkLnJlbGVhc2Uo
KSk7CiAgICAgfQogfQogCkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkm
IGUKICAgICBlbnRyeS5yZWNvcmQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImRhdGEiKSwgZW50
cnkuZGF0YSk7CiAgICAgZW50cnkucmVjb3JkLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNoaWxk
cmVuIiksIGVudHJ5LmNoaWxkcmVuKTsKICAgICBlbnRyeS5yZWNvcmQtPnNldERvdWJsZShBU0NJ
SUxpdGVyYWwoImVuZFRpbWUiKSwgdGltZXN0YW1wKCkpOwotICAgIGFkZFJlY29yZFRvVGltZWxp
bmUoZW50cnkucmVjb3JkLmNvcHlSZWYoKSwgZW50cnkudHlwZSk7CisgICAgYWRkUmVjb3JkVG9U
aW1lbGluZShlbnRyeS5yZWNvcmQsIGVudHJ5LnR5cGUpOwogfQogCiB2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5cGUg
dHlwZSkKQEAgLTcwNSwzNCArNzA1LDM0IEBAIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Okluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluCiB7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVjb3JkKFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVy
ZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojph
cHBlbmRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKLSAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENh
bGxTdGFja0RlcHRoIDogMCk7Ci0gICAgcmVjb3JkLT5zZXRPYmplY3QoImRhdGEiLCBXVEY6Om1v
dmUoZGF0YSkpOwotICAgIHNldEZyYW1lSWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7
Ci0gICAgYWRkUmVjb3JkVG9UaW1lbGluZShXVEY6Om1vdmUocmVjb3JkKSwgdHlwZSk7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVHZW5lcmljUmVjb3JkKHRpbWVzdGFtcCgpLCBjYXB0dXJlQ2FsbFN0YWNrID8gbV9tYXhD
YWxsU3RhY2tEZXB0aCA6IDApOworICAgIHJlY29yZC0+c2V0T2JqZWN0KCJkYXRhIiwgZGF0YSk7
CisgICAgc2V0RnJhbWVJZGVudGlmaWVyKHJlY29yZC5nZXQoKSwgZnJhbWUpOworICAgIGFkZFJl
Y29yZFRvVGltZWxpbmUocmVjb3JkLnJlbGVhc2UoKSwgdHlwZSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgZXZl
bnQpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudChQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZXZlbnQpCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5kRGlzcGF0Y2hlcikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IHJ1bnRpbWVDYXN0IGlzIGEgaGFjay4g
V2UgZG8gaXQgYmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1lbGluZUV2ZW50IGRpcmVjdGx5IG5v
dy4KLSAgICBhdXRvIHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGOjptb3ZlKGV2
ZW50KSk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3JkZWQoV1RGOjptb3Zl
KHJlY29yZENoZWNrZWQpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6OlRpbWVsaW5lRXZlbnQ+IHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoZXZlbnQp
OworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5ldmVudFJlY29yZGVkKHJlY29yZENoZWNrZWQu
cmVsZWFzZSgpKTsKIH0KIAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6VGltZWxpbmVSZWNvcmRF
bnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeShSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1
cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKK0luc3BlY3RvclRpbWVsaW5lQWdlbnQ6OlRpbWVs
aW5lUmVjb3JkRW50cnkgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50cnko
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBl
LCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNS
ZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRo
IDogMCk7Ci0gICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZyYW1lKTsKLSAg
ICByZXR1cm4gVGltZWxpbmVSZWNvcmRFbnRyeShXVEY6Om1vdmUocmVjb3JkKSwgV1RGOjptb3Zl
KGRhdGEpLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCksIHR5cGUpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJp
Y1JlY29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVw
dGggOiAwKTsKKyAgICBzZXRGcmFtZUlkZW50aWZpZXIocmVjb3JkLmdldCgpLCBmcmFtZSk7Cisg
ICAgcmV0dXJuIFRpbWVsaW5lUmVjb3JkRW50cnkocmVjb3JkLnJlbGVhc2UoKSwgZGF0YSwgSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEs
IFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBi
b29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBwdXNoQ3VycmVudFJl
Y29yZChjcmVhdGVSZWNvcmRFbnRyeShXVEY6Om1vdmUoZGF0YSksIHR5cGUsIGNhcHR1cmVDYWxs
U3RhY2ssIGZyYW1lKSk7CisgICAgcHVzaEN1cnJlbnRSZWNvcmQoY3JlYXRlUmVjb3JkRW50cnko
ZGF0YSwgdHlwZSwgY2FwdHVyZUNhbGxTdGFjaywgZnJhbWUpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpjbGVhclJlY29yZFN0YWNrKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IDNlOGUxMTRlM2QwNzBi
NzY2ZTBiOThjYjQwYWE4MGE0MzVmMzUxZjEuLjM1MmExZjU3NDYwZGIzOTllNDY1YmRkYjFmYjRj
MWY3ZjUyMGExODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JUaW1lbGluZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clRpbWVsaW5lQWdlbnQuaApAQCAtMjI0LDE5ICsyMjQsMTkgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGludGVybmFsU3RvcCgpOwogICAgIGRvdWJsZSB0aW1lc3RhbXAoKTsKIAotICAgIHZvaWQgc2Vu
ZEV2ZW50KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJik7Ci0gICAgdm9pZCBh
cHBlbmRSZWNvcmQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmIGRhdGEsIFRp
bWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOwotICAgIHZv
aWQgcHVzaEN1cnJlbnRSZWNvcmQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYm
LCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKKyAg
ICB2b2lkIHNlbmRFdmVudChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Pik7
CisgICAgdm9pZCBhcHBlbmRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZy
YW1lKik7CisgICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3Rh
Y2ssIEZyYW1lKik7CiAgICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChjb25zdCBUaW1lbGluZVJl
Y29yZEVudHJ5JiByZWNvcmQpIHsgbV9yZWNvcmRTdGFjay5hcHBlbmQocmVjb3JkKTsgfQogCi0g
ICAgVGltZWxpbmVSZWNvcmRFbnRyeSBjcmVhdGVSZWNvcmRFbnRyeShSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1
cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAgVGltZWxpbmVSZWNvcmRFbnRyeSBjcmVhdGVSZWNv
cmRFbnRyeShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBkYXRhLCBUaW1l
bGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKIAogICAgIHZv
aWQgc2V0RnJhbWVJZGVudGlmaWVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiByZWNvcmQs
IEZyYW1lKik7CiAKICAgICB2b2lkIGRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxp
bmVSZWNvcmRFbnRyeSYpOwogICAgIHZvaWQgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVs
aW5lUmVjb3JkVHlwZSk7CiAKLSAgICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYmLCBUaW1lbGluZVJlY29yZFR5cGUpOworICAgIHZv
aWQgYWRkUmVjb3JkVG9UaW1lbGluZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiwgVGltZWxpbmVSZWNvcmRUeXBlKTsKICAgICB2b2lkIGNsZWFyUmVjb3JkU3RhY2soKTsK
IAogICAgIHZvaWQgbG9jYWxUb1BhZ2VRdWFkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IExh
eW91dFJlY3QmLCBGbG9hdFF1YWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCmluZGV4IGNhNjllYjQ5MWExMTk3Y2ZhOWU0YWU3NTE5
OTNkYWIyNTc2MTQyYWUuLjUyYThjMDdiNWRlYzU3MGEyMWQ1NDMwYWM1YmJjZGM3NmFkZDkxOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50
LmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2Nv
bm5lY3RGcm9tV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwgaW50IHdvcmtlcklkCiAgICAgICAg
IGVycm9yID0gQVNDSUlMaXRlcmFsKCJXb3JrZXIgaXMgZ29uZSIpOwogfQogCi12b2lkIEluc3Bl
Y3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvciwg
aW50IHdvcmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2
b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5n
JiBlcnJvciwgaW50IHdvcmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbWVz
c2FnZSkKIHsKICAgICBXb3JrZXJGcm9udGVuZENoYW5uZWwqIGNoYW5uZWwgPSBtX2lkVG9DaGFu
bmVsLmdldCh3b3JrZXJJZCk7CiAgICAgaWYgKGNoYW5uZWwpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCmluZGV4IDY4NjlkNWE2ODA0ZjcyOTgw
YjA2NzJiMDliNmNhM2NiODgwMmZhZmIuLjM5YmU2ZDAxZGM0YjIzNjM1ZWQ3OTRhMjE5OTZlNzM0
ZmE0OTljZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JX
b3JrZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2Fu
SW5zcGVjdFdvcmtlcnMoRXJyb3JTdHJpbmcmLCBib29sKikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGNvbm5lY3RUb1dvcmtlcihFcnJvclN0cmluZyYsIGludCB3b3JrZXJJZCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tV29ya2VyKEVycm9yU3RyaW5nJiwg
aW50IHdvcmtlcklkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb1dv
cmtlcihFcnJvclN0cmluZyYsIGludCB3b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
ZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiwgaW50IHdvcmtlcklkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBtZXNzYWdlKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMoRXJyb3JTdHJpbmcmLCBib29sIHZh
bHVlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCmluZGV4IGU0YTI2NjQ4MTJiZmZhMjViNWZmYjNh
OTEzOTJiZTY3YTI2ZjlhZjAuLmRlZDY1NGJiNzhlZTdiNzI1MmFiNWJkN2MzYzE2MDA1ODM4Yjdj
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2Vz
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNE
YXRhLmNwcApAQCAtNTEsMTcgKzUxLDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIAotUmVmPFhIUlJlcGxheURhdGE+IFhIUlJlcGxheURhdGE6
OmNyZWF0ZShjb25zdCBTdHJpbmcgJm1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMs
IFJlZlB0cjxGb3JtRGF0YT4mJiBmb3JtRGF0YSwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVy
cywgYm9vbCBpbmNsdWRlQ3JlZGVudGlhbHMpCitQYXNzUmVmUHRyPFhIUlJlcGxheURhdGE+IFhI
UlJlcGxheURhdGE6OmNyZWF0ZShjb25zdCBTdHJpbmcgJm1ldGhvZCwgY29uc3QgVVJMJiB1cmws
IGJvb2wgYXN5bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBjb25zdCBIVFRQSGVh
ZGVyTWFwJiBoZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBYSFJSZXBsYXlEYXRhKG1ldGhvZCwgdXJsLCBhc3luYywgV1RGOjptb3Zl
KGZvcm1EYXRhKSwgaGVhZGVycywgaW5jbHVkZUNyZWRlbnRpYWxzKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBYSFJSZXBsYXlEYXRhKG1ldGhvZCwgdXJsLCBhc3luYywgZm9ybURhdGEsIGhl
YWRlcnMsIGluY2x1ZGVDcmVkZW50aWFscykpOwogfQogCiAKLVhIUlJlcGxheURhdGE6OlhIUlJl
cGxheURhdGEoY29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVSTCYgdXJsLCBib29sIGFzeW5j
LCBSZWZQdHI8Rm9ybURhdGE+JiYgZm9ybURhdGEsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRl
cnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKQorWEhSUmVwbGF5RGF0YTo6WEhSUmVwbGF5RGF0
YShjb25zdCBTdHJpbmcgJm1ldGhvZCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgYXN5bmMsIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBi
b29sIGluY2x1ZGVDcmVkZW50aWFscykKICAgICA6IG1fbWV0aG9kKG1ldGhvZCkKICAgICAsIG1f
dXJsKHVybCkKICAgICAsIG1fYXN5bmMoYXN5bmMpCi0gICAgLCBtX2Zvcm1EYXRhKFdURjo6bW92
ZShmb3JtRGF0YSkpCisgICAgLCBtX2Zvcm1EYXRhKGZvcm1EYXRhKQogICAgICwgbV9oZWFkZXJz
KGhlYWRlcnMpCiAgICAgLCBtX2luY2x1ZGVDcmVkZW50aWFscyhpbmNsdWRlQ3JlZGVudGlhbHMp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNl
c0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5o
CmluZGV4IDUzOTM4ODU2NDgxNWFjNjgyMTY0ZTU3M2NlNjQwMmUzMzMwMTFmYzAuLmMyMzY5NWQx
ZmMxNjkzYjk1MTE1YTA0NTBjNzBhY2MwOGUwZDA5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5oCkBAIC01MSw3ICs1MSw3IEBAIGNsYXNz
IFRleHRSZXNvdXJjZURlY29kZXI7CiAKIGNsYXNzIFhIUlJlcGxheURhdGEgOiBwdWJsaWMgUmVm
Q291bnRlZDxYSFJSZXBsYXlEYXRhPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxYSFJSZXBs
YXlEYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nICZtZXRob2QsIGNvbnN0IFVSTCYsIGJvb2wgYXN5
bmMsIFJlZlB0cjxGb3JtRGF0YT4mJiwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9v
bCBpbmNsdWRlQ3JlZGVudGlhbHMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhIUlJlcGxheURh
dGE+IGNyZWF0ZShjb25zdCBTdHJpbmcgJm1ldGhvZCwgY29uc3QgVVJMJiwgYm9vbCBhc3luYywg
UGFzc1JlZlB0cjxGb3JtRGF0YT4sIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGJvb2wg
aW5jbHVkZUNyZWRlbnRpYWxzKTsKIAogICAgIGNvbnN0IFN0cmluZyYgbWV0aG9kKCkgY29uc3Qg
eyByZXR1cm4gbV9tZXRob2Q7IH0KICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsOyB9CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBIVFRQSGVhZGVy
TWFwJiBoZWFkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXJzOyB9CiAgICAgYm9vbCBpbmNs
dWRlQ3JlZGVudGlhbHMoKSBjb25zdCB7IHJldHVybiBtX2luY2x1ZGVDcmVkZW50aWFsczsgfQog
cHJpdmF0ZToKLSAgICBYSFJSZXBsYXlEYXRhKGNvbnN0IFN0cmluZyAmbWV0aG9kLCBjb25zdCBV
UkwmLCBib29sIGFzeW5jLCBSZWZQdHI8Rm9ybURhdGE+JiYsIGNvbnN0IEhUVFBIZWFkZXJNYXAm
IGhlYWRlcnMsIGJvb2wgaW5jbHVkZUNyZWRlbnRpYWxzKTsKKyAgICBYSFJSZXBsYXlEYXRhKGNv
bnN0IFN0cmluZyAmbWV0aG9kLCBjb25zdCBVUkwmLCBib29sIGFzeW5jLCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgYm9vbCBpbmNsdWRlQ3JlZGVu
dGlhbHMpOwogCiAgICAgU3RyaW5nIG1fbWV0aG9kOwogICAgIFVSTCBtX3VybDsKQEAgLTEwNywx
MSArMTA3LDExIEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUoKSBj
b25zdCB7IHJldHVybiBtX3RleHRFbmNvZGluZ05hbWU7IH0KICAgICAgICAgdm9pZCBzZXRUZXh0
RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSkgeyBtX3RleHRFbmNv
ZGluZ05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lOyB9CiAKLSAgICAgICAgUmVmUHRyPFRleHRSZXNv
dXJjZURlY29kZXI+IGRlY29kZXIoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuY29weVJlZigp
OyB9Ci0gICAgICAgIHZvaWQgc2V0RGVjb2RlcihSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4m
JiBkZWNvZGVyKSB7IG1fZGVjb2RlciA9IFdURjo6bW92ZShkZWNvZGVyKTsgfQorICAgICAgICBQ
YXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIoKSBjb25zdCB7IHJldHVybiBt
X2RlY29kZXI7IH0KKyAgICAgICAgdm9pZCBzZXREZWNvZGVyKFBhc3NSZWZQdHI8VGV4dFJlc291
cmNlRGVjb2Rlcj4gZGVjb2RlcikgeyBtX2RlY29kZXIgPSBkZWNvZGVyOyB9CiAKLSAgICAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuY29w
eVJlZigpOyB9Ci0gICAgICAgIHZvaWQgc2V0QnVmZmVyKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYg
YnVmZmVyKSB7IG1fYnVmZmVyID0gV1RGOjptb3ZlKGJ1ZmZlcik7IH0KKyAgICAgICAgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9Cisg
ICAgICAgIHZvaWQgc2V0QnVmZmVyKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpIHsg
bV9idWZmZXIgPSBidWZmZXI7IH0KIAogICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVz
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFJlc291cmNlOyB9CiAgICAgICAgIHZvaWQg
c2V0Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKSB7IG1fY2Fj
aGVkUmVzb3VyY2UgPSBjYWNoZWRSZXNvdXJjZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAppbmRleCA3ZTI0MDRjY2QzYzIyNzZm
MjdmMzFkNWVlYjFlODlhZTg2Y2JlYWQ3Li44MTliZmRiMjIxYmNlMTkyZDI5MDFhMTU1N2M1OThl
M2NhMDI0ZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVS
ZWNvcmRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVS
ZWNvcmRGYWN0b3J5LmNwcApAQCAtNTIsOSArNTIsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZChkb3VibGUgc3RhcnRUaW1lLCBp
bnQgbWF4Q2FsbFN0YWNrRGVwdGgpCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGlu
dCBtYXhDYWxsU3RhY2tEZXB0aCkKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlY29yZCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVjb3JkLT5zZXREb3Vi
bGUoInN0YXJ0VGltZSIsIHN0YXJ0VGltZSk7CiAKICAgICBpZiAobWF4Q2FsbFN0YWNrRGVwdGgp
IHsKQEAgLTYyLDE4NSArNjIsMTg1IEBAIFJlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZChkb3VibGUgc3RhcnRUaW1lCiAgICAgICAg
IGlmIChzdGFja1RyYWNlICYmIHN0YWNrVHJhY2UtPnNpemUoKSkKICAgICAgICAgICAgIHJlY29y
ZC0+c2V0VmFsdWUoInN0YWNrVHJhY2UiLCBzdGFja1RyYWNlLT5idWlsZEluc3BlY3RvckFycmF5
KCkpOwogICAgIH0KLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlY29yZCk7CisgICAgcmV0dXJuIHJl
Y29yZC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlQmFja2dyb3VuZFJlY29yZChkb3VibGUgc3RhcnRUaW1lLCBjb25zdCBT
dHJpbmcmIHRocmVhZE5hbWUpCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVS
ZWNvcmRGYWN0b3J5OjpjcmVhdGVCYWNrZ3JvdW5kUmVjb3JkKGRvdWJsZSBzdGFydFRpbWUsIGNv
bnN0IFN0cmluZyYgdGhyZWFkTmFtZSkKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZWNv
cmQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlY29yZCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVjb3JkLT5zZXRE
b3VibGUoInN0YXJ0VGltZSIsIHN0YXJ0VGltZSk7CiAgICAgcmVjb3JkLT5zZXRTdHJpbmcoInRo
cmVhZCIsIHRocmVhZE5hbWUpOwotICAgIHJldHVybiBXVEY6Om1vdmUocmVjb3JkKTsKKyAgICBy
ZXR1cm4gcmVjb3JkLnJlbGVhc2UoKTsKIH0KIAotUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBzaXplX3QgdXNlZEhlYXBT
aXplRGVsdGEpCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBzaXplX3QgdXNlZEhlYXBTaXplRGVsdGEpCiB7
Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidXNlZEhlYXBTaXplRGVsdGEiLCB1c2Vk
SGVhcFNpemVEZWx0YSk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKKyAgICByZXR1cm4g
ZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUs
IGludCBzY3JpcHRMaW5lKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlRnVuY3Rpb25DYWxsRGF0YShjb25zdCBTdHJpbmcmIHNjcmlwdE5h
bWUsIGludCBzY3JpcHRMaW5lKQogewotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygic2Ny
aXB0TmFtZSIsIHNjcmlwdE5hbWUpOwogICAgIGRhdGEtPnNldEludGVnZXIoInNjcmlwdExpbmUi
LCBzY3JpcHRMaW5lKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOworICAgIHJldHVybiBk
YXRhLnJlbGVhc2UoKTsKIH0KIAotUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVDb25zb2xlUHJvZmlsZURhdGEoY29uc3QgU3RyaW5nJiB0aXRsZSkKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUNv
bnNvbGVQcm9maWxlRGF0YShjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRh
dGEtPnNldFN0cmluZygidGl0bGUiLCB0aXRsZSk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShkYXRh
KTsKKyAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKGNvbnN0IFNjcmlw
dEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwgdW5zaWduZWQgc2FtcGxlSWQpCitQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQcm9iZVNhbXBs
ZURhdGEoY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0aW9uLCB1bnNpZ25lZCBzYW1w
bGVJZCkKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicHJv
YmVJZCIpLCBhY3Rpb24uaWRlbnRpZmllcik7CiAgICAgZGF0YS0+c2V0SW50ZWdlcihBU0NJSUxp
dGVyYWwoInNhbXBsZUlkIiksIHNhbXBsZUlkKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEp
OworICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotUmVmPEluc3BlY3Rvck9iamVjdD4g
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVFdmVudERpc3BhdGNoRGF0YShjb25zdCBFdmVu
dCYgZXZlbnQpCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVFdmVudERpc3BhdGNoRGF0YShjb25zdCBFdmVudCYgZXZlbnQpCiB7Ci0gICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ0eXBlIiwgZXZlbnQudHlwZSgpLnN0cmluZygpKTsK
LSAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOworICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsK
IH0KIAotUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVH
ZW5lcmljVGltZXJEYXRhKGludCB0aW1lcklkKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1RpbWVyRGF0YShpbnQgdGltZXJJ
ZCkKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJ0aW1lcklkIiwgdGltZXJJZCk7
Ci0gICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKKyAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7
CiB9CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRl
VGltZXJJbnN0YWxsRGF0YShpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hv
dCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZVRpbWVySW5zdGFsbERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmds
ZVNob3QpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigidGltZXJJZCIsIHRpbWVy
SWQpOwogICAgIGRhdGEtPnNldEludGVnZXIoInRpbWVvdXQiLCB0aW1lb3V0KTsKICAgICBkYXRh
LT5zZXRCb29sZWFuKCJzaW5nbGVTaG90Iiwgc2luZ2xlU2hvdCk7Ci0gICAgcmV0dXJuIFdURjo6
bW92ZShkYXRhKTsKKyAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0
b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSUmVhZHlTdGF0ZUNoYW5n
ZURhdGEoY29uc3QgU3RyaW5nJiB1cmwsIGludCByZWFkeVN0YXRlKQorUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSUmVhZHlTdGF0ZUNo
YW5nZURhdGEoY29uc3QgU3RyaW5nJiB1cmwsIGludCByZWFkeVN0YXRlKQogewotICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIGRhdGEtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJy
ZWFkeVN0YXRlIiwgcmVhZHlTdGF0ZSk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKKyAg
ICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVs
aW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlWEhSTG9hZERhdGEoY29uc3QgU3RyaW5nJiB1cmwpCitQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVY
SFJMb2FkRGF0YShjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRT
dHJpbmcoInVybCIsIHVybCk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsKKyAgICByZXR1
cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlRXZhbHVhdGVTY3JpcHREYXRhKGNvbnN0IFN0cmluZyYgdXJsLCBk
b3VibGUgbGluZU51bWJlcikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUV2YWx1YXRlU2NyaXB0RGF0YShjb25zdCBTdHJpbmcmIHVybCwg
ZG91YmxlIGxpbmVOdW1iZXIpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJ1cmwi
LCB1cmwpOwogICAgIGRhdGEtPnNldEludGVnZXIoImxpbmVOdW1iZXIiLCBsaW5lTnVtYmVyKTsK
LSAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOworICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsK
IH0KIAotUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVU
aW1lU3RhbXBEYXRhKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVRpbWVTdGFtcERhdGEoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEtPnNldFN0cmluZygibWVzc2Fn
ZSIsIG1lc3NhZ2UpOwotICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CisgICAgcmV0dXJuIGRh
dGEucmVsZWFzZSgpOwogfQogCi1SZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHVy
bCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZVNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybCk7Ci0gICAgcmV0dXJuIFdURjo6
bW92ZShkYXRhKTsKKyAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0
b3JPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVzb3VyY2VTZW5kUmVxdWVz
dERhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6
OmNyZWF0ZVJlc291cmNlU2VuZFJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0
U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgIGRhdGEtPnNldFN0cmluZygidXJs
IiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7CiAgICAgZGF0YS0+c2V0U3RyaW5nKCJyZXF1ZXN0
TWV0aG9kIiwgcmVxdWVzdC5odHRwTWV0aG9kKCkpOwotICAgIHJldHVybiBXVEY6Om1vdmUoZGF0
YSk7CisgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1SZWY8SW5zcGVjdG9yT2JqZWN0
PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlUmVjZWl2ZVJlc3BvbnNlRGF0
YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVSZXNvdXJjZVJlY2VpdmVSZXNwb25zZURhdGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGRhdGEt
PnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgICBkYXRhLT5zZXRJbnRlZ2Vy
KCJzdGF0dXNDb2RlIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAgICAgZGF0YS0+c2V0
U3RyaW5nKCJtaW1lVHlwZSIsIHJlc3BvbnNlLm1pbWVUeXBlKCkpOwotICAgIHJldHVybiBXVEY6
Om1vdmUoZGF0YSk7CisgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1SZWY8SW5zcGVj
dG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlRmluaXNoRGF0
YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgYm9vbCBkaWRGYWlsLCBkb3VibGUgZmluaXNoVGlt
ZSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNy
ZWF0ZVJlc291cmNlRmluaXNoRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgYm9vbCBkaWRG
YWlsLCBkb3VibGUgZmluaXNoVGltZSkKIHsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBkYXRh
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBkYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBkYXRhLT5zZXRTdHJpbmco
InJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICAgZGF0YS0+c2V0Qm9vbGVhbigiZGlkRmFpbCIs
IGRpZEZhaWwpOwogICAgIGlmIChmaW5pc2hUaW1lKQogICAgICAgICBkYXRhLT5zZXREb3VibGUo
Im5ldHdvcmtUaW1lIiwgZmluaXNoVGltZSk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShkYXRhKTsK
KyAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+IFRp
bWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUmVjZWl2ZVJlc291cmNlRGF0YShjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlY2VpdmVSZXNvdXJjZURhdGEoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGludCBsZW5ndGgpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0U3Ry
aW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgIGRhdGEtPnNldEludGVnZXIoImVuY29k
ZWREYXRhTGVuZ3RoIiwgbGVuZ3RoKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOworICAg
IHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAotUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVMYXlvdXREYXRhKHVuc2lnbmVkIGRpcnR5T2JqZWN0cywg
dW5zaWduZWQgdG90YWxPYmplY3RzLCBib29sIHBhcnRpYWxMYXlvdXQpCitQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVMYXlvdXREYXRhKHVu
c2lnbmVkIGRpcnR5T2JqZWN0cywgdW5zaWduZWQgdG90YWxPYmplY3RzLCBib29sIHBhcnRpYWxM
YXlvdXQpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigiZGlydHlPYmplY3RzIiwg
ZGlydHlPYmplY3RzKTsKICAgICBkYXRhLT5zZXRJbnRlZ2VyKCJ0b3RhbE9iamVjdHMiLCB0b3Rh
bE9iamVjdHMpOwogICAgIGRhdGEtPnNldEJvb2xlYW4oInBhcnRpYWxMYXlvdXQiLCBwYXJ0aWFs
TGF5b3V0KTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOworICAgIHJldHVybiBkYXRhLnJl
bGVhc2UoKTsKIH0KLQotUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5
OjpjcmVhdGVEZWNvZGVJbWFnZURhdGEoY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpCisgICAgCitQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVE
ZWNvZGVJbWFnZURhdGEoY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpCiB7Ci0gICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ZGF0YS0+c2V0U3RyaW5nKCJpbWFnZVR5cGUiLCBpbWFnZVR5cGUpOwotICAgIHJldHVybiBXVEY6
Om1vdmUoZGF0YSk7CisgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCi1SZWY8SW5zcGVj
dG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc2l6ZUltYWdlRGF0YShi
b29sIHNob3VsZENhY2hlKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlUmVzaXplSW1hZ2VEYXRhKGJvb2wgc2hvdWxkQ2FjaGUpCiB7Ci0g
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgZGF0YS0+c2V0Qm9vbGVhbigiY2FjaGVkIiwgc2hvdWxkQ2FjaGUpOwotICAg
IHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CisgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQog
Ci1SZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZU1hcmtE
YXRhKGJvb2wgaXNNYWluRnJhbWUpCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVNYXJrRGF0YShib29sIGlzTWFpbkZyYW1lKQogewotICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIGRhdGEtPnNldEJvb2xlYW4oImlzTWFpbkZyYW1lIiwgaXNNYWluRnJhbWUpOwot
ICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7CisgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwog
fQogCi1SZWY8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBh
cnNlSFRNTERhdGEodW5zaWduZWQgc3RhcnRMaW5lKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFyc2VIVE1MRGF0YSh1bnNpZ25lZCBz
dGFydExpbmUpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdlcigic3RhcnRMaW5lIiwg
c3RhcnRMaW5lKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOworICAgIHJldHVybiBkYXRh
LnJlbGVhc2UoKTsKIH0KIAotUmVmPEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVBbmltYXRpb25GcmFtZURhdGEoaW50IGNhbGxiYWNrSWQpCitQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVBbmltYXRpb25G
cmFtZURhdGEoaW50IGNhbGxiYWNrSWQpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0SW50ZWdl
cigiaWQiLCBjYWxsYmFja0lkKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOworICAgIHJl
dHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGNyZWF0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQpAQCAtMjU0LDE0ICsyNTQsMTQg
QEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNyZWF0ZVF1YWQoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQogICAgIGFycmF5LT5wdXNoRG91YmxlKHF1YWQucDMoKS55KCkpOwogICAg
IGFycmF5LT5wdXNoRG91YmxlKHF1YWQucDQoKS54KCkpOwogICAgIGFycmF5LT5wdXNoRG91Ymxl
KHF1YWQucDQoKS55KCkpOwotICAgIHJldHVybiBXVEY6Om1vdmUoYXJyYXkpOworICAgIHJldHVy
biBhcnJheS5yZWxlYXNlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3JPYmplY3Q+IFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6Y3JlYXRlUGFpbnREYXRhKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK1Bhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVBhaW50
RGF0YShjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZGF0YS0+c2V0QXJy
YXkoImNsaXAiLCBjcmVhdGVRdWFkKHF1YWQpKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEp
OworICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSW5zcGVjdG9yT2JqZWN0KiBkYXRhLCBjb25zdCBGbG9h
dFF1YWQmIHF1YWQpCkBAIC0yNjksMjQgKzI2OSwyMyBAQCB2b2lkIFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6YXBwZW5kTGF5b3V0Um9vdChJbnNwZWN0b3JPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0
UQogICAgIGRhdGEtPnNldEFycmF5KCJyb290IiwgY3JlYXRlUXVhZChxdWFkKSk7CiB9CiAKLXN0
YXRpYyBSZWY8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+IGJ1aWxkSW5z
cGVjdG9yT2JqZWN0KGNvbnN0IEpTQzo6UHJvZmlsZU5vZGU6OkNhbGwmIGNhbGwpCitzdGF0aWMg
UGFzc1JlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbD4gYnVpbGRJ
bnNwZWN0b3JPYmplY3QoY29uc3QgSlNDOjpQcm9maWxlTm9kZTo6Q2FsbCYgY2FsbCkKIHsKLSAg
ICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw6OmNyZWF0ZSgp
CisgICAgUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsPiByZXN1
bHQgPSBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlQ2FsbDo6Y3JlYXRlKCkKICAg
ICAgICAgLnNldFN0YXJ0VGltZShjYWxsLnN0YXJ0VGltZSgpKQotICAgICAgICAuc2V0VG90YWxU
aW1lKGNhbGwuZWxhcHNlZFRpbWUoKSkKLSAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgLnNl
dFRvdGFsVGltZShjYWxsLmVsYXBzZWRUaW1lKCkpOworICAgIHJldHVybiByZXN1bHQucmVsZWFz
ZSgpOwogfQogCi1zdGF0aWMgUmVmPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU+
IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KGNvbnN0IEpTQzo6UHJvZmlsZU5vZGUqIG5vZGUpCitzdGF0
aWMgUGFzc1JlZlB0cjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPiBidWlsZElu
c3BlY3Rvck9iamVjdChjb25zdCBKU0M6OlByb2ZpbGVOb2RlKiBub2RlKQogewotICAgIGF1dG8g
Y2FsbHMgPSBQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9k
ZUNhbGw+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpU
aW1lbGluZTo6Q1BVUHJvZmlsZU5vZGVDYWxsPj4gY2FsbHMgPSBQcm90b2NvbDo6QXJyYXk8UHJv
dG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZUNhbGw+OjpjcmVhdGUoKTsKICAgICBmb3Ig
KGNvbnN0IEpTQzo6UHJvZmlsZU5vZGU6OkNhbGwmIGNhbGwgOiBub2RlLT5jYWxscygpKQogICAg
ICAgICBjYWxscy0+YWRkSXRlbShidWlsZEluc3BlY3Rvck9iamVjdChjYWxsKSk7CiAKLSAgICBh
dXRvIHJlc3VsdCA9IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU6OmNyZWF0ZSgp
CisgICAgUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU+IHJlc3VsdCA9
IFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmlsZU5vZGU6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRJZChub2RlLT5pZCgpKQotICAgICAgICAuc2V0Q2FsbHMoV1RGOjptb3ZlKGNhbGxzKSkKLSAg
ICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgLnNldENhbGxzKGNhbGxzLnJlbGVhc2UoKSk7CiAK
ICAgICBpZiAoIW5vZGUtPmZ1bmN0aW9uTmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmVzdWx0
LT5zZXRGdW5jdGlvbk5hbWUobm9kZS0+ZnVuY3Rpb25OYW1lKCkpOwpAQCAtMjk4LDI3ICsyOTcs
MjggQEAgc3RhdGljIFJlZjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGVOb2RlPiBidWls
ZEluc3BlY3Rvck9iamVjdChjb25zdCBKU0M6OlAKICAgICB9CiAKICAgICBpZiAoIW5vZGUtPmNo
aWxkcmVuKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gY2hpbGRyZW4gPSBQcm90b2NvbDo6
QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT46OmNyZWF0ZSgpOworICAg
ICAgICBSZWZQdHI8UHJvdG9jb2w6OkFycmF5PFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJvZmls
ZU5vZGU+PiBjaGlsZHJlbiA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxpbmU6OkNQ
VVByb2ZpbGVOb2RlPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoUmVmUHRyPEpTQzo6UHJvZmls
ZU5vZGU+IHByb2ZpbGVOb2RlIDogbm9kZS0+Y2hpbGRyZW4oKSkKICAgICAgICAgICAgIGNoaWxk
cmVuLT5hZGRJdGVtKGJ1aWxkSW5zcGVjdG9yT2JqZWN0KHByb2ZpbGVOb2RlLmdldCgpKSk7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0Q2hpbGRyZW4oV1RGOjptb3ZlKGNoaWxkcmVuKSk7CisgICAgICAg
IHJlc3VsdC0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogICAgIH0KIAotICAgIHJldHVybiBXVEY6
Om1vdmUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGlj
IFJlZjxQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGU+IGJ1aWxkUHJvZmlsZUluc3BlY3Rv
ck9iamVjdChjb25zdCBKU0M6OlByb2ZpbGUqIHByb2ZpbGUpCitzdGF0aWMgUGFzc1JlZlB0cjxQ
cm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGU+IGJ1aWxkUHJvZmlsZUluc3BlY3Rvck9iamVj
dChjb25zdCBKU0M6OlByb2ZpbGUqIHByb2ZpbGUpCiB7Ci0gICAgYXV0byByb290Tm9kZXMgPSBQ
cm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlTm9kZT46OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQ
cm9maWxlTm9kZT4+IHJvb3ROb2RlcyA9IFByb3RvY29sOjpBcnJheTxQcm90b2NvbDo6VGltZWxp
bmU6OkNQVVByb2ZpbGVOb2RlPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChSZWZQdHI8SlNDOjpQcm9m
aWxlTm9kZT4gcHJvZmlsZU5vZGUgOiBwcm9maWxlLT5yb290Tm9kZSgpLT5jaGlsZHJlbigpKQog
ICAgICAgICByb290Tm9kZXMtPmFkZEl0ZW0oYnVpbGRJbnNwZWN0b3JPYmplY3QocHJvZmlsZU5v
ZGUuZ2V0KCkpKTsKIAotICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkNQVVByb2ZpbGU6
OmNyZWF0ZSgpCi0gICAgICAgIC5zZXRSb290Tm9kZXMoV1RGOjptb3ZlKHJvb3ROb2RlcykpCi0g
ICAgICAgIC5yZWxlYXNlKCk7CisgICAgUmVmUHRyPFByb3RvY29sOjpUaW1lbGluZTo6Q1BVUHJv
ZmlsZT4gcmVzdWx0ID0gUHJvdG9jb2w6OlRpbWVsaW5lOjpDUFVQcm9maWxlOjpjcmVhdGUoKQor
ICAgICAgICAuc2V0Um9vdE5vZGVzKHJvb3ROb2Rlcyk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKIH0KIAotdm9pZCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZFByb2ZpbGUo
SW5zcGVjdG9yT2JqZWN0KiBkYXRhLCBSZWZQdHI8SlNDOjpQcm9maWxlPiYmIHByb2ZpbGUpCit2
b2lkIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kUHJvZmlsZShJbnNwZWN0b3JPYmplY3Qq
IGRhdGEsIFBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiBwcm9maWxlKQogewogICAgIGRhdGEtPnNl
dFZhbHVlKEFTQ0lJTGl0ZXJhbCgicHJvZmlsZSIpLCBidWlsZFByb2ZpbGVJbnNwZWN0b3JPYmpl
Y3QocHJvZmlsZS5nZXQoKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Rp
bWVsaW5lUmVjb3JkRmFjdG9yeS5oCmluZGV4IDBlZjU2OTA5YWM1OTIxZDgxNWM3OTVjZTViYTg4
NGFmODRkMzZjOWYuLmJiNWI5ZThhOGEyZmIwODdlZTkzOWVkNzgwMGE3MzNkZTEzYTc3MjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3Rvcnku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgK
QEAgLTU1LDc0ICs1NSw3NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBUaW1l
bGluZVJlY29yZEZhY3RvcnkgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR2VuZXJpY1JlY29yZChkb3VibGUgc3RhcnRU
aW1lLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpOwotICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVCYWNrZ3JvdW5kUmVjb3JkKGRvdWJsZSBzdGFydFRp
bWUsIGNvbnN0IFN0cmluZyYgdGhyZWFkKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUdlbmVyaWNSZWNvcmQoZG91YmxlIHN0YXJ0
VGltZSwgaW50IG1heENhbGxTdGFja0RlcHRoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUJhY2tncm91bmRSZWNvcmQoZG91Ymxl
IHN0YXJ0VGltZSwgY29uc3QgU3RyaW5nJiB0aHJlYWQpOwogCi0gICAgICAgIHN0YXRpYyBSZWY8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUdDRXZlbnREYXRhKGNvbnN0IHNpemVf
dCB1c2VkSGVhcFNpemVEZWx0YSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHQ0V2ZW50RGF0YShjb25zdCBzaXplX3QgdXNlZEhl
YXBTaXplRGVsdGEpOwogCi0gICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZUZ1bmN0aW9uQ2FsbERhdGEoY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBp
bnQgc2NyaXB0TGluZSk7Ci0gICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGNyZWF0ZUNvbnNvbGVQcm9maWxlRGF0YShjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0
ZUZ1bmN0aW9uQ2FsbERhdGEoY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGlu
ZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBjcmVhdGVDb25zb2xlUHJvZmlsZURhdGEoY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAKLSAgICAg
ICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUHJvYmVTYW1w
bGVEYXRhKGNvbnN0IEluc3BlY3Rvcjo6U2NyaXB0QnJlYWtwb2ludEFjdGlvbiYsIHVuc2lnbmVk
IHNhbXBsZUlkKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGNyZWF0ZVByb2JlU2FtcGxlRGF0YShjb25zdCBJbnNwZWN0b3I6OlNjcmlwdEJy
ZWFrcG9pbnRBY3Rpb24mLCB1bnNpZ25lZCBzYW1wbGVJZCk7CiAKLSAgICAgICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlRXZlbnREaXNwYXRjaERhdGEoY29u
c3QgRXZlbnQmKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGNyZWF0ZUV2ZW50RGlzcGF0Y2hEYXRhKGNvbnN0IEV2ZW50Jik7CiAKLSAgICAg
ICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlR2VuZXJpY1Rp
bWVyRGF0YShpbnQgdGltZXJJZCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVHZW5lcmljVGltZXJEYXRhKGludCB0aW1lcklkKTsK
IAotICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVU
aW1lckluc3RhbGxEYXRhKGludCB0aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBzaW5nbGVTaG90
KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IGNyZWF0ZVRpbWVySW5zdGFsbERhdGEoaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNp
bmdsZVNob3QpOwogCi0gICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGNyZWF0ZVhIUlJlYWR5U3RhdGVDaGFuZ2VEYXRhKGNvbnN0IFN0cmluZyYgdXJsLCBpbnQg
cmVhZHlTdGF0ZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBjcmVhdGVYSFJSZWFkeVN0YXRlQ2hhbmdlRGF0YShjb25zdCBTdHJpbmcmIHVy
bCwgaW50IHJlYWR5U3RhdGUpOwogCi0gICAgICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IGNyZWF0ZVhIUkxvYWREYXRhKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVhI
UkxvYWREYXRhKGNvbnN0IFN0cmluZyYgdXJsKTsKIAotICAgICAgICBzdGF0aWMgUmVmPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVFdmFsdWF0ZVNjcmlwdERhdGEoY29uc3QgU3Ry
aW5nJiwgZG91YmxlIGxpbmVOdW1iZXIpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlRXZhbHVhdGVTY3JpcHREYXRhKGNvbnN0IFN0
cmluZyYsIGRvdWJsZSBsaW5lTnVtYmVyKTsKIAotICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVUaW1lU3RhbXBEYXRhKGNvbnN0IFN0cmluZyYpOwor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlVGltZVN0YW1wRGF0YShjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICBzdGF0aWMgUmVmPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0YShj
b25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNv
dXJjZVNlbmRSZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik7CiAKLSAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gY3JlYXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYpOwor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAg
IHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVJlc291cmNlUmVj
ZWl2ZVJlc3BvbnNlRGF0YShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2VEYXRhKGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKLSAgICAgICAgc3RhdGljIFJl
ZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUmVjZWl2ZVJlc291cmNlRGF0YShj
b25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgaW50IGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZWNlaXZlUmVzb3VyY2VE
YXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBpbnQgbGVuZ3RoKTsKIAotICAgICAgICBzdGF0
aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNvdXJjZUZpbmlzaERh
dGEoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGJvb2wgZGlkRmFpbCwgZG91YmxlIGZpbmlzaFRp
bWUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gY3JlYXRlUmVzb3VyY2VGaW5pc2hEYXRhKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBib29s
IGRpZEZhaWwsIGRvdWJsZSBmaW5pc2hUaW1lKTsKIAotICAgICAgICBzdGF0aWMgUmVmPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVMYXlvdXREYXRhKHVuc2lnbmVkIGRpcnR5T2Jq
ZWN0cywgdW5zaWduZWQgdG90YWxPYmplY3RzLCBib29sIHBhcnRpYWxMYXlvdXQpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlTGF5
b3V0RGF0YSh1bnNpZ25lZCBkaXJ0eU9iamVjdHMsIHVuc2lnbmVkIHRvdGFsT2JqZWN0cywgYm9v
bCBwYXJ0aWFsTGF5b3V0KTsKIAotICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBjcmVhdGVEZWNvZGVJbWFnZURhdGEoY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUp
OworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
Y3JlYXRlRGVjb2RlSW1hZ2VEYXRhKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKTsKIAotICAgICAg
ICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNpemVJbWFn
ZURhdGEoYm9vbCBzaG91bGRDYWNoZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVSZXNpemVJbWFnZURhdGEoYm9vbCBzaG91bGRD
YWNoZSk7CiAKLSAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
Y3JlYXRlTWFya0RhdGEoYm9vbCBpc01haW5GcmFtZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVNYXJrRGF0YShib29sIGlzTWFp
bkZyYW1lKTsKIAotICAgICAgICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBjcmVhdGVQYXJzZUhUTUxEYXRhKHVuc2lnbmVkIHN0YXJ0TGluZSk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQYXJzZUhUTUxE
YXRhKHVuc2lnbmVkIHN0YXJ0TGluZSk7CiAKLSAgICAgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlQW5pbWF0aW9uRnJhbWVEYXRhKGludCBjYWxsYmFja0lk
KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IGNyZWF0ZUFuaW1hdGlvbkZyYW1lRGF0YShpbnQgY2FsbGJhY2tJZCk7CiAKLSAgICAgICAgc3Rh
dGljIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlUGFpbnREYXRhKGNvbnN0
IEZsb2F0UXVhZCYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gY3JlYXRlUGFpbnREYXRhKGNvbnN0IEZsb2F0UXVhZCYpOwogCiAgICAgICAg
IHN0YXRpYyB2b2lkIGFwcGVuZExheW91dFJvb3QoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qq
IGRhdGEsIGNvbnN0IEZsb2F0UXVhZCYpOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIGFwcGVuZFBy
b2ZpbGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqLCBSZWZQdHI8SlNDOjpQcm9maWxlPiYm
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgYXBwZW5kUHJvZmlsZShJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCosIFBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPik7CiAKICNpZiBFTkFCTEUoV0VCX1NP
Q0tFVFMpCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgUmVmPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBjcmVhdGVXZWJTb2NrZXRDcmVhdGVEYXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCisgICAgICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3JlYXRlV2ViU29j
a2V0Q3JlYXRlRGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHByb3RvY29sKQogICAgICAgICB7Ci0gICAgICAgICAgICBSZWY8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IGRhdGEgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IGRhdGEgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAg
ICBkYXRhLT5zZXRJbnRlZ2VyKCJpZGVudGlmaWVyIiwgaWRlbnRpZmllcik7CiAgICAgICAgICAg
ICBkYXRhLT5zZXRTdHJpbmcoInVybCIsIHVybC5zdHJpbmcoKSk7CiAgICAgICAgICAgICBpZiAo
IXByb3RvY29sLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygid2Vi
U29ja2V0UHJvdG9jb2wiLCBwcm90b2NvbCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjptb3Zl
KGRhdGEpOworICAgICAgICAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogICAgICAgICB9CiAK
LSAgICAgICAgc3RhdGljIGlubGluZSBSZWY8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZUdlbmVyaWNXZWJTb2NrZXREYXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKKyAgICAg
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVHZW5lcmljV2ViU29ja2V0RGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gZGF0YSA9
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gZGF0YSA9IEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGRhdGEtPnNldEludGVnZXIoImlkZW50aWZp
ZXIiLCBpZGVudGlmaWVyKTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om1vdmUoZGF0YSk7Cisg
ICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiAgICAgICAgIH0KICNlbmRpZgogICAg
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMGQ1YjEzYzMwODBkZGJlOWI2YTU1N2NjN2YyNzk4
OTdiMTU2MTEwNS4uYWJhOThkMjhlYTU5OGFkN2E5Mzk1NGQ0YmZhMjUyMDMxNmU1NDljNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250
cm9sbGVyLmNwcApAQCAtMTcyLDkgKzE3Miw5IEBAIHZvaWQgV29ya2VySW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlkQ2FsbEluamVjdGVkU2NyaXB0RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqIHNjCiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKIH0KIAotUmVmPFN0b3B3YXRjaD4gV29ya2VySW5zcGVjdG9y
Q29udHJvbGxlcjo6ZXhlY3V0aW9uU3RvcHdhdGNoKCkKK1Bhc3NSZWZQdHI8U3RvcHdhdGNoPiBX
b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpleGVjdXRpb25TdG9wd2F0Y2goKQogewotICAgIHJl
dHVybiBtX2V4ZWN1dGlvblN0b3B3YXRjaC5jb3B5UmVmKCk7CisgICAgcmV0dXJuIG1fZXhlY3V0
aW9uU3RvcHdhdGNoOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBl
OTQ4MjNjN2JjYzIyMTU1NjFhYmQ2MzliZDQzOWUzYTdmYjJkOGFhLi5kNDk5YTE5MjIxYmI3OTJi
NDlmYjI1OTBjOTQ4MDE2NDQwMTFhMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTc0LDcgKzc0LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FsbEluamVjdGVkU2NyaXB0RnVuY3Rpb24oSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FsbEluamVjdGVkU2NyaXB0RnVuY3Rpb24o
SlNDOjpFeGVjU3RhdGUqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRJbml0
aWFsaXplZCgpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgUmVmPFdURjo6U3RvcHdhdGNoPiBl
eGVjdXRpb25TdG9wd2F0Y2goKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V1RG
OjpTdG9wd2F0Y2g+IGV4ZWN1dGlvblN0b3B3YXRjaCgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb247CkBAIC04NSw3ICs4NSw3
IEBAIHByaXZhdGU6CiAgICAgV29ya2VyUnVudGltZUFnZW50KiBtX3J1bnRpbWVBZ2VudDsKICAg
ICBJbnNwZWN0b3I6Okluc3BlY3RvckFnZW50UmVnaXN0cnkgbV9hZ2VudHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbD4gbV9mcm9udGVuZENoYW5uZWw7Ci0g
ICAgUmVmPFdURjo6U3RvcHdhdGNoPiBtX2V4ZWN1dGlvblN0b3B3YXRjaDsKKyAgICBSZWZQdHI8
V1RGOjpTdG9wd2F0Y2g+IG1fZXhlY3V0aW9uU3RvcHdhdGNoOwogICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAg
IFZlY3RvcjxJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUsIDI+IG1faW5qZWN0ZWRTY3Jp
cHRJbnN0cnVtZW50YXRpb25Db29raWVzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29u
c29sZUNsaWVudC5jcHAKaW5kZXggZjA3Mjc0OGFiZGIyNmUzNmUyOTgxOWYyMDJkOTNkNDBlMTQ4
MGEzOS4uY2VjYWYxZmQzNjZlM2UyZGI4MGRlZWFlMDlhMzAxYzliYTI0YmI1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKQEAgLTEwNiwxOCArMTA2LDE4IEBA
IHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uCiAgICAgYWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBt
ZXNzYWdlLCB1cmwsIGxpbmUsIGNvbHVtbiwgMCwgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJy
ZW50U3RhdGUoKSwgcmVxdWVzdElkZW50aWZpZXIpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQ2xp
ZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3Rh
Y2spCit2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291
cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0
cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsKLSAgICBhZGRNZXNzYWdlKHNvdXJjZSwg
bGV2ZWwsIG1lc3NhZ2UsIFN0cmluZygpLCAwLCAwLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgMCk7
CisgICAgYWRkTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBTdHJpbmcoKSwgMCwgMCwg
Y2FsbFN0YWNrLCAwKTsKIH0KIAotdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6YWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBj
b2x1bW5OdW1iZXIsIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCBKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCit2b2lkIFBh
Z2VDb25zb2xlQ2xpZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxTY3Jp
cHRDYWxsU3RhY2s+IGNhbGxTdGFjaywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBs
b25nIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmIChtdXRlQ291bnQgJiYgc291cmNlICE9
IE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChj
YWxsU3RhY2spCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRv
Q29uc29sZShtX3BhZ2UsIHNvdXJjZSwgTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIG1lc3NhZ2Us
IFdURjo6bW92ZShjYWxsU3RhY2spLCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShtX3BhZ2UsIHNvdXJjZSwg
TWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIG1lc3NhZ2UsIGNhbGxTdGFjaywgcmVxdWVzdElkZW50
aWZpZXIpOwogICAgIGVsc2UKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRN
ZXNzYWdlVG9Db25zb2xlKG1fcGFnZSwgc291cmNlLCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwg
bWVzc2FnZSwgdXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRl
bnRpZmllcik7CiAKQEAgLTEzNiwxMSArMTM2LDEzIEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6
OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29u
CiB9CiAKIAotdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwo
TWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKK3ZvaWQg
UGFnZUNvbnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5
cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IHBycEFyZ3VtZW50cykKIHsKKyAgICBSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMgPSBwcnBBcmd1bWVudHM7CisKICAgICBTdHJpbmcg
bWVzc2FnZTsKICAgICBib29sIGdvdE1lc3NhZ2UgPSBhcmd1bWVudHMtPmdldEZpcnN0QXJndW1l
bnRBc1N0cmluZyhtZXNzYWdlKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1l
c3NhZ2VUb0NvbnNvbGUobV9wYWdlLCBNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBs
ZXZlbCwgbWVzc2FnZSwgZXhlYywgV1RGOjptb3ZlKGFyZ3VtZW50cykpOworICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShtX3BhZ2UsIE1lc3NhZ2VTb3Vy
Y2U6OkNvbnNvbGVBUEksIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBleGVjLCBhcmd1bWVudHMpOwog
CiAgICAgaWYgKG1fcGFnZS51c2VzRXBoZW1lcmFsU2Vzc2lvbigpKQogICAgICAgICByZXR1cm47
CkBAIC0xNTMsMTIgKzE1NSwxMiBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0
aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbAogICAgIH0KIAog
ICAgIGlmIChtX3BhZ2Uuc2V0dGluZ3MoKS5sb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xl
RW5hYmxlZCgpIHx8IFBhZ2VDb25zb2xlQ2xpZW50OjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkK
LSAgICAgICAgQ29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMo
TWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIGV4ZWMsIFdURjo6bW92ZShh
cmd1bWVudHMpKTsKKyAgICAgICAgQ29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdp
dGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIGV4ZWMs
IGFyZ3VtZW50cy5yZWxlYXNlKCkpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpjb3Vu
dChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVu
dHMpCit2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpjb3VudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
UGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKLSAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChtX3BhZ2UsIGV4ZWMsIFdURjo6bW92ZShhcmd1
bWVudHMpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChtX3Bh
Z2UsIGV4ZWMsIGFyZ3VtZW50cyk7CiB9CiAKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnByb2Zp
bGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC0xNjksNyAr
MTcxLDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6cHJvZmlsZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnByb2Zp
bGVFbmQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAg
aWYgKFJlZlB0cjxKU0M6OlByb2ZpbGU+IHByb2ZpbGUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnN0b3BQcm9maWxpbmcobV9wYWdlLCBleGVjLCB0aXRsZSkpCi0gICAgICAgIG1fcHJvZmls
ZXMuYXBwZW5kKFdURjo6bW92ZShwcm9maWxlKSk7CisgICAgICAgIG1fcHJvZmlsZXMuYXBwZW5k
KHByb2ZpbGUucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6dGltZShK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC0xODAsMTIgKzE4MiwxMiBA
QCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojp0aW1lKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJiB0aXRsZSkKIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnRpbWVFbmQoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUoZXhlYywgMSkp
OwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmcobV9wYWdl
Lm1haW5GcmFtZSgpLCB0aXRsZSwgV1RGOjptb3ZlKGNhbGxTdGFjaykpOworICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmcobV9wYWdlLm1haW5GcmFtZSgpLCB0
aXRsZSwgY2FsbFN0YWNrLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6
OnRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0ZSosIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+JiYgYXJn
dW1lbnRzKQordm9pZCBQYWdlQ29uc29sZUNsaWVudDo6dGltZVN0YW1wKEpTQzo6RXhlY1N0YXRl
KiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKLSAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXAobV9wYWdlLm1haW5GcmFtZSgpLCBX
VEY6Om1vdmUoYXJndW1lbnRzKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25z
b2xlVGltZVN0YW1wKG1fcGFnZS5tYWluRnJhbWUoKSwgYXJndW1lbnRzKTsKIH0KIAogdm9pZCBQ
YWdlQ29uc29sZUNsaWVudDo6Y2xlYXJQcm9maWxlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b25zb2xlQ2xpZW50LmgKaW5kZXggYjJkNDdlYTIxYmYyZmM4MGQwNzI4NWNmMWFlYjMwYWRjZTIy
MTQwMC4uYjZmNjE5OTJkYTc3OTBlY2FlMTU0YmMyZDkyYWM2MDNjMDYxNDc5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuaApAQCAtNTYsMjEgKzU2LDIxIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBtdXRlKCk7CiAgICAgc3RhdGljIHZvaWQgdW5tdXRlKCk7CiAK
LSAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxT
dGFjaz4mJiA9IG51bGxwdHIsIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKLSAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdENhbGxTdGFjaz4mJik7CisgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiA9IG51bGxwdHIsIEpTQzo6RXhlY1N0
YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAg
ICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KTsKICAg
ICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwLCBEb2N1bWVu
dCogPSBudWxscHRyKTsKIAogICAgIGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVzKCkgY29u
c3QgeyByZXR1cm4gbV9wcm9maWxlczsgfQogICAgIHZvaWQgY2xlYXJQcm9maWxlcygpOwogCiBw
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3Nh
Z2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwgUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoSlND
OjpFeGVjU3RhdGUqLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRBcmd1bWVudHM+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY291bnQoSlNDOjpF
eGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmIHRpdGxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvZmlsZUVuZChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCB0aW1lKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIHRpbWVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRp
dGxlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEpTQzo6RXhlY1N0YXRl
KiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlNjcmlwdEFyZ3VtZW50cz4pIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFBhZ2UmIG1f
cGFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcAppbmRleCAw
NDU3ZjhlMTQ1OTllODRkOGFhYmE1YzEwNTZkN2UzMWJmZDk3NzM0Li4xMzlmMDVjNGEyNDIzMjc1
NjNmMmRlZjY1OWIxZDk1YzVlOTdmYTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBs
YXkvUmVwbGF5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxh
eUNvbnRyb2xsZXIuY3BwCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBSZXBsYXlDb250cm9sbGVy
Ojpzd2l0Y2hTZXNzaW9uKFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKICAgICBt
X2N1cnJlbnRQb3NpdGlvbiA9IFJlcGxheVBvc2l0aW9uKDAsIDApOwogCiAgICAgTE9HKFdlYlJl
cGxheSwgIiUtMjBzU3dpdGNoaW5nIHNlc3Npb25zIGZyb20gJXAgdG8gJXAuXG4iLCAiUmVwbGF5
Q29udHJvbGxlciIsIG1fbG9hZGVkU2Vzc2lvbi5nZXQoKSwgc2Vzc2lvbi5nZXQoKSk7Ci0gICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkKG1fcGFnZSwgbV9sb2FkZWRT
ZXNzaW9uLmNvcHlSZWYoKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9u
TG9hZGVkKG1fcGFnZSwgbV9sb2FkZWRTZXNzaW9uKTsKIH0KIAogdm9pZCBSZXBsYXlDb250cm9s
bGVyOjpjcmVhdGVTZWdtZW50KCkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFJlcGxheUNvbnRy
b2xsZXI6OmNyZWF0ZVNlZ21lbnQoKQogICAgIG1fbG9hZGVkU2VnbWVudCA9IFJlcGxheVNlc3Np
b25TZWdtZW50OjpjcmVhdGUoKTsKIAogICAgIExPRyhXZWJSZXBsYXksICIlLTIwcyBDcmVhdGVk
IHNlZ21lbnQ6ICVwLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCBtX2xvYWRlZFNlZ21lbnQuZ2V0
KCkpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENyZWF0ZWQobV9wYWdl
LCBtX2xvYWRlZFNlZ21lbnQuY29weVJlZigpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnNlZ21lbnRDcmVhdGVkKG1fcGFnZSwgbV9sb2FkZWRTZWdtZW50KTsKIAogICAgIG1fYWN0
aXZlQ3Vyc29yID0gQ2FwdHVyaW5nSW5wdXRDdXJzb3I6OmNyZWF0ZShtX2xvYWRlZFNlZ21lbnQp
OwogICAgIG1fYWN0aXZlQ3Vyc29yLT5hcHBlbmRJbnB1dDxCZWdpblNlZ21lbnRTZW50aW5lbD4o
KTsKQEAgLTI0NywxMCArMjQ3LDEwIEBAIHZvaWQgUmVwbGF5Q29udHJvbGxlcjo6Y29tcGxldGVT
ZWdtZW50KCkKICAgICB1bmxvYWRTZWdtZW50KHNob3VsZFN1cHByZXNzTm90aWZpY2F0aW9ucyk7
CiAKICAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMgQ29tcGxldGVkIHNlZ21lbnQ6ICVwLlxuIiwg
IlJlcGxheUNvbnRyb2xsZXIiLCBzZWdtZW50LmdldCgpKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWQobV9wYWdlLCBzZWdtZW50LmNvcHlSZWYoKSk7Cisg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkKG1fcGFnZSwgc2Vn
bWVudCk7CiAKICAgICBtX2xvYWRlZFNlc3Npb24tPmFwcGVuZFNlZ21lbnQoc2VnbWVudCk7Ci0g
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTW9kaWZpZWQobV9wYWdlLCBtX2xv
YWRlZFNlc3Npb24uY29weVJlZigpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNl
c3Npb25Nb2RpZmllZChtX3BhZ2UsIG1fbG9hZGVkU2Vzc2lvbik7CiB9CiAKIHZvaWQgUmVwbGF5
Q29udHJvbGxlcjo6bG9hZFNlZ21lbnRBdEluZGV4KHNpemVfdCBzZWdtZW50SW5kZXgpCkBAIC0y
NzIsNyArMjcyLDcgQEAgdm9pZCBSZXBsYXlDb250cm9sbGVyOjpsb2FkU2VnbWVudEF0SW5kZXgo
c2l6ZV90IHNlZ21lbnRJbmRleCkKICAgICBtX2FjdGl2ZUN1cnNvciA9IFJlcGxheWluZ0lucHV0
Q3Vyc29yOjpjcmVhdGUobV9sb2FkZWRTZWdtZW50LCBtX3BhZ2UsIHRoaXMpOwogCiAgICAgTE9H
KFdlYlJlcGxheSwgIiUtMjBzTG9hZGluZyBzZWdtZW50OiAlcC5cbiIsICJSZXBsYXlDb250cm9s
bGVyIiwgc2VnbWVudC5nZXQoKSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdt
ZW50TG9hZGVkKG1fcGFnZSwgc2VnbWVudC5jb3B5UmVmKCkpOworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZChtX3BhZ2UsIHNlZ21lbnQpOwogfQogCiB2b2lkIFJl
cGxheUNvbnRyb2xsZXI6OnVubG9hZFNlZ21lbnQoYm9vbCBzdXBwcmVzc05vdGlmaWNhdGlvbnMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1l
dGhvZHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRo
b2RzLmNwcAppbmRleCBiNGQxYzNkNjA3ZTQzMDY5Y2U1ZGYwNmUwZDc1ZTRhNmJiZWNmMDc5Li4w
ZWQzZTIzMjNjNTZlYzUzYTk4NTI3ZjhiMjRiZjkwOThhM2U4NTk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAKQEAgLTQ2
LDcgKzQ2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEluaXRpYWxOYXZpZ2F0aW9uPiBJbml0aWFsTmF2
aWdhdGlvbjo6Y3JlYXRlRnJvbVBhZ2UoY29uc3QgUGFnZSYKICAgICBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG9yaWdpbkNvcHkgPSBtYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS0+aXNvbGF0ZWRDb3B5KCk7CiAgICAgVVJMIHVybCA9IG1haW5GcmFtZS5kb2N1bWVudCgpLT51
cmwoKTsKICAgICBTdHJpbmcgcmVmZXJyZXIgPSBtYWluRnJhbWUubG9hZGVyKCkucmVmZXJyZXIo
KTsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbml0aWFsTmF2aWdhdGlvbj4oV1RGOjpt
b3ZlKG9yaWdpbkNvcHkpLCB1cmwsIHJlZmVycmVyKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxJbml0aWFsTmF2aWdhdGlvbj4ob3JpZ2luQ29weSwgdXJsLCByZWZlcnJlcik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9T
aGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKaW5kZXggNTNjYjcxYzkzZTIxOGZlOGRhNjA4YmJi
MzRhOTI5M2ZmNzQyNjM1NC4uNjc0NjAzOTdlYmQxZTA4NTY2MTVhNjEyNmRiNDc1MmRkYTFkMWE0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxT
Y29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJHbG9iYWxT
Y29wZS5jcHAKQEAgLTc5LDEwICs3OSwxMCBAQCBTaGFyZWRXb3JrZXJUaHJlYWQmIFNoYXJlZFdv
cmtlckdsb2JhbFNjb3BlOjp0aHJlYWQoKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTaGFyZWRX
b3JrZXJUaHJlYWQmPihCYXNlOjp0aHJlYWQoKSk7CiB9CiAKLXZvaWQgU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGU6OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVt
YmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrKQordm9p
ZCBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1i
ZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3Rh
Y2s+IGNhbGxTdGFjaykKIHsKLSAgICBXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9D
b25zb2xlKGVycm9yTWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIs
IGNhbGxTdGFjay5jb3B5UmVmKCkpOwotICAgIGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoTWVz
c2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGVycm9yTWVzc2FnZSwgc291cmNl
VVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNhbGxTdGFjay5jb3B5UmVmKCkpOworICAg
IFdvcmtlckdsb2JhbFNjb3BlOjpsb2dFeGNlcHRpb25Ub0NvbnNvbGUoZXJyb3JNZXNzYWdlLCBz
b3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY2FsbFN0YWNrKTsKKyAgICBhZGRN
ZXNzYWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVy
cm9yLCBlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBj
YWxsU3RhY2spOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggMTgxYTI5NGIwZDM2
NjMyZjQ4YWRiNzI1YmFhNDY5M2ZmYTU2ZTdhMy4uYzMzNWIyZjJhYThlYTdlZjYzMzg4YTY0YjZk
YzZkYTM0N2FlY2QyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRX
b3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29y
a2VyR2xvYmFsU2NvcGUuaApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBTaGFyZWRXb3Jr
ZXJUaHJlYWQmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlvblRvQ29uc29sZShj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBs
aW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxs
U3RhY2s+JiYpIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpTY3JpcHRDYWxsU3RhY2s+KSBvdmVycmlkZTsKIAogICAgICAgICBTdHJpbmcgbV9uYW1lOwog
ICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNj
b3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCmlu
ZGV4IGEwYjQ3NDc4MTU2YjU2OWU1MmE1YmU4NmMzNDBjOTNkMTY2MWE0N2QuLjQ1MmNlYjU1ODBj
NDhlOWU2ZWRjZjdiNjkzZjQ3NjY3N2MwZTQ0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCkBAIC0yMTQsNyArMjE0LDcgQEAgRXZlbnRUYXJnZXQq
IFdvcmtlckdsb2JhbFNjb3BlOjplcnJvckV2ZW50VGFyZ2V0KCkKICAgICByZXR1cm4gdGhpczsK
IH0KIAotdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+JiYpCit2b2lk
IFdvcmtlckdsb2JhbFNjb3BlOjpsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50
IGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+KQogewogICAgIHRocmVh
ZCgpLndvcmtlclJlcG9ydGluZ1Byb3h5KCkucG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVy
cm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwpOwogfQpAQCAt
MjMwLDcgKzIzMCw3IEBAIHZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2CiAgICAgYWRkTWVzc2FnZVRv
V29ya2VyQ29uc29sZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBTdHJpbmcoKSwgMCwgMCwgMCwg
MCwgcmVxdWVzdElkZW50aWZpZXIpOwogfQogCi12b2lkIFdvcmtlckdsb2JhbFNjb3BlOjphZGRN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxs
U3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRp
ZmllcikKK3ZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBz
b3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgaWYgKCFp
c0NvbnRleHRUaHJlYWQoKSkgewogICAgICAgICBwb3N0VGFzayhBZGRDb25zb2xlTWVzc2FnZVRh
c2soc291cmNlLCBsZXZlbCwgU3RyaW5nQ2FwdHVyZShtZXNzYWdlKSkpOwpAQCAtMjM4LDE0ICsy
MzgsMTQgQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNl
IHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb24KICAgICB9CiAKICAgICB0aHJlYWQoKS53
b3JrZXJSZXBvcnRpbmdQcm94eSgpLnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KHNv
dXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJM
KTsKLSAgICBhZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2Us
IHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXVEY6Om1vdmUoY2FsbFN0YWNr
KSwgc3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBhZGRNZXNzYWdlVG9Xb3JrZXJDb25z
b2xlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyLCBjYWxsU3RhY2ssIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcik7CiB9CiAKLXZvaWQg
V29ya2VyR2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoTWVzc2FnZVNvdXJj
ZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1u
TnVtYmVyLCBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywgSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBXb3JrZXJH
bG9iYWxTY29wZTo6YWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJj
ZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIs
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXND
b250ZXh0VGhyZWFkKCkpOwogICAgIGlmIChjYWxsU3RhY2spCi0gICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZSh0aGlzLCBzb3VyY2UsIE1lc3NhZ2VU
eXBlOjpMb2csIGxldmVsLCBtZXNzYWdlLCBXVEY6Om1vdmUoY2FsbFN0YWNrKSwgcmVxdWVzdElk
ZW50aWZpZXIpOworICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VU
b0NvbnNvbGUodGhpcywgc291cmNlLCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwgbWVzc2FnZSwg
Y2FsbFN0YWNrLCByZXF1ZXN0SWRlbnRpZmllcik7CiAgICAgZWxzZQogICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUodGhpcywgc291cmNlLCBNZXNz
YWdlVHlwZTo6TG9nLCBsZXZlbCwgbWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcik7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggNDg2YWFlZGM4OGU3NjUwNmQ3YWMxY2I0
ZjhiMTM1OWFlZWE2MWEwYS4uNmY3NDZlYjZiYjExMGU3YzE2MWM1MTM4YTBiMTczMzQwNWZlYjJk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtMTQy
LDggKzE0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgV29ya2VyR2xvYmFsU2Nv
cGUoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRocmVhZCYsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHRvcE9yaWdpbik7CiAgICAgICAgIHZvaWQgYXBwbHlD
b250ZW50U2VjdXJpdHlQb2xpY3lGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgY29udGVudFNlY3Vy
aXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUpOwogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVt
bk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmKSBvdmVycmlkZTsK
LSAgICAgICAgdm9pZCBhZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1l
c3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVk
IGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGxvZ0V4
Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYWRk
TWVzc2FnZVRvV29ya2VyQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlw
dENhbGxTdGFjaz4sIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElk
ZW50aWZpZXIgPSAwKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQpAQCAtMTUyLDcgKzE1
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50
VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyByZWYoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYoKTsgfQogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGlu
ZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRD
YWxsU3RhY2s+JiYsIEpTQzo6RXhlY1N0YXRlKiA9IDAsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElk
ZW50aWZpZXIgPSAwKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+LCBKU0M6OkV4ZWNT
dGF0ZSogPSAwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkgb3ZlcnJpZGU7
CiAKICAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldCogZXJyb3JFdmVudFRhcmdldCgpIG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEV4
cG9ydEdlbmVyYXRvci9XZWJLaXRFeHBvcnRzLmRlZi5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0
LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluCmluZGV4
IDQyZjU4ZWMwMDBiOTY3ZDA5ZDM1ODA2OGExMzRlZWRhYzYzOTgxYjcuLjBmZmY3OTM4NGQwZjI3
NDU3ZWQ1ZWFkNTA2Yjk3N2I2MTQxYTk4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dl
YktpdEV4cG9ydHMuZGVmLmluCkBAIC0yMDQsNyArMjA0LDcgQEAgRVhQT1JUUwogICAgICAgICBz
eW1ib2xXaXRoUG9pbnRlcig/aXRlbUBTdGF0aWNOb2RlTGlzdEBXZWJDb3JlQEBVQkVQQVZOb2Rl
QDJASUBaLCA/aXRlbUBTdGF0aWNOb2RlTGlzdEBXZWJDb3JlQEBVRUJBUEVBVk5vZGVAMkBJQFop
CiAgICAgICAgID9zZWxlY3RUYWdASFRNTE5hbWVzQFdlYkNvcmVAQDNWSFRNTFF1YWxpZmllZE5h
bWVAMkBCCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIo
P2J1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlQEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29y
ZUBAUUJFP0FWPyRSZWZQdHJAVkluc3BlY3Rvck9iamVjdEBJbnNwZWN0b3JAQEBXVEZAQFhaLCA/
YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGVASW5zcGVjdG9yQ29udHJvbGxlckBXZWJDb3Jl
QEBRRUJBP0FWPyRSZWZQdHJAVkluc3BlY3Rvck9iamVjdEBJbnNwZWN0b3JAQEBXVEZAQFhaKQor
ICAgICAgICBzeW1ib2xXaXRoUG9pbnRlcig/YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGVA
SW5zcGVjdG9yQ29udHJvbGxlckBXZWJDb3JlQEBRQkU/QVY/JFBhc3NSZWZQdHJAVkluc3BlY3Rv
ck9iamVjdEBJbnNwZWN0b3JAQEBXVEZAQFhaLCA/YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5v
ZGVASW5zcGVjdG9yQ29udHJvbGxlckBXZWJDb3JlQEBRRUJBP0FWPyRQYXNzUmVmUHRyQFZJbnNw
ZWN0b3JPYmplY3RASW5zcGVjdG9yQEBAV1RGQEBYWikKICAgICAgICAgc3ltYm9sV2l0aFBvaW50
ZXIoP2dldEhpZ2hsaWdodEBJbnNwZWN0b3JDb250cm9sbGVyQFdlYkNvcmVAQFFCRVhQQVVIaWdo
bGlnaHRAMkBXNENvb3JkaW5hdGVTeXN0ZW1ASW5zcGVjdG9yT3ZlcmxheUAyQEBaLCA/Z2V0SGln
aGxpZ2h0QEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29yZUBAUUVCQVhQRUFVSGlnaGxpZ2h0QDJA
VzRDb29yZGluYXRlU3lzdGVtQEluc3BlY3Rvck92ZXJsYXlAMkBAWikKICAgICAgICAgc3ltYm9s
V2l0aFBvaW50ZXIoP2luc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlQEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkBXZWJDb3JlQEBTQVBBVkluc3RydW1lbnRpbmdBZ2VudHNAMkBQQVZQYWdlQDJAQFos
ID9pbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZUBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25AV2Vi
Q29yZUBAU0FQRUFWSW5zdHJ1bWVudGluZ0FnZW50c0AyQFBFQVZQYWdlQDJAQFopCiAgICAgICAg
ID9zX2Zyb250ZW5kQ291bnRlckBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25AV2ViQ29yZUBAMEhB
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>