<?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>160991</bug_id>
          
          <creation_ts>2016-08-18 20:42:56 -0700</creation_ts>
          <short_desc>Rename LifecycleCallback to CustomElementReaction</short_desc>
          <delta_ts>2016-08-30 21:11:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>WebKit 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>154907</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1221313</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-18 20:42:56 -0700</bug_when>
    <thetext>Rename LifecycleCallbackQueue and CustomElementLifecycleProcessingStack
to CustomElementReactionQueue and CustomElementReactionStack per the latest spec:
https://html.spec.whatwg.org/#custom-element-reactions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221315</commentid>
    <comment_count>1</comment_count>
      <attachid>286434</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-18 20:50:24 -0700</bug_when>
    <thetext>Created attachment 286434
Renamed classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221318</commentid>
    <comment_count>2</comment_count>
      <attachid>286436</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-18 21:01:22 -0700</bug_when>
    <thetext>Created attachment 286436
Fixed CMake builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221319</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-18 21:02:20 -0700</bug_when>
    <thetext>It’s kind of annoying that we have CustomElement*s*Registry and then CustomElementReactionQueue but I guess that matches the spec.  I hate plural/singular difference in English so much :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221374</commentid>
    <comment_count>4</comment_count>
      <attachid>286436</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-19 09:21:44 -0700</bug_when>
    <thetext>Comment on attachment 286436
Fixed CMake builds

View in context: https://bugs.webkit.org/attachment.cgi?id=286436&amp;action=review

r=me

&gt; Source/WebCore/bindings/js/JSCustomElementsRegistryCustom.cpp:42
&gt; +static JSObject* getCallback(ExecState&amp; state, JSObject&amp; prototype, const Identifier&amp; id)

maybe getCustomElementCallback() ? I don&apos;t feel strongly, land either way.

&gt; Source/WebCore/dom/CustomElementReactionQueue.cpp:43
&gt; +class CustomElementReactionQueueItem {

In a follow up, it could be nice to move this class under CustomElementReactionQueue and rename it to &quot;Item&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221467</commentid>
    <comment_count>5</comment_count>
      <attachid>286436</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-19 13:59:29 -0700</bug_when>
    <thetext>Comment on attachment 286436
Fixed CMake builds

View in context: https://bugs.webkit.org/attachment.cgi?id=286436&amp;action=review

&gt;&gt; Source/WebCore/bindings/js/JSCustomElementsRegistryCustom.cpp:42
&gt;&gt; +static JSObject* getCallback(ExecState&amp; state, JSObject&amp; prototype, const Identifier&amp; id)
&gt; 
&gt; maybe getCustomElementCallback() ? I don&apos;t feel strongly, land either way.

Sure, I was initially using that name and I thought it was too long. Fixed.

&gt;&gt; Source/WebCore/dom/CustomElementReactionQueue.cpp:43
&gt;&gt; +class CustomElementReactionQueueItem {
&gt; 
&gt; In a follow up, it could be nice to move this class under CustomElementReactionQueue and rename it to &quot;Item&quot;.

I don’t want to do that because then I have to pull in a whole bunch of headers in CustomElementReactionQueue.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221470</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-19 14:04:10 -0700</bug_when>
    <thetext>Committed r204652: &lt;http://trac.webkit.org/changeset/204652&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221493</commentid>
    <comment_count>7</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-08-19 15:06:04 -0700</bug_when>
    <thetext>Windows build fix in http://trac.webkit.org/projects/webkit/changeset/204655</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286434</attachid>
            <date>2016-08-18 20:50:24 -0700</date>
            <delta_ts>2016-08-18 21:01:18 -0700</delta_ts>
            <desc>Renamed classes</desc>
            <filename>bug-160991-20160818204833.patch</filename>
            <type>text/plain</type>
            <size>49589</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDYyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE2LTA4LTE4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBMaWZlY3ljbGVDYWxs
YmFjayB0byBDdXN0b21FbGVtZW50UmVhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDk5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSBhbmQg
Q3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjaworICAgICAgICB0byBDdXN0b21F
bGVtZW50UmVhY3Rpb25RdWV1ZSBhbmQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgcGVyIHRo
ZSBsYXRlc3Qgc3BlYzoKKyAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jY3Vz
dG9tLWVsZW1lbnQtcmVhY3Rpb25zCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIHRoaXMg
aXMganVzdCBhIHJlbmFtZSBvZiBjbGFzc2VzIHdoaWNoIGFyZSBub3QgZXhwb3NlZCB0byB0aGUg
V2ViLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21F
bGVtZW50c1JlZ2lzdHJ5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENhbGxiYWNr
KTogUmVuYW1lZCBmcm9tIGdldExpZmVjeWNsZUNhbGxiYWNrLgorICAgICAgICAoV2ViQ29yZTo6
SlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5OjpkZWZpbmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
TGlmZWN5Y2xlQ2FsbGJhY2spOiBEZWxldGVkLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUpOgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06
CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKworICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBSZWJhc2VsaW5lZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisKKyAgICAgICAgKiBkb20vQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWUuY3BwOiBNb3ZlZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2RvbS9M
aWZlY3ljbGVDYWxsYmFja1F1ZXVlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlSXRlbTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZTo6fkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3JhZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVDb25uZWN0ZWRD
YWxsYmFja0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlOjplbnF1ZXVlRGlzY29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUF0dHJpYnV0ZUNoYW5n
ZWRDYWxsYmFja0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlOjppbnZva2VBbGwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJl
YWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjazo6cHJvY2Vzc1F1ZXVlKToKKworICAgICAgICAqIGRvbS9D
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oOiBNb3ZlZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9MaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmguCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50UmVhY3Rpb25TdGFjazo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6On5DdXN0b21FbGVtZW50UmVhY3Rp
b25TdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6
aGFzQ3VycmVudFByb2Nlc3NpbmdTdGFjayk6CisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRmFsbGJhY2tIVE1MRWxlbWVudCk6CisKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50byk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisKIDIwMTYtMDgtMTggIERh
bmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIExkIHdhcm5zIG9mIG5v
bi1leGlzdGVudCBQcml2YXRlRnJhbWV3b3JrcyBkaXJlY3Rvcnkgd2hlbiBidWlsZGluZyBXZWJL
aXQgd2l0aCB0aGUgcHVibGljIGlPUyA5LjMgU0RLCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjA0NjI3KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTE0MzksNiArMTQzOSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBk
b20vQ29udGFpbmVyTm9kZS5jcHAKICAgICBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3Bw
CiAgICAgZG9tL0NvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmNwcAorICAgIGRvbS9DdXN0b21F
bGVtZW50c1JlYWN0aW9uUXVldWUuY3BwCiAgICAgZG9tL0N1c3RvbUVsZW1lbnRzUmVnaXN0cnku
Y3BwCiAgICAgZG9tL0N1c3RvbUV2ZW50LmNwcAogICAgIGRvbS9ET01Db3JlRXhjZXB0aW9uLmNw
cApAQCAtMTQ4NSw3ICsxNDg2LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9JZFRh
cmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCiAgICAgZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5j
cHAKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAKLSAgICBkb20vTGlmZWN5Y2xlQ2FsbGJhY2tR
dWV1ZS5jcHAKICAgICBkb20vTGl2ZU5vZGVMaXN0LmNwcAogICAgIGRvbS9NZXNzYWdlQ2hhbm5l
bC5jcHAKICAgICBkb20vTWVzc2FnZUV2ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0NjI3KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTMyLDcgKzM5MzIsNyBAQAogCQk5QjUzMkVBMzFCQTkyODU3MDAzOEE4
MjcgLyogU2xvdEFzc2lnbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOUI1MzJFQTExQkE5Mjg1NzAwMzhBODI3IC8qIFNsb3RBc3NpZ25tZW50
LmNwcCAqLzsgfTsKIAkJOUI1MzJFQTQxQkE5Mjg1NzAwMzhBODI3IC8qIFNsb3RBc3NpZ25tZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjUzMkVB
MjFCQTkyODU3MDAzOEE4MjcgLyogU2xvdEFzc2lnbm1lbnQuaCAqLzsgfTsKIAkJOUI1NUVFRTkx
QjNFODg5ODAwNTM0MkJDIC8qIEVkaXRvckNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI1NUVFRTgxQjNFODg5ODAwNTM0MkJDIC8qIEVkaXRv
ckNvY29hLm1tICovOyB9OwotCQk5QjU2QzlBQTFDODkzMjlBMDBDNDU2REYgLyogTGlmZWN5Y2xl
Q2FsbGJhY2tRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5QjU2QzlBOTFDODkzMjlBMDBDNDU2REYgLyogTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1
ZS5jcHAgKi87IH07CisJCTlCNTZDOUFBMUM4OTMyOUEwMEM0NTZERiAvKiBDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5QjU2QzlBOTFDODkzMjlBMDBDNDU2REYgLyogQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWUuY3BwICovOyB9OwogCQk5QjY5RDNCNDFCOThGRkU5MDBFMzUxMkIgLyogSFRNTFNsb3RF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCNjlEM0IyMUI5OEZGRTkwMEUzNTEyQiAvKiBIVE1MU2xvdEVsZW1lbnQuY3BwICovOyB9Owog
CQk5QjY5RDNCNTFCOThGRkU5MDBFMzUxMkIgLyogSFRNTFNsb3RFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjY5RDNCMzFCOThGRkU5MDBF
MzUxMkIgLyogSFRNTFNsb3RFbGVtZW50LmggKi87IH07CiAJCTlCNjlEM0I4MUI5OTEwMDcwMEUz
NTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5QjY5RDNCNjFCOTkxMDA3MDBFMzUxMkIgLyogSlNIVE1MU2xv
dEVsZW1lbnQuY3BwICovOyB9OwpAQCAtMTE1MjIsOCArMTE1MjIsOCBAQAogCQk5QjUzMkVBMTFC
QTkyODU3MDAzOEE4MjcgLyogU2xvdEFzc2lnbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2xvdEFzc2lnbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5QjUzMkVBMjFCQTkyODU3MDAzOEE4MjcgLyogU2xvdEFzc2lnbm1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdEFzc2lnbm1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI1NUVFRTgxQjNFODg5ODAwNTM0MkJDIC8qIEVkaXRv
ckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRWRpdG9y
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlCNTZDOUE4MUM4OTMxMjgw
MEM0NTZERiAvKiBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpZmVj
eWNsZUNhbGxiYWNrUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUI1NkM5
QTkxQzg5MzI5QTAwQzQ1NkRGIC8qIExpZmVjeWNsZUNhbGxiYWNrUXVldWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCNTZDOUE4MUM4OTMxMjgwMEM0NTZERiAv
KiBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjU2QzlB
OTFDODkzMjlBMDBDNDU2REYgLyogQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjY5RDNCMTFCOThGRjBBMDBF
MzUxMkIgLyogSFRNTFNsb3RFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1M
U2xvdEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjY5RDNCMjFC
OThGRkU5MDBFMzUxMkIgLyogSFRNTFNsb3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxTbG90RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlCNjlEM0IzMUI5OEZGRTkwMEUzNTEyQiAvKiBIVE1MU2xvdEVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFNsb3RFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDAxMiw2ICsyNDAxMiw4IEBACiAJCQkJOUJE
NEU5MTgxQzQ2MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRzUmVnaXN0cnkuY3BwICovLAog
CQkJCTlCRDRFOTE5MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVtZW50c1JlZ2lzdHJ5Lmgg
Ki8sCiAJCQkJOUJDNUY5REUxRDVBQUQ1RDAwMkI3NDlEIC8qIEN1c3RvbUVsZW1lbnRzUmVnaXN0
cnkuaWRsICovLAorCQkJCTlCNTZDOUE5MUM4OTMyOUEwMEM0NTZERiAvKiBDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZS5jcHAgKi8sCisJCQkJOUI1NkM5QTgxQzg5MzEyODAwQzQ1NkRGIC8qIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmggKi8sCiAJCQkJNjJDRDMyNTYxMTU3RTU3QzAwNjNC
MEE3IC8qIEN1c3RvbUV2ZW50LmNwcCAqLywKIAkJCQk2MkNEMzI1NzExNTdFNTdDMDA2M0IwQTcg
LyogQ3VzdG9tRXZlbnQuaCAqLywKIAkJCQk2MkNEMzI1ODExNTdFNTdDMDA2M0IwQTcgLyogQ3Vz
dG9tRXZlbnQuaWRsICovLApAQCAtMjQxNTEsOCArMjQxNTMsNiBAQAogCQkJCTg1MDMxQjJEMEE0
NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmNwcCAqLywKIAkJCQk4NTAzMUIyRTBBNDRF
RkM3MDBGOTkyRTAgLyogS2V5Ym9hcmRFdmVudC5oICovLAogCQkJCTE0Q0Y3QzIwMDlGNzExMDYw
MEVCMzY2NSAvKiBLZXlib2FyZEV2ZW50LmlkbCAqLywKLQkJCQk5QjU2QzlBOTFDODkzMjlBMDBD
NDU2REYgLyogTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5jcHAgKi8sCi0JCQkJOUI1NkM5QTgxQzg5
MzEyODAwQzQ1NkRGIC8qIExpZmVjeWNsZUNhbGxiYWNrUXVldWUuaCAqLywKIAkJCQlCQzdGQTYx
RTBEMUYwQ0JEMDBEQjIyQTkgLyogTGl2ZU5vZGVMaXN0LmNwcCAqLywKIAkJCQlCQzdGQTYxRjBE
MUYwQ0JEMDBEQjIyQTkgLyogTGl2ZU5vZGVMaXN0LmggKi8sCiAJCQkJQkM5QTYxNDQxNDY4NTlE
OTAwNjA1N0ZEIC8qIG1ha2VfZG9tX2V4Y2VwdGlvbnMucGwgKi8sCkBAIC0zMDU5Myw3ICszMDU5
Myw3IEBACiAJCQkJRTU1RjQ5N0ExNTFCODg4MDAwQkI2N0RCIC8qIExlbmd0aEZ1bmN0aW9ucy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjg3MTY2RjFDODY5RDgzMDA0RkYwREUgLyogTGVuZ3Ro
UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRjIwQ0UxQkQ0QTI0MTAwMTI4RTVEIC8q
IExlbmd0aFNpemUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUI1NkM5QUExQzg5MzI5QTAwQzQ1
NkRGIC8qIExpZmVjeWNsZUNhbGxiYWNrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUI1
NkM5QUExQzg5MzI5QTAwQzQ1NkRGIC8qIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZGQjY5OENDMTgzM0VFMEQwMDE1OEEzMSAvKiBMaW5lQnJlYWtl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OUI1RUFBMTExRTgwMDNEMDBGMjM2N0UgLyogTGlu
ZUVuZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRkI2OThDRjE4MzQwMkJCMDAxNThBMzEg
LyogTGluZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudHNSZWdpc3RyeUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDIwNDYyNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tRWxlbWVudHNSZWdpc3RyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKIAotc3RhdGljIEpTT2JqZWN0KiBnZXRMaWZlY3ljbGVDYWxsYmFjayhFeGVjU3RhdGUmIHN0
YXRlLCBKU09iamVjdCYgcHJvdG90eXBlLCBjb25zdCBJZGVudGlmaWVyJiBpZCkKK3N0YXRpYyBK
U09iamVjdCogZ2V0Q2FsbGJhY2soRXhlY1N0YXRlJiBzdGF0ZSwgSlNPYmplY3QmIHByb3RvdHlw
ZSwgY29uc3QgSWRlbnRpZmllciYgaWQpCiB7CiAgICAgSlNWYWx1ZSBjYWxsYmFjayA9IHByb3Rv
dHlwZS5nZXQoJnN0YXRlLCBpZCk7CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQpAQCAt
NDcsNyArNDcsNyBAQCBzdGF0aWMgSlNPYmplY3QqIGdldExpZmVjeWNsZUNhbGxiYWNrKEV4CiAg
ICAgaWYgKGNhbGxiYWNrLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIGlmICghY2FsbGJhY2suaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgQVNDSUlMaXRlcmFsKCJBIGxpZmVjeWNsZSBjYWxsYmFjayBtdXN0IGJlIGEgZnVu
Y3Rpb24iKSk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgQVNDSUlMaXRlcmFsKCJB
IGN1c3RvbSBlbGVtZW50IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBjYWxsYmFjay5nZXRPYmplY3QoKTsK
QEAgLTEwNywyNCArMTA3LDI0IEBAIEpTVmFsdWUgSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5Ojpk
ZWZpbmUKICAgICBRdWFsaWZpZWROYW1lIG5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgSFRNTE5h
bWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7CiAgICAgYXV0byBlbGVtZW50SW50ZXJmYWNlID0gSlND
dXN0b21FbGVtZW50SW50ZXJmYWNlOjpjcmVhdGUobmFtZSwgY29uc3RydWN0b3IsIGdsb2JhbE9i
amVjdCgpKTsKIAotICAgIGF1dG8qIGNvbm5lY3RlZENhbGxiYWNrID0gZ2V0TGlmZWN5Y2xlQ2Fs
bGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJjb25uZWN0ZWRDYWxsYmFjayIpKTsKKyAgICBhdXRvKiBjb25uZWN0ZWRDYWxsYmFjayA9IGdl
dENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSk7CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoY29ubmVjdGVkQ2FsbGJh
Y2spCiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldENvbm5lY3RlZENhbGxiYWNrKGNvbm5l
Y3RlZENhbGxiYWNrKTsKIAotICAgIGF1dG8qIGRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZ2V0TGlm
ZWN5Y2xlQ2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJkaXNjb25uZWN0ZWRDYWxsYmFjayIpKTsKKyAgICBhdXRvKiBkaXNjb25uZWN0
ZWRDYWxsYmFjayA9IGdldENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiZGlzY29ubmVjdGVkQ2FsbGJhY2siKSk7CiAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBp
ZiAoZGlzY29ubmVjdGVkQ2FsbGJhY2spCiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldERp
c2Nvbm5lY3RlZENhbGxiYWNrKGRpc2Nvbm5lY3RlZENhbGxiYWNrKTsKIAogICAgIC8vIEZJWE1F
OiBBZGQgdGhlIHN1cHBvcnQgZm9yIGFkb3B0ZWRDYWxsYmFjay4KLSAgICBnZXRMaWZlY3ljbGVD
YWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImFkb3B0ZWRDYWxsYmFjayIpKTsKKyAgICBnZXRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBl
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImFkb3B0ZWRDYWxsYmFjayIpKTsK
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgYXV0byogYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrID0gZ2V0TGlmZWN5Y2xl
Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKSk7CisgICAgYXV0byogYXR0cmlidXRlQ2hh
bmdlZENhbGxiYWNrID0gZ2V0Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKSk7CiAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBpZiAoYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2aXNpb24g
MjA0NjI3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgSlNNYWluVGhy
ZWFkRXhlY1N0YXRlX2gKICNkZWZpbmUgSlNNYWluVGhyZWFkRXhlY1N0YXRlX2gKIAorI2luY2x1
ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCi0jaW5jbHVkZSAiTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvQ29tcGxldGlvbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvTWljcm90YXNrLmg+CiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEpTQzo6RXhlY1N0YXRlKiBtX3ByZXZpb3VzU3RhdGU7CiAjaWYgRU5BQkxFKENVU1RP
TV9FTEVNRU5UUykKLSAgICBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrIG1f
bGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOworICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNr
IG1fY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAyMDQ2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzM0Miw5ICszMzQyLDkgQEAgRU5ECiAK
ICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNFUmVhY3Rpb25zIn0pIHsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgQ3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjayBj
dXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3Vz
dG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiNlbmRpZlxuIik7Ci0gICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siTGlm
ZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5oIn0gPSAxOworICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgifSA9IDE7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPmlzU3RhdGljKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiAy
MDQ2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTM5MCw3ICszOTAsNyBAQCBlbnVtIFRlc3RDb25maWRlbmNl
IHsgImhpZ2giLCAia2luZGEtbG93CiAgICAgW1B1dEZvcndhcmRzPW5hbWVdIHJlYWRvbmx5IGF0
dHJpYnV0ZSBUZXN0Tm9kZT8gcHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZTsKIAogI2lmIGRl
ZmluZWQoVEVTVElOR19KUykKLSAgICBbQ0VSZWFjdGlvbnNdIHZvaWQgbWV0aG9kV2l0aE5lZWRz
TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKCk7CisgICAgW0NFUmVhY3Rpb25zXSB2b2lkIG1ldGhv
ZFdpdGhOZWVkc0N1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKCk7CiAjZW5kaWYKIAogICAgIHZv
aWQgYXR0YWNoU2hhZG93Um9vdChUZXN0RGljdGlvbmFyeSBpbml0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
CShyZXZpc2lvbiAyMDQ2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2lu
Y2x1ZGUgIkpTVGVzdE9iai5oIgogCiAjaW5jbHVkZSAiQ2FsbGJhY2tGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5n
TGlzdC5oIgogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpA
QCAtNDksNyArNTAsNiBAQAogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIkpTVGVz
dFN1Yk9iai5oIgogI2luY2x1ZGUgIkpTWFBhdGhOU1Jlc29sdmVyLmgiCi0jaW5jbHVkZSAiTGlm
ZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR1BvaW50LmgiCkBAIC03
MjQsNyArNzI0LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
VGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3Rh
dGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE5lZWRzTGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKEpTQzo6RXhlY1N0YXRlKik7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTmVlZHNDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayhKU0M6OkV4ZWNTdGF0
ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdChKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1
dGVzCkBAIC0xMzExLDcgKzEzMTEsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0T2JqUHJvCiAgICAgeyAidGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24iLCBKU0M6
OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhF
eGNlcHRpb24pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidGVzdFByb21pc2VGdW5jdGlv
bldpdGhPcHRpb25hbEludEFyZ3VtZW50IiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudCksIChpbnRw
dHJfdCkgKDApIH0gfSwKICAgICB7ICJ0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIsIEpT
Qzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRG
dW5jdGlvbiksIChpbnRwdHJfdCkgKDEpIH0gfSwKLSAgICB7ICJtZXRob2RXaXRoTmVlZHNMaWZl
Y3ljbGVQcm9jZXNzaW5nU3RhY2siLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE5lZWRzTGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKSwgKGludHB0cl90KSAo
MCkgfSB9LAorICAgIHsgIm1ldGhvZFdpdGhOZWVkc0N1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNr
IiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOZWVkc0N1
c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImF0
dGFjaFNoYWRvd1Jvb3QiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0
YWNoU2hhZG93Um9vdCksIChpbnRwdHJfdCkgKDEpIH0gfSwKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKICAgICB7ICJDT05ESVRJT05BTF9DT05TVCIsIERvbnREZWxldGUgfCBSZWFkT25seSB8IENv
bnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxvbmcgbG9uZykoMCkgfSB9LApAQCAtNjM3
NiwxOCArNjM3NiwxOCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOZWVkc0xpZmVjeWNsZVByb2Nlc3NpbmdTdGFjayhFeGVjU3RhdGUqIHN0YXRlKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOZWVkc0N1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAj
aWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKLSAgICBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJv
Y2Vzc2luZ1N0YWNrIGN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2s7CisgICAg
Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7CiAj
ZW5kaWYKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBh
dXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhOZWVkc0xpZmVjeWNsZVBy
b2Nlc3NpbmdTdGFjayIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5lZWRzQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3Rh
Y2siKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGltcGwubWV0aG9kV2l0aE5lZWRzTGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKCk7CisgICAgaW1w
bC5tZXRob2RXaXRoTmVlZHNDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjaygpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcAkocmV2aXNpb24g
MjA0NjI3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20vTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5j
cHA6MjA0NjI3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJMaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmgiCisKKyNpZiBFTkFCTEUoQ1VTVE9N
X0VMRU1FTlRTKQorCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5oIgorI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIgorI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgPGhlYXAvSGVhcC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBMaWZlY3ljbGVRdWV1ZUl0ZW0geworcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZSB7
CisgICAgICAgIEVsZW1lbnRVcGdyYWRlLAorICAgICAgICBDb25uZWN0ZWQsCisgICAgICAgIERp
c2Nvbm5lY3RlZCwKKyAgICAgICAgQXR0cmlidXRlQ2hhbmdlZCwKKyAgICB9OworCisgICAgTGlm
ZWN5Y2xlUXVldWVJdGVtKFR5cGUgdHlwZSwgRWxlbWVudCYgZWxlbWVudCwgSlNDdXN0b21FbGVt
ZW50SW50ZXJmYWNlJiBlbGVtZW50SW50ZXJmYWNlKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQor
ICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICAgICAsIG1faW50ZXJmYWNlKGVsZW1l
bnRJbnRlcmZhY2UpCisgICAgeyB9CisKKyAgICBMaWZlY3ljbGVRdWV1ZUl0ZW0oRWxlbWVudCYg
ZWxlbWVudCwgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJiBlbGVtZW50SW50ZXJmYWNlLCBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZh
bHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQorICAgICAgICA6IG1fdHlwZShUeXBl
OjpBdHRyaWJ1dGVDaGFuZ2VkKQorICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICAg
ICAsIG1faW50ZXJmYWNlKGVsZW1lbnRJbnRlcmZhY2UpCisgICAgICAgICwgbV9hdHRyaWJ1dGVO
YW1lKGF0dHJpYnV0ZU5hbWUpCisgICAgICAgICwgbV9vbGRWYWx1ZShvbGRWYWx1ZSkKKyAgICAg
ICAgLCBtX25ld1ZhbHVlKG5ld1ZhbHVlKQorICAgIHsgfQorCisgICAgdm9pZCBpbnZva2UoKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpFbGVt
ZW50VXBncmFkZToKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT51cGdyYWRlRWxlbWVudChtX2Vs
ZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6Q29u
bmVjdGVkOgorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPmludm9rZUNvbm5lY3RlZENhbGxiYWNr
KG1fZWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
OjpEaXNjb25uZWN0ZWQ6CisgICAgICAgICAgICBtX2ludGVyZmFjZS0+aW52b2tlRGlzY29ubmVj
dGVkQ2FsbGJhY2sobV9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFR5cGU6OkF0dHJpYnV0ZUNoYW5nZWQ6CisgICAgICAgICAgICBBU1NFUlQobV9hdHRy
aWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5pbnZva2VBdHRyaWJ1dGVDaGFu
Z2VkQ2FsbGJhY2sobV9lbGVtZW50LmdldCgpLCBtX2F0dHJpYnV0ZU5hbWUudmFsdWUoKSwgbV9v
bGRWYWx1ZSwgbV9uZXdWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBSZWY8RWxlbWVudD4gbV9lbGVt
ZW50OworICAgIFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+IG1faW50ZXJmYWNlOworICAg
IE9wdGlvbmFsPFF1YWxpZmllZE5hbWU+IG1fYXR0cmlidXRlTmFtZTsKKyAgICBBdG9taWNTdHJp
bmcgbV9vbGRWYWx1ZTsKKyAgICBBdG9taWNTdHJpbmcgbV9uZXdWYWx1ZTsKK307CisKK0xpZmVj
eWNsZUNhbGxiYWNrUXVldWU6OkxpZmVjeWNsZUNhbGxiYWNrUXVldWUoKQoreyB9CisKK0xpZmVj
eWNsZUNhbGxiYWNrUXVldWU6On5MaWZlY3ljbGVDYWxsYmFja1F1ZXVlKCkKK3sKKyAgICBBU1NF
UlQobV9pdGVtcy5pc0VtcHR5KCkpOworfQorCit2b2lkIExpZmVjeWNsZUNhbGxiYWNrUXVldWU6
OmVucXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50JiBlbGVtZW50LCBKU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UpCit7CisgICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3Vz
dG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkp
CisgICAgICAgIHF1ZXVlLT5tX2l0ZW1zLmFwcGVuZChMaWZlY3ljbGVRdWV1ZUl0ZW0oTGlmZWN5
Y2xlUXVldWVJdGVtOjpUeXBlOjpFbGVtZW50VXBncmFkZSwgZWxlbWVudCwgZWxlbWVudEludGVy
ZmFjZSkpOworfQorCitzdGF0aWMgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiBmaW5kSW50ZXJm
YWNlRm9yQ3VzdG9tRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQoreworICAgIEFTU0VSVChlbGVt
ZW50LmlzQ3VzdG9tRWxlbWVudCgpKTsKKyAgICBhdXRvKiB3aW5kb3cgPSBlbGVtZW50LmRvY3Vt
ZW50KCkuZG9tV2luZG93KCk7CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgYXV0byogcmVnaXN0cnkgPSB3aW5kb3ctPmN1c3RvbUVsZW1lbnRzUmVnaXN0
cnkoKTsKKyAgICBpZiAoIXJlZ2lzdHJ5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiByZWdpc3RyeS0+ZmluZEludGVyZmFjZShlbGVtZW50LnRhZ1FOYW1lKCkpOworfQor
Cit2b2lkIExpZmVjeWNsZUNhbGxiYWNrUXVldWU6OmVucXVldWVDb25uZWN0ZWRDYWxsYmFja0lm
TmVlZGVkKEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgYXV0byogZWxlbWVudEludGVyZmFjZSA9
IGZpbmRJbnRlcmZhY2VGb3JDdXN0b21FbGVtZW50KGVsZW1lbnQpOworICAgIGlmICghZWxlbWVu
dEludGVyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3Vz
dG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkp
CisgICAgICAgIHF1ZXVlLT5tX2l0ZW1zLmFwcGVuZCh7TGlmZWN5Y2xlUXVldWVJdGVtOjpUeXBl
OjpDb25uZWN0ZWQsIGVsZW1lbnQsICplbGVtZW50SW50ZXJmYWNlfSk7Cit9CisKK3ZvaWQgTGlm
ZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6ZW5xdWV1ZURpc2Nvbm5lY3RlZENhbGxiYWNrSWZOZWVkZWQo
RWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBhdXRvKiBlbGVtZW50SW50ZXJmYWNlID0gZmluZElu
dGVyZmFjZUZvckN1c3RvbUVsZW1lbnQoZWxlbWVudCk7CisgICAgaWYgKCFlbGVtZW50SW50ZXJm
YWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0b21FbGVt
ZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkKKyAgICAg
ICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKHtMaWZlY3ljbGVRdWV1ZUl0ZW06OlR5cGU6OkRpc2Nv
bm5lY3RlZCwgZWxlbWVudCwgKmVsZW1lbnRJbnRlcmZhY2V9KTsKK30KKwordm9pZCBMaWZlY3lj
bGVDYWxsYmFja1F1ZXVlOjplbnF1ZXVlQXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrSWZOZWVkZWQo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkK
K3sKKyAgICBhdXRvKiBlbGVtZW50SW50ZXJmYWNlID0gZmluZEludGVyZmFjZUZvckN1c3RvbUVs
ZW1lbnQoZWxlbWVudCk7CisgICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlIHx8ICFlbGVtZW50SW50
ZXJmYWNlLT5vYnNlcnZlc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudExpZmVj
eWNsZVByb2Nlc3NpbmdTdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkpCisgICAgICAgIHF1ZXVl
LT5tX2l0ZW1zLmFwcGVuZCh7ZWxlbWVudCwgKmVsZW1lbnRJbnRlcmZhY2UsIGF0dHJpYnV0ZU5h
bWUsIG9sZFZhbHVlLCBuZXdWYWx1ZX0pOworfQorCit2b2lkIExpZmVjeWNsZUNhbGxiYWNrUXVl
dWU6Omludm9rZUFsbCgpCit7CisgICAgVmVjdG9yPExpZmVjeWNsZVF1ZXVlSXRlbT4gaXRlbXM7
CisgICAgaXRlbXMuc3dhcChtX2l0ZW1zKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykK
KyAgICAgICAgaXRlbS5pbnZva2UoKTsKK30KKworTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSogQ3Vz
dG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkK
K3sKKyAgICAvLyBGSVhNRTogVGhpcyBlYXJseSBleGl0IGluZGljYXRlcyBhIGJ1ZyB0aGF0IHNv
bWUgRE9NIEFQSSBpcyBtaXNzaW5nIENFUmVhY3Rpb25zCisgICAgaWYgKCFzX2N1cnJlbnRQcm9j
ZXNzaW5nU3RhY2spCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byomIHF1ZXVl
ID0gc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrLT5tX3F1ZXVlOworICAgIGlmICghcXVldWUpIC8v
IFdlIHVzZSBhIHJhdyBwb2ludGVyIHRvIGF2b2lkIGdlbmVhcmluZyBjb2RlIHRvIGRlbGV0ZSBp
dCBpbiB+Q3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjay4KKyAgICAgICAgcXVl
dWUgPSBuZXcgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTsKKyAgICByZXR1cm4gcXVldWU7Cit9CisK
K0N1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2sqIEN1c3RvbUVsZW1lbnRMaWZl
Y3ljbGVQcm9jZXNzaW5nU3RhY2s6OnNfY3VycmVudFByb2Nlc3NpbmdTdGFjayA9IG51bGxwdHI7
CisKK3ZvaWQgQ3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjazo6cHJvY2Vzc1F1
ZXVlKCkKK3sKKyAgICBBU1NFUlQobV9xdWV1ZSk7CisgICAgbV9xdWV1ZS0+aW52b2tlQWxsKCk7
CisgICAgZGVsZXRlIG1fcXVldWU7CisgICAgbV9xdWV1ZSA9IG51bGxwdHI7Cit9CisKK30KKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZS5jcHAJKHJldmlzaW9uIDIwNDYyNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0
LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGlmZWN5Y2xlQ2Fs
bGJhY2tRdWV1ZS5oIgorI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCiAK
ICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQogCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTGlmZWN5Y2xlUXVldWVJdGVtIHsKK2NsYXNzIEN1c3Rv
bUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbSB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBUeXBl
IHsKICAgICAgICAgRWxlbWVudFVwZ3JhZGUsCkBAIC00OSwxMyArNDksMTMgQEAgcHVibGljOgog
ICAgICAgICBBdHRyaWJ1dGVDaGFuZ2VkLAogICAgIH07CiAKLSAgICBMaWZlY3ljbGVRdWV1ZUl0
ZW0oVHlwZSB0eXBlLCBFbGVtZW50JiBlbGVtZW50LCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2Um
IGVsZW1lbnRJbnRlcmZhY2UpCisgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtKFR5
cGUgdHlwZSwgRWxlbWVudCYgZWxlbWVudCwgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJiBlbGVt
ZW50SW50ZXJmYWNlKQogICAgICAgICA6IG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fZWxlbWVu
dChlbGVtZW50KQogICAgICAgICAsIG1faW50ZXJmYWNlKGVsZW1lbnRJbnRlcmZhY2UpCiAgICAg
eyB9CiAKLSAgICBMaWZlY3ljbGVRdWV1ZUl0ZW0oRWxlbWVudCYgZWxlbWVudCwgSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlJiBlbGVtZW50SW50ZXJmYWNlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5ld1ZhbHVlKQorICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbShFbGVt
ZW50JiBlbGVtZW50LCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2Us
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
b2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCiAgICAgICAgIDogbV90eXBl
KFR5cGU6OkF0dHJpYnV0ZUNoYW5nZWQpCiAgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCiAg
ICAgICAgICwgbV9pbnRlcmZhY2UoZWxlbWVudEludGVyZmFjZSkKQEAgLTkyLDE4ICs5MiwxOCBA
QCBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX25ld1ZhbHVlOwogfTsKIAotTGlmZWN5Y2xl
Q2FsbGJhY2tRdWV1ZTo6TGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSgpCitDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUoKQogeyB9CiAKLUxpZmVjeWNs
ZUNhbGxiYWNrUXVldWU6On5MaWZlY3ljbGVDYWxsYmFja1F1ZXVlKCkKK0N1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjp+Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUoKQogewogICAgIEFTU0VS
VChtX2l0ZW1zLmlzRW1wdHkoKSk7CiB9CiAKLXZvaWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6
ZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZSYgZWxlbWVudEludGVyZmFjZSkKK3ZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWU6OmVucXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50JiBlbGVtZW50LCBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UpCiB7Ci0gICAgaWYgKGF1dG8qIHF1ZXVlID0g
Q3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVl
KCkpCi0gICAgICAgIHF1ZXVlLT5tX2l0ZW1zLmFwcGVuZChMaWZlY3ljbGVRdWV1ZUl0ZW0oTGlm
ZWN5Y2xlUXVldWVJdGVtOjpUeXBlOjpFbGVtZW50VXBncmFkZSwgZWxlbWVudCwgZWxlbWVudElu
dGVyZmFjZSkpOworICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0
YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkKKyAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5k
KHtDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW06OlR5cGU6OkVsZW1lbnRVcGdyYWRlLCBl
bGVtZW50LCBlbGVtZW50SW50ZXJmYWNlfSk7CiB9CiAKIHN0YXRpYyBKU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UqIGZpbmRJbnRlcmZhY2VGb3JDdXN0b21FbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQp
CkBAIC0xMjAsNTkgKzEyMCw1OSBAQCBzdGF0aWMgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiBm
aW5kSW50CiAgICAgcmV0dXJuIHJlZ2lzdHJ5LT5maW5kSW50ZXJmYWNlKGVsZW1lbnQudGFnUU5h
bWUoKSk7CiB9CiAKLXZvaWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6ZW5xdWV1ZUNvbm5lY3Rl
ZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWU6OmVucXVldWVDb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVkKEVsZW1lbnQmIGVs
ZW1lbnQpCiB7CiAgICAgYXV0byogZWxlbWVudEludGVyZmFjZSA9IGZpbmRJbnRlcmZhY2VGb3JD
dXN0b21FbGVtZW50KGVsZW1lbnQpOwogICAgIGlmICghZWxlbWVudEludGVyZmFjZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudExpZmVjeWNs
ZVByb2Nlc3NpbmdTdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkpCi0gICAgICAgIHF1ZXVlLT5t
X2l0ZW1zLmFwcGVuZCh7TGlmZWN5Y2xlUXVldWVJdGVtOjpUeXBlOjpDb25uZWN0ZWQsIGVsZW1l
bnQsICplbGVtZW50SW50ZXJmYWNlfSk7CisgICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3VzdG9tRWxl
bWVudFJlYWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQorICAgICAgICBxdWV1ZS0+
bV9pdGVtcy5hcHBlbmQoe0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbTo6VHlwZTo6Q29u
bmVjdGVkLCBlbGVtZW50LCAqZWxlbWVudEludGVyZmFjZX0pOwogfQogCi12b2lkIExpZmVjeWNs
ZUNhbGxiYWNrUXVldWU6OmVucXVldWVEaXNjb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVkKEVsZW1l
bnQmIGVsZW1lbnQpCit2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRGlz
Y29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiBlbGVtZW50KQogewogICAgIGF1dG8q
IGVsZW1lbnRJbnRlcmZhY2UgPSBmaW5kSW50ZXJmYWNlRm9yQ3VzdG9tRWxlbWVudChlbGVtZW50
KTsKICAgICBpZiAoIWVsZW1lbnRJbnRlcmZhY2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2s6OmVu
c3VyZUN1cnJlbnRRdWV1ZSgpKQotICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQoe0xpZmVj
eWNsZVF1ZXVlSXRlbTo6VHlwZTo6RGlzY29ubmVjdGVkLCBlbGVtZW50LCAqZWxlbWVudEludGVy
ZmFjZX0pOworICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNr
OjplbnN1cmVDdXJyZW50UXVldWUoKSkKKyAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKHtD
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW06OlR5cGU6OkRpc2Nvbm5lY3RlZCwgZWxlbWVu
dCwgKmVsZW1lbnRJbnRlcmZhY2V9KTsKIH0KIAotdm9pZCBMaWZlY3ljbGVDYWxsYmFja1F1ZXVl
OjplbnF1ZXVlQXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkKK3ZvaWQgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tJZk5lZWRl
ZChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBj
b25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVl
KQogewogICAgIGF1dG8qIGVsZW1lbnRJbnRlcmZhY2UgPSBmaW5kSW50ZXJmYWNlRm9yQ3VzdG9t
RWxlbWVudChlbGVtZW50KTsKICAgICBpZiAoIWVsZW1lbnRJbnRlcmZhY2UgfHwgIWVsZW1lbnRJ
bnRlcmZhY2UtPm9ic2VydmVzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0b21FbGVtZW50TGlm
ZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkKKyAgICBpZiAoYXV0
byogcXVldWUgPSBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVl
KCkpCiAgICAgICAgIHF1ZXVlLT5tX2l0ZW1zLmFwcGVuZCh7ZWxlbWVudCwgKmVsZW1lbnRJbnRl
cmZhY2UsIGF0dHJpYnV0ZU5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZX0pOwogfQogCi12b2lkIExp
ZmVjeWNsZUNhbGxiYWNrUXVldWU6Omludm9rZUFsbCgpCit2b2lkIEN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlOjppbnZva2VBbGwoKQogewotICAgIFZlY3RvcjxMaWZlY3ljbGVRdWV1ZUl0ZW0+
IGl0ZW1zOworICAgIFZlY3RvcjxDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0+IGl0ZW1z
OwogICAgIGl0ZW1zLnN3YXAobV9pdGVtcyk7CiAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMp
CiAgICAgICAgIGl0ZW0uaW52b2tlKCk7CiB9CiAKLUxpZmVjeWNsZUNhbGxiYWNrUXVldWUqIEN1
c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgp
CitDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSogQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6
OmVuc3VyZUN1cnJlbnRRdWV1ZSgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZWFybHkgZXhpdCBp
bmRpY2F0ZXMgYSBidWcgdGhhdCBzb21lIERPTSBBUEkgaXMgbWlzc2luZyBDRVJlYWN0aW9ucwog
ICAgIGlmICghc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIGF1dG8qJiBxdWV1ZSA9IHNfY3VycmVudFByb2Nlc3NpbmdTdGFjay0+bV9xdWV1
ZTsKLSAgICBpZiAoIXF1ZXVlKSAvLyBXZSB1c2UgYSByYXcgcG9pbnRlciB0byBhdm9pZCBnZW5l
YXJpbmcgY29kZSB0byBkZWxldGUgaXQgaW4gfkN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNz
aW5nU3RhY2suCi0gICAgICAgIHF1ZXVlID0gbmV3IExpZmVjeWNsZUNhbGxiYWNrUXVldWU7Cisg
ICAgaWYgKCFxdWV1ZSkgLy8gV2UgdXNlIGEgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZWFyaW5n
IGNvZGUgdG8gZGVsZXRlIGl0IGluIH5DdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjay4KKyAgICAg
ICAgcXVldWUgPSBuZXcgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU7CiAgICAgcmV0dXJuIHF1
ZXVlOwogfQogCi1DdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKiBDdXN0b21F
bGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOjpzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2sg
PSBudWxscHRyOworQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sqIEN1c3RvbUVsZW1lbnRSZWFj
dGlvblN0YWNrOjpzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2sgPSBudWxscHRyOwogCi12b2lkIEN1
c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2s6OnByb2Nlc3NRdWV1ZSgpCit2b2lk
IEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzUXVldWUoKQogewogICAgIEFTU0VS
VChtX3F1ZXVlKTsKICAgICBtX3F1ZXVlLT5pbnZva2VBbGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCShyZXZpc2lvbiAyMDQ2
MjcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2RvbS9MaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmg6MjA0
NjI3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKENV
U1RPTV9FTEVNRU5UUykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTsKK2NsYXNzIERvY3VtZW50
OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIExpZmVjeWNsZVF1ZXVlSXRlbTsKK2NsYXNzIFF1YWxp
ZmllZE5hbWU7CisKK2NsYXNzIExpZmVjeWNsZUNhbGxiYWNrUXVldWUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKExpZmVjeWNsZUNhbGxiYWNrUXVldWUpOworcHVibGljOgorICAgIExpZmVj
eWNsZUNhbGxiYWNrUXVldWUoKTsKKyAgICB+TGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSgpOworCisg
ICAgc3RhdGljIHZvaWQgZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKEVsZW1lbnQmLCBKU0N1c3RvbUVs
ZW1lbnRJbnRlcmZhY2UmKTsKKyAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlQ29ubmVjdGVkQ2FsbGJh
Y2tJZk5lZWRlZChFbGVtZW50Jik7CisgICAgc3RhdGljIHZvaWQgZW5xdWV1ZURpc2Nvbm5lY3Rl
ZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYpOworICAgIHN0YXRpYyB2b2lkIGVucXVldWVBdHRy
aWJ1dGVDaGFuZ2VkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3
VmFsdWUpOworCisgICAgdm9pZCBpbnZva2VBbGwoKTsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8
TGlmZWN5Y2xlUXVldWVJdGVtPiBtX2l0ZW1zOworfTsKKworY2xhc3MgQ3VzdG9tRWxlbWVudExp
ZmVjeWNsZVByb2Nlc3NpbmdTdGFjayB7CitwdWJsaWM6CisgICAgQ3VzdG9tRWxlbWVudExpZmVj
eWNsZVByb2Nlc3NpbmdTdGFjaygpCisgICAgICAgIDogbV9wcmV2aW91c1Byb2Nlc3NpbmdTdGFj
ayhzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2spCisgICAgeworICAgICAgICBzX2N1cnJlbnRQcm9j
ZXNzaW5nU3RhY2sgPSB0aGlzOworICAgIH0KKworICAgIH5DdXN0b21FbGVtZW50TGlmZWN5Y2xl
UHJvY2Vzc2luZ1N0YWNrKCkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShtX3F1ZXVlKSkK
KyAgICAgICAgICAgIHByb2Nlc3NRdWV1ZSgpOworICAgICAgICBzX2N1cnJlbnRQcm9jZXNzaW5n
U3RhY2sgPSBtX3ByZXZpb3VzUHJvY2Vzc2luZ1N0YWNrOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBhIHJlZmVyZW5jZSBvbmNlICJlbnN1cmUiIHN0YXJ0cyB0byB3b3Jr
LgorICAgIHN0YXRpYyBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlKiBlbnN1cmVDdXJyZW50UXVldWUo
KTsKKworICAgIHN0YXRpYyBib29sIGhhc0N1cnJlbnRQcm9jZXNzaW5nU3RhY2soKSB7IHJldHVy
biBzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2s7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nl
c3NRdWV1ZSgpOworCisgICAgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSogbV9xdWV1ZSB7IG51bGxw
dHIgfTsKKyAgICBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKiBtX3ByZXZp
b3VzUHJvY2Vzc2luZ1N0YWNrOworCisgICAgc3RhdGljIEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQ
cm9jZXNzaW5nU3RhY2sqIHNfY3VycmVudFByb2Nlc3NpbmdTdGFjazsKK307CisKK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWUuaAkocmV2aXNpb24gMjA0NjI3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U7CiBjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBMaWZlY3ljbGVRdWV1ZUl0ZW07Citj
bGFzcyBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW07CiBjbGFzcyBRdWFsaWZpZWROYW1l
OwogCi1jbGFzcyBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShMaWZlY3ljbGVDYWxsYmFja1F1ZXVlKTsKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZSk7CiBwdWJsaWM6Ci0gICAgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSgpOwotICAgIH5MaWZl
Y3ljbGVDYWxsYmFja1F1ZXVlKCk7CisgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUoKTsK
KyAgICB+Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUoKTsKIAogICAgIHN0YXRpYyB2b2lkIGVu
cXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50JiwgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJik7
CiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUNvbm5lY3RlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVu
dCYpOwpAQCAtNTMsMTggKzUzLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGludm9rZUFsbCgpOwog
CiBwcml2YXRlOgotICAgIFZlY3RvcjxMaWZlY3ljbGVRdWV1ZUl0ZW0+IG1faXRlbXM7CisgICAg
VmVjdG9yPEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbT4gbV9pdGVtczsKIH07CiAKLWNs
YXNzIEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2sgeworY2xhc3MgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uU3RhY2sgewogcHVibGljOgotICAgIEN1c3RvbUVsZW1lbnRMaWZlY3lj
bGVQcm9jZXNzaW5nU3RhY2soKQorICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKCkKICAg
ICAgICAgOiBtX3ByZXZpb3VzUHJvY2Vzc2luZ1N0YWNrKHNfY3VycmVudFByb2Nlc3NpbmdTdGFj
aykKICAgICB7CiAgICAgICAgIHNfY3VycmVudFByb2Nlc3NpbmdTdGFjayA9IHRoaXM7CiAgICAg
fQogCi0gICAgfkN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2soKQorICAgIH5D
dXN0b21FbGVtZW50UmVhY3Rpb25TdGFjaygpCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFko
bV9xdWV1ZSkpCiAgICAgICAgICAgICBwcm9jZXNzUXVldWUoKTsKQEAgLTcyLDE3ICs3MiwxNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgcmVmZXJl
bmNlIG9uY2UgImVuc3VyZSIgc3RhcnRzIHRvIHdvcmsuCi0gICAgc3RhdGljIExpZmVjeWNsZUNh
bGxiYWNrUXVldWUqIGVuc3VyZUN1cnJlbnRRdWV1ZSgpOworICAgIHN0YXRpYyBDdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZSogZW5zdXJlQ3VycmVudFF1ZXVlKCk7CiAKICAgICBzdGF0aWMgYm9v
bCBoYXNDdXJyZW50UHJvY2Vzc2luZ1N0YWNrKCkgeyByZXR1cm4gc19jdXJyZW50UHJvY2Vzc2lu
Z1N0YWNrOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwcm9jZXNzUXVldWUoKTsKIAotICAgIExp
ZmVjeWNsZUNhbGxiYWNrUXVldWUqIG1fcXVldWUgeyBudWxscHRyIH07Ci0gICAgQ3VzdG9tRWxl
bWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjayogbV9wcmV2aW91c1Byb2Nlc3NpbmdTdGFjazsK
KyAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSogbV9xdWV1ZSB7IG51bGxwdHIgfTsKKyAg
ICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayogbV9wcmV2aW91c1Byb2Nlc3NpbmdTdGFjazsK
IAotICAgIHN0YXRpYyBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKiBzX2N1
cnJlbnRQcm9jZXNzaW5nU3RhY2s7CisgICAgc3RhdGljIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0
YWNrKiBzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2s7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHJldmlzaW9uIDIwNDYyNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJDb21w
b3NpdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5j
bHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUu
aCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiQ3VzdG9t
RXZlbnQuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgpAQCAtMTA1LDcgKzEwNiw2
IEBACiAjaW5jbHVkZSAiSlNNb2R1bGVMb2FkZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKLSNpbmNsdWRlICJMaWZlY3ljbGVDYWxsYmFja1F1
ZXVlLmgiCiAjaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCBzdGF0aWMgUmVm
PEhUTUxFbGVtZW50PiBjcmVhdGVGYWxsYmFja0hUCiAgICAgICAgICAgICBpZiAoYXV0byogZWxl
bWVudEludGVyZmFjZSA9IHJlZ2lzdHJ5LT5maW5kSW50ZXJmYWNlKG5hbWUpKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byBlbGVtZW50ID0gSFRNTEVsZW1lbnQ6OmNyZWF0ZShuYW1lLCBkb2N1bWVu
dCk7CiAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0SXNVbnJlc29sdmVkQ3VzdG9tRWxlbWVu
dCgpOwotICAgICAgICAgICAgICAgIExpZmVjeWNsZUNhbGxiYWNrUXVldWU6OmVucXVldWVFbGVt
ZW50VXBncmFkZShlbGVtZW50LmdldCgpLCAqZWxlbWVudEludGVyZmFjZSk7CisgICAgICAgICAg
ICAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVFbGVtZW50VXBncmFkZShl
bGVtZW50LmdldCgpLCAqZWxlbWVudEludGVyZmFjZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwNDYyNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkNsaWVudFJlY3RM
aXN0LmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1
ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWUuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiRE9NVG9rZW5MaXN0LmgiCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgpAQCAtNjksNyAr
NzAsNiBAQAogI2luY2x1ZGUgIkpTTGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJLZXli
b2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVFZmZlY3QuaCIKLSNpbmNsdWRlICJMaWZl
Y3ljbGVDYWxsYmFja1F1ZXVlLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAi
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuaCIKICNpbmNsdWRlICJNdXRhdGlvblJlY29y
ZC5oIgpAQCAtMTI5Myw3ICsxMjkzLDcgQEAgdm9pZCBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YQogCiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAgICBpZiAoVU5MSUtF
TFkoaXNDdXN0b21FbGVtZW50KCkpKQotICAgICAgICBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlOjpl
bnF1ZXVlQXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrSWZOZWVkZWQoKnRoaXMsIG5hbWUsIG9sZFZh
bHVlLCBuZXdWYWx1ZSk7CisgICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1
ZXVlQXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrSWZOZWVkZWQoKnRoaXMsIG5hbWUsIG9sZFZhbHVl
LCBuZXdWYWx1ZSk7CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZUlzU2FtZUFzQmVmb3JlKQpAQCAt
MTU5OCw3ICsxNTk4LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBFbGVt
ZQogCiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAgICBpZiAobmV3RG9jdW1lbnQgJiYg
VU5MSUtFTFkoaXNDdXN0b21FbGVtZW50KCkpKQotICAgICAgICBMaWZlY3ljbGVDYWxsYmFja1F1
ZXVlOjplbnF1ZXVlQ29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRlZCgqdGhpcyk7CisgICAgICAgIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlQ29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRl
ZCgqdGhpcyk7CiAjZW5kaWYKIAogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwpAQCAtMTY0OSw3
ICsxNjQ5LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJgogCiAj
aWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKICAgICAgICAgaWYgKG9sZERvY3VtZW50ICYmIFVO
TElLRUxZKGlzQ3VzdG9tRWxlbWVudCgpKSkKLSAgICAgICAgICAgIExpZmVjeWNsZUNhbGxiYWNr
UXVldWU6OmVucXVldWVEaXNjb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVkKCp0aGlzKTsKKyAgICAg
ICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRGlzY29ubmVjdGVkQ2Fs
bGJhY2tJZk5lZWRlZCgqdGhpcyk7CiAjZW5kaWYKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9MaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5jcHAJKHJldmlzaW9uIDIwNDYyNykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9MaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxpZmVj
eWNsZUNhbGxiYWNrUXVldWUuaCIKLQotI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCi0KLSNp
bmNsdWRlICJDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93Lmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAi
SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0j
aW5jbHVkZSA8aGVhcC9IZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExpZmVjeWNsZVF1
ZXVlSXRlbSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgRWxlbWVu
dFVwZ3JhZGUsCi0gICAgICAgIENvbm5lY3RlZCwKLSAgICAgICAgRGlzY29ubmVjdGVkLAotICAg
ICAgICBBdHRyaWJ1dGVDaGFuZ2VkLAotICAgIH07Ci0KLSAgICBMaWZlY3ljbGVRdWV1ZUl0ZW0o
VHlwZSB0eXBlLCBFbGVtZW50JiBlbGVtZW50LCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmIGVs
ZW1lbnRJbnRlcmZhY2UpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgICwgbV9lbGVt
ZW50KGVsZW1lbnQpCi0gICAgICAgICwgbV9pbnRlcmZhY2UoZWxlbWVudEludGVyZmFjZSkKLSAg
ICB7IH0KLQotICAgIExpZmVjeWNsZVF1ZXVlSXRlbShFbGVtZW50JiBlbGVtZW50LCBKU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmV3VmFsdWUpCi0gICAgICAgIDogbV90eXBlKFR5cGU6OkF0dHJpYnV0ZUNoYW5n
ZWQpCi0gICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgICAgICwgbV9pbnRlcmZhY2Uo
ZWxlbWVudEludGVyZmFjZSkKLSAgICAgICAgLCBtX2F0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFt
ZSkKLSAgICAgICAgLCBtX29sZFZhbHVlKG9sZFZhbHVlKQotICAgICAgICAsIG1fbmV3VmFsdWUo
bmV3VmFsdWUpCi0gICAgeyB9Ci0KLSAgICB2b2lkIGludm9rZSgpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6OkVsZW1lbnRVcGdyYWRlOgotICAg
ICAgICAgICAgbV9pbnRlcmZhY2UtPnVwZ3JhZGVFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpDb25uZWN0ZWQ6Ci0gICAgICAg
ICAgICBtX2ludGVyZmFjZS0+aW52b2tlQ29ubmVjdGVkQ2FsbGJhY2sobV9lbGVtZW50LmdldCgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6OkRpc2Nvbm5lY3RlZDoK
LSAgICAgICAgICAgIG1faW50ZXJmYWNlLT5pbnZva2VEaXNjb25uZWN0ZWRDYWxsYmFjayhtX2Vs
ZW1lbnQuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6QXR0
cmlidXRlQ2hhbmdlZDoKLSAgICAgICAgICAgIEFTU0VSVChtX2F0dHJpYnV0ZU5hbWUpOwotICAg
ICAgICAgICAgbV9pbnRlcmZhY2UtPmludm9rZUF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhtX2Vs
ZW1lbnQuZ2V0KCksIG1fYXR0cmlidXRlTmFtZS52YWx1ZSgpLCBtX29sZFZhbHVlLCBtX25ld1Zh
bHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIFR5cGUgbV90eXBlOwotICAgIFJlZjxFbGVtZW50PiBtX2VsZW1lbnQ7Ci0gICAgUmVmPEpT
Q3VzdG9tRWxlbWVudEludGVyZmFjZT4gbV9pbnRlcmZhY2U7Ci0gICAgT3B0aW9uYWw8UXVhbGlm
aWVkTmFtZT4gbV9hdHRyaWJ1dGVOYW1lOwotICAgIEF0b21pY1N0cmluZyBtX29sZFZhbHVlOwot
ICAgIEF0b21pY1N0cmluZyBtX25ld1ZhbHVlOwotfTsKLQotTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1
ZTo6TGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSgpCi17IH0KLQotTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1
ZTo6fkxpZmVjeWNsZUNhbGxiYWNrUXVldWUoKQotewotICAgIEFTU0VSVChtX2l0ZW1zLmlzRW1w
dHkoKSk7Ci19Ci0KLXZvaWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6ZW5xdWV1ZUVsZW1lbnRV
cGdyYWRlKEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxlbWVu
dEludGVyZmFjZSkKLXsKLSAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0b21FbGVtZW50TGlmZWN5
Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkKLSAgICAgICAgcXVldWUt
Pm1faXRlbXMuYXBwZW5kKExpZmVjeWNsZVF1ZXVlSXRlbShMaWZlY3ljbGVRdWV1ZUl0ZW06OlR5
cGU6OkVsZW1lbnRVcGdyYWRlLCBlbGVtZW50LCBlbGVtZW50SW50ZXJmYWNlKSk7Ci19Ci0KLXN0
YXRpYyBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UqIGZpbmRJbnRlcmZhY2VGb3JDdXN0b21FbGVt
ZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKGVsZW1lbnQuaXNDdXN0b21FbGVt
ZW50KCkpOwotICAgIGF1dG8qIHdpbmRvdyA9IGVsZW1lbnQuZG9jdW1lbnQoKS5kb21XaW5kb3co
KTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
KiByZWdpc3RyeSA9IHdpbmRvdy0+Y3VzdG9tRWxlbWVudHNSZWdpc3RyeSgpOwotICAgIGlmICgh
cmVnaXN0cnkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHJlZ2lzdHJ5
LT5maW5kSW50ZXJmYWNlKGVsZW1lbnQudGFnUU5hbWUoKSk7Ci19Ci0KLXZvaWQgTGlmZWN5Y2xl
Q2FsbGJhY2tRdWV1ZTo6ZW5xdWV1ZUNvbm5lY3RlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYg
ZWxlbWVudCkKLXsKLSAgICBhdXRvKiBlbGVtZW50SW50ZXJmYWNlID0gZmluZEludGVyZmFjZUZv
ckN1c3RvbUVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0b21FbGVtZW50TGlmZWN5
Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkKLSAgICAgICAgcXVldWUt
Pm1faXRlbXMuYXBwZW5kKHtMaWZlY3ljbGVRdWV1ZUl0ZW06OlR5cGU6OkNvbm5lY3RlZCwgZWxl
bWVudCwgKmVsZW1lbnRJbnRlcmZhY2V9KTsKLX0KLQotdm9pZCBMaWZlY3ljbGVDYWxsYmFja1F1
ZXVlOjplbnF1ZXVlRGlzY29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiBlbGVtZW50
KQotewotICAgIGF1dG8qIGVsZW1lbnRJbnRlcmZhY2UgPSBmaW5kSW50ZXJmYWNlRm9yQ3VzdG9t
RWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAoIWVsZW1lbnRJbnRlcmZhY2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9j
ZXNzaW5nU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQotICAgICAgICBxdWV1ZS0+bV9pdGVt
cy5hcHBlbmQoe0xpZmVjeWNsZVF1ZXVlSXRlbTo6VHlwZTo6RGlzY29ubmVjdGVkLCBlbGVtZW50
LCAqZWxlbWVudEludGVyZmFjZX0pOwotfQotCi12b2lkIExpZmVjeWNsZUNhbGxiYWNrUXVldWU6
OmVucXVldWVBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQotewotICAgIGF1dG8qIGVs
ZW1lbnRJbnRlcmZhY2UgPSBmaW5kSW50ZXJmYWNlRm9yQ3VzdG9tRWxlbWVudChlbGVtZW50KTsK
LSAgICBpZiAoIWVsZW1lbnRJbnRlcmZhY2UgfHwgIWVsZW1lbnRJbnRlcmZhY2UtPm9ic2VydmVz
QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0
YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkKLSAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5k
KHtlbGVtZW50LCAqZWxlbWVudEludGVyZmFjZSwgYXR0cmlidXRlTmFtZSwgb2xkVmFsdWUsIG5l
d1ZhbHVlfSk7Ci19Ci0KLXZvaWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6aW52b2tlQWxsKCkK
LXsKLSAgICBWZWN0b3I8TGlmZWN5Y2xlUXVldWVJdGVtPiBpdGVtczsKLSAgICBpdGVtcy5zd2Fw
KG1faXRlbXMpOwotICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKQotICAgICAgICBpdGVtLmlu
dm9rZSgpOwotfQotCi1MaWZlY3ljbGVDYWxsYmFja1F1ZXVlKiBDdXN0b21FbGVtZW50TGlmZWN5
Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKQotewotICAgIC8vIEZJWE1F
OiBUaGlzIGVhcmx5IGV4aXQgaW5kaWNhdGVzIGEgYnVnIHRoYXQgc29tZSBET00gQVBJIGlzIG1p
c3NpbmcgQ0VSZWFjdGlvbnMKLSAgICBpZiAoIXNfY3VycmVudFByb2Nlc3NpbmdTdGFjaykKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiYgcXVldWUgPSBzX2N1cnJlbnRQcm9j
ZXNzaW5nU3RhY2stPm1fcXVldWU7Ci0gICAgaWYgKCFxdWV1ZSkgLy8gV2UgdXNlIGEgcmF3IHBv
aW50ZXIgdG8gYXZvaWQgZ2VuZWFyaW5nIGNvZGUgdG8gZGVsZXRlIGl0IGluIH5DdXN0b21FbGVt
ZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrLgotICAgICAgICBxdWV1ZSA9IG5ldyBMaWZlY3lj
bGVDYWxsYmFja1F1ZXVlOwotICAgIHJldHVybiBxdWV1ZTsKLX0KLQotQ3VzdG9tRWxlbWVudExp
ZmVjeWNsZVByb2Nlc3NpbmdTdGFjayogQ3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdT
dGFjazo6c19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrID0gbnVsbHB0cjsKLQotdm9pZCBDdXN0b21F
bGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOjpwcm9jZXNzUXVldWUoKQotewotICAgIEFT
U0VSVChtX3F1ZXVlKTsKLSAgICBtX3F1ZXVlLT5pbnZva2VBbGwoKTsKLSAgICBkZWxldGUgbV9x
dWV1ZTsKLSAgICBtX3F1ZXVlID0gbnVsbHB0cjsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9MaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0xpZmVjeWNsZUNhbGxiYWNrUXVldWUuaAkocmV2aXNpb24gMjA0
NjI3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0xpZmVjeWNsZUNhbGxiYWNrUXVldWUuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShDVVNUT01f
RUxFTUVOVFMpCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U7Ci1jbGFzcyBEb2N1bWVudDsKLWNs
YXNzIEVsZW1lbnQ7Ci1jbGFzcyBMaWZlY3ljbGVRdWV1ZUl0ZW07Ci1jbGFzcyBRdWFsaWZpZWRO
YW1lOwotCi1jbGFzcyBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShMaWZlY3ljbGVDYWxsYmFja1F1ZXVlKTsKLXB1YmxpYzoKLSAgICBMaWZlY3ljbGVD
YWxsYmFja1F1ZXVlKCk7Ci0gICAgfkxpZmVjeWNsZUNhbGxiYWNrUXVldWUoKTsKLQotICAgIHN0
YXRpYyB2b2lkIGVucXVldWVFbGVtZW50VXBncmFkZShFbGVtZW50JiwgSlNDdXN0b21FbGVtZW50
SW50ZXJmYWNlJik7Ci0gICAgc3RhdGljIHZvaWQgZW5xdWV1ZUNvbm5lY3RlZENhbGxiYWNrSWZO
ZWVkZWQoRWxlbWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGVucXVldWVEaXNjb25uZWN0ZWRDYWxs
YmFja0lmTmVlZGVkKEVsZW1lbnQmKTsKLSAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRl
Q2hhbmdlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVl
KTsKLQotICAgIHZvaWQgaW52b2tlQWxsKCk7Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPExpZmVj
eWNsZVF1ZXVlSXRlbT4gbV9pdGVtczsKLX07Ci0KLWNsYXNzIEN1c3RvbUVsZW1lbnRMaWZlY3lj
bGVQcm9jZXNzaW5nU3RhY2sgewotcHVibGljOgotICAgIEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQ
cm9jZXNzaW5nU3RhY2soKQotICAgICAgICA6IG1fcHJldmlvdXNQcm9jZXNzaW5nU3RhY2soc19j
dXJyZW50UHJvY2Vzc2luZ1N0YWNrKQotICAgIHsKLSAgICAgICAgc19jdXJyZW50UHJvY2Vzc2lu
Z1N0YWNrID0gdGhpczsKLSAgICB9Ci0KLSAgICB+Q3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nl
c3NpbmdTdGFjaygpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkobV9xdWV1ZSkpCi0gICAg
ICAgICAgICBwcm9jZXNzUXVldWUoKTsKLSAgICAgICAgc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNr
ID0gbV9wcmV2aW91c1Byb2Nlc3NpbmdTdGFjazsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgYmUgYSByZWZlcmVuY2Ugb25jZSAiZW5zdXJlIiBzdGFydHMgdG8gd29yay4KLSAg
ICBzdGF0aWMgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSogZW5zdXJlQ3VycmVudFF1ZXVlKCk7Ci0K
LSAgICBzdGF0aWMgYm9vbCBoYXNDdXJyZW50UHJvY2Vzc2luZ1N0YWNrKCkgeyByZXR1cm4gc19j
dXJyZW50UHJvY2Vzc2luZ1N0YWNrOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwcm9jZXNzUXVl
dWUoKTsKLQotICAgIExpZmVjeWNsZUNhbGxiYWNrUXVldWUqIG1fcXVldWUgeyBudWxscHRyIH07
Ci0gICAgQ3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjayogbV9wcmV2aW91c1By
b2Nlc3NpbmdTdGFjazsKLQotICAgIHN0YXRpYyBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vz
c2luZ1N0YWNrKiBzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2s7Ci19OwotCi19Ci0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286436</attachid>
            <date>2016-08-18 21:01:22 -0700</date>
            <delta_ts>2016-08-19 09:21:44 -0700</delta_ts>
            <desc>Fixed CMake builds</desc>
            <filename>bug-160991-20160818205931.patch</filename>
            <type>text/plain</type>
            <size>49588</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDYyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE2LTA4LTE4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBMaWZlY3ljbGVDYWxs
YmFjayB0byBDdXN0b21FbGVtZW50UmVhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDk5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSBhbmQg
Q3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjaworICAgICAgICB0byBDdXN0b21F
bGVtZW50UmVhY3Rpb25RdWV1ZSBhbmQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgcGVyIHRo
ZSBsYXRlc3Qgc3BlYzoKKyAgICAgICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jY3Vz
dG9tLWVsZW1lbnQtcmVhY3Rpb25zCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIHRoaXMg
aXMganVzdCBhIHJlbmFtZSBvZiBjbGFzc2VzIHdoaWNoIGFyZSBub3QgZXhwb3NlZCB0byB0aGUg
V2ViLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21F
bGVtZW50c1JlZ2lzdHJ5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENhbGxiYWNr
KTogUmVuYW1lZCBmcm9tIGdldExpZmVjeWNsZUNhbGxiYWNrLgorICAgICAgICAoV2ViQ29yZTo6
SlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5OjpkZWZpbmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
TGlmZWN5Y2xlQ2FsbGJhY2spOiBEZWxldGVkLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUpOgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06
CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKworICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBSZWJhc2VsaW5lZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisKKyAgICAgICAgKiBkb20vQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWUuY3BwOiBNb3ZlZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2RvbS9M
aWZlY3ljbGVDYWxsYmFja1F1ZXVlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlSXRlbTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZTo6fkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3JhZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVDb25uZWN0ZWRD
YWxsYmFja0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlOjplbnF1ZXVlRGlzY29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUF0dHJpYnV0ZUNoYW5n
ZWRDYWxsYmFja0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlOjppbnZva2VBbGwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJl
YWN0aW9uU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjazo6cHJvY2Vzc1F1ZXVlKToKKworICAgICAgICAqIGRvbS9D
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oOiBNb3ZlZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9MaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmguCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVt
ZW50UmVhY3Rpb25TdGFjazo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6On5DdXN0b21FbGVtZW50UmVhY3Rp
b25TdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6
aGFzQ3VycmVudFByb2Nlc3NpbmdTdGFjayk6CisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRmFsbGJhY2tIVE1MRWxlbWVudCk6CisKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50byk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisKIDIwMTYtMDgtMTggIERh
bmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIExkIHdhcm5zIG9mIG5v
bi1leGlzdGVudCBQcml2YXRlRnJhbWV3b3JrcyBkaXJlY3Rvcnkgd2hlbiBidWlsZGluZyBXZWJL
aXQgd2l0aCB0aGUgcHVibGljIGlPUyA5LjMgU0RLCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjA0NjI3KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTE0MzksNiArMTQzOSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBk
b20vQ29udGFpbmVyTm9kZS5jcHAKICAgICBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3Bw
CiAgICAgZG9tL0NvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmNwcAorICAgIGRvbS9DdXN0b21F
bGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAKICAgICBkb20vQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5j
cHAKICAgICBkb20vQ3VzdG9tRXZlbnQuY3BwCiAgICAgZG9tL0RPTUNvcmVFeGNlcHRpb24uY3Bw
CkBAIC0xNDg1LDcgKzE0ODYsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0lkVGFy
Z2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKICAgICBkb20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNw
cAogICAgIGRvbS9LZXlib2FyZEV2ZW50LmNwcAotICAgIGRvbS9MaWZlY3ljbGVDYWxsYmFja1F1
ZXVlLmNwcAogICAgIGRvbS9MaXZlTm9kZUxpc3QuY3BwCiAgICAgZG9tL01lc3NhZ2VDaGFubmVs
LmNwcAogICAgIGRvbS9NZXNzYWdlRXZlbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDQ2MjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM5MzIsNyArMzkzMiw3IEBACiAJCTlCNTMyRUEzMUJBOTI4NTcwMDM4QTgy
NyAvKiBTbG90QXNzaWdubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5QjUzMkVBMTFCQTkyODU3MDAzOEE4MjcgLyogU2xvdEFzc2lnbm1lbnQu
Y3BwICovOyB9OwogCQk5QjUzMkVBNDFCQTkyODU3MDAzOEE4MjcgLyogU2xvdEFzc2lnbm1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNTMyRUEy
MUJBOTI4NTcwMDM4QTgyNyAvKiBTbG90QXNzaWdubWVudC5oICovOyB9OwogCQk5QjU1RUVFOTFC
M0U4ODk4MDA1MzQyQkMgLyogRWRpdG9yQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjU1RUVFODFCM0U4ODk4MDA1MzQyQkMgLyogRWRpdG9y
Q29jb2EubW0gKi87IH07Ci0JCTlCNTZDOUFBMUM4OTMyOUEwMEM0NTZERiAvKiBMaWZlY3ljbGVD
YWxsYmFja1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCNTZDOUE5MUM4OTMyOUEwMEM0NTZERiAvKiBMaWZlY3ljbGVDYWxsYmFja1F1ZXVl
LmNwcCAqLzsgfTsKKwkJOUI1NkM5QUExQzg5MzI5QTAwQzQ1NkRGIC8qIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCNTZDOUE5MUM4OTMyOUEwMEM0NTZERiAvKiBDdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZS5jcHAgKi87IH07CiAJCTlCNjlEM0I0MUI5OEZGRTkwMEUzNTEyQiAvKiBIVE1MU2xvdEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUI2OUQzQjIxQjk4RkZFOTAwRTM1MTJCIC8qIEhUTUxTbG90RWxlbWVudC5jcHAgKi87IH07CiAJ
CTlCNjlEM0I1MUI5OEZGRTkwMEUzNTEyQiAvKiBIVE1MU2xvdEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNjlEM0IzMUI5OEZGRTkwMEUz
NTEyQiAvKiBIVE1MU2xvdEVsZW1lbnQuaCAqLzsgfTsKIAkJOUI2OUQzQjgxQjk5MTAwNzAwRTM1
MTJCIC8qIEpTSFRNTFNsb3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCNjlEM0I2MUI5OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90
RWxlbWVudC5jcHAgKi87IH07CkBAIC0xMTUyMiw4ICsxMTUyMiw4IEBACiAJCTlCNTMyRUExMUJB
OTI4NTcwMDM4QTgyNyAvKiBTbG90QXNzaWdubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTbG90QXNzaWdubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCNTMyRUEyMUJBOTI4NTcwMDM4QTgyNyAvKiBTbG90QXNzaWdubWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90QXNzaWdubWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5QjU1RUVFODFCM0U4ODk4MDA1MzQyQkMgLyogRWRpdG9y
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBFZGl0b3JD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUI1NkM5QTgxQzg5MzEyODAw
QzQ1NkRGIC8qIExpZmVjeWNsZUNhbGxiYWNrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlmZWN5
Y2xlQ2FsbGJhY2tRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5QjU2QzlB
OTFDODkzMjlBMDBDNDU2REYgLyogTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUI1NkM5QTgxQzg5MzEyODAwQzQ1NkRGIC8q
IEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCNTZDOUE5
MUM4OTMyOUEwMEM0NTZERiAvKiBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNjlEM0IxMUI5OEZGMEEwMEUz
NTEyQiAvKiBIVE1MU2xvdEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxT
bG90RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNjlEM0IyMUI5
OEZGRTkwMEUzNTEyQiAvKiBIVE1MU2xvdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSFRNTFNsb3RFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUI2OUQzQjMxQjk4RkZFOTAwRTM1MTJCIC8qIEhUTUxTbG90RWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MU2xvdEVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MDEyLDYgKzI0MDEyLDggQEAKIAkJCQk5QkQ0
RTkxODFDNDYyQ0ZDMDA1MDY1QkMgLyogQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5jcHAgKi8sCiAJ
CQkJOUJENEU5MTkxQzQ2MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCAq
LywKIAkJCQk5QkM1RjlERTFENUFBRDVEMDAyQjc0OUQgLyogQ3VzdG9tRWxlbWVudHNSZWdpc3Ry
eS5pZGwgKi8sCisJCQkJOUI1NkM5QTkxQzg5MzI5QTAwQzQ1NkRGIC8qIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlLmNwcCAqLywKKwkJCQk5QjU2QzlBODFDODkzMTI4MDBDNDU2REYgLyogQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCAqLywKIAkJCQk2MkNEMzI1NjExNTdFNTdDMDA2M0Iw
QTcgLyogQ3VzdG9tRXZlbnQuY3BwICovLAogCQkJCTYyQ0QzMjU3MTE1N0U1N0MwMDYzQjBBNyAv
KiBDdXN0b21FdmVudC5oICovLAogCQkJCTYyQ0QzMjU4MTE1N0U1N0MwMDYzQjBBNyAvKiBDdXN0
b21FdmVudC5pZGwgKi8sCkBAIC0yNDE1MSw4ICsyNDE1Myw2IEBACiAJCQkJODUwMzFCMkQwQTQ0
RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuY3BwICovLAogCQkJCTg1MDMxQjJFMEE0NEVG
QzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmggKi8sCiAJCQkJMTRDRjdDMjAwOUY3MTEwNjAw
RUIzNjY1IC8qIEtleWJvYXJkRXZlbnQuaWRsICovLAotCQkJCTlCNTZDOUE5MUM4OTMyOUEwMEM0
NTZERiAvKiBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmNwcCAqLywKLQkJCQk5QjU2QzlBODFDODkz
MTI4MDBDNDU2REYgLyogTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5oICovLAogCQkJCUJDN0ZBNjFF
MEQxRjBDQkQwMERCMjJBOSAvKiBMaXZlTm9kZUxpc3QuY3BwICovLAogCQkJCUJDN0ZBNjFGMEQx
RjBDQkQwMERCMjJBOSAvKiBMaXZlTm9kZUxpc3QuaCAqLywKIAkJCQlCQzlBNjE0NDE0Njg1OUQ5
MDA2MDU3RkQgLyogbWFrZV9kb21fZXhjZXB0aW9ucy5wbCAqLywKQEAgLTMwNTkzLDcgKzMwNTkz
LDcgQEAKIAkJCQlFNTVGNDk3QTE1MUI4ODgwMDBCQjY3REIgLyogTGVuZ3RoRnVuY3Rpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGODcxNjZGMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQ
b2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGMjBDRTFCRDRBMjQxMDAxMjhFNUQgLyog
TGVuZ3RoU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5QjU2QzlBQTFDODkzMjlBMDBDNDU2
REYgLyogTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QjU2
QzlBQTFDODkzMjlBMDBDNDU2REYgLyogQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkZCNjk4Q0MxODMzRUUwRDAwMTU4QTMxIC8qIExpbmVCcmVha2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5QjVFQUExMTFFODAwM0QwMEYyMzY3RSAvKiBMaW5l
RW5kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZGQjY5OENGMTgzNDAyQkIwMDE1OEEzMSAv
KiBMaW5lSW5mby5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tRWxlbWVudHNSZWdpc3RyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjA0NjI3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21FbGVtZW50c1JlZ2lzdHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRT
KQogCi1zdGF0aWMgSlNPYmplY3QqIGdldExpZmVjeWNsZUNhbGxiYWNrKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTT2JqZWN0JiBwcm90b3R5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkKQorc3RhdGljIEpT
T2JqZWN0KiBnZXRDYWxsYmFjayhFeGVjU3RhdGUmIHN0YXRlLCBKU09iamVjdCYgcHJvdG90eXBl
LCBjb25zdCBJZGVudGlmaWVyJiBpZCkKIHsKICAgICBKU1ZhbHVlIGNhbGxiYWNrID0gcHJvdG90
eXBlLmdldCgmc3RhdGUsIGlkKTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCkBAIC00
Nyw3ICs0Nyw3IEBAIHN0YXRpYyBKU09iamVjdCogZ2V0TGlmZWN5Y2xlQ2FsbGJhY2soRXgKICAg
ICBpZiAoY2FsbGJhY2suaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgaWYgKCFjYWxsYmFjay5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBBU0NJSUxpdGVyYWwoIkEgbGlmZWN5Y2xlIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5j
dGlvbiIpKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBBU0NJSUxpdGVyYWwoIkEg
Y3VzdG9tIGVsZW1lbnQgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIikpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIGNhbGxiYWNrLmdldE9iamVjdCgpOwpA
QCAtMTA3LDI0ICsxMDcsMjQgQEAgSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnk6OmRl
ZmluZQogICAgIFF1YWxpZmllZE5hbWUgbmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBIVE1MTmFt
ZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKICAgICBhdXRvIGVsZW1lbnRJbnRlcmZhY2UgPSBKU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2U6OmNyZWF0ZShuYW1lLCBjb25zdHJ1Y3RvciwgZ2xvYmFsT2Jq
ZWN0KCkpOwogCi0gICAgYXV0byogY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRMaWZlY3ljbGVDYWxs
YmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
ImNvbm5lY3RlZENhbGxiYWNrIikpOworICAgIGF1dG8qIGNvbm5lY3RlZENhbGxiYWNrID0gZ2V0
Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJjb25uZWN0ZWRDYWxsYmFjayIpKTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChjb25uZWN0ZWRDYWxsYmFj
aykKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0Q29ubmVjdGVkQ2FsbGJhY2soY29ubmVj
dGVkQ2FsbGJhY2spOwogCi0gICAgYXV0byogZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRMaWZl
Y3ljbGVDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImRpc2Nvbm5lY3RlZENhbGxiYWNrIikpOworICAgIGF1dG8qIGRpc2Nvbm5lY3Rl
ZENhbGxiYWNrID0gZ2V0Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJkaXNjb25uZWN0ZWRDYWxsYmFjayIpKTsKICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlm
IChkaXNjb25uZWN0ZWRDYWxsYmFjaykKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0RGlz
Y29ubmVjdGVkQ2FsbGJhY2soZGlzY29ubmVjdGVkQ2FsbGJhY2spOwogCiAgICAgLy8gRklYTUU6
IEFkZCB0aGUgc3VwcG9ydCBmb3IgYWRvcHRlZENhbGxiYWNrLgotICAgIGdldExpZmVjeWNsZUNh
bGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiYWRvcHRlZENhbGxiYWNrIikpOworICAgIGdldENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRvcHRlZENhbGxiYWNrIikpOwog
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICBhdXRvKiBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sgPSBnZXRMaWZlY3ljbGVD
YWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpKTsKKyAgICBhdXRvKiBhdHRyaWJ1dGVDaGFu
Z2VkQ2FsbGJhY2sgPSBnZXRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpKTsKICAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIGlmIChhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2spIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCShyZXZpc2lvbiAy
MDQ2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBKU01haW5UaHJl
YWRFeGVjU3RhdGVfaAogI2RlZmluZSBKU01haW5UaHJlYWRFeGVjU3RhdGVfaAogCisjaW5jbHVk
ZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKLSNpbmNsdWRlICJMaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmgiCiAjaW5jbHVkZSA8cnVudGlt
ZS9Db21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9NaWNyb3Rhc2suaD4KICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSlNDOjpFeGVjU3RhdGUqIG1fcHJldmlvdXNTdGF0ZTsKICNpZiBFTkFCTEUoQ1VTVE9N
X0VMRU1FTlRTKQotICAgIEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2sgbV9s
aWZlY3ljbGVQcm9jZXNzaW5nU3RhY2s7CisgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sg
bV9jdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJl
dmlzaW9uIDIwNDYyNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQyLDkgKzMzNDIsOSBAQCBFTkQKIAog
ICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ0VSZWFjdGlvbnMifSkgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
I2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrIGN1
c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2s7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjaztcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiI2VuZGlmXG4iKTsKLSAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJMaWZl
Y3ljbGVDYWxsYmFja1F1ZXVlLmgifSA9IDE7CisgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3siQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCJ9ID0gMTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHJldmlzaW9uIDIw
NDYyNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5MCw3IEBAIGVudW0gVGVzdENvbmZpZGVuY2Ug
eyAiaGlnaCIsICJraW5kYS1sb3cKICAgICBbUHV0Rm9yd2FyZHM9bmFtZV0gcmVhZG9ubHkgYXR0
cmlidXRlIFRlc3ROb2RlPyBwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlOwogCiAjaWYgZGVm
aW5lZChURVNUSU5HX0pTKQotICAgIFtDRVJlYWN0aW9uc10gdm9pZCBtZXRob2RXaXRoTmVlZHNM
aWZlY3ljbGVQcm9jZXNzaW5nU3RhY2soKTsKKyAgICBbQ0VSZWFjdGlvbnNdIHZvaWQgbWV0aG9k
V2l0aE5lZWRzQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2soKTsKICNlbmRpZgogCiAgICAgdm9p
ZCBhdHRhY2hTaGFkb3dSb290KFRlc3REaWN0aW9uYXJ5IGluaXQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJ
KHJldmlzaW9uIDIwNDYyNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5j
bHVkZSAiSlNUZXN0T2JqLmgiCiAKICNpbmNsdWRlICJDYWxsYmFja0Z1bmN0aW9uLmgiCisjaW5j
bHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKICNpbmNsdWRlICJET01TdHJpbmdM
aXN0LmgiCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBA
IC00OSw3ICs1MCw2IEBACiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCiAjaW5jbHVkZSAiSlNUZXN0
U3ViT2JqLmgiCiAjaW5jbHVkZSAiSlNYUGF0aE5TUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJMaWZl
Y3ljbGVDYWxsYmFja1F1ZXVlLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIKQEAgLTcy
NCw3ICs3MjQsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25U
ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0
aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoTmVlZHNMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2soSlNDOjpFeGVjU3RhdGUqKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOZWVkc0N1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKEpTQzo6RXhlY1N0YXRl
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25BdHRhY2hTaGFkb3dSb290KEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0
ZXMKQEAgLTEzMTEsNyArMTMxMSw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RPYmpQcm8KICAgICB7ICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbiIsIEpTQzo6
RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4
Y2VwdGlvbiksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJ0ZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aE9wdGlvbmFsSW50QXJndW1lbnQiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KSwgKGludHB0
cl90KSAoMCkgfSB9LAogICAgIHsgInRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uIiwgSlND
OjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1
bmN0aW9uKSwgKGludHB0cl90KSAoMSkgfSB9LAotICAgIHsgIm1ldGhvZFdpdGhOZWVkc0xpZmVj
eWNsZVByb2Nlc3NpbmdTdGFjayIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTmVlZHNMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2spLCAoaW50cHRyX3QpICgw
KSB9IH0sCisgICAgeyAibWV0aG9kV2l0aE5lZWRzQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2si
LCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5lZWRzQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uU3RhY2spLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiYXR0
YWNoU2hhZG93Um9vdCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRh
Y2hTaGFkb3dSb290KSwgKGludHB0cl90KSAoMSkgfSB9LAogI2lmIEVOQUJMRShDb25kaXRpb24x
KQogICAgIHsgIkNPTkRJVElPTkFMX0NPTlNUIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ29u
c3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgwKSB9IH0sCkBAIC02Mzc2
LDE4ICs2Mzc2LDE4IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5lZWRzTGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKEV4ZWNTdGF0ZSogc3RhdGUpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5lZWRzQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2soRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICNp
ZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQotICAgIEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9j
ZXNzaW5nU3RhY2sgY3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjazsKKyAgICBD
dXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazsKICNl
bmRpZgogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIGF1
dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5lZWRzTGlmZWN5Y2xlUHJv
Y2Vzc2luZ1N0YWNrIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoTmVlZHNDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFj
ayIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
aW1wbC5tZXRob2RXaXRoTmVlZHNMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2soKTsKKyAgICBpbXBs
Lm1ldGhvZFdpdGhOZWVkc0N1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwCShyZXZpc2lvbiAy
MDQ2MjcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2RvbS9MaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmNw
cDoyMDQ2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkxpZmVjeWNsZUNhbGxiYWNrUXVldWUuaCIKKworI2lmIEVOQUJMRShDVVNUT01f
RUxFTUVOVFMpCisKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmgiCisjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSA8aGVhcC9IZWFwLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIExpZmVjeWNsZVF1ZXVlSXRlbSB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlIHsK
KyAgICAgICAgRWxlbWVudFVwZ3JhZGUsCisgICAgICAgIENvbm5lY3RlZCwKKyAgICAgICAgRGlz
Y29ubmVjdGVkLAorICAgICAgICBBdHRyaWJ1dGVDaGFuZ2VkLAorICAgIH07CisKKyAgICBMaWZl
Y3ljbGVRdWV1ZUl0ZW0oVHlwZSB0eXBlLCBFbGVtZW50JiBlbGVtZW50LCBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisg
ICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgICAgICwgbV9pbnRlcmZhY2UoZWxlbWVu
dEludGVyZmFjZSkKKyAgICB7IH0KKworICAgIExpZmVjeWNsZVF1ZXVlSXRlbShFbGVtZW50JiBl
bGVtZW50LCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFs
dWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCisgICAgICAgIDogbV90eXBlKFR5cGU6
OkF0dHJpYnV0ZUNoYW5nZWQpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgICAg
ICwgbV9pbnRlcmZhY2UoZWxlbWVudEludGVyZmFjZSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZU5h
bWUoYXR0cmlidXRlTmFtZSkKKyAgICAgICAgLCBtX29sZFZhbHVlKG9sZFZhbHVlKQorICAgICAg
ICAsIG1fbmV3VmFsdWUobmV3VmFsdWUpCisgICAgeyB9CisKKyAgICB2b2lkIGludm9rZSgpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkVsZW1l
bnRVcGdyYWRlOgorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnVwZ3JhZGVFbGVtZW50KG1fZWxl
bWVudC5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpDb25u
ZWN0ZWQ6CisgICAgICAgICAgICBtX2ludGVyZmFjZS0+aW52b2tlQ29ubmVjdGVkQ2FsbGJhY2so
bV9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6
OkRpc2Nvbm5lY3RlZDoKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5pbnZva2VEaXNjb25uZWN0
ZWRDYWxsYmFjayhtX2VsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZTo6QXR0cmlidXRlQ2hhbmdlZDoKKyAgICAgICAgICAgIEFTU0VSVChtX2F0dHJp
YnV0ZU5hbWUpOworICAgICAgICAgICAgbV9pbnRlcmZhY2UtPmludm9rZUF0dHJpYnV0ZUNoYW5n
ZWRDYWxsYmFjayhtX2VsZW1lbnQuZ2V0KCksIG1fYXR0cmlidXRlTmFtZS52YWx1ZSgpLCBtX29s
ZFZhbHVlLCBtX25ld1ZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworICAgIFJlZjxFbGVtZW50PiBtX2VsZW1l
bnQ7CisgICAgUmVmPEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZT4gbV9pbnRlcmZhY2U7CisgICAg
T3B0aW9uYWw8UXVhbGlmaWVkTmFtZT4gbV9hdHRyaWJ1dGVOYW1lOworICAgIEF0b21pY1N0cmlu
ZyBtX29sZFZhbHVlOworICAgIEF0b21pY1N0cmluZyBtX25ld1ZhbHVlOworfTsKKworTGlmZWN5
Y2xlQ2FsbGJhY2tRdWV1ZTo6TGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSgpCit7IH0KKworTGlmZWN5
Y2xlQ2FsbGJhY2tRdWV1ZTo6fkxpZmVjeWNsZUNhbGxiYWNrUXVldWUoKQoreworICAgIEFTU0VS
VChtX2l0ZW1zLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6
ZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZSYgZWxlbWVudEludGVyZmFjZSkKK3sKKyAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0
b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkK
KyAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKExpZmVjeWNsZVF1ZXVlSXRlbShMaWZlY3lj
bGVRdWV1ZUl0ZW06OlR5cGU6OkVsZW1lbnRVcGdyYWRlLCBlbGVtZW50LCBlbGVtZW50SW50ZXJm
YWNlKSk7Cit9CisKK3N0YXRpYyBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UqIGZpbmRJbnRlcmZh
Y2VGb3JDdXN0b21FbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVsZW1l
bnQuaXNDdXN0b21FbGVtZW50KCkpOworICAgIGF1dG8qIHdpbmRvdyA9IGVsZW1lbnQuZG9jdW1l
bnQoKS5kb21XaW5kb3coKTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvKiByZWdpc3RyeSA9IHdpbmRvdy0+Y3VzdG9tRWxlbWVudHNSZWdpc3Ry
eSgpOworICAgIGlmICghcmVnaXN0cnkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIHJlZ2lzdHJ5LT5maW5kSW50ZXJmYWNlKGVsZW1lbnQudGFnUU5hbWUoKSk7Cit9CisK
K3ZvaWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6ZW5xdWV1ZUNvbm5lY3RlZENhbGxiYWNrSWZO
ZWVkZWQoRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBhdXRvKiBlbGVtZW50SW50ZXJmYWNlID0g
ZmluZEludGVyZmFjZUZvckN1c3RvbUVsZW1lbnQoZWxlbWVudCk7CisgICAgaWYgKCFlbGVtZW50
SW50ZXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0
b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkK
KyAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKHtMaWZlY3ljbGVRdWV1ZUl0ZW06OlR5cGU6
OkNvbm5lY3RlZCwgZWxlbWVudCwgKmVsZW1lbnRJbnRlcmZhY2V9KTsKK30KKwordm9pZCBMaWZl
Y3ljbGVDYWxsYmFja1F1ZXVlOjplbnF1ZXVlRGlzY29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRlZChF
bGVtZW50JiBlbGVtZW50KQoreworICAgIGF1dG8qIGVsZW1lbnRJbnRlcmZhY2UgPSBmaW5kSW50
ZXJmYWNlRm9yQ3VzdG9tRWxlbWVudChlbGVtZW50KTsKKyAgICBpZiAoIWVsZW1lbnRJbnRlcmZh
Y2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1l
bnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQorICAgICAg
ICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQoe0xpZmVjeWNsZVF1ZXVlSXRlbTo6VHlwZTo6RGlzY29u
bmVjdGVkLCBlbGVtZW50LCAqZWxlbWVudEludGVyZmFjZX0pOworfQorCit2b2lkIExpZmVjeWNs
ZUNhbGxiYWNrUXVldWU6OmVucXVldWVBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tJZk5lZWRlZChF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQor
eworICAgIGF1dG8qIGVsZW1lbnRJbnRlcmZhY2UgPSBmaW5kSW50ZXJmYWNlRm9yQ3VzdG9tRWxl
bWVudChlbGVtZW50KTsKKyAgICBpZiAoIWVsZW1lbnRJbnRlcmZhY2UgfHwgIWVsZW1lbnRJbnRl
cmZhY2UtPm9ic2VydmVzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0b21FbGVtZW50TGlmZWN5
Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkKKyAgICAgICAgcXVldWUt
Pm1faXRlbXMuYXBwZW5kKHtlbGVtZW50LCAqZWxlbWVudEludGVyZmFjZSwgYXR0cmlidXRlTmFt
ZSwgb2xkVmFsdWUsIG5ld1ZhbHVlfSk7Cit9CisKK3ZvaWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1
ZTo6aW52b2tlQWxsKCkKK3sKKyAgICBWZWN0b3I8TGlmZWN5Y2xlUXVldWVJdGVtPiBpdGVtczsK
KyAgICBpdGVtcy5zd2FwKG1faXRlbXMpOworICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKQor
ICAgICAgICBpdGVtLmludm9rZSgpOworfQorCitMaWZlY3ljbGVDYWxsYmFja1F1ZXVlKiBDdXN0
b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKQor
eworICAgIC8vIEZJWE1FOiBUaGlzIGVhcmx5IGV4aXQgaW5kaWNhdGVzIGEgYnVnIHRoYXQgc29t
ZSBET00gQVBJIGlzIG1pc3NpbmcgQ0VSZWFjdGlvbnMKKyAgICBpZiAoIXNfY3VycmVudFByb2Nl
c3NpbmdTdGFjaykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiYgcXVldWUg
PSBzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2stPm1fcXVldWU7CisgICAgaWYgKCFxdWV1ZSkgLy8g
V2UgdXNlIGEgcmF3IHBvaW50ZXIgdG8gYXZvaWQgZ2VuZWFyaW5nIGNvZGUgdG8gZGVsZXRlIGl0
IGluIH5DdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrLgorICAgICAgICBxdWV1
ZSA9IG5ldyBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlOworICAgIHJldHVybiBxdWV1ZTsKK30KKwor
Q3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjayogQ3VzdG9tRWxlbWVudExpZmVj
eWNsZVByb2Nlc3NpbmdTdGFjazo6c19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrID0gbnVsbHB0cjsK
Kwordm9pZCBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOjpwcm9jZXNzUXVl
dWUoKQoreworICAgIEFTU0VSVChtX3F1ZXVlKTsKKyAgICBtX3F1ZXVlLT5pbnZva2VBbGwoKTsK
KyAgICBkZWxldGUgbV9xdWV1ZTsKKyAgICBtX3F1ZXVlID0gbnVsbHB0cjsKK30KKworfQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlLmNwcAkocmV2aXNpb24gMjA0NjI3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMaWZlY3ljbGVDYWxs
YmFja1F1ZXVlLmgiCisjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKIAog
I2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCiAKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBMaWZlY3ljbGVRdWV1ZUl0ZW0geworY2xhc3MgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWVJdGVtIHsKIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIFR5cGUg
ewogICAgICAgICBFbGVtZW50VXBncmFkZSwKQEAgLTQ5LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIEF0dHJpYnV0ZUNoYW5nZWQsCiAgICAgfTsKIAotICAgIExpZmVjeWNsZVF1ZXVlSXRl
bShUeXBlIHR5cGUsIEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYg
ZWxlbWVudEludGVyZmFjZSkKKyAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0ZW0oVHlw
ZSB0eXBlLCBFbGVtZW50JiBlbGVtZW50LCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmIGVsZW1l
bnRJbnRlcmZhY2UpCiAgICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9lbGVtZW50
KGVsZW1lbnQpCiAgICAgICAgICwgbV9pbnRlcmZhY2UoZWxlbWVudEludGVyZmFjZSkKICAgICB7
IH0KIAotICAgIExpZmVjeWNsZVF1ZXVlSXRlbShFbGVtZW50JiBlbGVtZW50LCBKU0N1c3RvbUVs
ZW1lbnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhY2UsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmV3VmFsdWUpCisgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtKEVsZW1l
bnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxlbWVudEludGVyZmFjZSwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBv
bGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkKICAgICAgICAgOiBtX3R5cGUo
VHlwZTo6QXR0cmlidXRlQ2hhbmdlZCkKICAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKICAg
ICAgICAgLCBtX2ludGVyZmFjZShlbGVtZW50SW50ZXJmYWNlKQpAQCAtOTIsMTggKzkyLDE4IEBA
IHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1fbmV3VmFsdWU7CiB9OwogCi1MaWZlY3ljbGVD
YWxsYmFja1F1ZXVlOjpMaWZlY3ljbGVDYWxsYmFja1F1ZXVlKCkKK0N1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSgpCiB7IH0KIAotTGlmZWN5Y2xl
Q2FsbGJhY2tRdWV1ZTo6fkxpZmVjeWNsZUNhbGxiYWNrUXVldWUoKQorQ3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWU6On5DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSgpCiB7CiAgICAgQVNTRVJU
KG1faXRlbXMuaXNFbXB0eSgpKTsKIH0KIAotdm9pZCBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlOjpl
bnF1ZXVlRWxlbWVudFVwZ3JhZGUoRWxlbWVudCYgZWxlbWVudCwgSlNDdXN0b21FbGVtZW50SW50
ZXJmYWNlJiBlbGVtZW50SW50ZXJmYWNlKQordm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZTo6ZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVu
dEludGVyZmFjZSYgZWxlbWVudEludGVyZmFjZSkKIHsKLSAgICBpZiAoYXV0byogcXVldWUgPSBD
dXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUo
KSkKLSAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKExpZmVjeWNsZVF1ZXVlSXRlbShMaWZl
Y3ljbGVRdWV1ZUl0ZW06OlR5cGU6OkVsZW1lbnRVcGdyYWRlLCBlbGVtZW50LCBlbGVtZW50SW50
ZXJmYWNlKSk7CisgICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3Rh
Y2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQorICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQo
e0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbTo6VHlwZTo6RWxlbWVudFVwZ3JhZGUsIGVs
ZW1lbnQsIGVsZW1lbnRJbnRlcmZhY2V9KTsKIH0KIAogc3RhdGljIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZSogZmluZEludGVyZmFjZUZvckN1c3RvbUVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkK
QEAgLTEyMCw1OSArMTIwLDU5IEBAIHN0YXRpYyBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UqIGZp
bmRJbnQKICAgICByZXR1cm4gcmVnaXN0cnktPmZpbmRJbnRlcmZhY2UoZWxlbWVudC50YWdRTmFt
ZSgpKTsKIH0KIAotdm9pZCBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlOjplbnF1ZXVlQ29ubmVjdGVk
Q2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiBlbGVtZW50KQordm9pZCBDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZTo6ZW5xdWV1ZUNvbm5lY3RlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYgZWxl
bWVudCkKIHsKICAgICBhdXRvKiBlbGVtZW50SW50ZXJmYWNlID0gZmluZEludGVyZmFjZUZvckN1
c3RvbUVsZW1lbnQoZWxlbWVudCk7CiAgICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0b21FbGVtZW50TGlmZWN5Y2xl
UHJvY2Vzc2luZ1N0YWNrOjplbnN1cmVDdXJyZW50UXVldWUoKSkKLSAgICAgICAgcXVldWUtPm1f
aXRlbXMuYXBwZW5kKHtMaWZlY3ljbGVRdWV1ZUl0ZW06OlR5cGU6OkNvbm5lY3RlZCwgZWxlbWVu
dCwgKmVsZW1lbnRJbnRlcmZhY2V9KTsKKyAgICBpZiAoYXV0byogcXVldWUgPSBDdXN0b21FbGVt
ZW50UmVhY3Rpb25TdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkpCisgICAgICAgIHF1ZXVlLT5t
X2l0ZW1zLmFwcGVuZCh7Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtOjpUeXBlOjpDb25u
ZWN0ZWQsIGVsZW1lbnQsICplbGVtZW50SW50ZXJmYWNlfSk7CiB9CiAKLXZvaWQgTGlmZWN5Y2xl
Q2FsbGJhY2tRdWV1ZTo6ZW5xdWV1ZURpc2Nvbm5lY3RlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVu
dCYgZWxlbWVudCkKK3ZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVEaXNj
b25uZWN0ZWRDYWxsYmFja0lmTmVlZGVkKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgYXV0byog
ZWxlbWVudEludGVyZmFjZSA9IGZpbmRJbnRlcmZhY2VGb3JDdXN0b21FbGVtZW50KGVsZW1lbnQp
OwogICAgIGlmICghZWxlbWVudEludGVyZmFjZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGF1dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjazo6ZW5z
dXJlQ3VycmVudFF1ZXVlKCkpCi0gICAgICAgIHF1ZXVlLT5tX2l0ZW1zLmFwcGVuZCh7TGlmZWN5
Y2xlUXVldWVJdGVtOjpUeXBlOjpEaXNjb25uZWN0ZWQsIGVsZW1lbnQsICplbGVtZW50SW50ZXJm
YWNlfSk7CisgICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6
OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQorICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQoe0N1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbTo6VHlwZTo6RGlzY29ubmVjdGVkLCBlbGVtZW50
LCAqZWxlbWVudEludGVyZmFjZX0pOwogfQogCi12b2lkIExpZmVjeWNsZUNhbGxiYWNrUXVldWU6
OmVucXVldWVBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQordm9pZCBDdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja0lmTmVlZGVk
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUp
CiB7CiAgICAgYXV0byogZWxlbWVudEludGVyZmFjZSA9IGZpbmRJbnRlcmZhY2VGb3JDdXN0b21F
bGVtZW50KGVsZW1lbnQpOwogICAgIGlmICghZWxlbWVudEludGVyZmFjZSB8fCAhZWxlbWVudElu
dGVyZmFjZS0+b2JzZXJ2ZXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRMaWZl
Y3ljbGVQcm9jZXNzaW5nU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQorICAgIGlmIChhdXRv
KiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjplbnN1cmVDdXJyZW50UXVldWUo
KSkKICAgICAgICAgcXVldWUtPm1faXRlbXMuYXBwZW5kKHtlbGVtZW50LCAqZWxlbWVudEludGVy
ZmFjZSwgYXR0cmlidXRlTmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlfSk7CiB9CiAKLXZvaWQgTGlm
ZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6aW52b2tlQWxsKCkKK3ZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWU6Omludm9rZUFsbCgpCiB7Ci0gICAgVmVjdG9yPExpZmVjeWNsZVF1ZXVlSXRlbT4g
aXRlbXM7CisgICAgVmVjdG9yPEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbT4gaXRlbXM7
CiAgICAgaXRlbXMuc3dhcChtX2l0ZW1zKTsKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykK
ICAgICAgICAgaXRlbS5pbnZva2UoKTsKIH0KIAotTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSogQ3Vz
dG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkK
K0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKiBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6
ZW5zdXJlQ3VycmVudFF1ZXVlKCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBlYXJseSBleGl0IGlu
ZGljYXRlcyBhIGJ1ZyB0aGF0IHNvbWUgRE9NIEFQSSBpcyBtaXNzaW5nIENFUmVhY3Rpb25zCiAg
ICAgaWYgKCFzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2spCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgYXV0byomIHF1ZXVlID0gc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrLT5tX3F1ZXVl
OwotICAgIGlmICghcXVldWUpIC8vIFdlIHVzZSBhIHJhdyBwb2ludGVyIHRvIGF2b2lkIGdlbmVh
cmluZyBjb2RlIHRvIGRlbGV0ZSBpdCBpbiB+Q3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3Np
bmdTdGFjay4KLSAgICAgICAgcXVldWUgPSBuZXcgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTsKKyAg
ICBpZiAoIXF1ZXVlKSAvLyBXZSB1c2UgYSByYXcgcG9pbnRlciB0byBhdm9pZCBnZW5lYXJpbmcg
Y29kZSB0byBkZWxldGUgaXQgaW4gfkN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrLgorICAgICAg
ICBxdWV1ZSA9IG5ldyBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTsKICAgICByZXR1cm4gcXVl
dWU7CiB9CiAKLUN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2sqIEN1c3RvbUVs
ZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2s6OnNfY3VycmVudFByb2Nlc3NpbmdTdGFjayA9
IG51bGxwdHI7CitDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayogQ3VzdG9tRWxlbWVudFJlYWN0
aW9uU3RhY2s6OnNfY3VycmVudFByb2Nlc3NpbmdTdGFjayA9IG51bGxwdHI7CiAKLXZvaWQgQ3Vz
dG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjazo6cHJvY2Vzc1F1ZXVlKCkKK3ZvaWQg
Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OnByb2Nlc3NRdWV1ZSgpCiB7CiAgICAgQVNTRVJU
KG1fcXVldWUpOwogICAgIG1fcXVldWUtPmludm9rZUFsbCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgJKHJldmlzaW9uIDIwNDYy
NykJKGZyb20gU291cmNlL1dlYkNvcmUvZG9tL0xpZmVjeWNsZUNhbGxiYWNrUXVldWUuaDoyMDQ2
MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQ1VT
VE9NX0VMRU1FTlRTKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOworY2xhc3MgRG9jdW1lbnQ7
CitjbGFzcyBFbGVtZW50OworY2xhc3MgTGlmZWN5Y2xlUXVldWVJdGVtOworY2xhc3MgUXVhbGlm
aWVkTmFtZTsKKworY2xhc3MgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSk7CitwdWJsaWM6CisgICAgTGlmZWN5
Y2xlQ2FsbGJhY2tRdWV1ZSgpOworICAgIH5MaWZlY3ljbGVDYWxsYmFja1F1ZXVlKCk7CisKKyAg
ICBzdGF0aWMgdm9pZCBlbnF1ZXVlRWxlbWVudFVwZ3JhZGUoRWxlbWVudCYsIEpTQ3VzdG9tRWxl
bWVudEludGVyZmFjZSYpOworICAgIHN0YXRpYyB2b2lkIGVucXVldWVDb25uZWN0ZWRDYWxsYmFj
a0lmTmVlZGVkKEVsZW1lbnQmKTsKKyAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlRGlzY29ubmVjdGVk
Q2FsbGJhY2tJZk5lZWRlZChFbGVtZW50Jik7CisgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJp
YnV0ZUNoYW5nZWRDYWxsYmFja0lmTmVlZGVkKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdW
YWx1ZSk7CisKKyAgICB2b2lkIGludm9rZUFsbCgpOworCitwcml2YXRlOgorICAgIFZlY3RvcjxM
aWZlY3ljbGVRdWV1ZUl0ZW0+IG1faXRlbXM7Cit9OworCitjbGFzcyBDdXN0b21FbGVtZW50TGlm
ZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrIHsKK3B1YmxpYzoKKyAgICBDdXN0b21FbGVtZW50TGlmZWN5
Y2xlUHJvY2Vzc2luZ1N0YWNrKCkKKyAgICAgICAgOiBtX3ByZXZpb3VzUHJvY2Vzc2luZ1N0YWNr
KHNfY3VycmVudFByb2Nlc3NpbmdTdGFjaykKKyAgICB7CisgICAgICAgIHNfY3VycmVudFByb2Nl
c3NpbmdTdGFjayA9IHRoaXM7CisgICAgfQorCisgICAgfkN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQ
cm9jZXNzaW5nU3RhY2soKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fcXVldWUpKQor
ICAgICAgICAgICAgcHJvY2Vzc1F1ZXVlKCk7CisgICAgICAgIHNfY3VycmVudFByb2Nlc3NpbmdT
dGFjayA9IG1fcHJldmlvdXNQcm9jZXNzaW5nU3RhY2s7CisgICAgfQorCisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGEgcmVmZXJlbmNlIG9uY2UgImVuc3VyZSIgc3RhcnRzIHRvIHdvcmsu
CisgICAgc3RhdGljIExpZmVjeWNsZUNhbGxiYWNrUXVldWUqIGVuc3VyZUN1cnJlbnRRdWV1ZSgp
OworCisgICAgc3RhdGljIGJvb2wgaGFzQ3VycmVudFByb2Nlc3NpbmdTdGFjaygpIHsgcmV0dXJu
IHNfY3VycmVudFByb2Nlc3NpbmdTdGFjazsgfQorCitwcml2YXRlOgorICAgIHZvaWQgcHJvY2Vz
c1F1ZXVlKCk7CisKKyAgICBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlKiBtX3F1ZXVlIHsgbnVsbHB0
ciB9OworICAgIEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2sqIG1fcHJldmlv
dXNQcm9jZXNzaW5nU3RhY2s7CisKKyAgICBzdGF0aWMgQ3VzdG9tRWxlbWVudExpZmVjeWNsZVBy
b2Nlc3NpbmdTdGFjayogc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrOworfTsKKworfQorCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZS5oCShyZXZpc2lvbiAyMDQ2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDE0IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTsKIGNsYXNz
IERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKLWNsYXNzIExpZmVjeWNsZVF1ZXVlSXRlbTsKK2Ns
YXNzIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbTsKIGNsYXNzIFF1YWxpZmllZE5hbWU7
CiAKLWNsYXNzIExpZmVjeWNsZUNhbGxiYWNrUXVldWUgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKExpZmVjeWNsZUNhbGxiYWNrUXVldWUpOworY2xhc3MgQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlKTsKIHB1YmxpYzoKLSAgICBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlKCk7Ci0gICAgfkxpZmVj
eWNsZUNhbGxiYWNrUXVldWUoKTsKKyAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSgpOwor
ICAgIH5DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSgpOwogCiAgICAgc3RhdGljIHZvaWQgZW5x
dWV1ZUVsZW1lbnRVcGdyYWRlKEVsZW1lbnQmLCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmKTsK
ICAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlQ29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50
Jik7CkBAIC01MywxOCArNTMsMTggQEAgcHVibGljOgogICAgIHZvaWQgaW52b2tlQWxsKCk7CiAK
IHByaXZhdGU6Ci0gICAgVmVjdG9yPExpZmVjeWNsZVF1ZXVlSXRlbT4gbV9pdGVtczsKKyAgICBW
ZWN0b3I8Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVtPiBtX2l0ZW1zOwogfTsKIAotY2xh
c3MgQ3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjayB7CitjbGFzcyBDdXN0b21F
bGVtZW50UmVhY3Rpb25TdGFjayB7CiBwdWJsaWM6Ci0gICAgQ3VzdG9tRWxlbWVudExpZmVjeWNs
ZVByb2Nlc3NpbmdTdGFjaygpCisgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2soKQogICAg
ICAgICA6IG1fcHJldmlvdXNQcm9jZXNzaW5nU3RhY2soc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNr
KQogICAgIHsKICAgICAgICAgc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrID0gdGhpczsKICAgICB9
CiAKLSAgICB+Q3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nlc3NpbmdTdGFjaygpCisgICAgfkN1
c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKCkKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSht
X3F1ZXVlKSkKICAgICAgICAgICAgIHByb2Nlc3NRdWV1ZSgpOwpAQCAtNzIsMTcgKzcyLDE3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSByZWZlcmVu
Y2Ugb25jZSAiZW5zdXJlIiBzdGFydHMgdG8gd29yay4KLSAgICBzdGF0aWMgTGlmZWN5Y2xlQ2Fs
bGJhY2tRdWV1ZSogZW5zdXJlQ3VycmVudFF1ZXVlKCk7CisgICAgc3RhdGljIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlKiBlbnN1cmVDdXJyZW50UXVldWUoKTsKIAogICAgIHN0YXRpYyBib29s
IGhhc0N1cnJlbnRQcm9jZXNzaW5nU3RhY2soKSB7IHJldHVybiBzX2N1cnJlbnRQcm9jZXNzaW5n
U3RhY2s7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIHByb2Nlc3NRdWV1ZSgpOwogCi0gICAgTGlm
ZWN5Y2xlQ2FsbGJhY2tRdWV1ZSogbV9xdWV1ZSB7IG51bGxwdHIgfTsKLSAgICBDdXN0b21FbGVt
ZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKiBtX3ByZXZpb3VzUHJvY2Vzc2luZ1N0YWNrOwor
ICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKiBtX3F1ZXVlIHsgbnVsbHB0ciB9OworICAg
IEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKiBtX3ByZXZpb3VzUHJvY2Vzc2luZ1N0YWNrOwog
Ci0gICAgc3RhdGljIEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2sqIHNfY3Vy
cmVudFByb2Nlc3NpbmdTdGFjazsKKyAgICBzdGF0aWMgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3Rh
Y2sqIHNfY3VycmVudFByb2Nlc3NpbmdTdGFjazsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkocmV2aXNpb24gMjA0NjI3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIkNvbXBv
c2l0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNs
dWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5o
IgogI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCIKICNpbmNsdWRlICJDdXN0b21F
dmVudC5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCkBAIC0xMDUsNyArMTA2LDYg
QEAKICNpbmNsdWRlICJKU01vZHVsZUxvYWRlci5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKICNpbmNsdWRlICJMYW5ndWFnZS5oIgotI2luY2x1ZGUgIkxpZmVjeWNsZUNhbGxiYWNrUXVl
dWUuaCIKICNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJNYWluRnJhbWUuaCIKQEAgLTEwOTMsNyArMTA5Myw3IEBAIHN0YXRpYyBSZWY8
SFRNTEVsZW1lbnQ+IGNyZWF0ZUZhbGxiYWNrSFQKICAgICAgICAgICAgIGlmIChhdXRvKiBlbGVt
ZW50SW50ZXJmYWNlID0gcmVnaXN0cnktPmZpbmRJbnRlcmZhY2UobmFtZSkpIHsKICAgICAgICAg
ICAgICAgICBhdXRvIGVsZW1lbnQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKG5hbWUsIGRvY3VtZW50
KTsKICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRJc1VucmVzb2x2ZWRDdXN0b21FbGVtZW50
KCk7Ci0gICAgICAgICAgICAgICAgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6ZW5xdWV1ZUVsZW1l
bnRVcGdyYWRlKGVsZW1lbnQuZ2V0KCksICplbGVtZW50SW50ZXJmYWNlKTsKKyAgICAgICAgICAg
ICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKGVs
ZW1lbnQuZ2V0KCksICplbGVtZW50SW50ZXJmYWNlKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbWVudDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAkocmV2aXNpb24gMjA0NjI3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ2xpZW50UmVjdExp
c3QuaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZS5oIgogI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJET01Ub2tlbkxpc3QuaCIKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCkBAIC02OSw3ICs3
MCw2IEBACiAjaW5jbHVkZSAiSlNMYXp5RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIktleWJv
YXJkRXZlbnQuaCIKICNpbmNsdWRlICJLZXlmcmFtZUVmZmVjdC5oIgotI2luY2x1ZGUgIkxpZmVj
eWNsZUNhbGxiYWNrUXVldWUuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5oIgogI2luY2x1ZGUgIk11dGF0aW9uUmVjb3Jk
LmgiCkBAIC0xMjkzLDcgKzEyOTMsNyBAQCB2b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhCiAKICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQogICAgIGlmIChVTkxJS0VM
WShpc0N1c3RvbUVsZW1lbnQoKSkpCi0gICAgICAgIExpZmVjeWNsZUNhbGxiYWNrUXVldWU6OmVu
cXVldWVBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tJZk5lZWRlZCgqdGhpcywgbmFtZSwgb2xkVmFs
dWUsIG5ld1ZhbHVlKTsKKyAgICAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVl
dWVBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tJZk5lZWRlZCgqdGhpcywgbmFtZSwgb2xkVmFsdWUs
IG5ld1ZhbHVlKTsKICNlbmRpZgogCiAgICAgaWYgKHZhbHVlSXNTYW1lQXNCZWZvcmUpCkBAIC0x
NTk4LDcgKzE1OTgsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1l
CiAKICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQogICAgIGlmIChuZXdEb2N1bWVudCAmJiBV
TkxJS0VMWShpc0N1c3RvbUVsZW1lbnQoKSkpCi0gICAgICAgIExpZmVjeWNsZUNhbGxiYWNrUXVl
dWU6OmVucXVldWVDb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVkKCp0aGlzKTsKKyAgICAgICAgQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVDb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVk
KCp0aGlzKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CkBAIC0xNjQ5LDcg
KzE2NDksNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmCiAKICNp
ZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQogICAgICAgICBpZiAob2xkRG9jdW1lbnQgJiYgVU5M
SUtFTFkoaXNDdXN0b21FbGVtZW50KCkpKQotICAgICAgICAgICAgTGlmZWN5Y2xlQ2FsbGJhY2tR
dWV1ZTo6ZW5xdWV1ZURpc2Nvbm5lY3RlZENhbGxiYWNrSWZOZWVkZWQoKnRoaXMpOworICAgICAg
ICAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVEaXNjb25uZWN0ZWRDYWxs
YmFja0lmTmVlZGVkKCp0aGlzKTsKICNlbmRpZgogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0xpZmVjeWNsZUNhbGxiYWNrUXVldWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9MaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmNwcAkocmV2aXNpb24gMjA0NjI3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0xpZmVjeWNsZUNhbGxiYWNrUXVldWUuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGlmZWN5
Y2xlQ2FsbGJhY2tRdWV1ZS5oIgotCi0jaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKLQotI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNp
bmNsdWRlIDxoZWFwL0hlYXAuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTGlmZWN5Y2xlUXVl
dWVJdGVtIHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBFbGVtZW50
VXBncmFkZSwKLSAgICAgICAgQ29ubmVjdGVkLAotICAgICAgICBEaXNjb25uZWN0ZWQsCi0gICAg
ICAgIEF0dHJpYnV0ZUNoYW5nZWQsCi0gICAgfTsKLQotICAgIExpZmVjeWNsZVF1ZXVlSXRlbShU
eXBlIHR5cGUsIEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYgZWxl
bWVudEludGVyZmFjZSkKLSAgICAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAgICAgLCBtX2VsZW1l
bnQoZWxlbWVudCkKLSAgICAgICAgLCBtX2ludGVyZmFjZShlbGVtZW50SW50ZXJmYWNlKQotICAg
IHsgfQotCi0gICAgTGlmZWN5Y2xlUXVldWVJdGVtKEVsZW1lbnQmIGVsZW1lbnQsIEpTQ3VzdG9t
RWxlbWVudEludGVyZmFjZSYgZWxlbWVudEludGVyZmFjZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuZXdWYWx1ZSkKLSAgICAgICAgOiBtX3R5cGUoVHlwZTo6QXR0cmlidXRlQ2hhbmdl
ZCkKLSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgLCBtX2ludGVyZmFjZShl
bGVtZW50SW50ZXJmYWNlKQotICAgICAgICAsIG1fYXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1l
KQotICAgICAgICAsIG1fb2xkVmFsdWUob2xkVmFsdWUpCi0gICAgICAgICwgbV9uZXdWYWx1ZShu
ZXdWYWx1ZSkKLSAgICB7IH0KLQotICAgIHZvaWQgaW52b2tlKCkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6RWxlbWVudFVwZ3JhZGU6Ci0gICAg
ICAgICAgICBtX2ludGVyZmFjZS0+dXBncmFkZUVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6OkNvbm5lY3RlZDoKLSAgICAgICAg
ICAgIG1faW50ZXJmYWNlLT5pbnZva2VDb25uZWN0ZWRDYWxsYmFjayhtX2VsZW1lbnQuZ2V0KCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6RGlzY29ubmVjdGVkOgot
ICAgICAgICAgICAgbV9pbnRlcmZhY2UtPmludm9rZURpc2Nvbm5lY3RlZENhbGxiYWNrKG1fZWxl
bWVudC5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpBdHRy
aWJ1dGVDaGFuZ2VkOgotICAgICAgICAgICAgQVNTRVJUKG1fYXR0cmlidXRlTmFtZSk7Ci0gICAg
ICAgICAgICBtX2ludGVyZmFjZS0+aW52b2tlQXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG1fZWxl
bWVudC5nZXQoKSwgbV9hdHRyaWJ1dGVOYW1lLnZhbHVlKCksIG1fb2xkVmFsdWUsIG1fbmV3VmFs
dWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgVHlwZSBtX3R5cGU7Ci0gICAgUmVmPEVsZW1lbnQ+IG1fZWxlbWVudDsKLSAgICBSZWY8SlND
dXN0b21FbGVtZW50SW50ZXJmYWNlPiBtX2ludGVyZmFjZTsKLSAgICBPcHRpb25hbDxRdWFsaWZp
ZWROYW1lPiBtX2F0dHJpYnV0ZU5hbWU7Ci0gICAgQXRvbWljU3RyaW5nIG1fb2xkVmFsdWU7Ci0g
ICAgQXRvbWljU3RyaW5nIG1fbmV3VmFsdWU7Ci19OwotCi1MaWZlY3ljbGVDYWxsYmFja1F1ZXVl
OjpMaWZlY3ljbGVDYWxsYmFja1F1ZXVlKCkKLXsgfQotCi1MaWZlY3ljbGVDYWxsYmFja1F1ZXVl
Ojp+TGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSgpCi17Ci0gICAgQVNTRVJUKG1faXRlbXMuaXNFbXB0
eSgpKTsKLX0KLQotdm9pZCBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlOjplbnF1ZXVlRWxlbWVudFVw
Z3JhZGUoRWxlbWVudCYgZWxlbWVudCwgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJiBlbGVtZW50
SW50ZXJmYWNlKQotewotICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRMaWZlY3lj
bGVQcm9jZXNzaW5nU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQotICAgICAgICBxdWV1ZS0+
bV9pdGVtcy5hcHBlbmQoTGlmZWN5Y2xlUXVldWVJdGVtKExpZmVjeWNsZVF1ZXVlSXRlbTo6VHlw
ZTo6RWxlbWVudFVwZ3JhZGUsIGVsZW1lbnQsIGVsZW1lbnRJbnRlcmZhY2UpKTsKLX0KLQotc3Rh
dGljIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSogZmluZEludGVyZmFjZUZvckN1c3RvbUVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBBU1NFUlQoZWxlbWVudC5pc0N1c3RvbUVsZW1l
bnQoKSk7Ci0gICAgYXV0byogd2luZG93ID0gZWxlbWVudC5kb2N1bWVudCgpLmRvbVdpbmRvdygp
OwotICAgIGlmICghd2luZG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8q
IHJlZ2lzdHJ5ID0gd2luZG93LT5jdXN0b21FbGVtZW50c1JlZ2lzdHJ5KCk7Ci0gICAgaWYgKCFy
ZWdpc3RyeSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcmVnaXN0cnkt
PmZpbmRJbnRlcmZhY2UoZWxlbWVudC50YWdRTmFtZSgpKTsKLX0KLQotdm9pZCBMaWZlY3ljbGVD
YWxsYmFja1F1ZXVlOjplbnF1ZXVlQ29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiBl
bGVtZW50KQotewotICAgIGF1dG8qIGVsZW1lbnRJbnRlcmZhY2UgPSBmaW5kSW50ZXJmYWNlRm9y
Q3VzdG9tRWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAoIWVsZW1lbnRJbnRlcmZhY2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRMaWZlY3lj
bGVQcm9jZXNzaW5nU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQotICAgICAgICBxdWV1ZS0+
bV9pdGVtcy5hcHBlbmQoe0xpZmVjeWNsZVF1ZXVlSXRlbTo6VHlwZTo6Q29ubmVjdGVkLCBlbGVt
ZW50LCAqZWxlbWVudEludGVyZmFjZX0pOwotfQotCi12b2lkIExpZmVjeWNsZUNhbGxiYWNrUXVl
dWU6OmVucXVldWVEaXNjb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVkKEVsZW1lbnQmIGVsZW1lbnQp
Ci17Ci0gICAgYXV0byogZWxlbWVudEludGVyZmFjZSA9IGZpbmRJbnRlcmZhY2VGb3JDdXN0b21F
bGVtZW50KGVsZW1lbnQpOwotICAgIGlmICghZWxlbWVudEludGVyZmFjZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGF1dG8qIHF1ZXVlID0gQ3VzdG9tRWxlbWVudExpZmVjeWNsZVByb2Nl
c3NpbmdTdGFjazo6ZW5zdXJlQ3VycmVudFF1ZXVlKCkpCi0gICAgICAgIHF1ZXVlLT5tX2l0ZW1z
LmFwcGVuZCh7TGlmZWN5Y2xlUXVldWVJdGVtOjpUeXBlOjpEaXNjb25uZWN0ZWQsIGVsZW1lbnQs
ICplbGVtZW50SW50ZXJmYWNlfSk7Ci19Ci0KLXZvaWQgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZTo6
ZW5xdWV1ZUF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja0lmTmVlZGVkKEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
b2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCi17Ci0gICAgYXV0byogZWxl
bWVudEludGVyZmFjZSA9IGZpbmRJbnRlcmZhY2VGb3JDdXN0b21FbGVtZW50KGVsZW1lbnQpOwot
ICAgIGlmICghZWxlbWVudEludGVyZmFjZSB8fCAhZWxlbWVudEludGVyZmFjZS0+b2JzZXJ2ZXNB
dHRyaWJ1dGUoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChhdXRvKiBxdWV1ZSA9IEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3Rh
Y2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpKQotICAgICAgICBxdWV1ZS0+bV9pdGVtcy5hcHBlbmQo
e2VsZW1lbnQsICplbGVtZW50SW50ZXJmYWNlLCBhdHRyaWJ1dGVOYW1lLCBvbGRWYWx1ZSwgbmV3
VmFsdWV9KTsKLX0KLQotdm9pZCBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlOjppbnZva2VBbGwoKQot
ewotICAgIFZlY3RvcjxMaWZlY3ljbGVRdWV1ZUl0ZW0+IGl0ZW1zOwotICAgIGl0ZW1zLnN3YXAo
bV9pdGVtcyk7Ci0gICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpCi0gICAgICAgIGl0ZW0uaW52
b2tlKCk7Ci19Ci0KLUxpZmVjeWNsZUNhbGxiYWNrUXVldWUqIEN1c3RvbUVsZW1lbnRMaWZlY3lj
bGVQcm9jZXNzaW5nU3RhY2s6OmVuc3VyZUN1cnJlbnRRdWV1ZSgpCi17Ci0gICAgLy8gRklYTUU6
IFRoaXMgZWFybHkgZXhpdCBpbmRpY2F0ZXMgYSBidWcgdGhhdCBzb21lIERPTSBBUEkgaXMgbWlz
c2luZyBDRVJlYWN0aW9ucwotICAgIGlmICghc19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8qJiBxdWV1ZSA9IHNfY3VycmVudFByb2Nl
c3NpbmdTdGFjay0+bV9xdWV1ZTsKLSAgICBpZiAoIXF1ZXVlKSAvLyBXZSB1c2UgYSByYXcgcG9p
bnRlciB0byBhdm9pZCBnZW5lYXJpbmcgY29kZSB0byBkZWxldGUgaXQgaW4gfkN1c3RvbUVsZW1l
bnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2suCi0gICAgICAgIHF1ZXVlID0gbmV3IExpZmVjeWNs
ZUNhbGxiYWNrUXVldWU7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfQotCi1DdXN0b21FbGVtZW50TGlm
ZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKiBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0
YWNrOjpzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2sgPSBudWxscHRyOwotCi12b2lkIEN1c3RvbUVs
ZW1lbnRMaWZlY3ljbGVQcm9jZXNzaW5nU3RhY2s6OnByb2Nlc3NRdWV1ZSgpCi17Ci0gICAgQVNT
RVJUKG1fcXVldWUpOwotICAgIG1fcXVldWUtPmludm9rZUFsbCgpOwotICAgIGRlbGV0ZSBtX3F1
ZXVlOwotICAgIG1fcXVldWUgPSBudWxscHRyOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0xpZmVjeWNsZUNhbGxiYWNrUXVldWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5oCShyZXZpc2lvbiAyMDQ2
MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5oCShub25l
eGlzdGVudCkKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKENVU1RPTV9F
TEVNRU5UUykKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTsKLWNsYXNzIERvY3VtZW50OwotY2xh
c3MgRWxlbWVudDsKLWNsYXNzIExpZmVjeWNsZVF1ZXVlSXRlbTsKLWNsYXNzIFF1YWxpZmllZE5h
bWU7Ci0KLWNsYXNzIExpZmVjeWNsZUNhbGxiYWNrUXVldWUgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKExpZmVjeWNsZUNhbGxiYWNrUXVldWUpOwotcHVibGljOgotICAgIExpZmVjeWNsZUNh
bGxiYWNrUXVldWUoKTsKLSAgICB+TGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSgpOwotCi0gICAgc3Rh
dGljIHZvaWQgZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKEVsZW1lbnQmLCBKU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UmKTsKLSAgICBzdGF0aWMgdm9pZCBlbnF1ZXVlQ29ubmVjdGVkQ2FsbGJhY2tJZk5l
ZWRlZChFbGVtZW50Jik7Ci0gICAgc3RhdGljIHZvaWQgZW5xdWV1ZURpc2Nvbm5lY3RlZENhbGxi
YWNrSWZOZWVkZWQoRWxlbWVudCYpOwotICAgIHN0YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1dGVD
aGFuZ2VkQ2FsbGJhY2tJZk5lZWRlZChFbGVtZW50JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUp
OwotCi0gICAgdm9pZCBpbnZva2VBbGwoKTsKLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8TGlmZWN5
Y2xlUXVldWVJdGVtPiBtX2l0ZW1zOwotfTsKLQotY2xhc3MgQ3VzdG9tRWxlbWVudExpZmVjeWNs
ZVByb2Nlc3NpbmdTdGFjayB7Ci1wdWJsaWM6Ci0gICAgQ3VzdG9tRWxlbWVudExpZmVjeWNsZVBy
b2Nlc3NpbmdTdGFjaygpCi0gICAgICAgIDogbV9wcmV2aW91c1Byb2Nlc3NpbmdTdGFjayhzX2N1
cnJlbnRQcm9jZXNzaW5nU3RhY2spCi0gICAgewotICAgICAgICBzX2N1cnJlbnRQcm9jZXNzaW5n
U3RhY2sgPSB0aGlzOwotICAgIH0KLQotICAgIH5DdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vz
c2luZ1N0YWNrKCkKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShtX3F1ZXVlKSkKLSAgICAg
ICAgICAgIHByb2Nlc3NRdWV1ZSgpOwotICAgICAgICBzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2sg
PSBtX3ByZXZpb3VzUHJvY2Vzc2luZ1N0YWNrOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBhIHJlZmVyZW5jZSBvbmNlICJlbnN1cmUiIHN0YXJ0cyB0byB3b3JrLgotICAg
IHN0YXRpYyBMaWZlY3ljbGVDYWxsYmFja1F1ZXVlKiBlbnN1cmVDdXJyZW50UXVldWUoKTsKLQot
ICAgIHN0YXRpYyBib29sIGhhc0N1cnJlbnRQcm9jZXNzaW5nU3RhY2soKSB7IHJldHVybiBzX2N1
cnJlbnRQcm9jZXNzaW5nU3RhY2s7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIHByb2Nlc3NRdWV1
ZSgpOwotCi0gICAgTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZSogbV9xdWV1ZSB7IG51bGxwdHIgfTsK
LSAgICBDdXN0b21FbGVtZW50TGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKiBtX3ByZXZpb3VzUHJv
Y2Vzc2luZ1N0YWNrOwotCi0gICAgc3RhdGljIEN1c3RvbUVsZW1lbnRMaWZlY3ljbGVQcm9jZXNz
aW5nU3RhY2sqIHNfY3VycmVudFByb2Nlc3NpbmdTdGFjazsKLX07Ci0KLX0KLQotI2VuZGlmCg==
</data>
<flag name="review"
          id="309978"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>