<?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>30696</bug_id>
          
          <creation_ts>2009-10-22 17:21:49 -0700</creation_ts>
          <short_desc>Add isolated worlds support to the JSC bindings.</short_desc>
          <delta_ts>2009-10-22 21:34:27 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>laszlo.gombos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>157056</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-10-22 17:21:49 -0700</bug_when>
    <thetext>Presently the JSC engine does not support isolated worlds.  Fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157060</commentid>
    <comment_count>1</comment_count>
      <attachid>41701</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-10-22 17:31:24 -0700</bug_when>
    <thetext>Created attachment 41701
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157064</commentid>
    <comment_count>2</comment_count>
      <attachid>41701</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-10-22 17:42:14 -0700</bug_when>
    <thetext>Comment on attachment 41701
The patch


&gt; +class JSGlobalDataWorldIterator
&gt; +{

The { should be on the line above.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157102</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-10-22 21:34:27 -0700</bug_when>
    <thetext>Committed revision 49963.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41701</attachid>
            <date>2009-10-22 17:31:24 -0700</date>
            <delta_ts>2009-10-22 17:42:13 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>patch.isol.8.13.txt</filename>
            <type>text/plain</type>
            <size>170091</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTk1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjU4IEBACisyMDA5LTEwLTE2ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xv
dWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnICYgR2VvZmYg
R2FyZW4uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMwNjk2CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBJc29sYXRlZFdvcmxkcyB0byBKU0MgYmlu
ZGluZ3MuCisKKyAgICAgICAgQW4gSXNvbGF0ZWRXb3JsZCBpcyBiYXNpY2FsbHkgYSBwYXJhbGxl
bCwgc2VwYXJhdGUgY29weSBvZiB0aGUgd2luZG93IHNoZWxscyBhbmQgRE9NIHdyYXBwZXIgb2Jq
ZWN0cyBmb3IKKyAgICAgICAgYSBnaXZlbiBkb2N1bWVudC4gIFRvIHN1cHBvcnQgaXNvbGF0aW9u
IHRoaXMgcGF0Y2g6CisKKyAgICAgICAgICAgICogQWRkcyBzdXBwb3J0IHRvIHRoZSBTY3JpcHRD
b250cm9sbGVyIHRvIHRyYWNrIG11bHRpcGxlIHdpbmRvdyBzaGVsbHMsIG9uZSBwZXIgd29ybGQu
CisgICAgICAgICAgICAqIEFkZHMgc3VwcG9ydCB0byBEb2N1bWVudCB0byBzdXBwb3J0IG11bHRp
cGxlIHNlcGFyYXRlIHdyYXBwZXItbWFwcywgb25lIHBlciB3b3JsZC4KKyAgICAgICAgICAgICog
UmVwbGFjZXMgdGhlIHNpbmdsZSBnbG9iYWwgRE9NIHdyYXBwZXIgbWFwIChvbiB0aGUgV2ViQ29y
ZUpTQ2xpZW50RGF0YSkgd2l0aCBzZXBhcmF0ZSBtYXBzLAorICAgICAgICAgICAgICBzdG9yZWQg
b24gdGhlIChuZXcpIElzb2xhdGVkV29ybGQgb2JqZWN0cy4KKworICAgICAgICBJbiBhZGRpdGlv
biB0byBzdXBwb3J0aW5nIHNlcGFyYXRlIGNvcGllcyBvZiB0aGVzZSBvYmplY3RzLCB0d28gb3Ro
ZXIgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKworICAgICAgICAgICAgKiBJdCBpcyBuZWNlc3Nh
cnkgdG8gdHJhY2sgdGhlIGN1cnJlbnQgd29ybGQgb24gZW50cnkgaW50byBKU0MsIHNvIHRoYXQg
d2l0aGluIGNhbGxiYWNrcyBvdXQgdG8gV2ViQ29yZQorICAgICAgICAgICAgICB3ZSBjYW4gZGV0
ZXJtaW5lIHdoaWNoIHdvcmxkIChhbmQgYXMgc3VjaCwgc2V0IG9mIERPTSBiaW5kaW5ncykgd2Ug
c2hvdWxkIGJlIG9wZXJhdGluZyBvbi4KKyAgICAgICAgICAgICogRXZlbnRMaXN0ZW5lcnMgJiBD
YWxsYmFja3MgYXJlIHJ1biBpbiB0aGUgd29ybGQgdGhleSB3ZXJlIHJlZ2lzdGVyZWQgaW4uCisg
ICAgICAgICAgICAgIFRoaXMgcmVxdWlyZXMgdGhlIGhhbmRsZXIgdG8gcmV0YWluIGEgcmVmZXJl
bmNlIHRvIHRoZSB3b3JsZC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChFbmFibGVkIGV4aXN0
aW5nIGlzb2xhdGVkIHdvcmxkIGxheW91dCB0ZXN0cy4pCisKKyAgICAgICAgKiBXZWJDb3JlLmJh
c2UuZXhwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNBYnN0cmFjdFdvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpKU0Fic3RyYWN0V29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbGxiYWNrRGF0
YTo6SlNDYWxsYmFja0RhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
Ojpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQXBwbGlj
YXRpb25DYWNoZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUFwcGxpY2F0aW9u
Q2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01BcHBsaWNh
dGlvbkNhY2hlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlV3JhcHBlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0V3JhcHBlck1hcDo6Z2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTU9iamVjdFdyYXBwZXJNYXA6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpET01PYmpl
Y3RXcmFwcGVyTWFwOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0V3JhcHBl
ck1hcDo6dGFrZSk6CisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlZFdvcmxkOjpJc29sYXRlZFdv
cmxkKToKKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVkV29ybGQ6On5Jc29sYXRlZFdvcmxkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVudGVySXNvbGF0ZWRXb3JsZDo6RW50ZXJJc29sYXRlZFdvcmxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkVudGVySXNvbGF0ZWRXb3JsZDo6fkVudGVySXNvbGF0ZWRX
b3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0dsb2JhbERhdGFXb3JsZEl0ZXJhdG9yOjpKU0ds
b2JhbERhdGFXb3JsZEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTR2xvYmFsRGF0YVdv
cmxkSXRlcmF0b3I6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV2ViQ29yZTo6SlNHbG9iYWxE
YXRhV29ybGRJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkpTR2xvYmFs
RGF0YVdvcmxkSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV2ViQ29yZTo6SlNHbG9i
YWxEYXRhV29ybGRJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRD
dXJyZW50V29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9ybWFsV29ybGQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tbW9uTm9ybWFsV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9u
Q3VycmVudFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU9iamVjdEhhc2hUYWJsZU1hcDo6
bWFwRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU9iamVjdFdyYXBwZXJNYXA6Om1hcEZvcik6
CisgICAgICAgIChXZWJDb3JlOjpmb3JnZXRET01PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0Q2FjaGVkRE9NTm9kZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yZ2V0RE9NTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZURPTU5vZGVXcmFwcGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvcmdldEFsbERPTU5vZGVzRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Zm9yZ2V0V29ybGRPZkRPTU5vZGVzRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNP
YnNlcnZhYmxlVGhyb3VnaERPTSk6CisgICAgICAgIChXZWJDb3JlOjptYXJrRE9NTm9kZXNGb3JE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjptYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6dGFrZVdyYXBwZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnVw
ZGF0ZURPTU5vZGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjptYXJrRE9NT2JqZWN0V3Jh
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjphbGxvd3NBY2Nlc3NGcm9tRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6cHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NfRGVidWdnZXJDYWxsRnJhbWVfZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ19jYWxsSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NfY29uc3RydWN0SW5X
b3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NfZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVk
V29ybGQ6OnJlbWVtYmVyRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3Js
ZDo6Zm9yZ2V0RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3JsZDo6cmVt
ZW1iZXJTY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVkV29ybGQ6
OmZvcmdldFNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0SGFz
aFRhYmxlTWFwOjp+RE9NT2JqZWN0SGFzaFRhYmxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU9iamVjdEhhc2hUYWJsZU1hcDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVKU0Ns
aWVudERhdGE6OldlYkNvcmVKU0NsaWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29y
ZUpTQ2xpZW50RGF0YTo6Y3VycmVudFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVK
U0NsaWVudERhdGE6Om5vcm1hbFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVKU0Ns
aWVudERhdGE6OnJlbWVtYmVyV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZUpTQ2xp
ZW50RGF0YTo6Zm9yZ2V0V29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6ZGVidWdnZXJXb3JsZCk6
CisgICAgICAgIChXZWJDb3JlOjpwbHVnaW5Xb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmpl
Y3Q6OmNyZWF0ZUpTQXR0cmlidXRlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTRE9NR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OnByaW50RXJyb3JNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU0RPTVdpbmRvdyk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV2lu
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3c6OnNldFRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
OnNldEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjphZGRFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU0RPTVdpbmRvd1NoZWxs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNEZXNrdG9wTm90aWZpY2F0aW9uc0N1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU05vdGlmaWNhdGlvbjo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjopOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
IChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpj
cmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpvcGVuKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MRnJhbWVTZXRFbGVtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNw
ZWN0b3JCYWNrZW5kOjpkYXRhYmFzZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVj
dG9yQmFja2VuZDo6aW5zcGVjdGVkV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVj
dG9yQmFja2VuZDo6bm9kZUZvcklkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVu
dExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OkpT
TGF6eUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5l
cjo6cGFyc2VDb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjpjcmVhdGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNNZXNzYWdlQ2hhbm5lbDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVz
c2FnZVBvcnQ6Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0
OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnJl
bW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNOb2RlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTTm9kZTo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3Jh
cHBlcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5j
ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0VsZW1lbnRJbnN0YW5jZTo6YWRk
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0VsZW1lbnRJbnN0YW5jZTo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTaGFyZWRXb3Jr
ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTaGFyZWRXb3JrZXI6Om1hcmtDaGls
ZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJTb2NrZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1dvcmtlckNvbnRleHQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNX
b3JrZXJDb250ZXh0OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
V29ya2VyQ29udGV4dDo6c2V0VGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNv
bnRleHQ6OnNldEludGVydmFsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0WE1MSHR0cFJl
cXVlc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6bWFya0NoaWxkcmVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjptYXJrQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6YWRkRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjpyZW1vdmVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6
U2NoZWR1bGVkQWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3Jp
cHRDYWNoZWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVE
YXRhOjpyZXN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHROUE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclBsdWdpbkVsZW1lbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6Z2xvYmFsT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmZvcmdldFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
d2luZG93U2NyaXB0T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRFdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UXVhcmFu
dGluZWRTY3JpcHRPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFN0YXRlRnJvbU5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2NyaXB0U3RhdGVGcm9tUGFnZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
U3RhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlw
dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW06CisgICAg
ICAgICgtW1dlYlNjcmlwdE9iamVjdCBfaW5pdGlhbGl6ZVNjcmlwdERPTU5vZGVJbXBdKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0aEFyZ3VtZW50czpdKToKKyAgICAg
ICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJyaWRnZS9OUF9q
c29iamVjdC5jcHA6CisgICAgICAgIChfTlBOX0ludm9rZURlZmF1bHQpOgorICAgICAgICAoX05Q
Tl9JbnZva2UpOgorICAgICAgICAoX05QTl9FdmFsdWF0ZSk6CisgICAgICAgIChfTlBOX0NvbnN0
cnVjdCk6CisgICAgICAgICogYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW06CisgICAgICAgIChK
YXZhSlNPYmplY3Q6OmNhbGwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpldmFsKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0
ZVdyYXBwZXJDYWNoZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6d3JhcHBlckNhY2hlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpnZXRXcmFwcGVyQ2FjaGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0
VXNlckluaXRpYXRlZFByb2ZpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZyk6CisgICAgICAgICogaW5zcGVjdG9y
L0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENh
bGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGlzcGF0Y2hXaW5kb3dPYmplY3RBdmFpbGFi
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1t
OgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjcmVhdGUpOgorCiAyMDA5LTEw
LTIyICBKb2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgogIAogICAg
ICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5l
eHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiA0OTk1
NykKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcg
KzI3Miw2IEBAIF9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEQxRXYKIF9fWk43V2ViQ29yZTEz
S2V5Ym9hcmRFdmVudEMxRVJLTlNfMTJBdG9taWNTdHJpbmdFYmJQTlNfOURPTVdpbmRvd0VSS05T
XzZTdHJpbmdFamJiYmJiCiBfX1pON1dlYkNvcmUxM1R5cGluZ0NvbW1hbmQzOWluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudEVQTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3Jl
MTN0b0RldmljZVNwYWNlRVJLTlNfOUZsb2F0UmVjdEVQOE5TV2luZG93Ci1fX1pON1dlYkNvcmUx
M3RvSlNET01XaW5kb3dFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2Ux
MnJlbW92ZUNsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKIF9fWk43V2ViQ29yZTE0
Q2FjaGVkUmVzb3VyY2U5YWRkQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNlQ2xpZW50RQogX19a
TjdXZWJDb3JlMTREb2N1bWVudExvYWRlcjEzYXR0YWNoVG9GcmFtZUV2CkBAIC0zNzAsOSArMzY5
LDEwIEBAIF9fWk43V2ViQ29yZTE2TUlNRVR5cGVSZWdpc3RyeTMyaXNTdXBwb3IKIF9fWk43V2Vi
Q29yZTE2TmF2aWdhdGlvbkFjdGlvbkMxRVJLTlNfNEtVUkxFTlNfMTNGcmFtZUxvYWRUeXBlRWIK
IF9fWk43V2ViQ29yZTE2TmF2aWdhdGlvbkFjdGlvbkMxRVJLTlNfNEtVUkxFTlNfMTROYXZpZ2F0
aW9uVHlwZUUKIF9fWk43V2ViQ29yZTE2TmF2aWdhdGlvbkFjdGlvbkMxRXYKLV9fWk43V2ViQ29y
ZTE2U2NyaXB0Q29udHJvbGxlcjEwaW5pdFNjcmlwdEV2CitfX1pON1dlYkNvcmUxNlNjcmlwdENv
bnRyb2xsZXIxMGluaXRTY3JpcHRFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3Jl
MTZTY3JpcHRDb250cm9sbGVyMTNleGVjdXRlU2NyaXB0RVJLTlNfNlN0cmluZ0ViCiBfX1pON1dl
YkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxOHdpbmRvd1NjcmlwdE9iamVjdEV2CitfX1pON1dlYkNv
cmUxNlNjcmlwdENvbnRyb2xsZXIyOGV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGRFalJLTlNf
NlN0cmluZ0ViCiBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVQS05TXzVSYW5nZUVO
U185RUFmZmluaXR5RQogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZp
c2libGVQb3NpdGlvbkVTM18KIF9fWk43V2ViQ29yZTE2Y29sb3JGcm9tTlNDb2xvckVQN05TQ29s
b3IKQEAgLTM4Niw2ICszODYsNyBAQCBfX1pON1dlYkNvcmUxN0RPTUltcGxlbWVudGF0aW9uMTRp
c1RleHRNCiBfX1pON1dlYkNvcmUxN0dseXBoUGFnZVRyZWVOb2RlMTh0cmVlR2x5cGhQYWdlQ291
bnRFdgogX19aTjdXZWJDb3JlMTdIaXN0b3J5Q29udHJvbGxlcjI2c2F2ZURvY3VtZW50QW5kU2Ny
b2xsU3RhdGVFdgogX19aTjdXZWJDb3JlMTdIVE1MUGx1Z0luRWxlbWVudDExZ2V0TlBPYmplY3RF
dgorX19aTjdXZWJDb3JlMjFtYWluVGhyZWFkTm9ybWFsV29ybGRFdgogX19aTjdXZWJDb3JlMTdl
cXVhbElnbm9yaW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjdXZWJDb3JlMThkZXBy
ZWNhdGVkUGFyc2VVUkxFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMThpc1N0YXJ0T2ZQYXJh
Z3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkUKQEAgLTQ1NCw2ICs0NTUsNyBAQCBfX1pON1dl
YkNvcmUzMWFwcGxpY2F0aW9uSXNNaWNyb3NvZnRNZXNzCiBfX1pON1dlYkNvcmUzMnBsYWluVGV4
dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyRVBLTlNfNVJhbmdlRVJqYgogX19aTjdXZWJDb3JlMzNz
ZXREZWZhdWx0VGhyZWFkVmlvbGF0aW9uQmVoYXZpb3JFTlNfMjNUaHJlYWRWaW9sYXRpb25CZWhh
dmlvckVOU18yMFRocmVhZFZpb2xhdGlvblJvdW5kRQogX19aTjdXZWJDb3JlMzZJbml0aWFsaXpl
TG9nZ2luZ0NoYW5uZWxzSWZOZWNlc3NhcnlFdgorX19aTjdXZWJDb3JlMzNEZWJ1Z2dlckNhbGxG
cmFtZV9ldmFsdWF0ZUluV29ybGRFUktOM0pTQzE3RGVidWdnZXJDYWxsRnJhbWVFUktOUzBfN1VT
dHJpbmdFUk5TMF83SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTNtYWNFUktOU18xMENyZWRlbnRpYWxF
CiBfX1pON1dlYkNvcmUzbWFjRVJLTlNfMjNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUUKIF9fWk43
V2ViQ29yZTRGb250MTFzZXRDb2RlUGF0aEVOUzBfOENvZGVQYXRoRQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAJKHJldmlzaW9uIDQ5OTU3KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDYgKzUzLDQ2IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3IK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpl
eGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFN0cmlu
ZyYgc2NyaXB0LCBib29sIGZvcmNlVXNlckdlc3R1cmUpCit7CisgICAgU2NyaXB0U291cmNlQ29k
ZSBzb3VyY2VDb2RlKHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSA/IEtVUkwoKSA6IG1fZnJhbWUt
PmxvYWRlcigpLT51cmwoKSk7CisKKyAgICBpZiAoIWlzRW5hYmxlZCgpIHx8IGlzUGF1c2VkKCkp
CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworCisgICAgYm9vbCB3YXNJbkV4ZWN1dGVT
Y3JpcHQgPSBtX2luRXhlY3V0ZVNjcmlwdDsKKyAgICBtX2luRXhlY3V0ZVNjcmlwdCA9IHRydWU7
CisKKyAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3Js
ZElELCBzb3VyY2VDb2RlKTsKKworICAgIGlmICghd2FzSW5FeGVjdXRlU2NyaXB0KSB7CisgICAg
ICAgIG1faW5FeGVjdXRlU2NyaXB0ID0gZmFsc2U7CisgICAgICAgIERvY3VtZW50Ojp1cGRhdGVT
dHlsZUZvckFsbERvY3VtZW50cygpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1NjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29y
bGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9y
Y2VVc2VyR2VzdHVyZSkKK3sKKyAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0
LCBmb3JjZVVzZXJHZXN0dXJlID8gS1VSTCgpIDogbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpKTsK
KworICAgIGlmICghaXNFbmFibGVkKCkgfHwgaXNQYXVzZWQoKSkKKyAgICAgICAgcmV0dXJuIFNj
cmlwdFZhbHVlKCk7CisKKyAgICBib29sIHdhc0luRXhlY3V0ZVNjcmlwdCA9IG1faW5FeGVjdXRl
U2NyaXB0OworICAgIG1faW5FeGVjdXRlU2NyaXB0ID0gdHJ1ZTsKKworICAgIFNjcmlwdFZhbHVl
IHJlc3VsdCA9IGV2YWx1YXRlSW5Xb3JsZChzb3VyY2VDb2RlLCB3b3JsZCk7CisKKyAgICBpZiAo
IXdhc0luRXhlY3V0ZVNjcmlwdCkgeworICAgICAgICBtX2luRXhlY3V0ZVNjcmlwdCA9IGZhbHNl
OworICAgICAgICBEb2N1bWVudDo6dXBkYXRlU3R5bGVGb3JBbGxEb2N1bWVudHMoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBib29sIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1
dGVJZkphdmFTY3JpcHRVUkwoY29uc3QgS1VSTCYgdXJsLCBib29sIHVzZXJHZXN0dXJlLCBib29s
IHJlcGxhY2VEb2N1bWVudCkKIHsKICAgICBpZiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KHVybCkp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5j
cHAJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29y
a2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVlIEpT
QWJzdHJhY3RXb3JrZXI6OmFkZEV2ZW50TGlzdGVuCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZl
bnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNy
ZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhl
YykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBj
dXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTYwLDcgKzYwLDcgQEAgSlNWYWx1ZSBKU0Fic3Ry
YWN0V29ya2VyOjpyZW1vdmVFdmVudExpcwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50
TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFu
KGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBm
YWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhl
YykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsMTIg
QEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soTQogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICAKLSAgICBKU1Zh
bHVlIGZ1bmN0aW9uID0gY2FsbGJhY2soKS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhh
bmRsZUV2ZW50IikpOworICAgIEpTVmFsdWUgZnVuY3Rpb247CisgICAgeworICAgICAgICAvLyBT
d2l0Y2ggd29ybGRzLCBqdXN0IGluIGNhc2UgaGFuZGxlRXZlbnQgaXMgYSBnZXR0ZXIgYW5kIGNh
dXNlcyBKUyBleGVjdXRpb24hCisgICAgICAgIEVudGVyRE9NV3JhcHBlcldvcmxkIHdvcmxkRW50
cnkoZXhlYywgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKyAgICAgICAgZnVuY3Rpb24gPSBjYWxs
YmFjaygpLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAg
fQogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rp
b24uZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5v
bmUpIHsKQEAgLTU5LDcgKzY0LDcgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2Fs
bGJhY2soTQogICAgIH0KICAgICAKICAgICBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLT50
aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBm
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjYWxsYmFjaygpLCBhcmdzKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGNhbGxJbldvcmxkKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGNhbGxiYWNrKCksIGFyZ3MsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CiAgICAgZ2xvYmFs
T2JqZWN0KCktPmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgRG9j
dW1lbnQ6OnVwZGF0ZVN0eWxlRm9yQWxsRG9jdW1lbnRzKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbGxiYWNrRGF0YS5oCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYWxsYmFja0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lm
bmRlZiBKU0NhbGxiYWNrRGF0YV9oCiAjZGVmaW5lIEpTQ2FsbGJhY2tEYXRhX2gKIAorI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJvdGVjdC5oPgpA
QCAtNDcsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgSlNDYWxsYmFja0RhdGEoSlNDOjpKU09iamVj
dCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgIDog
bV9jYWxsYmFjayhjYWxsYmFjaykKICAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3QpCisgICAgICAgICwgbV9pc29sYXRlZFdvcmxkKGN1cnJlbnRXb3JsZChnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkpCiAgICAgewogICAgIH0KICAgICAKQEAgLTYzLDYgKzY1LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBKU0M6OlByb3RlY3RlZFB0cjxKU0M6OkpTT2JqZWN0PiBtX2Nh
bGxiYWNrOwogICAgIEpTQzo6UHJvdGVjdGVkUHRyPEpTRE9NR2xvYmFsT2JqZWN0PiBtX2dsb2Jh
bE9iamVjdDsKKyAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTAsNyArOTAsNyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1
cE5hCiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcoZXhlYywgcHJlZml4KSk7CiAKICAgICBtX2ds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLT50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIEpT
VmFsdWUgcmV0dmFsID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBt
X2N1c3RvbVJlc29sdmVyLCBhcmdzKTsKKyAgICBKU1ZhbHVlIHJldHZhbCA9IGNhbGxJbldvcmxk
KGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG1fY3VzdG9tUmVzb2x2ZXIsIGFy
Z3MsIGN1cnJlbnRXb3JsZChtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKSk7CiAgICAgbV9n
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAg
U3RyaW5nIHJlc3VsdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlv
bkNhY2hlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MSw3ICs5MSw3IEBAIEpTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVu
dEwKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFs
c2UpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5hZGRFdmVudExp
c3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQo
MikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAt
MTAxLDcgKzEwMSw3IEBAIEpTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVFdmUK
ICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFs
c2UpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5yZW1v
dmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5l
cjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSku
Z2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNp
b24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKIAorI2luY2x1ZGUgImRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
LmgiCisKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJET01Db3JlRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ0LDYgKzQ2LDcgQEAKICNpbmNs
dWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlJhbmdlRXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
WE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CkBAIC03Miw2ICs3NSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHR5cGVkZWYgRG9jdW1l
bnQ6OkpTV3JhcHBlckNhY2hlIEpTV3JhcHBlckNhY2hlOwordHlwZWRlZiBEb2N1bWVudDo6SlNX
cmFwcGVyQ2FjaGVNYXAgSlNXcmFwcGVyQ2FjaGVNYXA7CiAKIC8vIEZvciBkZWJ1Z2dpbmcsIGtl
ZXAgYSBzZXQgb2Ygd3JhcHBlcnMgY3VycmVudGx5IHJlZ2lzdGVyZWQsIGFuZCBjaGVjayB0aGF0
CiAvLyBhbGwgYXJlIHVucmVnaXN0ZXJlZCBiZWZvcmUgdGhleSBhcmUgZGVzdHJveWVkLiBUaGlz
IGhhcyBoZWxwZWQgdXMgZml4IGF0CkBAIC04MCw2ICs4NCw3IEBAIHR5cGVkZWYgRG9jdW1lbnQ6
OkpTV3JhcHBlckNhY2hlIEpTV3JhcHAKIHN0YXRpYyB2b2lkIGFkZFdyYXBwZXIoRE9NT2JqZWN0
KiB3cmFwcGVyKTsKIHN0YXRpYyB2b2lkIHJlbW92ZVdyYXBwZXIoRE9NT2JqZWN0KiB3cmFwcGVy
KTsKIHN0YXRpYyB2b2lkIHJlbW92ZVdyYXBwZXJzKGNvbnN0IEpTV3JhcHBlckNhY2hlJiB3cmFw
cGVycyk7CitzdGF0aWMgdm9pZCByZW1vdmVXcmFwcGVycyhjb25zdCBET01PYmplY3RXcmFwcGVy
TWFwJiB3cmFwcGVycyk7CiAKICNpZmRlZiBOREVCVUcKIApAQCAtOTUsNiArMTAwLDEwIEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVXcmFwcGVycyhjb25zdCAKIHsKIH0KIAorc3RhdGljIGlu
bGluZSB2b2lkIHJlbW92ZVdyYXBwZXJzKGNvbnN0IERPTU9iamVjdFdyYXBwZXJNYXAmKQorewor
fQorCiAjZWxzZQogCiBzdGF0aWMgSGFzaFNldDxET01PYmplY3QqPiYgd3JhcHBlclNldCgpCkBA
IC0xMjQsNyArMTMzLDE1IEBAIHN0YXRpYyB2b2lkIHJlbW92ZVdyYXBwZXIoRE9NT2JqZWN0KiB3
cmEKIAogc3RhdGljIHZvaWQgcmVtb3ZlV3JhcHBlcnMoY29uc3QgSlNXcmFwcGVyQ2FjaGUmIHdy
YXBwZXJzKQogewotICAgIGZvciAoSlNXcmFwcGVyQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
d3JhcHBlcnMuYmVnaW4oKTsgaXQgIT0gd3JhcHBlcnMuZW5kKCk7ICsraXQpCisgICAgSlNXcmFw
cGVyQ2FjaGU6OmNvbnN0X2l0ZXJhdG9yIHdyYXBwZXJzRW5kID0gd3JhcHBlcnMuZW5kKCk7Cisg
ICAgZm9yIChKU1dyYXBwZXJDYWNoZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3cmFwcGVycy5iZWdp
bigpOyBpdCAhPSB3cmFwcGVyc0VuZDsgKytpdCkKKyAgICAgICAgcmVtb3ZlV3JhcHBlcihpdC0+
c2Vjb25kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZVdyYXBwZXJzKGNvbnN0IERP
TU9iamVjdFdyYXBwZXJNYXAmIHdyYXBwZXJzKQoreworICAgIERPTU9iamVjdFdyYXBwZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIHdyYXBwZXJzRW5kID0gd3JhcHBlcnMuZW5kKCk7CisgICAgZm9yIChE
T01PYmplY3RXcmFwcGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdyYXBwZXJzLmJlZ2luKCk7
IGl0ICE9IHdyYXBwZXJzRW5kOyArK2l0KQogICAgICAgICByZW1vdmVXcmFwcGVyKGl0LT5zZWNv
bmQpOwogfQogCkBAIC0xMzUsNjcgKzE1MiwxMjEgQEAgRE9NT2JqZWN0Ojp+RE9NT2JqZWN0KCkK
IAogI2VuZGlmCiAKLWNsYXNzIERPTU9iamVjdFdyYXBwZXJNYXAgewotcHVibGljOgotICAgIHN0
YXRpYyBET01PYmplY3RXcmFwcGVyTWFwJiBtYXBGb3IoSlNHbG9iYWxEYXRhJik7CitET01XcmFw
cGVyV29ybGQ6OkRPTVdyYXBwZXJXb3JsZChKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
KyAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQoreworfQorCitET01XcmFwcGVyV29ybGQ6
On5ET01XcmFwcGVyV29ybGQoKQoreworICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xp
ZW50RGF0YSA9IG1fZ2xvYmFsRGF0YS0+Y2xpZW50RGF0YTsKKyAgICBBU1NFUlQoY2xpZW50RGF0
YSk7CisgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KGNsaWVudERhdGEpLT5m
b3JnZXRXb3JsZCh0aGlzKTsKKworICAgIHJlbW92ZVdyYXBwZXJzKG1fd3JhcHBlcnMpOwogCi0g
ICAgRE9NT2JqZWN0KiBnZXQodm9pZCogb2JqZWN0SGFuZGxlKQorICAgIGZvciAoSGFzaFNldDxE
b2N1bWVudCo+OjppdGVyYXRvciBpdGVyID0gZG9jdW1lbnRzV2l0aFdyYXBwZXJzLmJlZ2luKCk7
IGl0ZXIgIT0gZG9jdW1lbnRzV2l0aFdyYXBwZXJzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGZv
cmdldFdvcmxkT2ZET01Ob2Rlc0ZvckRvY3VtZW50KCppdGVyLCB0aGlzKTsKKyAgICBmb3IgKEhh
c2hTZXQ8U2NyaXB0Q29udHJvbGxlcio+OjppdGVyYXRvciBpdGVyID0gc2NyaXB0Q29udHJvbGxl
cnNXaXRoU2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gc2NyaXB0Q29udHJvbGxlcnNXaXRoU2hlbGxz
LmVuZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPmZvcmdldFdvcmxkKHRoaXMpOworfQor
CitFbnRlckRPTVdyYXBwZXJXb3JsZDo6RW50ZXJET01XcmFwcGVyV29ybGQoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkKK3sKKyAg
ICBKU0dsb2JhbERhdGE6OkNsaWVudERhdGEqIGNsaWVudERhdGEgPSBnbG9iYWxEYXRhLmNsaWVu
dERhdGE7CisgICAgQVNTRVJUKGNsaWVudERhdGEpOworICAgIG1fY2xpZW50RGF0YSA9IHN0YXRp
Y19jYXN0PFdlYkNvcmVKU0NsaWVudERhdGEqPihjbGllbnREYXRhKTsKKyAgICBtX2NsaWVudERh
dGEtPm1fd29ybGRTdGFjay5hcHBlbmQoaXNvbGF0ZWRXb3JsZCk7Cit9CisKK0VudGVyRE9NV3Jh
cHBlcldvcmxkOjpFbnRlckRPTVdyYXBwZXJXb3JsZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9N
V3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQoreworICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50
RGF0YSogY2xpZW50RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5jbGllbnREYXRhOworICAgIEFT
U0VSVChjbGllbnREYXRhKTsKKyAgICBtX2NsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
SlNDbGllbnREYXRhKj4oY2xpZW50RGF0YSk7CisgICAgbV9jbGllbnREYXRhLT5tX3dvcmxkU3Rh
Y2suYXBwZW5kKGlzb2xhdGVkV29ybGQpOworfQorCitFbnRlckRPTVdyYXBwZXJXb3JsZDo6fkVu
dGVyRE9NV3JhcHBlcldvcmxkKCkKK3sKKyAgICBtX2NsaWVudERhdGEtPm1fd29ybGRTdGFjay5y
ZW1vdmVMYXN0KCk7Cit9CisKK2NsYXNzIEpTR2xvYmFsRGF0YVdvcmxkSXRlcmF0b3IKK3sKK3B1
YmxpYzoKKyAgICBKU0dsb2JhbERhdGFXb3JsZEl0ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKKyAgICAgICAgOiBtX3BvcyhzdGF0aWNfY2FzdDxXZWJDb3JlSlNDbGllbnREYXRhKj4o
Z2xvYmFsRGF0YS0+Y2xpZW50RGF0YSktPm1fd29ybGRTZXQuYmVnaW4oKSkKKyAgICAgICAgLCBt
X2VuZChzdGF0aWNfY2FzdDxXZWJDb3JlSlNDbGllbnREYXRhKj4oZ2xvYmFsRGF0YS0+Y2xpZW50
RGF0YSktPm1fd29ybGRTZXQuZW5kKCkpCiAgICAgewotICAgICAgICByZXR1cm4gbV9tYXAuZ2V0
KG9iamVjdEhhbmRsZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXQodm9pZCogb2JqZWN0SGFuZGxl
LCBET01PYmplY3QqIHdyYXBwZXIpCisgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgewotICAgICAg
ICBhZGRXcmFwcGVyKHdyYXBwZXIpOwotICAgICAgICBtX21hcC5zZXQob2JqZWN0SGFuZGxlLCB3
cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIG1fcG9zICE9IG1fZW5kOwogICAgIH0KIAotICAgIHZv
aWQgcmVtb3ZlKHZvaWQqIG9iamVjdEhhbmRsZSkKKyAgICBET01XcmFwcGVyV29ybGQqIG9wZXJh
dG9yKigpCiAgICAgewotICAgICAgICByZW1vdmVXcmFwcGVyKG1fbWFwLnRha2Uob2JqZWN0SGFu
ZGxlKSk7CisgICAgICAgIEFTU0VSVChtX3BvcyAhPSBtX2VuZCk7CisgICAgICAgIHJldHVybiAq
bV9wb3M7CiAgICAgfQogCi1wcml2YXRlOgotICAgIEhhc2hNYXA8dm9pZCosIERPTU9iamVjdCo+
IG1fbWFwOwotfTsKLQotLy8gTWFwIGZyb20gc3RhdGljIEhhc2hUYWJsZSBpbnN0YW5jZXMgdG8g
cGVyLUdsb2JhbERhdGEgb25lcy4KLWNsYXNzIERPTU9iamVjdEhhc2hUYWJsZU1hcCB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIERPTU9iamVjdEhhc2hUYWJsZU1hcCYgbWFwRm9yKEpTR2xvYmFsRGF0
YSYpOwotCi0gICAgfkRPTU9iamVjdEhhc2hUYWJsZU1hcCgpCisgICAgRE9NV3JhcHBlcldvcmxk
KiBvcGVyYXRvci0+KCkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFi
bGUqLCBKU0M6Okhhc2hUYWJsZT46Oml0ZXJhdG9yIG1hcEVuZCA9IG1fbWFwLmVuZCgpOwotICAg
ICAgICBmb3IgKEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5iZWdpbigpOyBpdGVyICE9IG1fbWFwLmVuZCgpOyArK2l0
ZXIpCi0gICAgICAgICAgICBpdGVyLT5zZWNvbmQuZGVsZXRlVGFibGUoKTsKKyAgICAgICAgQVNT
RVJUKG1fcG9zICE9IG1fZW5kKTsKKyAgICAgICAgcmV0dXJuICptX3BvczsKICAgICB9CiAKLSAg
ICBjb25zdCBKU0M6Okhhc2hUYWJsZSogZ2V0KGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBzdGF0aWNU
YWJsZSkKKyAgICBKU0dsb2JhbERhdGFXb3JsZEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKICAgICB7
Ci0gICAgICAgIEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46
Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRpY1RhYmxlKTsKLSAgICAgICAgaWYgKGl0
ZXIgIT0gbV9tYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gJml0ZXItPnNlY29uZDsKLSAg
ICAgICAgcmV0dXJuICZtX21hcC5zZXQoc3RhdGljVGFibGUsIEpTQzo6SGFzaFRhYmxlKCpzdGF0
aWNUYWJsZSkpLmZpcnN0LT5zZWNvbmQ7CisgICAgICAgICsrbV9wb3M7CisgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaE1hcDxjb25zdCBKU0M6Okhhc2hU
YWJsZSosIEpTQzo6SGFzaFRhYmxlPiBtX21hcDsKKyAgICBIYXNoU2V0PERPTVdyYXBwZXJXb3Js
ZCo+OjppdGVyYXRvciBtX3BvczsKKyAgICBIYXNoU2V0PERPTVdyYXBwZXJXb3JsZCo+OjppdGVy
YXRvciBtX2VuZDsKIH07CiAKLWNsYXNzIFdlYkNvcmVKU0NsaWVudERhdGEgOiBwdWJsaWMgSlNH
bG9iYWxEYXRhOjpDbGllbnREYXRhIHsKLXB1YmxpYzoKLSAgICBET01PYmplY3RIYXNoVGFibGVN
YXAgaGFzaFRhYmxlTWFwOwotICAgIERPTU9iamVjdFdyYXBwZXJNYXAgd3JhcHBlck1hcDsKLX07
CitzdGF0aWMgaW5saW5lIERPTVdyYXBwZXJXb3JsZCogY3VycmVudFdvcmxkKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xp
ZW50RGF0YSA9IGdsb2JhbERhdGEuY2xpZW50RGF0YTsKKyAgICBBU1NFUlQoY2xpZW50RGF0YSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVKU0NsaWVudERhdGEqPihjbGllbnREYXRh
KS0+Y3VycmVudFdvcmxkKCk7Cit9CisKK0RPTVdyYXBwZXJXb3JsZCogY3VycmVudFdvcmxkKEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBjdXJyZW50V29ybGQoZXhlYy0+Z2xv
YmFsRGF0YSgpKTsKK30KKworRE9NV3JhcHBlcldvcmxkKiBub3JtYWxXb3JsZChKU0M6OkpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBKU0dsb2JhbERhdGE6OkNsaWVudERhdGEqIGNs
aWVudERhdGEgPSBnbG9iYWxEYXRhLmNsaWVudERhdGE7CisgICAgQVNTRVJUKGNsaWVudERhdGEp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlSlNDbGllbnREYXRhKj4oY2xpZW50RGF0
YSktPm5vcm1hbFdvcmxkKCk7Cit9CisKK0RPTVdyYXBwZXJXb3JsZCogbWFpblRocmVhZE5vcm1h
bFdvcmxkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBub3Jt
YWxXb3JsZCgqSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKK30KKworRE9NV3Jh
cHBlcldvcmxkKiBtYWluVGhyZWFkQ3VycmVudFdvcmxkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhKiBjbGllbnREYXRhID0g
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKS0+Y2xpZW50RGF0YTsKKyAgICBB
U1NFUlQoY2xpZW50RGF0YSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVKU0NsaWVu
dERhdGEqPihjbGllbnREYXRhKS0+Y3VycmVudFdvcmxkKCk7Cit9CiAKIERPTU9iamVjdEhhc2hU
YWJsZU1hcCYgRE9NT2JqZWN0SGFzaFRhYmxlTWFwOjptYXBGb3IoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQogewogICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IGds
b2JhbERhdGEuY2xpZW50RGF0YTsKLSAgICBpZiAoIWNsaWVudERhdGEpIHsKLSAgICAgICAgY2xp
ZW50RGF0YSA9IG5ldyBXZWJDb3JlSlNDbGllbnREYXRhOwotICAgICAgICBnbG9iYWxEYXRhLmNs
aWVudERhdGEgPSBjbGllbnREYXRhOwotICAgIH0KKyAgICBBU1NFUlQoY2xpZW50RGF0YSk7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVKU0NsaWVudERhdGEqPihjbGllbnREYXRhKS0+
aGFzaFRhYmxlTWFwOwogfQogCkBAIC0yMDQsNjQgKzI3NSwxMDIgQEAgY29uc3QgSlNDOjpIYXNo
VGFibGUqIGdldEhhc2hUYWJsZUZvckdsbwogICAgIHJldHVybiBET01PYmplY3RIYXNoVGFibGVN
YXA6Om1hcEZvcihnbG9iYWxEYXRhKS5nZXQoc3RhdGljVGFibGUpOwogfQogCi1pbmxpbmUgRE9N
T2JqZWN0V3JhcHBlck1hcCYgRE9NT2JqZWN0V3JhcHBlck1hcDo6bWFwRm9yKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKKy8vaW5saW5lIERPTU9iamVjdFdyYXBwZXJNYXAmIERPTU9iamVjdFdy
YXBwZXJNYXA6Om1hcEZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCitpbmxpbmUgRE9NT2Jq
ZWN0V3JhcHBlck1hcCYgRE9NT2JqZWN0V3JhcHBlck1hcEZvcihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCiB7Ci0gICAgSlNHbG9iYWxEYXRhOjpDbGllbnREYXRhKiBjbGllbnREYXRhID0gZ2xv
YmFsRGF0YS5jbGllbnREYXRhOwotICAgIGlmICghY2xpZW50RGF0YSkgewotICAgICAgICBjbGll
bnREYXRhID0gbmV3IFdlYkNvcmVKU0NsaWVudERhdGE7Ci0gICAgICAgIGdsb2JhbERhdGEuY2xp
ZW50RGF0YSA9IGNsaWVudERhdGE7Ci0gICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJD
b3JlSlNDbGllbnREYXRhKj4oY2xpZW50RGF0YSktPndyYXBwZXJNYXA7CisgICAgcmV0dXJuIGN1
cnJlbnRXb3JsZChnbG9iYWxEYXRhKS0+bV93cmFwcGVyczsKIH0KIAogRE9NT2JqZWN0KiBnZXRD
YWNoZWRET01PYmplY3RXcmFwcGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdm9pZCogb2Jq
ZWN0SGFuZGxlKSAKIHsKLSAgICByZXR1cm4gRE9NT2JqZWN0V3JhcHBlck1hcDo6bWFwRm9yKGds
b2JhbERhdGEpLmdldChvYmplY3RIYW5kbGUpOworICAgIHJldHVybiBET01PYmplY3RXcmFwcGVy
TWFwRm9yKGdsb2JhbERhdGEpLmdldChvYmplY3RIYW5kbGUpOwogfQogCiB2b2lkIGNhY2hlRE9N
T2JqZWN0V3JhcHBlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHZvaWQqIG9iamVjdEhhbmRs
ZSwgRE9NT2JqZWN0KiB3cmFwcGVyKSAKIHsKLSAgICBET01PYmplY3RXcmFwcGVyTWFwOjptYXBG
b3IoZ2xvYmFsRGF0YSkuc2V0KG9iamVjdEhhbmRsZSwgd3JhcHBlcik7CisgICAgYWRkV3JhcHBl
cih3cmFwcGVyKTsKKyAgICBET01PYmplY3RXcmFwcGVyTWFwRm9yKGdsb2JhbERhdGEpLnNldChv
YmplY3RIYW5kbGUsIHdyYXBwZXIpOwogfQogCi12b2lkIGZvcmdldERPTU9iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHZvaWQqIG9iamVjdEhhbmRsZSkKK0pTTm9kZSogZ2V0Q2FjaGVk
RE9NTm9kZVdyYXBwZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBub2RlKQogewotICAgIERP
TU9iamVjdFdyYXBwZXJNYXA6Om1hcEZvcihnbG9iYWxEYXRhKS5yZW1vdmUob2JqZWN0SGFuZGxl
KTsKKyAgICBpZiAoZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBkb2N1bWVudC0+Z2V0V3JhcHBl
ckNhY2hlKG1haW5UaHJlYWRDdXJyZW50V29ybGQoKSktPmdldChub2RlKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SlNOb2RlKj4oRE9NT2JqZWN0V3JhcHBlck1hcEZvcigqSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKS5nZXQobm9kZSkpOwogfQogCi1KU05vZGUqIGdldENhY2hl
ZERPTU5vZGVXcmFwcGVyKERvY3VtZW50KiBkb2N1bWVudCwgTm9kZSogbm9kZSkKLXsKLSAgICBp
ZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNOb2RlKj4oRE9NT2Jq
ZWN0V3JhcHBlck1hcDo6bWFwRm9yKCpKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
LmdldChub2RlKSk7Ci0gICAgcmV0dXJuIGRvY3VtZW50LT53cmFwcGVyQ2FjaGUoKS5nZXQobm9k
ZSk7Cit2b2lkIGZvcmdldERPTU9iamVjdChET01PYmplY3QqIHdyYXBwZXIsIHZvaWQqIG9iamVj
dEhhbmRsZSkKK3sKKyAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEhlYXA6Omhl
YXAod3JhcHBlciktPmdsb2JhbERhdGEoKTsKKyAgICBmb3IgKEpTR2xvYmFsRGF0YVdvcmxkSXRl
cmF0b3Igd29ybGRJdGVyKGdsb2JhbERhdGEpOyB3b3JsZEl0ZXI7ICsrd29ybGRJdGVyKSB7Cisg
ICAgICAgIERPTU9iamVjdFdyYXBwZXJNYXAmIHdyYXBwZXJzID0gd29ybGRJdGVyLT5tX3dyYXBw
ZXJzOworICAgICAgICBET01PYmplY3RXcmFwcGVyTWFwOjppdGVyYXRvciBpdGVyID0gd3JhcHBl
cnMuZmluZChvYmplY3RIYW5kbGUpOworICAgICAgICBpZiAoKGl0ZXIgIT0gd3JhcHBlcnMuZW5k
KCkpICYmIChpdGVyLT5zZWNvbmQgPT0gd3JhcHBlcikpIHsKKyAgICAgICAgICAgIHJlbW92ZVdy
YXBwZXIod3JhcHBlcik7CisgICAgICAgICAgICB3cmFwcGVycy5yZW1vdmUoaXRlcik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB0aGUgd29ybGQg
d2VudCBhd2F5LCBpdCBzaG91bGQgaGF2ZSByZW1vdmVkIHRoaXMgd3JhcHBlciBmcm9tIHRoZSBz
ZXQuCisgICAgQVNTRVJUKCF3cmFwcGVyU2V0KCkuY29udGFpbnMod3JhcHBlcikpOwogfQogCi12
b2lkIGZvcmdldERPTU5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBub2RlKQordm9pZCBm
b3JnZXRET01Ob2RlKERPTU9iamVjdCogd3JhcHBlciwgTm9kZSogbm9kZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQogewogICAgIGlmICghZG9jdW1lbnQpIHsKLSAgICAgICAgRE9NT2JqZWN0V3JhcHBl
ck1hcDo6bWFwRm9yKCpKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpLnJlbW92ZShu
b2RlKTsKKyAgICAgICAgZm9yZ2V0RE9NT2JqZWN0KHdyYXBwZXIsIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIHJlbW92ZVdyYXBwZXIoZG9jdW1lbnQtPndyYXBwZXJDYWNoZSgp
LnRha2Uobm9kZSkpOworCisgICAgSlNXcmFwcGVyQ2FjaGVNYXAmIHdyYXBwZXJDYWNoZU1hcCA9
IGRvY3VtZW50LT53cmFwcGVyQ2FjaGVNYXAoKTsKKyAgICBmb3IgKEpTV3JhcHBlckNhY2hlTWFw
OjppdGVyYXRvciB3cmFwcGVyc0l0ZXIgPSB3cmFwcGVyQ2FjaGVNYXAuYmVnaW4oKTsgd3JhcHBl
cnNJdGVyICE9IHdyYXBwZXJDYWNoZU1hcC5lbmQoKTsgKyt3cmFwcGVyc0l0ZXIpIHsKKyAgICAg
ICAgSlNXcmFwcGVyQ2FjaGUqIHdyYXBwZXJzID0gd3JhcHBlcnNJdGVyLT5zZWNvbmQ7CisgICAg
ICAgIEpTV3JhcHBlckNhY2hlOjppdGVyYXRvciBpdGVyID0gd3JhcHBlcnMtPmZpbmQobm9kZSk7
CisgICAgICAgIGlmICgoaXRlciAhPSB3cmFwcGVycy0+ZW5kKCkpICYmIChpdGVyLT5zZWNvbmQg
PT0gd3JhcHBlcikpIHsKKyAgICAgICAgICAgIHdyYXBwZXJzLT5yZW1vdmUoaXRlcik7CisgICAg
ICAgICAgICByZW1vdmVXcmFwcGVyKHdyYXBwZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlIHdvcmxkIHdlbnQgYXdheSwgaXQgc2hvdWxk
IGhhdmUgcmVtb3ZlZCB0aGlzIHdyYXBwZXIgZnJvbSB0aGUgc2V0LgorICAgIEFTU0VSVCghd3Jh
cHBlclNldCgpLmNvbnRhaW5zKHdyYXBwZXIpKTsKIH0KIAogdm9pZCBjYWNoZURPTU5vZGVXcmFw
cGVyKERvY3VtZW50KiBkb2N1bWVudCwgTm9kZSogbm9kZSwgSlNOb2RlKiB3cmFwcGVyKQogewog
ICAgIGlmICghZG9jdW1lbnQpIHsKLSAgICAgICAgRE9NT2JqZWN0V3JhcHBlck1hcDo6bWFwRm9y
KCpKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpLnNldChub2RlLCB3cmFwcGVyKTsK
KyAgICAgICAgYWRkV3JhcHBlcih3cmFwcGVyKTsKKyAgICAgICAgRE9NT2JqZWN0V3JhcHBlck1h
cEZvcigqSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKS5zZXQobm9kZSwgd3JhcHBl
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRkV3JhcHBlcih3cmFwcGVyKTsKLSAg
ICBkb2N1bWVudC0+d3JhcHBlckNhY2hlKCkuc2V0KG5vZGUsIHdyYXBwZXIpOworICAgIGRvY3Vt
ZW50LT5nZXRXcmFwcGVyQ2FjaGUobWFpblRocmVhZEN1cnJlbnRXb3JsZCgpKS0+c2V0KG5vZGUs
IHdyYXBwZXIpOwogfQogCiB2b2lkIGZvcmdldEFsbERPTU5vZGVzRm9yRG9jdW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50KQogewogICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgcmVtb3ZlV3JhcHBl
cnMoZG9jdW1lbnQtPndyYXBwZXJDYWNoZSgpKTsKKyAgICBKU1dyYXBwZXJDYWNoZU1hcCYgd3Jh
cHBlckNhY2hlTWFwID0gZG9jdW1lbnQtPndyYXBwZXJDYWNoZU1hcCgpOworICAgIEpTV3JhcHBl
ckNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciB3cmFwcGVyc01hcEVuZCA9IHdyYXBwZXJDYWNoZU1h
cC5lbmQoKTsKKyAgICBmb3IgKEpTV3JhcHBlckNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciB3cmFw
cGVyc01hcEl0ZXIgPSB3cmFwcGVyQ2FjaGVNYXAuYmVnaW4oKTsgd3JhcHBlcnNNYXBJdGVyICE9
IHdyYXBwZXJzTWFwRW5kOyArK3dyYXBwZXJzTWFwSXRlcikgeworICAgICAgICBKU1dyYXBwZXJD
YWNoZSogd3JhcHBlcnMgPSB3cmFwcGVyc01hcEl0ZXItPnNlY29uZDsKKyAgICAgICAgcmVtb3Zl
V3JhcHBlcnMoKndyYXBwZXJzKTsKKyAgICAgICAgZGVsZXRlIHdyYXBwZXJzOworICAgICAgICB3
cmFwcGVyc01hcEl0ZXItPmZpcnN0LT5mb3JnZXREb2N1bWVudChkb2N1bWVudCk7CisgICAgfQor
fQorCit2b2lkIGZvcmdldFdvcmxkT2ZET01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKK3sKKyAgICBKU1dyYXBwZXJDYWNoZSogd3Jh
cHBlcnMgPSBkb2N1bWVudC0+d3JhcHBlckNhY2hlTWFwKCkudGFrZSh3b3JsZCk7CisgICAgQVNT
RVJUKHdyYXBwZXJzKTsgLy8gJ3dvcmxkJyBzaG91bGQgb25seSBrbm93IGFib3V0ICdkb2N1bWVu
dCcgaWYgJ2RvY3VtZW50JyBrbm93cyBhYm91dCAnd29ybGQnIQorICAgIHJlbW92ZVdyYXBwZXJz
KCp3cmFwcGVycyk7CisgICAgZGVsZXRlIHdyYXBwZXJzOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNPYnNlcnZhYmxlVGhyb3VnaERPTShKU05vZGUqIGpzTm9kZSkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc09ic2VydmFibGVUaHJvdWdoRE9NKEpTTm9kZSoganNOb2RlLCBET01XcmFwcGVyV29y
bGQqIHdvcmxkKQogewogICAgIC8vIENlcnRhaW4gY29uZGl0aW9ucyBpbXBsaWNpdGx5IG1ha2Ug
YSBKUyBET00gbm9kZSB3cmFwcGVyIG9ic2VydmFibGUKICAgICAvLyB0aHJvdWdoIHRoZSBET00s
IGV2ZW4gaWYgbm8gZXhwbGljaXQgcmVmZXJlbmNlIHRvIGl0IHJlbWFpbnMuCkBAIC0yODcsMTQg
KzM5NiwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlVGhyb3VnaERPCiAgICAg
ICAgIC8vIHRoZSBjdXN0b20gbWFya0NoaWxkcmVuIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBoZXJl
LgogICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAo
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5h
dHRyaWJ1dGVNYXAoKSkgewotICAgICAgICAgICAgICAgIGlmIChET01PYmplY3QqIHdyYXBwZXIg
PSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCpqc05vZGUtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxEYXRhKCksIGF0dHJpYnV0ZXMpKSB7CisgICAgICAgICAgICAgICAgaWYgKERPTU9iamVjdCog
d3JhcHBlciA9IHdvcmxkLT5tX3dyYXBwZXJzLmdldChhdHRyaWJ1dGVzKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAod3JhcHBlci0+aGFzQ3VzdG9tUHJvcGVydGllcygpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKG5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKS0+aW5saW5lU3R5bGVEZWNsKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdy
YXBwZXIoKmpzTm9kZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSwgc3R5bGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChET01PYmplY3QqIHdyYXBwZXIgPSB3b3JsZC0+bV93cmFw
cGVycy5nZXQoc3R5bGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JhcHBlci0+
aGFzQ3VzdG9tUHJvcGVydGllcygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMDIsNyArNDExLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzT2JzZXJ2YWJsZVRocm91Z2hETwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aGFzVGFnTmFtZShjYW52YXNU
YWcpKSB7CiAgICAgICAgICAgICAgICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KG5vZGUpLT5yZW5kZXJpbmdDb250
ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERPTU9iamVjdCogd3JhcHBlciA9IGdl
dENhY2hlZERPTU9iamVjdFdyYXBwZXIoKmpzTm9kZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERh
dGEoKSwgY29udGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERPTU9iamVjdCogd3Jh
cHBlciA9IHdvcmxkLT5tX3dyYXBwZXJzLmdldChjb250ZXh0KSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHdyYXBwZXItPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MzMzLDE0ICs0NDIsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGlzT2JzZXJ2YWJsZVRocm91Z2hE
TwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBtYXJrRE9NTm9kZXNGb3JEb2N1bWVudChN
YXJrU3RhY2smIG1hcmtTdGFjaywgRG9jdW1lbnQqIGRvYykKK3ZvaWQgbWFya0RPTU5vZGVzRm9y
RG9jdW1lbnQoTWFya1N0YWNrJiBtYXJrU3RhY2ssIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAg
ICBKU1dyYXBwZXJDYWNoZSYgbm9kZURpY3QgPSBkb2MtPndyYXBwZXJDYWNoZSgpOwotICAgIEpT
V3JhcHBlckNhY2hlOjppdGVyYXRvciBub2RlRW5kID0gbm9kZURpY3QuZW5kKCk7Ci0gICAgZm9y
IChKU1dyYXBwZXJDYWNoZTo6aXRlcmF0b3Igbm9kZUl0ID0gbm9kZURpY3QuYmVnaW4oKTsgbm9k
ZUl0ICE9IG5vZGVFbmQ7ICsrbm9kZUl0KSB7Ci0gICAgICAgIEpTTm9kZSoganNOb2RlID0gbm9k
ZUl0LT5zZWNvbmQ7Ci0gICAgICAgIGlmIChpc09ic2VydmFibGVUaHJvdWdoRE9NKGpzTm9kZSkp
Ci0gICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5kKGpzTm9kZSk7CisgICAgSlNXcmFwcGVyQ2Fj
aGVNYXAmIHdyYXBwZXJDYWNoZU1hcCA9IGRvY3VtZW50LT53cmFwcGVyQ2FjaGVNYXAoKTsKKyAg
ICBmb3IgKEpTV3JhcHBlckNhY2hlTWFwOjppdGVyYXRvciB3cmFwcGVyc0l0ZXIgPSB3cmFwcGVy
Q2FjaGVNYXAuYmVnaW4oKTsgd3JhcHBlcnNJdGVyICE9IHdyYXBwZXJDYWNoZU1hcC5lbmQoKTsg
Kyt3cmFwcGVyc0l0ZXIpIHsKKyAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHdyYXBw
ZXJzSXRlci0+Zmlyc3Q7CisgICAgICAgIEpTV3JhcHBlckNhY2hlKiBub2RlRGljdCA9IHdyYXBw
ZXJzSXRlci0+c2Vjb25kOworCisgICAgICAgIEpTV3JhcHBlckNhY2hlOjppdGVyYXRvciBub2Rl
RW5kID0gbm9kZURpY3QtPmVuZCgpOworICAgICAgICBmb3IgKEpTV3JhcHBlckNhY2hlOjppdGVy
YXRvciBub2RlSXQgPSBub2RlRGljdC0+YmVnaW4oKTsgbm9kZUl0ICE9IG5vZGVFbmQ7ICsrbm9k
ZUl0KSB7CisgICAgICAgICAgICBKU05vZGUqIGpzTm9kZSA9IG5vZGVJdC0+c2Vjb25kOworICAg
ICAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZVRocm91Z2hET00oanNOb2RlLCB3b3JsZCkpCisgICAg
ICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChqc05vZGUpOworICAgICAgICB9CiAgICAgfQog
fQogCkBAIC0zNTMsMTIgKzQ2NywxMCBAQCB2b2lkIG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4
dChNYXJrU3RhCiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46OmNvbnN0X2l0
ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBhY3RpdmVPYmplY3RzLmVuZCgpOwogICAgIGZvciAo
SGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBh
Y3RpdmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7
CiAgICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpIHsKLSAgICAg
ICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoZ2xv
YmFsRGF0YSwgaXRlci0+c2Vjb25kKTsKICAgICAgICAgICAgIC8vIEdlbmVyYWxseSwgYW4gYWN0
aXZlIG9iamVjdCB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgbXVzdCBoYXZlIGEgd3JhcHBlciB0byBt
YXJrIGl0cyBsaXN0ZW5lcnMuCiAgICAgICAgICAgICAvLyBIb3dldmVyLCBzb21lIEFjdGl2ZURP
TU9iamVjdHMgZG9uJ3QgaGF2ZSBKUyB3cmFwcGVycyAodGltZXJzIGNyZWF0ZWQgYnkgc2V0VGlt
ZW91dCBpcyBvbmUgZXhhbXBsZSkuCiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyaGFwcyBuZWVk
IHRvIG1ha2Ugc3VyZSBldmVuIHRpbWVycyBoYXZlIGEgbWFya2FibGUgJ3dyYXBwZXInLgotICAg
ICAgICAgICAgaWYgKHdyYXBwZXIpCi0gICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh3
cmFwcGVyKTsKKyAgICAgICAgICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xv
YmFsRGF0YSwgaXRlci0+c2Vjb25kKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzY2LDEwICs0
NzgsMzEgQEAgdm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoTWFya1N0YQogICAgIEhh
c2hTZXQ8TWVzc2FnZVBvcnQqPjo6Y29uc3RfaXRlcmF0b3IgcG9ydHNFbmQgPSBtZXNzYWdlUG9y
dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtZXNzYWdlUG9ydHMuYmVnaW4oKTsgaXRlciAhPSBwb3J0c0VuZDsgKytpdGVyKSB7
CiAgICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIHBvcnQgaXMgcmVtb3RlbHkgZW50YW5nbGVkLCB0
aGVuIGFsd2F5cyBtYXJrIGl0IGFzIGluLXVzZSBiZWNhdXNlIHdlIGNhbid0IGRldGVybWluZSBy
ZWFjaGFiaWxpdHkgYWNyb3NzIHRocmVhZHMuCi0gICAgICAgIGlmICghKCppdGVyKS0+bG9jYWxs
eUVudGFuZ2xlZFBvcnQoKSB8fCAoKml0ZXIpLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkgewotICAg
ICAgICAgICAgRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihn
bG9iYWxEYXRhLCAqaXRlcik7Ci0gICAgICAgICAgICBpZiAod3JhcHBlcikKLSAgICAgICAgICAg
ICAgICBtYXJrU3RhY2suYXBwZW5kKHdyYXBwZXIpOworICAgICAgICBpZiAoISgqaXRlciktPmxv
Y2FsbHlFbnRhbmdsZWRQb3J0KCkgfHwgKCppdGVyKS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCisg
ICAgICAgICAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssIGdsb2JhbERhdGEsICpp
dGVyKTsKKyAgICB9Cit9CisKK3R5cGVkZWYgc3RkOjpwYWlyPEpTTm9kZSosIERPTVdyYXBwZXJX
b3JsZCo+IFdyYXBwZXJBbmRXb3JsZDsKK3R5cGVkZWYgV1RGOjpWZWN0b3I8V3JhcHBlckFuZFdv
cmxkLCA4PiBXcmFwcGVyU2V0OworCitzdGF0aWMgaW5saW5lIHZvaWQgdGFrZVdyYXBwZXJzKE5v
ZGUqIG5vZGUsIERvY3VtZW50KiBkb2N1bWVudCwgV3JhcHBlclNldCYgd3JhcHBlclNldCkKK3sK
KyAgICBpZiAoZG9jdW1lbnQpIHsKKyAgICAgICAgSlNXcmFwcGVyQ2FjaGVNYXAmIHdyYXBwZXJD
YWNoZU1hcCA9IGRvY3VtZW50LT53cmFwcGVyQ2FjaGVNYXAoKTsKKyAgICAgICAgZm9yIChKU1dy
YXBwZXJDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IHdyYXBwZXJDYWNoZU1hcC5iZWdpbigpOyBp
dGVyICE9IHdyYXBwZXJDYWNoZU1hcC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAo
SlNOb2RlKiB3cmFwcGVyID0gaXRlci0+c2Vjb25kLT50YWtlKG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgcmVtb3ZlV3JhcHBlcih3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICB3cmFwcGVyU2V0
LmFwcGVuZChXcmFwcGVyQW5kV29ybGQod3JhcHBlciwgaXRlci0+Zmlyc3QpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoSlNHbG9iYWxEYXRh
V29ybGRJdGVyYXRvciB3b3JsZEl0ZXIoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsgd29ybGRJdGVyOyArK3dvcmxkSXRlcikgeworICAgICAgICAgICAgRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCA9ICp3b3JsZEl0ZXI7CisgICAgICAgICAgICBpZiAoSlNOb2RlKiB3cmFwcGVyID0g
c3RhdGljX2Nhc3Q8SlNOb2RlKj4od29ybGQtPm1fd3JhcHBlcnMudGFrZShub2RlKSkpIHsKKyAg
ICAgICAgICAgICAgICByZW1vdmVXcmFwcGVyKHdyYXBwZXIpOworICAgICAgICAgICAgICAgIHdy
YXBwZXJTZXQuYXBwZW5kKFdyYXBwZXJBbmRXb3JsZCh3cmFwcGVyLCB3b3JsZCkpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzc3LDEzICs1MTAsMTggQEAgdm9pZCBt
YXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoTWFya1N0YQogdm9pZCB1cGRhdGVET01Ob2RlRG9j
dW1lbnQoTm9kZSogbm9kZSwgRG9jdW1lbnQqIG9sZERvY3VtZW50LCBEb2N1bWVudCogbmV3RG9j
dW1lbnQpCiB7CiAgICAgQVNTRVJUKG9sZERvY3VtZW50ICE9IG5ld0RvY3VtZW50KTsKLSAgICBK
U05vZGUqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01Ob2RlV3JhcHBlcihvbGREb2N1bWVudCwgbm9k
ZSk7Ci0gICAgaWYgKCF3cmFwcGVyKQotICAgICAgICByZXR1cm47Ci0gICAgcmVtb3ZlV3JhcHBl
cih3cmFwcGVyKTsKLSAgICBjYWNoZURPTU5vZGVXcmFwcGVyKG5ld0RvY3VtZW50LCBub2RlLCB3
cmFwcGVyKTsKLSAgICBmb3JnZXRET01Ob2RlKG9sZERvY3VtZW50LCBub2RlKTsKLSAgICBhZGRX
cmFwcGVyKHdyYXBwZXIpOworCisgICAgV3JhcHBlclNldCB3cmFwcGVyU2V0OworICAgIHRha2VX
cmFwcGVycyhub2RlLCBvbGREb2N1bWVudCwgd3JhcHBlclNldCk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgd3JhcHBlclNldC5zaXplKCk7ICsraSkgeworICAgICAgICBKU05vZGUq
IHdyYXBwZXIgPSB3cmFwcGVyU2V0W2ldLmZpcnN0OworICAgICAgICBpZiAobmV3RG9jdW1lbnQp
CisgICAgICAgICAgICBuZXdEb2N1bWVudC0+Z2V0V3JhcHBlckNhY2hlKHdyYXBwZXJTZXRbaV0u
c2Vjb25kKS0+c2V0KG5vZGUsIHdyYXBwZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3
cmFwcGVyU2V0W2ldLnNlY29uZC0+bV93cmFwcGVycy5zZXQobm9kZSwgd3JhcHBlcik7CisgICAg
ICAgIGFkZFdyYXBwZXIod3JhcHBlcik7CisgICAgfQogfQogCiB2b2lkIG1hcmtET01PYmplY3RX
cmFwcGVyKE1hcmtTdGFjayYgbWFya1N0YWNrLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHZv
aWQqIG9iamVjdCkKQEAgLTM5MywxMCArNTMxLDExIEBAIHZvaWQgbWFya0RPTU9iamVjdFdyYXBw
ZXIoTWFya1N0YWNrJiBtYXIKICAgICAvLyBidXQgZG9pbmcgdGhpcyBjb3JyZWN0bHkgd291bGQg
YmUgY2hhbGxlbmdpbmcuCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKLSAgICBE
T01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGdsb2JhbERhdGEs
IG9iamVjdCk7Ci0gICAgaWYgKCF3cmFwcGVyKQotICAgICAgICByZXR1cm47Ci0gICAgbWFya1N0
YWNrLmFwcGVuZCh3cmFwcGVyKTsKKworICAgIGZvciAoSlNHbG9iYWxEYXRhV29ybGRJdGVyYXRv
ciB3b3JsZEl0ZXIoJmdsb2JhbERhdGEpOyB3b3JsZEl0ZXI7ICsrd29ybGRJdGVyKSB7CisgICAg
ICAgIGlmIChET01PYmplY3QqIHdyYXBwZXIgPSB3b3JsZEl0ZXItPm1fd3JhcHBlcnMuZ2V0KG9i
amVjdCkpCisgICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5kKHdyYXBwZXIpOworICAgIH0KIH0K
IAogSlNWYWx1ZSBqc1N0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
cykKQEAgLTU0Myw3ICs2ODIsNyBAQCBib29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShFeGVjU3Rh
dGUqIGV4CiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGZyYW1lKTsKKyAgICBKU0RPTVdpbmRv
dyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSwgY3VycmVudFdvcmxkKGV4ZWMpKTsKICAg
ICByZXR1cm4gd2luZG93ICYmIHdpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKTsKIH0KIApA
QCAtNTUxLDcgKzY5MCw3IEBAIGJvb2wgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKEV4ZWNTdGF0ZSog
ZXgKIHsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNET01X
aW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUpOworICAgIEpTRE9NV2luZG93KiB3
aW5kb3cgPSB0b0pTRE9NV2luZG93KGZyYW1lLCBjdXJyZW50V29ybGQoZXhlYykpOwogICAgIHJl
dHVybiB3aW5kb3cgJiYgd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMsIG1lc3NhZ2UpOwog
fQogCkBAIC01NjUsOCArNzA0LDE2IEBAIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShG
cmFtZSogZnIKIHsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEpT
RE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGZyYW1lKSkKLSAgICAgICAgd2luZG93
LT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKKyAgICBpZiAobWVzc2FnZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0
aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc2V0
dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCktPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDEsIFN0cmluZygp
KTsgLy8gRklYTUU6IHByb3ZpZGUgYSByZWFsIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2UgVVJMLgog
fQogCiBGcmFtZSogdG9MZXhpY2FsRnJhbWUoRXhlY1N0YXRlKiBleGVjKQpAQCAtNjY0LDQgKzgx
MSwyOCBAQCBib29sIERPTU9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoRXhlY1N0CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lX2V2YWx1YXRlSW5Xb3Js
ZChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgY29uc3Qg
VVN0cmluZyYgc2NyaXB0LCBKU1ZhbHVlJiBleGNlcHRpb24pCit7CisgICAgRW50ZXJET01XcmFw
cGVyV29ybGQgd29ybGRFbnRyeShkZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSwgZGVidWdnZXJXb3JsZCgpKTsKKyAgICByZXR1cm4gZGVidWdnZXJD
YWxsRnJhbWUuZXZhbHVhdGUoc2NyaXB0LCBleGNlcHRpb24pOworfQorCitKU1ZhbHVlIGNhbGxJ
bldvcmxkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5
cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkKK3sKKyAgICBFbnRl
ckRPTVdyYXBwZXJXb3JsZCB3b3JsZEVudHJ5KGV4ZWMsIGlzb2xhdGVkV29ybGQpOworICAgIHJl
dHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1Zh
bHVlLCBhcmdzKTsKK30KKworSlNPYmplY3QqIGNvbnN0cnVjdEluV29ybGQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIG9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBET01XcmFw
cGVyV29ybGQqIGlzb2xhdGVkV29ybGQpCit7CisgICAgRW50ZXJET01XcmFwcGVyV29ybGQgd29y
bGRFbnRyeShleGVjLCBpc29sYXRlZFdvcmxkKTsKKyAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3Qo
ZXhlYywgb2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzKTsKK30KKwor
Q29tcGxldGlvbiBldmFsdWF0ZUluV29ybGQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluJiBz
Y29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQoreworICAgIEVudGVyRE9NV3JhcHBl
cldvcmxkIHdvcmxkRW50cnkoZXhlYywgaXNvbGF0ZWRXb3JsZCk7CisgICAgcmV0dXJuIEpTQzo6
ZXZhbHVhdGUoZXhlYywgc2NvcGVDaGFpbiwgc291cmNlQ29kZSwgdGhpc1ZhbHVlKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5o
CShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgRGVidWdnZXJDYWxsRnJhbWU7CiB9CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEZy
YW1lOworICAgIGNsYXNzIEpTTm9kZTsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIE5vZGU7
CiAgICAgY2xhc3MgU3RyaW5nOwotICAgIGNsYXNzIEpTTm9kZTsKKyAgICBjbGFzcyBTY3JpcHRD
b250cm9sbGVyOwogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAtMTM2LDE0
ICsxMzgsMTA0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAgIH07CiAKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8dm9pZCosIERPTU9iamVjdCo+IERPTU9iamVjdFdyYXBwZXJNYXA7
CisKKyAgICBjbGFzcyBET01XcmFwcGVyV29ybGQgOiBwdWJsaWMgUmVmQ291bnRlZDxET01XcmFw
cGVyV29ybGQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIERPTVdyYXBwZXJXb3JsZChKU0M6OkpT
R2xvYmFsRGF0YSopOworICAgICAgICB+RE9NV3JhcHBlcldvcmxkKCk7CisKKyAgICAgICAgdm9p
ZCByZW1lbWJlckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkgeyBkb2N1bWVudHNXaXRoV3Jh
cHBlcnMuYWRkKGRvY3VtZW50KTsgfQorICAgICAgICB2b2lkIGZvcmdldERvY3VtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCkgeyBkb2N1bWVudHNXaXRoV3JhcHBlcnMucmVtb3ZlKGRvY3VtZW50KTsg
fQorICAgICAgICB2b2lkIHJlbWVtYmVyU2NyaXB0Q29udHJvbGxlcihTY3JpcHRDb250cm9sbGVy
KiBzY3JpcHRDb250cm9sbGVyKSB7IHNjcmlwdENvbnRyb2xsZXJzV2l0aFNoZWxscy5hZGQoc2Ny
aXB0Q29udHJvbGxlcik7IH0KKyAgICAgICAgdm9pZCBmb3JnZXRTY3JpcHRDb250cm9sbGVyKFNj
cmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIpIHsgc2NyaXB0Q29udHJvbGxlcnNXaXRo
U2hlbGxzLnJlbW92ZShzY3JpcHRDb250cm9sbGVyKTsgfQorCisgICAgICAgIC8vIEZJWE1FOiBj
YW4gd2UgbWFrZSB0aGlzIHByaXZhdGU/CisgICAgICAgIERPTU9iamVjdFdyYXBwZXJNYXAgbV93
cmFwcGVyczsKKworICAgIHByaXZhdGU6CisgICAgICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBtX2ds
b2JhbERhdGE7CisgICAgICAgIEhhc2hTZXQ8RG9jdW1lbnQqPiBkb2N1bWVudHNXaXRoV3JhcHBl
cnM7CisgICAgICAgIEhhc2hTZXQ8U2NyaXB0Q29udHJvbGxlcio+IHNjcmlwdENvbnRyb2xsZXJz
V2l0aFNoZWxsczsKKyAgICB9OworCisgICAgLy8gTWFwIGZyb20gc3RhdGljIEhhc2hUYWJsZSBp
bnN0YW5jZXMgdG8gcGVyLUdsb2JhbERhdGEgb25lcy4KKyAgICBjbGFzcyBET01PYmplY3RIYXNo
VGFibGVNYXAgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIERPTU9iamVjdEhhc2hUYWJs
ZU1hcCYgbWFwRm9yKEpTQzo6SlNHbG9iYWxEYXRhJik7CisKKyAgICAgICAgfkRPTU9iamVjdEhh
c2hUYWJsZU1hcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8Y29uc3QgSlNDOjpI
YXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46Oml0ZXJhdG9yIG1hcEVuZCA9IG1fbWFwLmVuZCgp
OworICAgICAgICAgICAgZm9yIChIYXNoTWFwPGNvbnN0IEpTQzo6SGFzaFRhYmxlKiwgSlNDOjpI
YXNoVGFibGU+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuYmVnaW4oKTsgaXRlciAhPSBtX21hcC5l
bmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZC5kZWxldGVUYWJsZSgp
OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgSlNDOjpIYXNoVGFibGUqIGdldChjb25zdCBK
U0M6Okhhc2hUYWJsZSogc3RhdGljVGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hN
YXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT46Oml0ZXJhdG9yIGl0ZXIg
PSBtX21hcC5maW5kKHN0YXRpY1RhYmxlKTsKKyAgICAgICAgICAgIGlmIChpdGVyICE9IG1fbWFw
LmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAmaXRlci0+c2Vjb25kOworICAgICAgICAg
ICAgcmV0dXJuICZtX21hcC5zZXQoc3RhdGljVGFibGUsIEpTQzo6SGFzaFRhYmxlKCpzdGF0aWNU
YWJsZSkpLmZpcnN0LT5zZWNvbmQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IEhhc2hNYXA8Y29uc3QgSlNDOjpIYXNoVGFibGUqLCBKU0M6Okhhc2hUYWJsZT4gbV9tYXA7Cisg
ICAgfTsKKworICAgIGNsYXNzIFdlYkNvcmVKU0NsaWVudERhdGEgOiBwdWJsaWMgSlNDOjpKU0ds
b2JhbERhdGE6OkNsaWVudERhdGEgeworICAgICAgICBmcmllbmQgY2xhc3MgRW50ZXJET01XcmFw
cGVyV29ybGQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGFXb3JsZEl0ZXJhdG9y
OworCisgICAgcHVibGljOgorICAgICAgICBXZWJDb3JlSlNDbGllbnREYXRhKEpTQzo6SlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQorICAgICAgICAgICAgOiBtX25vcm1hbFdvcmxkKGdsb2JhbERh
dGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fd29ybGRTdGFjay5hcHBlbmQoJm1fbm9ybWFs
V29ybGQpOworICAgICAgICAgICAgbV93b3JsZFNldC5hZGQoJm1fbm9ybWFsV29ybGQpOworICAg
ICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBhZGQgYSBkZXN0cnVjdG9yIHRvIGFzc2VydCBtX3dv
cmxkU2V0IG9ubHkgY29udGFpbnMgbV9ub3JtYWxXb3JsZD8KKworICAgICAgICBET01XcmFwcGVy
V29ybGQqIGN1cnJlbnRXb3JsZCgpIHsgcmV0dXJuIG1fd29ybGRTdGFjay5sYXN0KCk7IH0KKyAg
ICAgICAgRE9NV3JhcHBlcldvcmxkKiBub3JtYWxXb3JsZCgpIHsgcmV0dXJuICZtX25vcm1hbFdv
cmxkOyB9CisKKyAgICAgICAgdm9pZCByZW1lbWJlcldvcmxkKERPTVdyYXBwZXJXb3JsZCogd29y
bGQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV93b3JsZFNldC5jb250YWlucyh3
b3JsZCkpOworICAgICAgICAgICAgbV93b3JsZFNldC5hZGQod29ybGQpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgZm9yZ2V0V29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKG1fd29ybGRTZXQuY29udGFpbnMod29ybGQpKTsKKyAgICAg
ICAgICAgIG1fd29ybGRTZXQucmVtb3ZlKHdvcmxkKTsKKyAgICAgICAgfQorCisgICAgICAgIERP
TU9iamVjdEhhc2hUYWJsZU1hcCBoYXNoVGFibGVNYXA7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
VmVjdG9yPERPTVdyYXBwZXJXb3JsZCo+IG1fd29ybGRTdGFjazsKKyAgICAgICAgSGFzaFNldDxE
T01XcmFwcGVyV29ybGQqPiBtX3dvcmxkU2V0OworICAgICAgICBET01XcmFwcGVyV29ybGQgbV9u
b3JtYWxXb3JsZDsKKyAgICB9OworCisgICAgY2xhc3MgRW50ZXJET01XcmFwcGVyV29ybGQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgRW50ZXJET01XcmFwcGVyV29ybGQoSlNDOjpKU0dsb2JhbERh
dGEmLCBET01XcmFwcGVyV29ybGQqKTsKKyAgICAgICAgRW50ZXJET01XcmFwcGVyV29ybGQoSlND
OjpFeGVjU3RhdGUqLCBET01XcmFwcGVyV29ybGQqKTsKKyAgICAgICAgfkVudGVyRE9NV3JhcHBl
cldvcmxkKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBXZWJDb3JlSlNDbGllbnREYXRhKiBt
X2NsaWVudERhdGE7CisgICAgfTsKKwogICAgIERPTU9iamVjdCogZ2V0Q2FjaGVkRE9NT2JqZWN0
V3JhcHBlcihKU0M6OkpTR2xvYmFsRGF0YSYsIHZvaWQqIG9iamVjdEhhbmRsZSk7CiAgICAgdm9p
ZCBjYWNoZURPTU9iamVjdFdyYXBwZXIoSlNDOjpKU0dsb2JhbERhdGEmLCB2b2lkKiBvYmplY3RI
YW5kbGUsIERPTU9iamVjdCogd3JhcHBlcik7Ci0gICAgdm9pZCBmb3JnZXRET01PYmplY3QoSlND
OjpKU0dsb2JhbERhdGEmLCB2b2lkKiBvYmplY3RIYW5kbGUpOworICAgIHZvaWQgZm9yZ2V0RE9N
Tm9kZShET01PYmplY3QqIHdyYXBwZXIsIE5vZGUqIG5vZGUsIERvY3VtZW50KiBkb2N1bWVudCk7
CisgICAgdm9pZCBmb3JnZXRET01PYmplY3QoRE9NT2JqZWN0KiB3cmFwcGVyLCB2b2lkKiBvYmpl
Y3RIYW5kbGUpOwogCiAgICAgSlNOb2RlKiBnZXRDYWNoZWRET01Ob2RlV3JhcHBlcihEb2N1bWVu
dCosIE5vZGUqKTsKICAgICB2b2lkIGNhY2hlRE9NTm9kZVdyYXBwZXIoRG9jdW1lbnQqLCBOb2Rl
KiwgSlNOb2RlKiB3cmFwcGVyKTsKLSAgICB2b2lkIGZvcmdldERPTU5vZGUoRG9jdW1lbnQqLCBO
b2RlKik7CiAgICAgdm9pZCBmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50Kik7
CisgICAgdm9pZCBmb3JnZXRXb3JsZE9mRE9NTm9kZXNGb3JEb2N1bWVudChEb2N1bWVudCosIERP
TVdyYXBwZXJXb3JsZCopOwogICAgIHZvaWQgdXBkYXRlRE9NTm9kZURvY3VtZW50KE5vZGUqLCBE
b2N1bWVudCogb2xkRG9jdW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCk7CiAgICAgdm9pZCBt
YXJrRE9NTm9kZXNGb3JEb2N1bWVudChKU0M6Ok1hcmtTdGFjayYsIERvY3VtZW50Kik7CiAgICAg
dm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoSlNDOjpNYXJrU3RhY2smLCBKU0M6OkpT
R2xvYmFsRGF0YSYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKQEAgLTE1NCw2ICsyNDYsMTMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRET01T
dHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwogICAgIEpT
Qzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSosIE5vbk51bGxQ
YXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKIAorICAg
IERPTVdyYXBwZXJXb3JsZCogY3VycmVudFdvcmxkKEpTQzo6RXhlY1N0YXRlKik7CisgICAgRE9N
V3JhcHBlcldvcmxkKiBub3JtYWxXb3JsZChKU0M6OkpTR2xvYmFsRGF0YSYpOworICAgIERPTVdy
YXBwZXJXb3JsZCogbWFpblRocmVhZEN1cnJlbnRXb3JsZCgpOworICAgIERPTVdyYXBwZXJXb3Js
ZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CisgICAgaW5saW5lIERPTVdyYXBwZXJXb3JsZCog
ZGVidWdnZXJXb3JsZCgpIHsgcmV0dXJuIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpOyB9CisgICAg
aW5saW5lIERPTVdyYXBwZXJXb3JsZCogcGx1Z2luV29ybGQoKSB7IHJldHVybiBtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKTsgfQorCiAgICAgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkRE9NQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwogICAgIHZvaWQg
Y2FjaGVET01Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
KiwgSlNDOjpKU09iamVjdCogY29uc3RydWN0b3IpOwogCkBAIC0zMDUsNiArNDA0LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZShKU0M6OkV4
ZWNTdGF0ZSopOwogICAgIEtVUkwgY29tcGxldGVVUkwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIHJlbGF0aXZlVVJMKTsKIAorICAgIEpTQzo6SlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFt
ZV9ldmFsdWF0ZUluV29ybGQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJD
YWxsRnJhbWUsIGNvbnN0IEpTQzo6VVN0cmluZyYgc2NyaXB0LCBKU0M6OkpTVmFsdWUmIGV4Y2Vw
dGlvbik7CisgICAgSlNDOjpKU1ZhbHVlIGNhbGxJbldvcmxkKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlIGZ1bmN0aW9uLCBKU0M6OkNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiwg
SlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiwgRE9NV3JhcHBlcldv
cmxkKik7CisgICAgSlNDOjpKU09iamVjdCogY29uc3RydWN0SW5Xb3JsZChKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpKU1ZhbHVlIG9iamVjdCwgSlNDOjpDb25zdHJ1Y3RUeXBlIGNvbnN0cnVj
dFR5cGUsIGNvbnN0IEpTQzo6Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgSlND
OjpBcmdMaXN0JiBhcmdzLCBET01XcmFwcGVyV29ybGQqKTsKKyAgICBKU0M6OkNvbXBsZXRpb24g
ZXZhbHVhdGVJbldvcmxkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTY29wZUNoYWluJiwgY29uc3Qg
SlNDOjpTb3VyY2VDb2RlJiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgRE9NV3JhcHBlcldvcmxk
Kik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEpTRE9NQmluZGluZ19o
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5l
cj4gSlNET01HbG9iYWxPCiAgICAgaWYgKCF2YWwuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QodmFsKSwg
dHJ1ZSkuZ2V0KCk7CisgICAgcmV0dXJuIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0
KHZhbCksIHRydWUsIGN1cnJlbnRXb3JsZChnbG9iYWxFeGVjKCkpKS5nZXQoKTsKIH0KIAogdm9p
ZCBKU0RPTUdsb2JhbE9iamVjdDo6c2V0Q3VycmVudEV2ZW50KEV2ZW50KiBldnQpCkBAIC04MSwx
NSArODEsMzQgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZGVzdHJveUpTRE9NR2xvYgogICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdERhdGEqPihqc0RPTUdsb2JhbE9i
amVjdERhdGEpOwogfQogCi1KU0RPTUdsb2JhbE9iamVjdCogdG9KU0RPTUdsb2JhbE9iamVjdChE
b2N1bWVudCogZG9jdW1lbnQpCitKU0RPTUdsb2JhbE9iamVjdCogdG9KU0RPTUdsb2JhbE9iamVj
dChEb2N1bWVudCogZG9jdW1lbnQsIEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biB0b0pTRE9NV2luZG93KGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICByZXR1cm4gdG9KU0RPTVdp
bmRvdyhkb2N1bWVudC0+ZnJhbWUoKSwgY3VycmVudFdvcmxkKGV4ZWMpKTsKIH0KIAotSlNET01H
bG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKK0pTRE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9NR2xvYmFs
T2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5p
c0RvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiB0b0pTRE9NR2xvYmFsT2JqZWN0KHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpOworICAgICAgICByZXR1cm4g
dG9KU0RPTUdsb2JhbE9iamVjdChzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpLCBleGVjKTsKKworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIGlmIChzY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+c2NyaXB0KCkt
PndvcmtlckNvbnRleHRXcmFwcGVyKCk7CisjZW5kaWYKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCitKU0RPTUdsb2JhbE9iamVjdCogdG9KU0RPTUdsb2Jh
bE9iamVjdChEb2N1bWVudCogZG9jdW1lbnQsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCit7Cisg
ICAgcmV0dXJuIHRvSlNET01XaW5kb3coZG9jdW1lbnQtPmZyYW1lKCksIHdvcmxkKTsKK30KKwor
SlNET01HbG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKK3sK
KyAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKQorICAgICAgICBy
ZXR1cm4gdG9KU0RPTUdsb2JhbE9iamVjdChzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpLCB3b3JsZCk7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBEb2N1bWVudDsKICAg
ICBjbGFzcyBFdmVudDsKKyAgICBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiAgICAgY2xhc3MgSlNM
YXp5RXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBKU0V2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKQEAgLTEwMiw4ICsxMDMsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgfQogCi0gICAgSlNET01H
bG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoRG9jdW1lbnQqKTsKLSAgICBKU0RPTUds
b2JhbE9iamVjdCogdG9KU0RPTUdsb2JhbE9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CisgICAgSlNET01HbG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoRG9jdW1lbnQqLCBK
U0M6OkV4ZWNTdGF0ZSopOworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9NR2xvYmFsT2Jq
ZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBKU0M6OkV4ZWNTdGF0ZSopOworCisgICAgSlNE
T01HbG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoRG9jdW1lbnQqLCBET01XcmFwcGVy
V29ybGQqKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogdG9KU0RPTUdsb2JhbE9iamVjdChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRE9NV3JhcHBlcldvcmxkKik7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAko
cmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEwICs1MywxMSBAQCBKU0RPTVdpbmRvd0Jhc2U6OkpT
RE9NV2luZG93QmFzZShOb25OdWxsCiAgICAgYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxz
LCBzaXplb2Yoc3RhdGljR2xvYmFscykgLyBzaXplb2YoR2xvYmFsUHJvcGVydHlJbmZvKSk7CiB9
CiAKLXZvaWQgSlNET01XaW5kb3dCYXNlOjp1cGRhdGVEb2N1bWVudCgpCit2b2lkIEpTRE9NV2lu
ZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKICAgICBB
U1NFUlQoZCgpLT5pbXBsLT5kb2N1bWVudCgpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxFeGVjKCk7CisgICAgRW50ZXJET01XcmFwcGVyV29ybGQgd29ybGRFbnRyeShleGVjLCB3b3Js
ZCk7CiAgICAgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhJZGVudGlmaWVyKGV4ZWMsICJk
b2N1bWVudCIpLCB0b0pTKGV4ZWMsIHRoaXMsIGQoKS0+aW1wbC0+ZG9jdW1lbnQoKSksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CiB9CiAKQEAgLTc5LDIxICs4MCw3IEBAIFN0cmluZyBKU0RPTVdp
bmRvd0Jhc2U6OmNyb3NzRG9tYWluQWNjZXMKIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnByaW50
RXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKIHsKLSAgICBpZiAobWVz
c2FnZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGlt
cGwoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKLSAgICBpZiAoIXNldHRpbmdz
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHNldHRpbmdzLT5wcml2YXRlQnJvd3Np
bmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+Y29uc29sZSgpLT5h
ZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxl
dmVsLCBtZXNzYWdlLCAxLCBTdHJpbmcoKSk7IC8vIEZJWE1FOiBwcm92aWRlIGEgcmVhbCBsaW5l
IG51bWJlciBhbmQgc291cmNlIFVSTC4KKyAgICBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKGlt
cGwoKS0+ZnJhbWUoKSwgbWVzc2FnZSk7CiB9CiAKIEV4ZWNTdGF0ZSogSlNET01XaW5kb3dCYXNl
OjpnbG9iYWxFeGVjKCkKQEAgLTE1NywxMyArMTQ0LDE2IEBAIEpTRE9NV2luZG93U2hlbGwqIEpT
RE9NV2luZG93QmFzZTo6c2hlbGwKIAogSlNHbG9iYWxEYXRhKiBKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpCiB7Ci0gICAgc3RhdGljIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgc3RhdGljIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9IDA7CiAgICAgaWYgKCFnbG9iYWxEYXRhKSB7CiAgICAgICAgIGdsb2Jh
bERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZCgpLnJlbGVhc2VSZWYoKTsKICAgICAg
ICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc2V0VGltZW91dEludGVydmFsKDEwMDAwKTsg
Ly8gMTAgc2Vjb25kcwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgZ2xvYmFsRGF0YS0+bWFpblRo
cmVhZE9ubHkgPSB0cnVlOwogI2VuZGlmCisgICAgICAgIGdsb2JhbERhdGEtPmNsaWVudERhdGEg
PSBuZXcgV2ViQ29yZUpTQ2xpZW50RGF0YShnbG9iYWxEYXRhKTsKICAgICB9CiAKICAgICByZXR1
cm4gZ2xvYmFsRGF0YTsKQEAgLTE4MSwyMSArMTcxLDIxIEBAIEpTVmFsdWUgdG9KUyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICByZXR1cm4gdG9KUyhleGVjLCBkb21XaW5kb3cpOwog
fQogCi1KU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiwgRE9NV2luZG93KiBkb21XaW5kb3cpCitKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBET01XaW5kb3cqIGRvbVdpbmRvdykKIHsKICAgICBp
ZiAoIWRvbVdpbmRvdykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIEZyYW1lKiBmcmFt
ZSA9IGRvbVdpbmRvdy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7Ci0gICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKTsKKyAg
ICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbChjdXJyZW50V29ybGQoZXhlYykp
OwogfQogCi1KU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhGcmFtZSogZnJhbWUpCitKU0RPTVdp
bmRvdyogdG9KU0RPTVdpbmRvdyhGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQp
CiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGZyYW1l
LT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+d2luZG93KCk7CisgICAgcmV0dXJuIGZyYW1lLT5z
Y3JpcHQoKS0+d2luZG93U2hlbGwod29ybGQpLT53aW5kb3coKTsKIH0KIAogSlNET01XaW5kb3cq
IHRvSlNET01XaW5kb3coSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBET01XaW5kb3c7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAg
Y2xhc3MgRnJhbWU7CisgICAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogICAgIGNsYXNzIEpTRE9N
V2luZG93OwogICAgIGNsYXNzIEpTRE9NV2luZG93U2hlbGw7CiAgICAgY2xhc3MgSlNMb2NhdGlv
bjsKQEAgLTQ2LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBKU0RPTVdp
bmRvd0Jhc2UoTm9uTnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBQYXNzUmVmUHRyPERP
TVdpbmRvdz4sIEpTRE9NV2luZG93U2hlbGwqKTsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgdm9p
ZCB1cGRhdGVEb2N1bWVudCgpOworICAgICAgICB2b2lkIHVwZGF0ZURvY3VtZW50KERPTVdyYXBw
ZXJXb3JsZCopOwogCiAgICAgICAgIERPTVdpbmRvdyogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIGQo
KS0+aW1wbC5nZXQoKTsgfQogICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKQEAgLTEwMiw3ICsxMDMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBE
T01XaW5kb3cqKTsKIAogICAgIC8vIFJldHVybnMgSlNET01XaW5kb3cgb3IgMAotICAgIEpTRE9N
V2luZG93KiB0b0pTRE9NV2luZG93KEZyYW1lKik7CisgICAgSlNET01XaW5kb3cqIHRvSlNET01X
aW5kb3coRnJhbWUqLCBET01XcmFwcGVyV29ybGQqKTsKICAgICBKU0RPTVdpbmRvdyogdG9KU0RP
TVdpbmRvdyhKU0M6OkpTVmFsdWUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDk5NTcp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzcxLDcgKzc3MSw4IEBAIHN0YXRpYyBGcmFtZSogY3JlYXRlV2luZG93KEV4ZWNT
dGF0ZSogZXgKICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPnNldE9wZW5lcihvcGVuZXJGcmFtZSk7
CiAgICAgbmV3RnJhbWUtPnBhZ2UoKS0+c2V0T3BlbmVkQnlET00oKTsKIAotICAgIEpTRE9NV2lu
ZG93KiBuZXdXaW5kb3cgPSB0b0pTRE9NV2luZG93KG5ld0ZyYW1lKTsKKyAgICAvLyBGSVhNRTog
SWYgYSB3aW5kb3cgaXMgY3JlYXRlZCBmcm9tIGFuIGlzb2xhdGVkIHdvcmxkLCB3aGF0IGFyZSB0
aGUgY29uc2VxdWVuY2VzIG9mIHRoaXM/ICdkaWFsb2dBcmd1bWVudHMnIG9ubHkgYXBwZWFycyBi
YWNrIGluIHRoZSBub3JtYWwgd29ybGQ/CisgICAgSlNET01XaW5kb3cqIG5ld1dpbmRvdyA9IHRv
SlNET01XaW5kb3cobmV3RnJhbWUsIG5vcm1hbFdvcmxkKGV4ZWMtPmdsb2JhbERhdGEoKSkpOwog
CiAgICAgaWYgKGRpYWxvZ0FyZ3MpCiAgICAgICAgIG5ld1dpbmRvdy0+cHV0RGlyZWN0KElkZW50
aWZpZXIoZXhlYywgImRpYWxvZ0FyZ3VtZW50cyIpLCBkaWFsb2dBcmdzKTsKQEAgLTgzMSw3ICs4
MzIsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVuKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAg
IGlmICghc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGV4ZWMsIGZyYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgICAgIGNvbnN0IEpTRE9NV2luZG93KiB0YXJnZXRl
ZFdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUpOworICAgICAgICBjb25zdCBKU0RPTVdpbmRv
dyogdGFyZ2V0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KGZyYW1lLCBjdXJyZW50V29ybGQoZXhl
YykpOwogICAgICAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc0VtcHR5KCkgJiYgKCFwcm90b2NvbElz
SmF2YVNjcmlwdChjb21wbGV0ZWRVUkwpIHx8ICh0YXJnZXRlZFdpbmRvdyAmJiB0YXJnZXRlZFdp
bmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkpKSB7CiAgICAgICAgICAgICBib29sIHVzZXJH
ZXN0dXJlID0gcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGV4ZWMpOwogCkBAIC05MzIsNyArOTMzLDcg
QEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nKEV4ZQogICAgIGlmICghZGlh
bG9nRnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNET01XaW5k
b3cqIGRpYWxvZ1dpbmRvdyA9IHRvSlNET01XaW5kb3coZGlhbG9nRnJhbWUpOworICAgIEpTRE9N
V2luZG93KiBkaWFsb2dXaW5kb3cgPSB0b0pTRE9NV2luZG93KGRpYWxvZ0ZyYW1lLCBjdXJyZW50
V29ybGQoZXhlYykpOwogICAgIGRpYWxvZ0ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5ydW5Nb2Rh
bCgpOwogCiAgICAgSWRlbnRpZmllciByZXR1cm5WYWx1ZShleGVjLCAicmV0dXJuVmFsdWUiKTsK
QEAgLTk3NSw3ICs5NzYsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93Ojpwb3N0TWVzc2FnZShFeGVj
U3RhCiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uID0gU2No
ZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgYXJncyk7CisgICAgU2NoZWR1bGVkQWN0aW9uKiBh
Y3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBhcmdzLCBjdXJyZW50V29ybGQo
ZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgaW50IGRlbGF5ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOwpA
QCAtOTg0LDcgKzk4NSw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhlY1N0
YXQKIAogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uID0gU2No
ZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgYXJncyk7CisgICAgU2NoZWR1bGVkQWN0aW9uKiBh
Y3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBhcmdzLCBjdXJyZW50V29ybGQo
ZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgaW50IGRlbGF5ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOwpA
QCAtMTA1Miw3ICsxMDUzLDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5l
cihFeAogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBm
YWxzZSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50
TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5h
dCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBA
IC0xMDY2LDcgKzEwNjcsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3Rl
bmVyCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAotICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciks
IGZhbHNlKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlz
dGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJyZW50V29ybGQoZXhl
YykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxs
LmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsMTggKzE3MSwxOCBAQCB2b2lkKiBKU0RP
TVdpbmRvd1NoZWxsOjpvcGVyYXRvciBuZXcoc2l6CiAvLyBDb252ZXJzaW9uIG1ldGhvZHMKIC8v
IC0tLS0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSosIEZyYW1lKiBmcmFtZSkKK0pTVmFsdWUg
dG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+d2lu
ZG93U2hlbGwoKTsKKyAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbChjdXJy
ZW50V29ybGQoZXhlYykpOwogfQogCi1KU0RPTVdpbmRvd1NoZWxsKiB0b0pTRE9NV2luZG93U2hl
bGwoRnJhbWUqIGZyYW1lKQorSlNET01XaW5kb3dTaGVsbCogdG9KU0RPTVdpbmRvd1NoZWxsKEZy
YW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQogewogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPndp
bmRvd1NoZWxsKCk7CisgICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoaXNv
bGF0ZWRXb3JsZCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogCiAgICAgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSopOwotICAgIEpTRE9NV2luZG93U2hlbGwqIHRvSlNE
T01XaW5kb3dTaGVsbChGcmFtZSopOworICAgIEpTRE9NV2luZG93U2hlbGwqIHRvSlNET01XaW5k
b3dTaGVsbChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZXNrdG9wTm90aWZpY2F0aW9uc0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rlc2t0b3BOb3Rp
ZmljYXRpb25zQ3VzdG9tLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGVza3RvcE5vdGlmaWNhdGlvbnNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw3ICs2Nyw3IEBAIEpTVmFsdWUgSlNOb3RpZmljYXRpb246OmFkZEV2ZW50TGlzdGVuZXIKICAg
ICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhl
YyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSksIGZhbHNlKSwg
YXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5l
cihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09i
amVjdChsaXN0ZW5lcikpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50
b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC03Nyw3
ICs3Nyw3IEBAIEpTVmFsdWUgSlNOb3RpZmljYXRpb246OnJlbW92ZUV2ZW50TGlzdGUKICAgICBp
ZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
Ci0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhl
YyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UpLmdl
dCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVu
dExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCks
IGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNp
b24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpT
T2JqZWN0KiBmdW5jdGlvbiwgYm9vbCBpc0F0dHJpYnV0ZSkKK0pTRXZlbnRMaXN0ZW5lcjo6SlNF
dmVudExpc3RlbmVyKEpTT2JqZWN0KiBmdW5jdGlvbiwgYm9vbCBpc0F0dHJpYnV0ZSwgRE9NV3Jh
cHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQogICAgIDogRXZlbnRMaXN0ZW5lcihKU0V2ZW50TGlz
dGVuZXJUeXBlKQogICAgICwgbV9qc0Z1bmN0aW9uKGZ1bmN0aW9uKQogICAgICwgbV9pc0F0dHJp
YnV0ZShpc0F0dHJpYnV0ZSkKKyAgICAsIG1faXNvbGF0ZWRXb3JsZChpc29sYXRlZFdvcmxkKQog
ewogfQogCkBAIC02NSw3ICs2Niw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dChTY3JpcHQKICAgICBpZiAoIWpzRnVuY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSB0b0pTRE9NR2xvYmFsT2JqZWN0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1faXNvbGF0ZWRX
b3JsZC5nZXQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKIApA
QCAtODYsNyArODcsMTIgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlw
dAogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAK
LSAgICBKU1ZhbHVlIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBqc0Z1bmN0aW9uLT5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAgSlNWYWx1ZSBoYW5kbGVFdmVu
dEZ1bmN0aW9uOworICAgIHsKKyAgICAgICAgLy8gU3dpdGNoIHdvcmxkcywganVzdCBpbiBjYXNl
IGhhbmRsZUV2ZW50IGlzIGEgZ2V0dGVyIGFuZCBjYXVzZXMgSlMgZXhlY3V0aW9uIQorICAgICAg
ICBFbnRlckRPTVdyYXBwZXJXb3JsZCB3b3JsZEVudHJ5KGV4ZWMsIG1faXNvbGF0ZWRXb3JsZC5n
ZXQoKSk7CisgICAgICAgIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBqc0Z1bmN0aW9uLT5nZXQoZXhl
YywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAgfQogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gaGFuZGxlRXZlbnRGdW5jdGlvbi5n
ZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkg
ewpAQCAtMTA4LDggKzExNCw4IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChT
Y3JpcHQKIAogICAgICAgICBnbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwogICAg
ICAgICBKU1ZhbHVlIHJldHZhbCA9IGhhbmRsZUV2ZW50RnVuY3Rpb24KLSAgICAgICAgICAgID8g
Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzRnVu
Y3Rpb24sIGFyZ3MpCi0gICAgICAgICAgICA6IGNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXZlbnQtPmN1cnJlbnRUYXJn
ZXQoKSksIGFyZ3MpOworICAgICAgICAgICAgPyBjYWxsSW5Xb3JsZChleGVjLCBoYW5kbGVFdmVu
dEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzRnVuY3Rpb24sIGFyZ3MsIG1faXNvbGF0
ZWRXb3JsZC5nZXQoKSkKKyAgICAgICAgICAgIDogY2FsbEluV29ybGQoZXhlYywganNGdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXZlbnQtPmN1
cnJlbnRUYXJnZXQoKSksIGFyZ3MsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CiAgICAgICAgIGds
b2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKIAogICAgICAgICBnbG9iYWxPYmplY3Qt
PnNldEN1cnJlbnRFdmVudChzYXZlZEV2ZW50KTsKQEAgLTE0MCw3ICsxNDYsNyBAQCBib29sIEpT
RXZlbnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IoU2NyaXB0CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0KTsKKyAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xhdGVk
V29ybGQuZ2V0KCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC0xNjAsNyArMTY2LDcgQEAgYm9v
bCBKU0V2ZW50TGlzdGVuZXI6OnJlcG9ydEVycm9yKFNjcmlwdAogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZ2xvYmFsT2JqZWN0LT50b1RoaXNPYmplY3QoZXhlYyk7CiAKICAgICBnbG9iYWxEYXRh
LT50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBjYWxs
KGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsK
KyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gY2FsbEluV29ybGQoZXhlYywganNGdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIG1faXNvbGF0ZWRXb3JsZC5nZXQo
KSk7CiAgICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgLy8gSWYg
YW4gZXJyb3Igb2NjdXJzIHdoaWxlIGhhbmRsaW5nIHRoZSBzY3JpcHQgZXJyb3IsIGl0IHNob3Vs
ZCBiZSBidWJibGVkIHVwLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5o
CShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgSlNFdmVudExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAg
IHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBjcmVh
dGUoSlNDOjpKU09iamVjdCogbGlzdGVuZXIsIGJvb2wgaXNBdHRyaWJ1dGUpCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGxp
c3RlbmVyLCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNFdmVudExpc3Rl
bmVyKGxpc3RlbmVyLCBpc0F0dHJpYnV0ZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBKU0V2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGlzQXR0cmlidXRlLCBpc29sYXRlZFdvcmxk
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgSlNFdmVudExpc3RlbmVyKiBj
YXN0KGNvbnN0IEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQpAQCAtNTksMTAgKzU5LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGVhckpTRnVuY3Rpb25JbmxpbmUoKTsK
IAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3Qq
IGZ1bmN0aW9uLCBib29sIGlzQXR0cmlidXRlKTsKKyAgICAgICAgSlNFdmVudExpc3RlbmVyKEpT
Qzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBib29sIGlzQXR0cmlidXRlLCBET01XcmFwcGVyV29ybGQq
IGlzb2xhdGVkV29ybGQpOwogCiAgICAgICAgIG11dGFibGUgSlNDOjpKU09iamVjdCogbV9qc0Z1
bmN0aW9uOwogICAgICAgICBib29sIG1faXNBdHRyaWJ1dGU7CisgICAgICAgIFJlZlB0cjxET01X
cmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNl
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBKU1ZhbHVlIEpTRXZl
bnRTb3VyY2U6OmFkZEV2ZW50TGlzdGVuZXIoCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZlbnRM
aXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0
ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4o
ZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNl
LCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTU5LDcgKzU5LDcgQEAgSlNWYWx1
ZSBKU0V2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3RlbgogICAgIGlmICghbGlzdGVuZXIuaXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJl
bW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSkuZ2V0KCksIGFyZ3MuYXQoMiku
dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlz
dGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jv
b2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcg
KzEyOCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB3b3JrZXIpOwogCiAgICAgaWYgKERl
ZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSB0YXJnZXQtPnRvRGVkaWNhdGVk
V29ya2VyQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gdG9KU0RPTUdsb2JhbE9iamVjdCh3b3Jr
ZXJDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHRvSlNET01HbG9iYWxPYmplY3Qod29ya2VyQ29u
dGV4dCwgZXhlYyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKQEAgLTEz
Niw3ICsxMzYsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAg
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc2hhcmVkV29ya2VyKTsKIAog
ICAgIGlmIChTaGFyZWRXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gdGFyZ2V0LT50b1No
YXJlZFdvcmtlckNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIHRvSlNET01HbG9iYWxPYmplY3Qo
d29ya2VyQ29udGV4dCk7CisgICAgICAgIHJldHVybiB0b0pTRE9NR2xvYmFsT2JqZWN0KHdvcmtl
ckNvbnRleHQsIGV4ZWMpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEwNSwxNCBAQCBKU1ZhbHVlIEpTSFRNTERv
Y3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogCiAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMikgewogICAg
ICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5m
cmFtZSgpOwogICAgICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgICAgIEpTRE9NV2luZG93U2hl
bGwqIHdyYXBwZXIgPSB0b0pTRE9NV2luZG93U2hlbGwoZnJhbWUpOworICAgICAgICAgICAgSlNE
T01XaW5kb3dTaGVsbCogd3JhcHBlciA9IHRvSlNET01XaW5kb3dTaGVsbChmcmFtZSwgY3VycmVu
dFdvcmxkKGV4ZWMpKTsKICAgICAgICAgICAgIGlmICh3cmFwcGVyKSB7CiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHdyYXBwZXItPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJvcGVuIikpOwogICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAg
ICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEp
OwogICAgICAgICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
d3JhcHBlciwgYXJncyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxJbldvcmxkKGV4ZWMs
IGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHdyYXBwZXIsIGFyZ3MsIGN1cnJlbnRXb3Js
ZChleGVjKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFt
ZVNldEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsMTQgKzQ3LDE0IEBAIGJvb2wgSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpjYW5HZXRJdGVtc0YK
ICAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05hbWUoZnJhbWVUYWcpOwogfQogCi1K
U1ZhbHVlIEpTSFRNTEZyYW1lU2V0RWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWUgSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgSlNIVE1MRWxlbWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTEVsZW1l
bnQqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBIVE1MRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsKIAogICAgIE5v
ZGUqIGZyYW1lID0gZWxlbWVudC0+Y2hpbGRyZW4oKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZSk7
CiAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4o
ZnJhbWUpLT5jb250ZW50RG9jdW1lbnQoKSkgewotICAgICAgICBpZiAoSlNET01XaW5kb3dTaGVs
bCogd2luZG93ID0gdG9KU0RPTVdpbmRvd1NoZWxsKGRvYy0+ZnJhbWUoKSkpCisgICAgICAgIGlm
IChKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3cgPSB0b0pTRE9NV2luZG93U2hlbGwoZG9jLT5mcmFt
ZSgpLCBjdXJyZW50V29ybGQoZXhlYykpKQogICAgICAgICAgICAgcmV0dXJuIHdpbmRvdzsKICAg
ICB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2Vu
ZEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
c3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDgg
QEAgSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OmRhdGFiYXNlRm9ySQogICAgIERhdGFiYXNl
KiBkYXRhYmFzZSA9IGltcGwoKS0+ZGF0YWJhc2VGb3JJZChhcmdzLmF0KDApLnRvSW50MzIoZXhl
YykpOwogICAgIGlmICghZGF0YWJhc2UpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIEpTRE9NV2luZG93KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KGljLT5pbnNw
ZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpKTsKKyAgICAvLyBDb3VsZCB1c2UgY3VycmVudFdvcmxk
KGV4ZWMpIC4uLiBidXQgd2hpY2ggZXhlYyEgIFRoZSBmb2xsb3dpbmcgbWl4ZWQgdXNlIG9mIGV4
ZWMgJiBpbnNwZWN0ZWRXaW5kb3ctPmdsb2JhbEV4ZWMoKSBzY2FyZXMgbWUhCisgICAgSlNET01X
aW5kb3cqIGluc3BlY3RlZFdpbmRvdyA9IHRvSlNET01XaW5kb3coaWMtPmluc3BlY3RlZFBhZ2Uo
KS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQoKSk7CiAgICAgcmV0dXJuIEpTSW5zcGVjdGVk
T2JqZWN0V3JhcHBlcjo6d3JhcChpbnNwZWN0ZWRXaW5kb3ctPmdsb2JhbEV4ZWMoKSwgdG9KUyhl
eGVjLCBkYXRhYmFzZSkpOwogfQogI2VuZGlmCkBAIC0xNDEsNyArMTQyLDcgQEAgSlNWYWx1ZSBK
U0luc3BlY3RvckJhY2tlbmQ6Omluc3BlY3RlZFdpbgogICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IGljID0gaW1wbCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgaWYgKCFpYykKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNET01XaW5kb3cqIGluc3BlY3RlZFdpbmRv
dyA9IHRvSlNET01XaW5kb3coaWMtPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpOworICAg
IEpTRE9NV2luZG93KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KGljLT5pbnNwZWN0
ZWRQYWdlKCktPm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldvcmxkKCkpOwogICAgIHJldHVybiBKU0lu
c3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoaW5zcGVjdGVkV2luZG93LT5nbG9iYWxFeGVjKCks
IGluc3BlY3RlZFdpbmRvdyk7CiB9CiAKQEAgLTI2Niw3ICsyNjcsNyBAQCBKU1ZhbHVlIEpTSW5z
cGVjdG9yQmFja2VuZDo6bm9kZUZvcklkKEV4CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBKU0RPTVdp
bmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhpYy0+aW5zcGVjdGVkUGFnZSgp
LT5tYWluRnJhbWUoKSk7CisgICAgSlNET01XaW5kb3cqIGluc3BlY3RlZFdpbmRvdyA9IHRvSlNE
T01XaW5kb3coaWMtPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQo
KSk7CiAgICAgcmV0dXJuIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChpbnNwZWN0ZWRX
aW5kb3ctPmdsb2JhbEV4ZWMoKSwgdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9y
UHJvdG90eXBlKGluc3BlY3RlZFdpbmRvdy0+Z2xvYmFsRXhlYygpKSwgbm9kZSkpOwogfQogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlz
aW9uIDQ5OTU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBz
dGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgZXZlbnRMaXN0ZW5lckNvdW50ZXIoIkpT
TGF6eUV2ZW50TGlzdGVuZXIiKTsKICNlbmRpZgogCi1KU0xhenlFdmVudExpc3RlbmVyOjpKU0xh
enlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcm
IGV2ZW50UGFyYW1ldGVyTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBOb2RlKiBub2RlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpCi0gICAgOiBKU0V2ZW50TGlzdGVu
ZXIoMCwgdHJ1ZSkKK0pTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIoY29u
c3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0ZXJOYW1l
LCBjb25zdCBTdHJpbmcmIGNvZGUsIE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
LCBpbnQgbGluZU51bWJlciwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQorICAgIDog
SlNFdmVudExpc3RlbmVyKDAsIHRydWUsIGlzb2xhdGVkV29ybGQpCiAgICAgLCBtX2Z1bmN0aW9u
TmFtZShmdW5jdGlvbk5hbWUpCiAgICAgLCBtX2V2ZW50UGFyYW1ldGVyTmFtZShldmVudFBhcmFt
ZXRlck5hbWUpCiAgICAgLCBtX2NvZGUoY29kZSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBKU0xh
enlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUoU2NyaQogICAgIGlmICghc2NyaXB0Q29udHJvbGxl
ci0+aXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGV4ZWN1dGlvbkNvbnRleHQpOwor
ICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0
KGV4ZWN1dGlvbkNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CiAgICAgaWYgKCFnbG9i
YWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xhenlFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xhenlFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsyOSwx
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0xhenlFdmVudExpc3RlbmVy
IDogcHVibGljIEpTRXZlbnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxKU0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0ZXJOYW1lLCBjb25zdCBTdHJpbmcm
IGNvZGUsIE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJl
cikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGV2ZW50UGFyYW1ldGVy
TmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCwgaW50IGxpbmVOdW1iZXIsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU0xhenlFdmVudExpc3Rl
bmVyKGZ1bmN0aW9uTmFtZSwgZXZlbnRQYXJhbWV0ZXJOYW1lLCBjb2RlLCBub2RlLCBzb3VyY2VV
UkwsIGxpbmVOdW1iZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNMYXp5
RXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGV2ZW50UGFyYW1ldGVyTmFtZSwgY29kZSwgbm9k
ZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyLCBpc29sYXRlZFdvcmxkKSk7CiAgICAgICAgIH0KICAg
ICAgICAgdmlydHVhbCB+SlNMYXp5RXZlbnRMaXN0ZW5lcigpOwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgSlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29u
c3QgU3RyaW5nJiBldmVudFBhcmFtZXRlck5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSos
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlcik7CisgICAgICAgIEpTTGF6
eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYg
ZXZlbnRQYXJhbWV0ZXJOYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIE5vZGUqLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRX
b3JsZCk7CiAKICAgICAgICAgdmlydHVhbCBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0aW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHdhc0NyZWF0
ZWRGcm9tTWFya3VwKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCShyZXZpc2lvbiA0OTk1NykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDE3ICszNiwxMSBAQCB2b2lkIEpTTWVzc2FnZUNoYW5uZWw6Om1hcmtD
aGlsZHJlbihNYXJrCiB7CiAgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAKLSAg
ICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSBtX2ltcGwtPnBvcnQxKCkpIHsKLSAgICAgICAgRE9N
T2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVhcCh0
aGlzKS0+Z2xvYmFsRGF0YSgpLCBwb3J0KTsKLSAgICAgICAgaWYgKHdyYXBwZXIpCi0gICAgICAg
ICAgICBtYXJrU3RhY2suYXBwZW5kKHdyYXBwZXIpOwotICAgIH0KKyAgICBpZiAoTWVzc2FnZVBv
cnQqIHBvcnQgPSBtX2ltcGwtPnBvcnQxKCkpCisgICAgICAgIG1hcmtET01PYmplY3RXcmFwcGVy
KG1hcmtTdGFjaywgKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKSwgcG9ydCk7CiAKLSAg
ICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSBtX2ltcGwtPnBvcnQyKCkpIHsKLSAgICAgICAgRE9N
T2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVhcCh0
aGlzKS0+Z2xvYmFsRGF0YSgpLCBwb3J0KTsKLSAgICAgICAgaWYgKHdyYXBwZXIpCi0gICAgICAg
ICAgICBtYXJrU3RhY2suYXBwZW5kKHdyYXBwZXIpOwotICAgIH0KKyAgICBpZiAoTWVzc2FnZVBv
cnQqIHBvcnQgPSBtX2ltcGwtPnBvcnQyKCkpCisgICAgICAgIG1hcmtET01PYmplY3RXcmFwcGVy
KG1hcmtTdGFjaywgKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKSwgcG9ydCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYs
OCBAQCB2b2lkIEpTTWVzc2FnZVBvcnQ6Om1hcmtDaGlsZHJlbihNYXJrU3RhCiAgICAgQmFzZTo6
bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9jYWxseSBl
bnRhbmdsZWQgcG9ydCwgd2UgY2FuIGRpcmVjdGx5IG1hcmsgaXQgYXMgcmVhY2hhYmxlLiBQb3J0
cyB0aGF0IGFyZSByZW1vdGVseSBlbnRhbmdsZWQgYXJlIG1hcmtlZCBpbi11c2UgYnkgbWFya0Fj
dGl2ZU9iamVjdHNGb3JDb250ZXh0KCkuCi0gICAgaWYgKE1lc3NhZ2VQb3J0KiBlbnRhbmdsZWRQ
b3J0ID0gbV9pbXBsLT5sb2NhbGx5RW50YW5nbGVkUG9ydCgpKSB7Ci0gICAgICAgIERPTU9iamVj
dCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoKkhlYXA6OmhlYXAodGhpcykt
Pmdsb2JhbERhdGEoKSwgZW50YW5nbGVkUG9ydCk7Ci0gICAgICAgIGlmICh3cmFwcGVyKQotICAg
ICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh3cmFwcGVyKTsKLSAgICB9CisgICAgaWYgKE1lc3Nh
Z2VQb3J0KiBlbnRhbmdsZWRQb3J0ID0gbV9pbXBsLT5sb2NhbGx5RW50YW5nbGVkUG9ydCgpKQor
ICAgICAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssICpIZWFwOjpoZWFwKHRoaXMp
LT5nbG9iYWxEYXRhKCksIGVudGFuZ2xlZFBvcnQpOwogCiAgICAgbV9pbXBsLT5tYXJrRXZlbnRM
aXN0ZW5lcnMobWFya1N0YWNrKTsKIH0KQEAgLTYxLDcgKzU4LDcgQEAgSlNWYWx1ZSBKU01lc3Nh
Z2VQb3J0OjphZGRFdmVudExpc3RlbmVyKAogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlz
dGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUo
YXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4
ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwg
Y3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC03MSw3ICs2OCw3IEBAIEpTVmFsdWUg
SlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW4KICAgICBpZiAoIWxpc3RlbmVyLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1v
dmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5l
cjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UpLmdldCgpLCBhcmdzLmF0KDIpLnRv
Qm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3Rl
bmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29s
ZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQs
NyBAQCBKU1ZhbHVlIEpTTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhCiAgICAgaWYgKCFs
aXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2
ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlKSwgYXJncy5hdCgy
KS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0
KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0
ZW5lciksIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihl
eGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEyNCw3ICsxMjQsNyBA
QCBKU1ZhbHVlIEpTTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjCiAgICAgaWYgKCFsaXN0
ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGlt
cGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2
ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlKS5nZXQoKSwgYXJn
cy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5l
cihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09i
amVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0
KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAg
LTE0MywxMCArMTQzLDggQEAgdm9pZCBKU05vZGU6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1h
cgogICAgIC8vIHRoZSBkb2N1bWVudCwgd2UgbmVlZCB0byBtYXJrIHRoZSBkb2N1bWVudCwgYnV0
IHdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseQogICAgIC8vIG1hcmsgYW55IG90aGVyIG5vZGVz
LgogICAgIGlmIChub2RlLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgaWYgKERvY3VtZW50KiBk
b2MgPSBub2RlLT5vd25lckRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChET01PYmplY3Qq
IGRvY1dyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCpIZWFwOjpoZWFwKHRoaXMp
LT5nbG9iYWxEYXRhKCksIGRvYykpCi0gICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChk
b2NXcmFwcGVyKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IG5vZGUt
Pm93bmVyRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtT
dGFjaywgKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKSwgZG9jKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVy
Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAg
c2hvcnQgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKAogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7
CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgbV9maWx0ZXIsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgbV9maWx0ZXIsIGFyZ3MpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbEluV29y
bGQoZXhlYywgbV9maWx0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9maWx0ZXIsIGFyZ3MsIGN1
cnJlbnRXb3JsZChleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKIApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAJKHJldmlzaW9u
IDQ5OTU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oIgogCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisKICNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0yNDMsNyArMjQ1LDggQEAgSlNPYmplY3QqIEpTUXVh
cmFudGluZWRPYmplY3RXcmFwcGVyOjpjbwogICAgIENvbnN0cnVjdFR5cGUgdW53cmFwcGVkQ29u
c3RydWN0VHlwZSA9IHdyYXBwZXItPm1fdW53cmFwcGVkT2JqZWN0LT5nZXRDb25zdHJ1Y3REYXRh
KHVud3JhcHBlZENvbnN0cnVjdERhdGEpOwogICAgIEFTU0VSVCh1bndyYXBwZWRDb25zdHJ1Y3RU
eXBlICE9IENvbnN0cnVjdFR5cGVOb25lKTsKIAotICAgIEpTVmFsdWUgdW53cmFwcGVkUmVzdWx0
ID0gSlNDOjpjb25zdHJ1Y3Qod3JhcHBlci0+dW53cmFwcGVkRXhlY1N0YXRlKCksIHdyYXBwZXIt
Pm1fdW53cmFwcGVkT2JqZWN0LCB1bndyYXBwZWRDb25zdHJ1Y3RUeXBlLCB1bndyYXBwZWRDb25z
dHJ1Y3REYXRhLCBwcmVwYXJlZEFyZ3MpOworICAgIC8vIEZJWE1FOiBRdWFyYW50aW5lZCBvYmpl
Y3RzIGFyZSBhbGwgaW4gdGhlIGRlYnVnZ2VyV29ybGQoKSwgZm9yIG5vdy4gSW5zdGVhZCwgd2Ug
c2hvdWxkIHJlbW92ZSB0aGUgcXVhcmFudGluZWQgb2JqZWN0cywgJiByZXBsYWNlIHRoZW0gd2l0
aCBhbiBpc29sYXRlZCB3b3JsZD8KKyAgICBKU1ZhbHVlIHVud3JhcHBlZFJlc3VsdCA9IGNvbnN0
cnVjdEluV29ybGQod3JhcHBlci0+dW53cmFwcGVkRXhlY1N0YXRlKCksIHdyYXBwZXItPm1fdW53
cmFwcGVkT2JqZWN0LCB1bndyYXBwZWRDb25zdHJ1Y3RUeXBlLCB1bndyYXBwZWRDb25zdHJ1Y3RE
YXRhLCBwcmVwYXJlZEFyZ3MsIGRlYnVnZ2VyV29ybGQoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3Vs
dFZhbHVlID0gd3JhcHBlci0+d3JhcE91dGdvaW5nVmFsdWUod3JhcHBlci0+dW53cmFwcGVkRXhl
Y1N0YXRlKCksIHVud3JhcHBlZFJlc3VsdCk7CiAgICAgQVNTRVJUKHJlc3VsdFZhbHVlLmlzT2Jq
ZWN0KCkpOwpAQCAtMjkzLDcgKzI5Niw4IEBAIEpTVmFsdWUgSlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXI6OmNhbGwKICAgICBDYWxsVHlwZSB1bndyYXBwZWRDYWxsVHlwZSA9IHdyYXBwZXItPm1f
dW53cmFwcGVkT2JqZWN0LT5nZXRDYWxsRGF0YSh1bndyYXBwZWRDYWxsRGF0YSk7CiAgICAgQVNT
RVJUKHVud3JhcHBlZENhbGxUeXBlICE9IENhbGxUeXBlTm9uZSk7CiAKLSAgICBKU1ZhbHVlIHVu
d3JhcHBlZFJlc3VsdCA9IEpTQzo6Y2FsbCh3cmFwcGVyLT51bndyYXBwZWRFeGVjU3RhdGUoKSwg
d3JhcHBlci0+bV91bndyYXBwZWRPYmplY3QsIHVud3JhcHBlZENhbGxUeXBlLCB1bndyYXBwZWRD
YWxsRGF0YSwgcHJlcGFyZWRUaGlzVmFsdWUsIHByZXBhcmVkQXJncyk7CisgICAgLy8gRklYTUU6
IFF1YXJhbnRpbmVkIG9iamVjdHMgYXJlIGFsbCBpbiB0aGUgZGVidWdnZXJXb3JsZCgpLCBmb3Ig
bm93LiBJbnN0ZWFkLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBxdWFyYW50aW5lZCBvYmplY3RzLCAm
IHJlcGxhY2UgdGhlbSB3aXRoIGFuIGlzb2xhdGVkIHdvcmxkPworICAgIEpTVmFsdWUgdW53cmFw
cGVkUmVzdWx0ID0gY2FsbEluV29ybGQod3JhcHBlci0+dW53cmFwcGVkRXhlY1N0YXRlKCksIHdy
YXBwZXItPm1fdW53cmFwcGVkT2JqZWN0LCB1bndyYXBwZWRDYWxsVHlwZSwgdW53cmFwcGVkQ2Fs
bERhdGEsIHByZXBhcmVkVGhpc1ZhbHVlLCBwcmVwYXJlZEFyZ3MsIGRlYnVnZ2VyV29ybGQoKSk7
CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBwZXItPndyYXBPdXRnb2luZ1ZhbHVlKHdyYXBw
ZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB1bndyYXBwZWRSZXN1bHQpOwogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAko
cmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3Rh
bmNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBKU1ZhbHVlIEpT
U1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVudExpCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZl
bnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNy
ZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhl
YykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBj
dXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTY0LDcgKzY0LDcgQEAgSlNWYWx1ZSBKU1NWR0Vs
ZW1lbnRJbnN0YW5jZTo6cmVtb3ZlRXZlbgogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50
TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFu
KGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBm
YWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhl
YykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsMTEgKzQ1LDggQEAgdm9pZCBKU1NoYXJlZFdvcmtlcjo6bWFya0NoaWxkcmVuKE1h
cmtTdAogewogICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwogCi0gICAgaWYgKE1l
c3NhZ2VQb3J0KiBwb3J0ID0gaW1wbCgpLT5wb3J0KCkpIHsKLSAgICAgICAgRE9NT2JqZWN0KiB3
cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVhcCh0aGlzKS0+Z2xv
YmFsRGF0YSgpLCBwb3J0KTsKLSAgICAgICAgaWYgKHdyYXBwZXIpCi0gICAgICAgICAgICBtYXJr
U3RhY2suYXBwZW5kKHdyYXBwZXIpOwotICAgIH0KKyAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQg
PSBpbXBsKCktPnBvcnQoKSkKKyAgICAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNr
LCAqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpLCBwb3J0KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tl
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNWYWx1ZSBKU1dl
YlNvY2tldDo6YWRkRXZlbnRMaXN0ZW5lcihFeAogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3Qo
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50
TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3Vy
cmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC03Niw3ICs3Niw3IEBAIEpTVmFsdWUgSlNXZWJTb2Nr
ZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExp
c3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihl
eGVjKSk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFs
c2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMp
KTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6YWRkRXZlbnRM
aXN0ZW5lCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciks
IGZhbHNlKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZl
bnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNy
ZWF0ZShhc09iamVjdChsaXN0ZW5lciksIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdz
LmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
QEAgLTEzMiwxMyArMTMyLDEzIEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpyZW1vdmVFdmVu
dExpc3QKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVy
KSwgZmFsc2UpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgp
LT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRXb3JsZChl
eGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAogSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6OnNldFRpbWVvdXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFNjaGVkdWxlZEFjdGlv
biogYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgYXJncyk7CisgICAgU2No
ZWR1bGVkQWN0aW9uKiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBhcmdz
LCBjdXJyZW50V29ybGQoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW50IGRlbGF5ID0gYXJncy5hdCgxKS50
b0ludDMyKGV4ZWMpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0
OjpzZXRUaW1lb3V0KEV4ZWMKIAogSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6OnNldEludGVydmFs
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBTY2hlZHVsZWRB
Y3Rpb24qIGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKGV4ZWMsIGFyZ3MpOworICAg
IFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywg
YXJncywgY3VycmVudFdvcmxkKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGludCBkZWxheSA9IGFyZ3MuYXQo
MSkudG9JbnQzMihleGVjKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSAr
NTMsOCBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6Om1hcmtDaGlsZHJlbihNYXJrCiB7CiAgICAg
QmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CiAKLSAgICBpZiAoWE1MSHR0cFJlcXVlc3RV
cGxvYWQqIHVwbG9hZCA9IG1faW1wbC0+b3B0aW9uYWxVcGxvYWQoKSkgewotICAgICAgICBET01P
YmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCpIZWFwOjpoZWFwKHRo
aXMpLT5nbG9iYWxEYXRhKCksIHVwbG9hZCk7Ci0gICAgICAgIGlmICh3cmFwcGVyKQotICAgICAg
ICAgICAgbWFya1N0YWNrLmFwcGVuZCh3cmFwcGVyKTsKLSAgICB9CisgICAgaWYgKFhNTEh0dHBS
ZXF1ZXN0VXBsb2FkKiB1cGxvYWQgPSBtX2ltcGwtPm9wdGlvbmFsVXBsb2FkKCkpCisgICAgICAg
IG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgKkhlYXA6OmhlYXAodGhpcyktPmdsb2Jh
bERhdGEoKSwgdXBsb2FkKTsKIAogICAgIG1faW1wbC0+bWFya0V2ZW50TGlzdGVuZXJzKG1hcmtT
dGFjayk7CiB9CkBAIC0xNTYsNyArMTUzLDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0Ojph
ZGRFdmVudExpc3RlbgogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlz
dGVuZXIpLCBmYWxzZSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCkt
PmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMp
KSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCkBAIC0xNjYsNyArMTYzLDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZW1v
dmVFdmVudExpcwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlz
dGVuZXIpLCBmYWxzZSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBp
bXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNF
dmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdv
cmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0
cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ5OTU3KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsMTEgKzQ1LDggQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0VXBsb2Fk
OjptYXJrQ2hpbGRyZQogewogICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwogCi0g
ICAgaWYgKFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IG1faW1wbC0+YXNzb2NpYXRl
ZFhNTEh0dHBSZXF1ZXN0KCkpIHsKLSAgICAgICAgRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2Fj
aGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpLCB4bWxI
dHRwUmVxdWVzdCk7Ci0gICAgICAgIGlmICh3cmFwcGVyKQotICAgICAgICAgICAgbWFya1N0YWNr
LmFwcGVuZCh3cmFwcGVyKTsKLSAgICB9CisgICAgaWYgKFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRw
UmVxdWVzdCA9IG1faW1wbC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0KCkpCisgICAgICAgIG1h
cmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERh
dGEoKSwgeG1sSHR0cFJlcXVlc3QpOwogCiAgICAgbV9pbXBsLT5tYXJrRXZlbnRMaXN0ZW5lcnMo
bWFya1N0YWNrKTsKIH0KQEAgLTYwLDcgKzU3LDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0
VXBsb2FkOjphZGRFdmVudAogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJn
cy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3Qo
bGlzdGVuZXIpLCBmYWxzZSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBs
KCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExp
c3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCkBAIC03MCw3ICs2Nyw3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdFVwbG9h
ZDo6cmVtb3ZlRXYKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3Mu
YXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxp
c3RlbmVyKSwgZmFsc2UpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAg
aW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpT
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgZmFsc2UsIGN1cnJlbnRX
b3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVs
ZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVk
QWN0aW9uLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TY2hlZHVsZWRBY3Rpb24qIFNj
aGVkdWxlZEFjdGlvbjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK1NjaGVkdWxlZEFjdGlvbiogU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQp
CiB7CiAgICAgSlNWYWx1ZSB2ID0gYXJncy5hdCgwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
QEAgLTU1LDE1ICs1NSwxNiBAQCBTY2hlZHVsZWRBY3Rpb24qIFNjaGVkdWxlZEFjdGlvbjo6Y3Jl
YXRlCiAgICAgICAgIFVTdHJpbmcgc3RyaW5nID0gdi50b1N0cmluZyhleGVjKTsKICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHJldHVybiBuZXcgU2NoZWR1bGVkQWN0aW9uKHN0cmluZyk7CisgICAgICAgIHJldHVybiBuZXcg
U2NoZWR1bGVkQWN0aW9uKHN0cmluZywgaXNvbGF0ZWRXb3JsZCk7CiAgICAgfQogICAgIEFyZ0xp
c3QgYXJnc1RhaWw7CiAgICAgYXJncy5nZXRTbGljZSgyLCBhcmdzVGFpbCk7Ci0gICAgcmV0dXJu
IG5ldyBTY2hlZHVsZWRBY3Rpb24odiwgYXJnc1RhaWwpOworICAgIHJldHVybiBuZXcgU2NoZWR1
bGVkQWN0aW9uKHYsIGFyZ3NUYWlsLCBpc29sYXRlZFdvcmxkKTsKIH0KIAotU2NoZWR1bGVkQWN0
aW9uOjpTY2hlZHVsZWRBY3Rpb24oSlNWYWx1ZSBmdW5jdGlvbiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK1NjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKEpTVmFsdWUgZnVuY3Rpb24sIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkKICAgICA6
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgLCBtX2lzb2xhdGVkV29ybGQoaXNvbGF0ZWRXb3Js
ZCkKIHsKICAgICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOwogICAg
IGZvciAoQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0
ZUZ1bmN0aW9uSW5DCiAgICAgICAgIGFyZ3MuYXBwZW5kKG1fYXJnc1tpXSk7CiAKICAgICBnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICBjYWxs
KGV4ZWMsIG1fZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsK
KyAgICBjYWxsSW5Xb3JsZChleGVjLCBtX2Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRo
aXNWYWx1ZSwgYXJncywgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKICAgICBnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQpAQCAtMTExLDcgKzExMiw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpl
eGVjdXRlRnVuY3Rpb25JbkMKIAogdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoRG9jdW1l
bnQqIGRvY3VtZW50KQogewotICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93
KGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdp
bmRvdyhkb2N1bWVudC0+ZnJhbWUoKSwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKICAgICBpZiAo
IXdpbmRvdykKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjUsNyArMTI2LDcgQEAgdm9pZCBTY2hl
ZHVsZWRBY3Rpb246OmV4ZWN1dGUoRG9jdW1lbnQqIAogICAgICAgICBleGVjdXRlRnVuY3Rpb25J
bkNvbnRleHQod2luZG93LCB3aW5kb3ctPnNoZWxsKCkpOwogICAgICAgICBEb2N1bWVudDo6dXBk
YXRlU3R5bGVGb3JBbGxEb2N1bWVudHMoKTsKICAgICB9IGVsc2UKLSAgICAgICAgZnJhbWUtPnNj
cmlwdCgpLT5leGVjdXRlU2NyaXB0KG1fY29kZSk7CisgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+
ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChtX2lzb2xhdGVkV29ybGQuZ2V0KCksIG1fY29k
ZSk7CiAKICAgICBmcmFtZS0+c2NyaXB0KCktPnNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGZh
bHNlKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAkocmV2aXNp
b24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFNjaGVkdWxlZEFjdGlvbl9oCiAK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPEpTRE9NQmluZGluZy5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNDZWxsLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDEsMTQgKzQyLDE1IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAqLwogICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbiB7CiAgICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgU2NoZWR1bGVkQWN0aW9uKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKKyAgICAgICAgc3RhdGljIFNjaGVkdWxlZEFjdGlvbiog
Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0JiwgRE9NV3JhcHBlcldv
cmxkKiBpc29sYXRlZFdvcmxkKTsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU2NoZWR1bGVkQWN0aW9uKEpT
Qzo6SlNWYWx1ZSBmdW5jdGlvbiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIFNjaGVk
dWxlZEFjdGlvbihjb25zdCBTdHJpbmcmIGNvZGUpCisgICAgICAgIFNjaGVkdWxlZEFjdGlvbihK
U0M6OkpTVmFsdWUgZnVuY3Rpb24sIGNvbnN0IEpTQzo6QXJnTGlzdCYsIERPTVdyYXBwZXJXb3Js
ZCogaXNvbGF0ZWRXb3JsZCk7CisgICAgICAgIFNjaGVkdWxlZEFjdGlvbihjb25zdCBTdHJpbmcm
IGNvZGUsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkKICAgICAgICAgICAgIDogbV9j
b2RlKGNvZGUpCisgICAgICAgICAgICAsIG1faXNvbGF0ZWRXb3JsZChpc29sYXRlZFdvcmxkKQog
ICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNjEsNiArNjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIEpTQzo6UHJvdGVjdGVkSlNWYWx1ZSBtX2Z1bmN0aW9uOwogICAgICAgICBW
ZWN0b3I8SlNDOjpQcm90ZWN0ZWRKU1ZhbHVlPiBtX2FyZ3M7CiAgICAgICAgIFN0cmluZyBtX2Nv
ZGU7CisgICAgICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgsOCArNDgsOSBAQCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1l
CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIFNjcmlwdENv
bnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7Ci0gICAgaWYgKHNj
cmlwdENvbnRyb2xsZXItPmhhdmVXaW5kb3dTaGVsbCgpKSB7Ci0gICAgICAgIG1fd2luZG93ID0g
c2NyaXB0Q29udHJvbGxlci0+d2luZG93U2hlbGwoKS0+d2luZG93KCk7CisgICAgLy8gRklYTUU6
IGV4cGxpY2l0bHkgc2F2ZSBhbmQgcmVzdG9yZSBpc29sYXRlZCB3b3JsZHMnIGdsb2JhbCBvYmpl
Y3RzIHdoZW4gdXNpbmcgdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4gPHJkYXI6Ly9wcm9ibGVtLzcz
MjgxMTE+CisgICAgaWYgKEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gc2NyaXB0Q29u
dHJvbGxlci0+ZXhpc3RpbmdXaW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkpIHsK
KyAgICAgICAgbV93aW5kb3cgPSB3aW5kb3dTaGVsbC0+d2luZG93KCk7CiAgICAgICAgIHNjcmlw
dENvbnRyb2xsZXItPmF0dGFjaERlYnVnZ2VyKDApOwogICAgIH0KIH0KQEAgLTcwLDExICs3MSwx
MSBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtCiAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNj
cmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7Ci0gICAgaWYgKHNjcmlwdENvbnRyb2xs
ZXItPmhhdmVXaW5kb3dTaGVsbCgpKSB7Ci0gICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRv
d1NoZWxsID0gc2NyaXB0Q29udHJvbGxlci0+d2luZG93U2hlbGwoKTsKLSAgICAgICAgaWYgKG1f
d2luZG93KSB7CisgICAgLy8gRklYTUU6IGV4cGxpY2l0bHkgc2F2ZSBhbmQgcmVzdG9yZSBpc29s
YXRlZCB3b3JsZHMnIGdsb2JhbCBvYmplY3RzIHdoZW4gdXNpbmcgdGhlIGJhY2svZm9yd2FyZCBj
YWNoZS4gPHJkYXI6Ly9wcm9ibGVtLzczMjgxMTE+CisgICAgaWYgKEpTRE9NV2luZG93U2hlbGwq
IHdpbmRvd1NoZWxsID0gc2NyaXB0Q29udHJvbGxlci0+ZXhpc3RpbmdXaW5kb3dTaGVsbChtYWlu
VGhyZWFkTm9ybWFsV29ybGQoKSkpIHsKKyAgICAgICAgaWYgKG1fd2luZG93KQogICAgICAgICAg
ICAgd2luZG93U2hlbGwtPnNldFdpbmRvdyhtX3dpbmRvdy5nZXQoKSk7Ci0gICAgICAgIH0gZWxz
ZSB7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgd2luZG93U2hlbGwtPnNldFdpbmRvdyhm
cmFtZS0+ZG9tV2luZG93KCkpOwogICAgICAgICAgICAgc2NyaXB0Q29udHJvbGxlci0+YXR0YWNo
RGVidWdnZXIocGFnZS0+ZGVidWdnZXIoKSk7CiAgICAgICAgICAgICB3aW5kb3dTaGVsbC0+d2lu
ZG93KCktPnNldFByb2ZpbGVHcm91cChwYWdlLT5ncm91cCgpLmlkZW50aWZpZXIoKSk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ5OTU3
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJFdmVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNzEs
OCArNzIsMTEgQEAgU2NyaXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZQogCiBT
Y3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiB7Ci0gICAgaWYgKG1fd2luZG93
U2hlbGwpIHsKLSAgICAgICAgbV93aW5kb3dTaGVsbCA9IDA7CisgICAgaWYgKCFtX3dpbmRvd1No
ZWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsr
aXRlcikKKyAgICAgICAgICAgIGl0ZXItPmZpcnN0LT5mb3JnZXRTY3JpcHRDb250cm9sbGVyKHRo
aXMpOworCisgICAgICAgIG1fd2luZG93U2hlbGxzLmNsZWFyKCk7CiAgICAgCiAgICAgICAgIC8v
IEl0J3MgbGlrZWx5IHRoYXQgcmVsZWFzaW5nIHRoZSBnbG9iYWwgb2JqZWN0IGhhcyBjcmVhdGVk
IGEgbG90IG9mIGdhcmJhZ2UuCiAgICAgICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0
U29vbigpOwpAQCAtODEsNyArODUsNyBAQCBTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJv
bGxlcigpCiAgICAgZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogfQogCi1TY3Jp
cHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2Rl
JiBzb3VyY2VDb2RlKSAKK1NjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5X
b3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBET01XcmFwcGVyV29ybGQq
IHdvcmxkKQogewogICAgIGNvbnN0IFNvdXJjZUNvZGUmIGpzU291cmNlQ29kZSA9IHNvdXJjZUNv
ZGUuanNTb3VyY2VDb2RlKCk7CiAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGpzU291cmNlQ29kZS5w
cm92aWRlcigpLT51cmwoKTsKQEAgLTk0LDEyICs5OCwxMiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZShjCiAgICAgLy8gZXZhbHVhdGUgY29kZS4gUmV0dXJucyB0aGUg
SlMgcmV0dXJuIHZhbHVlIG9yIDAKICAgICAvLyBpZiB0aGVyZSB3YXMgbm9uZSwgYW4gZXJyb3Ig
b2NjdXJlZCBvciB0aGUgdHlwZSBjb3VsZG4ndCBiZSBjb252ZXJ0ZWQuCiAKLSAgICBpbml0U2Ny
aXB0SWZOZWVkZWQoKTsKICAgICAvLyBpbmxpbmVDb2RlIGlzIHRydWUgZm9yIDxhIGhyZWY9Imph
dmFzY3JpcHQ6ZG9Tb21ldGhpbmcoKSI+CiAgICAgLy8gYW5kIGZhbHNlIGZvciA8c2NyaXB0PmRv
U29tZXRoaW5nKCk8L3NjcmlwdD4uIENoZWNrIGlmIGl0IGhhcyB0aGUKICAgICAvLyBleHBlY3Rl
ZCB2YWx1ZSBpbiBhbGwgY2FzZXMuCiAgICAgLy8gU2VlIHNtYXJ0IHdpbmRvdy5vcGVuIHBvbGlj
eSBmb3Igd2hlcmUgdGhpcyBpcyB1c2VkLgotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd2luZG93
U2hlbGwtPndpbmRvdygpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNET01XaW5kb3dTaGVsbCogc2hl
bGwgPSB3aW5kb3dTaGVsbCh3b3JsZCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gc2hlbGwtPndp
bmRvdygpLT5nbG9iYWxFeGVjKCk7CiAgICAgY29uc3QgU3RyaW5nKiBzYXZlZFNvdXJjZVVSTCA9
IG1fc291cmNlVVJMOwogICAgIG1fc291cmNlVVJMID0gJnNvdXJjZVVSTDsKIApAQCAtMTA3LDkg
KzExMSw5IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGMKIAogICAg
IFJlZlB0cjxGcmFtZT4gcHJvdGVjdCA9IG1fZnJhbWU7CiAKLSAgICBtX3dpbmRvd1NoZWxsLT53
aW5kb3coKS0+Z2xvYmFsRGF0YSgpLT50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBs
ZXRpb24gY29tcCA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpLT5nbG9iYWxTY29wZUNoYWluKCksIGpzU291cmNlQ29kZSwgbV93aW5kb3dTaGVsbCk7Ci0g
ICAgbV93aW5kb3dTaGVsbC0+d2luZG93KCktPmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIu
c3RvcCgpOworICAgIGV4ZWMtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwor
ICAgIENvbXBsZXRpb24gY29tcCA9IFdlYkNvcmU6OmV2YWx1YXRlSW5Xb3JsZChleGVjLCBleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwganNTb3VyY2VDb2Rl
LCBzaGVsbCwgd29ybGQpOworICAgIGV4ZWMtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7CiAKICAgICAvLyBFdmFsdWF0aW5nIHRoZSBKYXZhU2NyaXB0IGNvdWxkIGNhdXNlIHRo
ZSBmcmFtZSB0byBiZSBkZWFsbG9jYXRlZAogICAgIC8vIHNvIHdlIHN0YXJ0IHRoZSBrZWVwIGFs
aXZlIHRpbWVyIGhlcmUuCkBAIC0xMjcsNTIgKzEzMSwxMDggQEAgU2NyaXB0VmFsdWUgU2NyaXB0
Q29udHJvbGxlcjo6ZXZhbHVhdGUoYwogICAgIHJldHVybiBKU1ZhbHVlKCk7CiB9CiAKLXZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgLyogd29y
bGRJRCAqLywgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VDb2RlKSAKK1Nj
cmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNv
ZGUmIHNvdXJjZUNvZGUpIAogewotICAgIC8vIEZJWE1FOiBBY3R1YWxseSBzdXBwb3J0IGlzb2xh
dGVkIHdvcmxkcyEKKyAgICByZXR1cm4gZXZhbHVhdGVJbldvcmxkKHNvdXJjZUNvZGUsIG1haW5U
aHJlYWROb3JtYWxXb3JsZCgpKTsKK30KKworLy8gQW4gRE9NV3JhcHBlcldvcmxkIG90aGVyIHRo
YW4gdGhlIHRocmVhZCdzIG5vcm1hbCB3b3JsZC4KK2NsYXNzIElzb2xhdGVkV29ybGQgOiBwdWJs
aWMgRE9NV3JhcHBlcldvcmxkIHsKK3B1YmxpYzoKKyAgICBJc29sYXRlZFdvcmxkKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKKyAgICAgICAgOiBET01XcmFwcGVyV29ybGQoZ2xvYmFsRGF0YSkK
KyAgICB7CisgICAgICAgIEpTR2xvYmFsRGF0YTo6Q2xpZW50RGF0YSogY2xpZW50RGF0YSA9IGds
b2JhbERhdGEtPmNsaWVudERhdGE7CisgICAgICAgIEFTU0VSVChjbGllbnREYXRhKTsKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8V2ViQ29yZUpTQ2xpZW50RGF0YSo+KGNsaWVudERhdGEpLT5yZW1lbWJl
cldvcmxkKHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElzb2xhdGVkV29y
bGQ+IGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJc29sYXRlZFdvcmxkKGdsb2JhbERhdGEpKTsgfQorfTsKKworc3RhdGljIFBhc3NSZWZQdHI8
SXNvbGF0ZWRXb3JsZD4gZmluZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQpCit7CisgICAgaWYgKCF3
b3JsZElEKQorICAgICAgICByZXR1cm4gSXNvbGF0ZWRXb3JsZDo6Y3JlYXRlKEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQs
IFJlZlB0cjxJc29sYXRlZFdvcmxkPiA+IFdvcmxkTWFwOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoV29ybGRNYXAsIGlzb2xhdGVkV29ybGRzLCAoKSk7CisKKyAgICBXb3JsZE1hcDo6aXRlcmF0
b3IgaXRlciA9IGlzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CisgICAgaWYgKGl0ZXIgIT0g
aXNvbGF0ZWRXb3JsZHMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisKKyAg
ICBSZWZQdHI8SXNvbGF0ZWRXb3JsZD4gbmV3V29ybGQgPSBJc29sYXRlZFdvcmxkOjpjcmVhdGUo
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICBpc29sYXRlZFdvcmxkcy5h
ZGQod29ybGRJRCwgbmV3V29ybGQpOworICAgIHJldHVybiBuZXdXb3JsZDsKK30KKworU2NyaXB0
VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQg
d29ybGRJRCwgY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkgCit7CisgICAgUmVm
UHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQgPSBmaW5kV29ybGQod29ybGRJRCk7CisgICAgcmV0
dXJuIGV2YWx1YXRlSW5Xb3JsZChzb3VyY2VDb2RlLCB3b3JsZC5nZXQoKSk7Cit9CisKK3ZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJ
RCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VDb2RlKSAKK3sKKyAgICBS
ZWZQdHI8RE9NV3JhcHBlcldvcmxkPiB3b3JsZCA9IGZpbmRXb3JsZCh3b3JsZElEKTsKKwogICAg
IHVuc2lnbmVkIHNpemUgPSBzb3VyY2VDb2RlLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBldmFsdWF0ZShzb3VyY2VDb2RlW2ldKTsKKyAg
ICAgICAgZXZhbHVhdGVJbldvcmxkKHNvdXJjZUNvZGVbaV0sIHdvcmxkLmdldCgpKTsKIH0KIAog
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKCkKIHsKLSAgICBpZiAoIW1f
d2luZG93U2hlbGwpCisgICAgaWYgKG1fd2luZG93U2hlbGxzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAg
IC8vIENsZWFyIHRoZSBkZWJ1Z2dlciBmcm9tIHRoZSBjdXJyZW50IHdpbmRvdyBiZWZvcmUgc2V0
dGluZyB0aGUgbmV3IHdpbmRvdy4KKyAgICBET01XcmFwcGVyV29ybGQqIGRlYnVnV29ybGQgPSBk
ZWJ1Z2dlcldvcmxkKCk7CiAgICAgYXR0YWNoRGVidWdnZXIoMCk7CiAKLSAgICBtX3dpbmRvd1No
ZWxsLT53aW5kb3coKS0+d2lsbFJlbW92ZUZyb21XaW5kb3dTaGVsbCgpOwotICAgIG1fd2luZG93
U2hlbGwtPnNldFdpbmRvdyhtX2ZyYW1lLT5kb21XaW5kb3coKSk7Ci0KLSAgICBpZiAoUGFnZSog
cGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICBhdHRhY2hEZWJ1Z2dlcihwYWdlLT5k
ZWJ1Z2dlcigpKTsKLSAgICAgICAgbV93aW5kb3dTaGVsbC0+d2luZG93KCktPnNldFByb2ZpbGVH
cm91cChwYWdlLT5ncm91cCgpLmlkZW50aWZpZXIoKSk7CisgICAgZm9yIChTaGVsbE1hcDo6aXRl
cmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVs
bHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gaXRl
ci0+Zmlyc3Q7CisgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0gaXRlci0+
c2Vjb25kOworICAgICAgICB3aW5kb3dTaGVsbC0+d2luZG93KCktPndpbGxSZW1vdmVGcm9tV2lu
ZG93U2hlbGwoKTsKKyAgICAgICAgd2luZG93U2hlbGwtPnNldFdpbmRvdyhtX2ZyYW1lLT5kb21X
aW5kb3coKSk7CisKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsK
KyAgICAgICAgICAgIGlmICh3b3JsZCA9PSBkZWJ1Z1dvcmxkKQorICAgICAgICAgICAgICAgIGF0
dGFjaERlYnVnZ2VyKHBhZ2UtPmRlYnVnZ2VyKCkpOworICAgICAgICAgICAgd2luZG93U2hlbGwt
PndpbmRvdygpLT5zZXRQcm9maWxlR3JvdXAocGFnZS0+Z3JvdXAoKS5pZGVudGlmaWVyKCkpOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVGhlcmUgaXMgbGlrZWx5IHRvIGJlIGEgbG90IG9m
IGdhcmJhZ2Ugbm93LgogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwog
fQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoKQorSlNET01XaW5kb3dTaGVs
bCogU2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdChET01XcmFwcGVyV29ybGQqIHdvcmxkKQog
ewotICAgIGlmIChtX3dpbmRvd1NoZWxsKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFt
X3dpbmRvd1NoZWxscy5jb250YWlucyh3b3JsZCkpOwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKIAotICAgIG1fd2luZG93U2hlbGwgPSBuZXcgSlNET01XaW5kb3dT
aGVsbChtX2ZyYW1lLT5kb21XaW5kb3coKSk7Ci0gICAgbV93aW5kb3dTaGVsbC0+d2luZG93KCkt
PnVwZGF0ZURvY3VtZW50KCk7CisgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBu
ZXcgSlNET01XaW5kb3dTaGVsbChtX2ZyYW1lLT5kb21XaW5kb3coKSk7CisgICAgbV93aW5kb3dT
aGVsbHMuYWRkKHdvcmxkLCB3aW5kb3dTaGVsbCk7CisgICAgd29ybGQtPnJlbWVtYmVyU2NyaXB0
Q29udHJvbGxlcih0aGlzKTsKKyAgICB3aW5kb3dTaGVsbC0+d2luZG93KCktPnVwZGF0ZURvY3Vt
ZW50KHdvcmxkKTsKIAogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7Ci0g
ICAgICAgIGF0dGFjaERlYnVnZ2VyKHBhZ2UtPmRlYnVnZ2VyKCkpOwotICAgICAgICBtX3dpbmRv
d1NoZWxsLT53aW5kb3coKS0+c2V0UHJvZmlsZUdyb3VwKHBhZ2UtPmdyb3VwKCkuaWRlbnRpZmll
cigpKTsKKyAgICAgICAgaWYgKHdvcmxkID09IGRlYnVnZ2VyV29ybGQoKSkKKyAgICAgICAgICAg
IGF0dGFjaERlYnVnZ2VyKHBhZ2UtPmRlYnVnZ2VyKCkpOworICAgICAgICB3aW5kb3dTaGVsbC0+
d2luZG93KCktPnNldFByb2ZpbGVHcm91cChwYWdlLT5ncm91cCgpLmlkZW50aWZpZXIoKSk7Cisg
ICAgfQorCisgICAgeworICAgICAgICBFbnRlckRPTVdyYXBwZXJXb3JsZCB3b3JsZEVudHJ5KCpK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCksIHdvcmxkKTsKKyAgICAgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPmRpc3BhdGNoV2luZG93T2JqZWN0QXZhaWxhYmxlKCk7CiAgICAgfQogCi0g
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmRpc3BhdGNoV2luZG93T2JqZWN0QXZhaWxhYmxlKCk7Cisg
ICAgcmV0dXJuIHdpbmRvd1NoZWxsOwogfQogCiBib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0CkBAIC0xODIsMTAgKzI0MiwxMSBAQCBib29sIFNjcmlw
dENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiAKIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRXZlbnQoKSBjb25zdAogewotICAgIGlmICghbV93aW5kb3dT
aGVsbCkKKyAgICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IGV4aXN0aW5nV2luZG93U2hlbGwo
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIGlmICghc2hlbGwpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChFdmVudCogZXZlbnQgPSBtX3dpbmRvd1NoZWxsLT53aW5kb3co
KS0+Y3VycmVudEV2ZW50KCkpIHsKKyAgICBpZiAoRXZlbnQqIGV2ZW50ID0gc2hlbGwtPndpbmRv
dygpLT5jdXJyZW50RXZlbnQoKSkgewogICAgICAgICBpZiAoZXZlbnQtPmNyZWF0ZWRCeURPTSgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNDMsMTMgKzMwNCwxNiBAQCBib29s
IFNjcmlwdENvbnRyb2xsZXI6OmlzRW5hYmxlZCgpCiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
YXR0YWNoRGVidWdnZXIoSlNDOjpEZWJ1Z2dlciogZGVidWdnZXIpCiB7Ci0gICAgaWYgKCFtX3dp
bmRvd1NoZWxsKQorICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgYWJsZSB0byBkZWJ1ZyBpc29sYXRl
ZCB3b3JsZHMuCisgICAgSlNET01XaW5kb3dTaGVsbCogc2hlbGwgPSBleGlzdGluZ1dpbmRvd1No
ZWxsKGRlYnVnZ2VyV29ybGQoKSk7CisgICAgaWYgKCFzaGVsbCkKICAgICAgICAgcmV0dXJuOwog
CisgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHNoZWxsLT53aW5kb3coKTsKICAgICBp
ZiAoZGVidWdnZXIpCi0gICAgICAgIGRlYnVnZ2VyLT5hdHRhY2gobV93aW5kb3dTaGVsbC0+d2lu
ZG93KCkpOwotICAgIGVsc2UgaWYgKEpTQzo6RGVidWdnZXIqIGN1cnJlbnREZWJ1Z2dlciA9IG1f
d2luZG93U2hlbGwtPndpbmRvdygpLT5kZWJ1Z2dlcigpKQotICAgICAgICBjdXJyZW50RGVidWdn
ZXItPmRldGFjaChtX3dpbmRvd1NoZWxsLT53aW5kb3coKSk7CisgICAgICAgIGRlYnVnZ2VyLT5h
dHRhY2goZ2xvYmFsT2JqZWN0KTsKKyAgICBlbHNlIGlmIChKU0M6OkRlYnVnZ2VyKiBjdXJyZW50
RGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCisgICAgICAgIGN1cnJlbnREZWJ1
Z2dlci0+ZGV0YWNoKGdsb2JhbE9iamVjdCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
dXBkYXRlRG9jdW1lbnQoKQpAQCAtMjU4LDggKzMyMiw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6dXBkYXRlRG9jdW1lbnQoKQogICAgICAgICByZXR1cm47CiAKICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGlmIChtX3dpbmRvd1NoZWxsKQotICAgICAgICBt
X3dpbmRvd1NoZWxsLT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKKyAgICBmb3IgKFNoZWxs
TWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dp
bmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQorICAgICAgICBpdGVyLT5zZWNvbmQtPndpbmRvdygp
LT51cGRhdGVEb2N1bWVudChpdGVyLT5maXJzdCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6dXBkYXRlU2VjdXJpdHlPcmlnaW4oKQpAQCAtMjc0LDcgKzMzOCw3IEBAIEJpbmRpbmdzOjpS
b290T2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjoKIAogICAgIGlmICghbV9iaW5kaW5nUm9vdE9i
amVjdCkgewogICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAg
ICAgICBtX2JpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgw
LCBnbG9iYWxPYmplY3QoKSk7CisgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QgPSBCaW5kaW5n
czo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAg
ICAgfQogICAgIHJldHVybiBtX2JpbmRpbmdSb290T2JqZWN0LmdldCgpOwogfQpAQCAtMjg1LDcg
KzM0OSw3IEBAIFBhc3NSZWZQdHI8QmluZGluZ3M6OlJvb3RPYmplY3Q+IFNjcmlwdEMKICAgICBp
ZiAoaXQgIT0gbV9yb290T2JqZWN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CiAKLSAgICBSZWZQdHI8QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBCaW5kaW5n
czo6Um9vdE9iamVjdDo6Y3JlYXRlKG5hdGl2ZUhhbmRsZSwgZ2xvYmFsT2JqZWN0KCkpOworICAg
IFJlZlB0cjxCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290
T2JqZWN0OjpjcmVhdGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkp
OwogCiAgICAgbV9yb290T2JqZWN0cy5zZXQobmF0aXZlSGFuZGxlLCByb290T2JqZWN0KTsKICAg
ICByZXR1cm4gcm9vdE9iamVjdC5yZWxlYXNlKCk7CkBAIC0zMDAsNyArMzY0LDcgQEAgTlBPYmpl
Y3QqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdAogICAgICAgICAgICAgLy8gSmF2YVNj
cmlwdCBpcyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4K
ICAgICAgICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9i
amVjdC4KICAgICAgICAgICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiB3aW4gPSB3aW5kb3dTaGVsbCgpLT53aW5kb3coKTsK
KyAgICAgICAgICAgIEpTT2JqZWN0KiB3aW4gPSB3aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgpKS0+
d2luZG93KCk7CiAgICAgICAgICAgICBBU1NFUlQod2luKTsKICAgICAgICAgICAgIEJpbmRpbmdz
OjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKICAgICAgICAgICAgIG1f
d2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdCgwLCB3aW4sIHJv
b3QpOwpAQCAtMzM0LDggKzM5OCw5IEBAIEpTT2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjpqc09i
amVjdEZvclAKIAogICAgIC8vIENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5kIHRvIHRoaXMgZWxlbWVu
dAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgRXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU1ZhbHVlIGpzRWxl
bWVudFZhbHVlID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgcGx1Z2luKTsKKyAgICBKU0RP
TVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOworICAgIC8v
IEZJWE1FOiBpcyBub3JtYWwgb2theT8gLSB1c2VkIGZvciBOUCBwbHVnaW5zPworICAgIEpTVmFs
dWUganNFbGVtZW50VmFsdWUgPSB0b0pTKGdsb2JhbE9iai0+Z2xvYmFsRXhlYygpLCBnbG9iYWxP
YmosIHBsdWdpbik7CiAgICAgaWYgKCFqc0VsZW1lbnRWYWx1ZSB8fCAhanNFbGVtZW50VmFsdWUu
aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMzEgKzYzLDQz
IEBAIGNsYXNzIFhTU0F1ZGl0b3I7CiB0eXBlZGVmIEhhc2hNYXA8dm9pZCosIFJlZlB0cjxKU0M6
OkJpbmRpbmdzOjpSb290T2JqZWN0PiA+IFJvb3RPYmplY3RNYXA7CiAKIGNsYXNzIFNjcmlwdENv
bnRyb2xsZXIgeworICAgIHR5cGVkZWYgV1RGOjpIYXNoTWFwPERPTVdyYXBwZXJXb3JsZCosIEpT
Qzo6UHJvdGVjdGVkUHRyPEpTRE9NV2luZG93U2hlbGw+ID4gU2hlbGxNYXA7CisKIHB1YmxpYzoK
ICAgICBTY3JpcHRDb250cm9sbGVyKEZyYW1lKik7CiAgICAgflNjcmlwdENvbnRyb2xsZXIoKTsK
IAotICAgIGJvb2wgaGF2ZVdpbmRvd1NoZWxsKCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dTaGVs
bDsgfQotICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKCkKKyAgICBKU0RPTVdpbmRv
d1NoZWxsKiB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgIHsKLSAgICAg
ICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgICAgIHJldHVybiBtX3dpbmRvd1NoZWxsOwor
ICAgICAgICBTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmZpbmQod29y
bGQpOworICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCkpID8gaXRl
ci0+c2Vjb25kLmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CiAgICAgfQotCi0gICAgSlNET01X
aW5kb3cqIGdsb2JhbE9iamVjdCgpCisgICAgSlNET01XaW5kb3dTaGVsbCogZXhpc3RpbmdXaW5k
b3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKSBjb25zdAorICAgIHsKKyAgICAgICAgU2hl
bGxNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5maW5kKHdvcmxkKTsK
KyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnNl
Y29uZC5nZXQoKSA6IDA7CisgICAgfQorICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QoRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICB7Ci0gICAgICAgIGluaXRTY3JpcHRJZk5lZWRlZCgp
OwotICAgICAgICByZXR1cm4gbV93aW5kb3dTaGVsbC0+d2luZG93KCk7CisgICAgICAgIHJldHVy
biB3aW5kb3dTaGVsbCh3b3JsZCktPndpbmRvdygpOworICAgIH0KKyAgICB2b2lkIGZvcmdldFdv
cmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCisgICAgeworICAgICAgICBtX3dpbmRvd1NoZWxs
cy5yZW1vdmUod29ybGQpOwogICAgIH0KIAogICAgIFNjcmlwdFZhbHVlIGV4ZWN1dGVTY3JpcHQo
Y29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwogICAgIFNjcmlwdFZhbHVlIGV4ZWN1dGVTY3JpcHQo
Y29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSA9IGZhbHNlKTsKKyAg
ICBTY3JpcHRWYWx1ZSBleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxk
SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib29sIGZvcmNlVXNlckdlc3R1cmUgPSBmYWxzZSk7
CisgICAgU2NyaXB0VmFsdWUgZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChET01XcmFwcGVy
V29ybGQqIHdvcmxkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJl
ID0gZmFsc2UpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFyZ3VtZW50IGlzIGEgSmF2YVNj
cmlwdCBVUkwuCiAgICAgYm9vbCBleGVjdXRlSWZKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmLCBi
b29sIHVzZXJHZXN0dXJlID0gZmFsc2UsIGJvb2wgcmVwbGFjZURvY3VtZW50ID0gdHJ1ZSk7CiAK
ICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7Ci0gICAg
dm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0
b3I8U2NyaXB0U291cmNlQ29kZT4mKTsKKyAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZUluV29ybGQo
Y29uc3QgU2NyaXB0U291cmNlQ29kZSYsIERPTVdyYXBwZXJXb3JsZCopOworICAgIFNjcmlwdFZh
bHVlIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIC8qd29ybGRJRCovLCBjb25zdCBT
Y3JpcHRTb3VyY2VDb2RlJik7CisgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNp
Z25lZCAvKndvcmxkSUQqLywgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+Jik7CiAKICAg
ICB2b2lkIHNldEV2ZW50SGFuZGxlckxpbmVOdW1iZXIoaW50IGxpbmVubykgeyBtX2hhbmRsZXJM
aW5lTnVtYmVyID0gbGluZW5vOyB9CiAgICAgaW50IGV2ZW50SGFuZGxlckxpbmVOdW1iZXIoKSB7
IHJldHVybiBtX2hhbmRsZXJMaW5lTnVtYmVyOyB9CkBAIC0xNDQsMTkgKzE1NiwxNCBAQCBwdWJs
aWM6CiAgICAgWFNTQXVkaXRvciogeHNzQXVkaXRvcigpIHsgcmV0dXJuIG1fWFNTQXVkaXRvci5n
ZXQoKTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgaW5pdFNjcmlwdElmTmVlZGVkKCkKLSAgICB7
Ci0gICAgICAgIGlmICghbV93aW5kb3dTaGVsbCkKLSAgICAgICAgICAgIGluaXRTY3JpcHQoKTsK
LSAgICB9Ci0gICAgdm9pZCBpbml0U2NyaXB0KCk7CisgICAgSlNET01XaW5kb3dTaGVsbCogaW5p
dFNjcmlwdChET01XcmFwcGVyV29ybGQqIHdvcmxkKTsKIAogICAgIHZvaWQgZGlzY29ubmVjdFBs
YXRmb3JtU2NyaXB0T2JqZWN0cygpOwogCiAgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmVF
dmVudCgpIGNvbnN0OwogICAgIGJvb2wgaXNKYXZhU2NyaXB0QW5jaG9yTmF2aWdhdGlvbigpIGNv
bnN0OwogCi0gICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlNET01XaW5kb3dTaGVsbD4gbV93aW5kb3dT
aGVsbDsKKyAgICBTaGVsbE1hcCBtX3dpbmRvd1NoZWxsczsKICAgICBGcmFtZSogbV9mcmFtZTsK
ICAgICBpbnQgbV9oYW5kbGVyTGluZU51bWJlcjsKICAgICBjb25zdCBTdHJpbmcqIG1fc291cmNl
VVJMOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQko
cmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBXZWJTY3JpcHRPYmplY3Qq
IFNjcmlwdENvbnRyb2xsZXI6OndpbmRvCiAgICAgaWYgKCFtX3dpbmRvd1NjcmlwdE9iamVjdCkg
ewogICAgICAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
ICAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdCA9IGJpbmRpbmdSb290T2Jq
ZWN0KCk7Ci0gICAgICAgIG1fd2luZG93U2NyaXB0T2JqZWN0ID0gW1dlYlNjcmlwdE9iamVjdCBz
Y3JpcHRPYmplY3RGb3JKU09iamVjdDp0b1JlZih3aW5kb3dTaGVsbCgpKSBvcmlnaW5Sb290T2Jq
ZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290XTsKKyAgICAgICAgbV93aW5kb3dTY3JpcHRPYmplY3Qg
PSBbV2ViU2NyaXB0T2JqZWN0IHNjcmlwdE9iamVjdEZvckpTT2JqZWN0OnRvUmVmKHdpbmRvd1No
ZWxsKHBsdWdpbldvcmxkKCkpKSBvcmlnaW5Sb290T2JqZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290
XTsKICAgICB9CiAKICAgICBBU1NFUlQoW21fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIGlzS2lu
ZE9mQ2xhc3M6W0RPTUFic3RyYWN0VmlldyBjbGFzc11dKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw3ICs3MSw3IEBAIFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXQK
ICAgICAgICAgc291cmNlVVJMID0gbm9kZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2Nh
bE5hbWUoKS5zdHJpbmcoKSwgZXZlbnRQYXJhbWV0ZXJOYW1lKG5vZGUtPmlzU1ZHRWxlbWVudCgp
KSwgYXR0ci0+dmFsdWUoKSwgbm9kZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyKTsKKyAgICByZXR1
cm4gSlNMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygp
LCBldmVudFBhcmFtZXRlck5hbWUobm9kZS0+aXNTVkdFbGVtZW50KCkpLCBhdHRyLT52YWx1ZSgp
LCBub2RlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsK
IH0KIAogUGFzc1JlZlB0cjxKU0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmlidXRlKiBhdHRyKQpAQCAtOTMsNyArOTMsNyBA
QCBQYXNzUmVmUHRyPEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0CiAKICAgICBsaW5lTnVt
YmVyID0gc2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyTGluZU51bWJlcigpOwogICAgIHNv
dXJjZVVSTCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKLSAgICByZXR1cm4g
SlNMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBl
dmVudFBhcmFtZXRlck5hbWUoZnJhbWUtPmRvY3VtZW50KCktPmlzU1ZHRG9jdW1lbnQoKSksIGF0
dHItPnZhbHVlKCksIDAsIHNvdXJjZVVSTCwgbGluZU51bWJlcik7CisgICAgcmV0dXJuIEpTTGF6
eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZXZlbnRQ
YXJhbWV0ZXJOYW1lKGZyYW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCkpLCBhdHRyLT52
YWx1ZSgpLCAwLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KTsKIH0KIAogU3RyaW5nIGdldEV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIEV2ZW50TGlzdGVu
ZXIqIGV2ZW50TGlzdGVuZXIpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0
aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw4IEBAIFNj
cmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib28KICAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKIAotICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKG1fZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgdGhpc09iamVjdCwgbV9hcmd1bWVudHMpOworICAgIC8vIEZJWE1FOiBTaG91bGQgdGhp
cyBmdW5jdGlvbiB0YWtlIGEgd29ybGRJRD8gLSBvbmx5IHVzZWQgYnkgaW5zcGVjdG9yPworICAg
IEpTVmFsdWUgcmVzdWx0ID0gY2FsbEluV29ybGQobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZGVidWdnZXJXb3JsZCgpKTsKICAg
ICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAocmVwb3J0RXhjZXB0
aW9ucykKICAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX2V4ZWMsIG1fZXhlYy0+ZXhjZXB0
aW9uKCkpOwpAQCAtMTYxLDcgKzE2Miw4IEBAIFNjcmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNh
bGw6OmNvbnN0cnUKICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSkK
ICAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBK
U0M6OmNvbnN0cnVjdChtX2V4ZWMsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1
Y3REYXRhLCBtX2FyZ3VtZW50cyk7CisgICAgLy8gRklYTUU6IEN1cnJlbnRseSB0aGlzIG1ldGhv
ZCBjb25zdHJ1Y3RzIG9iamVjdHMgaW4gZGVidWdnZXJXb3JsZCgpLiAgV2UgY291bGQgdXNlIHRo
ZSBjdXJyZW50IHdvcmxkLCBvciBwYXNzIGEgd29ybGRJRCB0byB0aGlzIGZ1bmN0aW9uPworICAg
IEpTVmFsdWUgcmVzdWx0ID0gY29uc3RydWN0SW5Xb3JsZChtX2V4ZWMsIGNvbnN0cnVjdG9yLCBj
b25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBtX2FyZ3VtZW50cywgZGVidWdnZXJXb3JsZCgp
KTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAocmVwb3J0
RXhjZXB0aW9ucykKICAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX2V4ZWMsIG1fZXhlYy0+
ZXhjZXB0aW9uKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFy
YW50aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVj
dFF1YXJhbnRpbmUuY3BwCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0T2JqZWN0UXVhcmFudGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcg
QEAgYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChEYXRhYmFzZQogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0b0pTRE9NV2luZG93KGZyYW1lKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSwgZGVidWdnZXJXb3JsZCgpKTsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CkBAIC04OSw3ICs4OSw3IEBAIGJvb2wg
Z2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoU3RvcmFnZSoKICAgICBGcmFtZSogZnJhbWUgPSBz
dG9yYWdlLT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSk7CisgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3coZnJhbWUsIGRlYnVnZ2VyV29y
bGQoKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMTE2LDcgKzEx
Niw3IEBAIGJvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoRE9NV2luZG8KIHsKICAgICBB
U1NFUlQoZG9tV2luZG93KTsKIAotICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2lu
ZG93KGRvbVdpbmRvdy0+ZnJhbWUoKSk7CisgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNE
T01XaW5kb3coZG9tV2luZG93LT5mcmFtZSgpLCBkZWJ1Z2dlcldvcmxkKCkpOwogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwogCiAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3Rh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3Bw
CShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUu
aCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAj
aW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKIApAQCAtNDksMTIgKzUwLDEyIEBA
IFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Ob2RlKE5vZGUqIG4KICAgICAgICAgcmV0dXJu
IDA7CiAgICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmlzRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhy
ZWFkQ3VycmVudFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CiB9CiAKIFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZUZyb21QYWdlKFBhZ2UqIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIHBhZ2UtPm1haW5GcmFt
ZSgpLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICByZXR1cm4g
cGFnZS0+bWFpbkZyYW1lKCktPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZEN1cnJl
bnRXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRTdGF0ZS5oCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRE9NV3JhcHBlcldv
cmxkOwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsKIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0OTk1
NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6V29y
a2VyU2NyaXB0Q29udAogICAgICwgbV93b3JrZXJDb250ZXh0KHdvcmtlckNvbnRleHQpCiAgICAg
LCBtX2V4ZWN1dGlvbkZvcmJpZGRlbihmYWxzZSkKIHsKKyAgICBtX2dsb2JhbERhdGEtPmNsaWVu
dERhdGEgPSBuZXcgV2ViQ29yZUpTQ2xpZW50RGF0YShtX2dsb2JhbERhdGEuZ2V0KCkpOwogfQog
CiBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcigpCkBAIC0x
MjIsNyArMTIzLDcgQEAgU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbAog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhl
YygpOwogICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS0+dGltZW91dENo
ZWNrZXIuc3RhcnQoKTsKLSAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMs
IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VD
b2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKKyAgICBDb21wbGV0
aW9uIGNvbXAgPSBldmFsdWF0ZUluV29ybGQoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpLT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29y
a2VyQ29udGV4dFdyYXBwZXIsIGN1cnJlbnRXb3JsZChleGVjKSk7CiAgICAgbV93b3JrZXJDb250
ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKICAgICBp
ZiAoY29tcC5jb21wbFR5cGUoKSA9PSBOb3JtYWwgfHwgY29tcC5jb21wbFR5cGUoKSA9PSBSZXR1
cm5WYWx1ZSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJv
bGxlci5oCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oU2NyaXB0VmFsdWUpOwogCiAg
ICAgICAgIHZvaWQgZm9yYmlkRXhlY3V0aW9uKCk7CisKKyAgICAgICAgSlNDOjpKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGEuZ2V0KCk7IH0KKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZvaWQgaW5pdFNjcmlwdElmTmVlZGVkKCkKICAgICAgICAgewpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5tbQkocmV2aXNpb24gNDk5NTcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw4ICsxMTIsOCBAQCB2b2lkIHJlbW92ZURPTVdyYXBwZXIoRE9NT2JqZWN0SW50ZXJuYWwqCiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhlIGdsb2JhbCBvYmpl
Y3Qgd2hpY2ggc2hvdWxkIG93biB0aGlzIG5vZGUuCi0gICAgV2ViQ29yZTo6SlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgLy8gVGhlIGdsb2JhbCBvYmplY3Qgd2hpY2ggc2hvdWxkIG93biB0aGlzIG5vZGUgLSBGSVhN
RTogZG9lcyB0aGlzIG5lZWQgdG8gYmUgaXNvbGF0ZWQtd29ybGQgYXdhcmU/CisgICAgV2ViQ29y
ZTo6SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xv
YmFsT2JqZWN0KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBKU0M6OkV4
ZWNTdGF0ZSAqZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgLy8gR2V0
IChvciBjcmVhdGUpIGEgY2FjaGVkIEpTIG9iamVjdCBmb3IgdGhlIERPTSBub2RlLgpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiA0OTk1NykK
KysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI5OSw3ICsyOTksNyBAQCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhl
Y1N0YXRlCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCktPnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IFtzZWxmIF9pbXBdLCBhcmdMaXN0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGxJbldvcmxk
KGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIFtzZWxmIF9pbXBdLCBhcmdMaXN0
LCBwbHVnaW5Xb3JsZCgpKTsKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxEYXRhKCktPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKIAogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgewpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0YXRpYyB2b2lkIGdldExpc3RG
cm9tTlNBcnJheShFeGVjU3RhdGUKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwogICAgIAogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICBDb21wbGV0aW9uIGNvbXBsZXRp
b24gPSBKU0M6OmV2YWx1YXRlKFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSwgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2Nv
cGVDaGFpbigpLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSk7CisgICAgQ29tcGxldGlvbiBj
b21wbGV0aW9uID0gZXZhbHVhdGVJbldvcmxkKFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwgSlNDOjpKU1Zh
bHVlKCksIHBsdWdpbldvcmxkKCkpOwogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RvcCgpOwogICAgIENvbXBsVHlw
ZSB0eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gNDk5NTcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTg4LDE5ICsxMTg4LDIxIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXBsKCktPmludmFsaWRhdGVFdmVudExp
c3RlbmVycygpO1xuIik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUg
ZXEgIk5vZGUiKSB7Ci0gICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZm9yZ2V0
RE9NTm9kZShpbXBsKCktPmRvY3VtZW50KCksIGltcGwoKSk7XG4iKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmICgkcG9kVHlwZSkgewotICAgICAgICAgICAgICAgIG15ICRhbmlt
YXRlZFR5cGUgPSAkaW1wbENsYXNzTmFtZTsKLSAgICAgICAgICAgICAgICAkYW5pbWF0ZWRUeXBl
ID1+IHMvU1ZHL1NWR0FuaW1hdGVkLzsKLQotICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjYXNl
IGZvciBKU1NWR051bWJlcgotICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNT
VkdBbmltYXRlZFR5cGUoJGFuaW1hdGVkVHlwZSkgYW5kICRwb2RUeXBlIG5lICJmbG9hdCIpIHsK
LSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNTVkdEeW5hbWlj
UE9EVHlwZVdyYXBwZXJDYWNoZTwkcG9kVHlwZSwgJGFuaW1hdGVkVHlwZT46OmZvcmdldFdyYXBw
ZXIobV9pbXBsLmdldCgpKTtcbiIpOworICAgICAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkV4dGVuZHNET01HbG9iYWxPYmplY3QifSkgeworICAgICAgICAgICAgaWYg
KCRpbnRlcmZhY2VOYW1lIGVxICJOb2RlIikgeworICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBmb3JnZXRET01Ob2RlKHRoaXMsIGltcGwoKSwgaW1wbCgpLT5kb2N1bWVu
dCgpKTtcbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoJHBv
ZFR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGFuaW1hdGVkVHlwZSA9ICRpbXBsQ2xh
c3NOYW1lOworICAgICAgICAgICAgICAgICAgICAkYW5pbWF0ZWRUeXBlID1+IHMvU1ZHL1NWR0Fu
aW1hdGVkLzsKKworICAgICAgICAgICAgICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgSlNTVkdO
dW1iZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1h
dGVkVHlwZSgkYW5pbWF0ZWRUeXBlKSBhbmQgJHBvZFR5cGUgbmUgImZsb2F0IikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNTVkdEeW5hbWljUE9E
VHlwZVdyYXBwZXJDYWNoZTwkcG9kVHlwZSwgJGFuaW1hdGVkVHlwZT46OmZvcmdldFdyYXBwZXIo
bV9pbXBsLmdldCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGZvcmdldERPTU9i
amVjdCh0aGlzLCBpbXBsKCkpO1xuIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBmb3JnZXRET01PYmplY3QoKkhlYXA6OmhlYXAodGhpcyktPmds
b2JhbERhdGEoKSwgaW1wbCgpKTtcbiIpOwogICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOwpAQCAtMTIxMCw3ICsxMjEyLDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAjIGl0cyBvd24gc3BlY2lhbCBoYW5kbGluZyByYXRoZXIgdGhhbiBy
ZWx5aW5nIG9uIHRoZSBjYWNoaW5nIHRoYXQgTm9kZSBub3JtYWxseSBkb2VzLgogICAgIGlmICgk
aW50ZXJmYWNlTmFtZSBlcSAiRG9jdW1lbnQiKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiJHtjbGFzc05hbWV9Ojp+JGNsYXNzTmFtZSgpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4gICAgZm9yZ2V0RE9NT2JqZWN0KCpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxE
YXRhKCksIHN0YXRpY19jYXN0PCR7aW1wbENsYXNzTmFtZX0qPihpbXBsKCkpKTtcbn1cblxuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuICAgIGZvcmdldERPTU9iamVjdCh0aGlz
LCBzdGF0aWNfY2FzdDwke2ltcGxDbGFzc05hbWV9Kj4oaW1wbCgpKSk7XG59XG5cbiIpOwogICAg
IH0KIAogICAgIGlmICgkbmVlZHNNYXJrQ2hpbGRyZW4gJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbU1hcmtGdW5jdGlvbiJ9KSB7CkBAIC0xNDc2LDcgKzE0NzgsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7
IkZyYW1lLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5j
bHVkZXN7IkpTRE9NR2xvYmFsT2JqZWN0LmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2Jh
bE9iamVjdChpbXAtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgZXhlYyk7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFn
bG9iYWxPYmplY3QpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDQ5OTU3KQorKysg
V2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiY191dGlsaXR5LmgiCiAjaW5jbHVkZSAiY19pbnN0YW5jZS5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXJSZXAuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgIm5wcnVudGltZV9wcml2LmgiCiAj
aW5jbHVkZSAicnVudGltZV9yb290LmgiCkBAIC0xMjMsNyArMTI0LDcgQEAgYm9vbCBfTlBOX0lu
dm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRB
cmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50LCByb290T2JqZWN0LCBhcmdMaXN0KTsKICAgICAgICAg
UHJvdGVjdGVkUHRyPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCktPnRpbWVv
dXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ViA9IGNhbGwoZXhlYywg
ZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZnVuY3Rpb24sIGFyZ0xpc3QpOworICAgICAg
ICBKU1ZhbHVlIHJlc3VsdFYgPSBjYWxsSW5Xb3JsZChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBmdW5jdGlvbiwgYXJnTGlzdCwgcGx1Z2luV29ybGQoKSk7CiAgICAgICAgIGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKICAgICAg
ICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwu
CkBAIC0xNzMsNyArMTc0LDcgQEAgYm9vbCBfTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCog
bywgTgogICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50
LCByb290T2JqZWN0LCBhcmdMaXN0KTsKICAgICAgICAgUHJvdGVjdGVkUHRyPEpTR2xvYmFsT2Jq
ZWN0PiBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCktPnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAg
ICAgIEpTVmFsdWUgcmVzdWx0ViA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgb2JqLT5pbXAsIGFyZ0xpc3QpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdFYgPSBjYWxs
SW5Xb3JsZChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmotPmltcCwgYXJn
TGlzdCwgcGx1Z2luV29ybGQoKSk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgp
LT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJu
IHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCkBAIC0yMDMsNyArMjA0LDcgQEAgYm9v
bCBfTlBOX0V2YWx1YXRlKE5QUCwgTlBPYmplY3QqIG8sIE5QUwogICAgICAgICBTdHJpbmcgc2Ny
aXB0U3RyaW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKICAgICAgICAgUHJvdGVjdGVk
UHRyPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCktPnRpbWVvdXRDaGVja2Vy
LnN0YXJ0KCk7Ci0gICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEpTQzo6ZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFp
bigpLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZykpOworICAgICAgICBDb21wbGV0aW9uIGNvbXBs
ZXRpb24gPSBldmFsdWF0ZUluV29ybGQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZyksIEpT
Qzo6SlNWYWx1ZSgpLCBwbHVnaW5Xb3JsZCgpKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCktPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAgICAgQ29tcGxUeXBlIHR5cGUg
PSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwogICAgICAgICAKQEAgLTQ0Myw3ICs0NDQsNyBAQCBi
b29sIF9OUE5fQ29uc3RydWN0KE5QUCwgTlBPYmplY3QqIG8sIGNvCiAgICAgICAgIGdldExpc3RG
cm9tVmFyaWFudEFyZ3MoZXhlYywgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3Qp
OwogICAgICAgICBQcm90ZWN0ZWRQdHI8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwogICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHRWID0g
Y29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRh
LCBhcmdMaXN0KTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHRWID0gY29uc3RydWN0SW5Xb3JsZChl
eGVjLCBjb25zdHJ1Y3RvciwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCwg
cGx1Z2luV29ybGQoKSk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLT50aW1l
b3V0Q2hlY2tlci5zdG9wKCk7CiAgICAgICAgIAogICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1
cm4gdGhlIHJlc3VsdC4KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkocmV2aXNp
b24gNDk5NTcpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKIAog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUZyYW1lVmlldy5oIgpAQCAtMzAyLDcgKzMwMyw3IEBAIGpvYmplY3Qg
SmF2YUpTT2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdMaXN0OwogICAgIGdldExpc3RGcm9tSkFycmF5KGV4ZWMsIGFyZ3MsIGFyZ0xpc3QpOwog
ICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCktPnRpbWVvdXRDaGVj
a2VyLnN0YXJ0KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgX2ltcCwgYXJnTGlzdCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBXZWJDb3JlOjpjYWxsSW5Xb3JsZChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBfaW1wLCBhcmdMaXN0LCBXZWJDb3JlOjpwbHVnaW5Xb3JsZCgpKTsKICAgICByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7
CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7CkBAIC0zMjEsNyAr
MzIyLDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcAogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCktPnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0g
SlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNl
KEphdmFTdHJpbmcoc2NyaXB0KSkpOworICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IFdlYkNv
cmU6OmV2YWx1YXRlSW5Xb3JsZChyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtl
U291cmNlKEphdmFTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpLCBXZWJDb3JlOjpwbHVn
aW5Xb3JsZCgpKTsKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
LT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAgICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0aW9u
LmNvbXBsVHlwZSgpOwogICAgIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsMTQg
QEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgICAgIG1fc3R5bGVTaGVldHMtPmRvY3VtZW50
RGVzdHJveWVkKCk7CiB9CiAKK0RvY3VtZW50OjpKU1dyYXBwZXJDYWNoZSogRG9jdW1lbnQ6OmNy
ZWF0ZVdyYXBwZXJDYWNoZShET01XcmFwcGVyV29ybGQqIHdvcmxkKQoreworICAgIEpTV3JhcHBl
ckNhY2hlKiB3cmFwcGVyQ2FjaGUgPSBuZXcgSlNXcmFwcGVyQ2FjaGUoKTsKKyAgICBtX3dyYXBw
ZXJDYWNoZU1hcC5zZXQod29ybGQsIHdyYXBwZXJDYWNoZSk7CisgICAgd29ybGQtPnJlbWVtYmVy
RG9jdW1lbnQodGhpcyk7CisgICAgcmV0dXJuIHdyYXBwZXJDYWNoZTsKK30KKwogdm9pZCBEb2N1
bWVudDo6cmVzZXRMaW5rQ29sb3IoKQogewogICAgIG1fbGlua0NvbG9yID0gQ29sb3IoMCwgMCwg
MjM4KTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBIVE1MTWFwRWxlbWVudDsKICAgICBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OwogICAgIGNsYXNzIEludFBvaW50OworICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAg
ICBjbGFzcyBKU05vZGU7CiAgICAgY2xhc3MgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0czsK
ICAgICBjbGFzcyBOb2RlRmlsdGVyOwpAQCAtODE5LDcgKzgyMCwxNSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4pOyAvLyBFeGVjdXRlcyB0aGUg
dGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPFdlYkNvcmU6Ok5vZGUqLCBKU05vZGUqPiBKU1dyYXBwZXJDYWNoZTsKLSAgICBKU1dy
YXBwZXJDYWNoZSYgd3JhcHBlckNhY2hlKCkgeyByZXR1cm4gbV93cmFwcGVyQ2FjaGU7IH0KKyAg
ICB0eXBlZGVmIEhhc2hNYXA8RE9NV3JhcHBlcldvcmxkKiwgSlNXcmFwcGVyQ2FjaGUqPiBKU1dy
YXBwZXJDYWNoZU1hcDsKKyAgICBKU1dyYXBwZXJDYWNoZU1hcCYgd3JhcHBlckNhY2hlTWFwKCkg
eyByZXR1cm4gbV93cmFwcGVyQ2FjaGVNYXA7IH0KKyAgICBKU1dyYXBwZXJDYWNoZSogZ2V0V3Jh
cHBlckNhY2hlKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCisgICAgeworICAgICAgICBpZiAoSlNX
cmFwcGVyQ2FjaGUqIHdyYXBwZXJDYWNoZSA9IG1fd3JhcHBlckNhY2hlTWFwLmdldCh3b3JsZCkp
CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlckNhY2hlOworICAgICAgICByZXR1cm4gY3JlYXRl
V3JhcHBlckNhY2hlKHdvcmxkKTsKKyAgICB9CisgICAgSlNXcmFwcGVyQ2FjaGUqIGNyZWF0ZVdy
YXBwZXJDYWNoZShET01XcmFwcGVyV29ybGQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hl
ZFBhcnNpbmcoKTsKIApAQCAtMTEzNyw3ICsxMTQ2LDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2ln
bmVkIG1fbnVtTm9kZUxpc3RDYWNoZXM7CiAKLSAgICBKU1dyYXBwZXJDYWNoZSBtX3dyYXBwZXJD
YWNoZTsKKyAgICBKU1dyYXBwZXJDYWNoZU1hcCBtX3dyYXBwZXJDYWNoZU1hcDsKIAogI2lmIEVO
QUJMRShEQVRBQkFTRSkKICAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fZGF0YWJhc2VUaHJl
YWQ7CkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkocmV2aXNpb24g
NDk5NTcpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1
ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJXb3JrZXJDb250ZXh0LmgiCkBAIC0xOTUsNCArMTk2LDE4IEBAIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s6On5UYXNrKCkKIHsKIH0KIAorSlNDOjpKU0dsb2JhbERhdGEqIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6Omdsb2JhbERhdGEoKQoreworICAgICBpZiAoaXNEb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpOworCisjaWYg
RU5BQkxFKFdPUktFUlMpCisgICAgaWYgKGlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHRoaXMpLT5zY3JpcHQoKS0+Z2xvYmFsRGF0
YSgpOworI2VuZGlmCisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKICAg
ICAgICAgRE9NVGltZXIqIGZpbmRUaW1lb3V0KGludCB0aW1lb3V0SWQpOwogCisgICAgICAgIEpT
Qzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCk7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IC8vIEV4cGxpY2l0bHkgb3ZlcnJpZGUgdGhlIHNlY3VyaXR5IG9yaWdpbiBmb3IgdGhpcyBzY3Jp
cHQgY29udGV4dC4KICAgICAgICAgLy8gTm90ZTogSXQgaXMgZGFuZ2Vyb3VzIHRvIGNoYW5nZSB0
aGUgc2VjdXJpdHkgb3JpZ2luIG9mIGEgc2NyaXB0IGNvbnRleHQKSW5kZXg6IFdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDQ0LDcgKzE0NDQsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VXNlckluaXRp
CiAKICAgICBVU3RyaW5nIHRpdGxlID0gZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZSh0cnVlKTsKIAotICAgIEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1f
aW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRl
KiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KSwgZGVidWdnZXJXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAgIFByb2ZpbGVyOjpwcm9maWxl
cigpLT5zdGFydFByb2ZpbGluZyhzY3JpcHRTdGF0ZSwgdGl0bGUpOwogCiAgICAgYWRkU3RhcnRQ
cm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKHRpdGxlLCAwLCBVU3RyaW5nKCkpOwpAQCAtMTQ2MSw3
ICsxNDYxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVXNlckluaXRpYQogCiAg
ICAgVVN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoKTsK
IAotICAgIEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRlKiBzY3JpcHRT
dGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSwgZGVidWdn
ZXJXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAgIFJlZlB0cjxQcm9maWxlPiBwcm9maWxlID0g
UHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0b3BQcm9maWxpbmcoc2NyaXB0U3RhdGUsIHRpdGxlKTsK
ICAgICBpZiAocHJvZmlsZSkKICAgICAgICAgYWRkUHJvZmlsZShwcm9maWxlLCAwLCBVU3RyaW5n
KCkpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJl
dmlzaW9uIDQ5OTU3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCkBAIC0xMDUsNyArMTA2
LDcgQEAgSlNWYWx1ZSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjbwogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwotICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0
aW9uKTsKKyAgICByZXR1cm4gRGVidWdnZXJDYWxsRnJhbWVfZXZhbHVhdGVJbldvcmxkKG1fZGVi
dWdnZXJDYWxsRnJhbWUsIHNjcmlwdCwgZXhjZXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NDUsNyAr
Mzg0NSw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpc3BhdGNoRG9jdW1lbnRFbGVtZW4KIAogdm9p
ZCBGcmFtZUxvYWRlcjo6ZGlzcGF0Y2hXaW5kb3dPYmplY3RBdmFpbGFibGUoKQogewotICAgIGlm
ICghbV9mcmFtZS0+c2NyaXB0KCktPmlzRW5hYmxlZCgpIHx8ICFtX2ZyYW1lLT5zY3JpcHQoKS0+
aGF2ZVdpbmRvd1NoZWxsKCkpCisgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGJlIGlzb2xhdGVk
LXdvcmxkcy1hd2FyZT8KKyAgICBpZiAoIW1fZnJhbWUtPnNjcmlwdCgpLT5pc0VuYWJsZWQoKSB8
fCAhbV9mcmFtZS0+c2NyaXB0KCktPmV4aXN0aW5nV2luZG93U2hlbGwobWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NsaWVudC0+d2luZG93T2JqZWN0
Q2xlYXJlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNh
dGlvbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0F1
dGhlbnRpY2F0aW9uTWFjLm1tCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvQXV0aGVudGljYXRpb25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDcgQEAKICNpbXBvcnQgIlByb3RlY3Rpb25TcGFjZS5oIgogCiAjaW1wb3J0IDxGb3VuZGF0
aW9uL05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KLSNpbXBvcnQgPEZvdW5kYXRpb24v
TlNVUkxDcmVkZW50aWFsLmg+CisvLyNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDcmVkZW50aWFs
Lmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUHJvdGVjdGlvblNwYWNlLmg+CiAKIApJbmRl
eDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw3ICszOTQsNyBAQCBzdGF0
aWMgYm9vbCBnZXRTdHJpbmcoU2NyaXB0Q29udHJvbGxlciogCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBwcm94eS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBwcm94eS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5n
bG9iYWxFeGVjKCk7CiAgICAgVVN0cmluZyB1c3RyaW5nID0gcmVzdWx0LnRvU3RyaW5nKGV4ZWMp
OwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MDQsMTAgKzYwNCw4IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRy
b3BQcm90ZWN0aW9uKCkKICAgICAvLyBvdXQuIEJ1dCBpdCBpcyBwcm90ZWN0ZWQgZnJvbSBHQyB3
aGlsZSBsb2FkaW5nLCBzbyB0aGlzCiAgICAgLy8gY2FuJ3QgYmUgcmVjb3VwZWQgdW50aWwgdGhl
IGxvYWQgaXMgZG9uZSwgc28gb25seQogICAgIC8vIHJlcG9ydCB0aGUgZXh0cmEgY29zdCBhdCB0
aGF0IHBvaW50LgotCi0gICAgaWYgKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTRE9NR2xvYmFsT2JqZWN0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIGlm
IChET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCpnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgdGhpcykpCi0gICAgICAgICAgICBKU0M6OkhlYXA6OmhlYXAo
d3JhcHBlciktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlVGV4dC5zaXplKCkgKiAy
KTsKKyAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBl
cigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCksIHRoaXMpKQorICAgICAg
ICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlciktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3Bv
bnNlVGV4dC5zaXplKCkgKiAyKTsKICNlbmRpZgogCiAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDEyIEBA
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5j
bHVkZSAiRm9ybURhdGEuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAi
VGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDxydW50aW1lL1Byb3RlY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xODIs
NyArMTg0LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xhc3RTZW5kTGluZU51bWJlcjsK
ICAgICBTdHJpbmcgbV9sYXN0U2VuZFVSTDsKICAgICBFeGNlcHRpb25Db2RlIG1fZXhjZXB0aW9u
Q29kZTsKLSAgICAKKwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIH07
CiAKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA0OTk1OCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMTAtMTYgIEdhdmluIEJhcnJhY2xvdWdo
ICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcgJiBHZW9mZiBHYXJlbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzA2OTYKKyAgICAgICAgVXBkYXRlIHRvIGluY29ycG9yYXRlIHN1cHBvcnQg
Zm9yIElzb2xhdGVkV29ybGRzIGluIEpTQyBiaW5kaW5ncy4KKworICAgICAgICAqIFdlYlZpZXcv
V2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9hdHRhY2hTY3JpcHREZWJ1Z2dlcl0p
OgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21T
dHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgZ2xvYmFsQ29u
dGV4dF0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbToKKyAg
ICAgICAgKC1bV2ViU2NyaXB0Q2FsbEZyYW1lIGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBhZURlc2NCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpdKToKKwogMjAwOS0xMC0yMiAgRXJpYyBDYXJsc29u
ICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluICYgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNp
b24gNDk5NTcpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDYgKzg1LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvbWFya3VwLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL3Zpc2libGVfdW5pdHMuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+Cisj
aW1wb3J0IDxydW50aW1lL0pTT2JqZWN0Lmg+CiAjaW1wb3J0IDxydW50aW1lL0pTVmFsdWUuaD4K
ICNpbXBvcnQgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC0yNzAsMTEgKzI3MSwxMiBAQCBXZWJW
aWV3ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3ZWJGcmFtZSkKICAgICBTY3JpcHRDb250cm9sbGVy
KiBzY3JpcHRDb250cm9sbGVyID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCk7CiAKICAg
ICAvLyBDYWxsaW5nIFNjcmlwdENvbnRyb2xsZXI6Omdsb2JhbE9iamVjdCgpIHdvdWxkIGNyZWF0
ZSBhIHdpbmRvdyBzaGVsbCwgYW5kIGRpc3BhdGNoIGNvcnJlc3BvbmRpbmcgY2FsbGJhY2tzLCB3
aGljaCBtYXkgYmUgcHJlbWF0dXJlCi0gICAgLy8gIGlmIHRoZSBzY3JpcHQgZGVidWdnZXIgaXMg
YXR0YWNoZWQgYmVmb3JlIGEgZG9jdW1lbnQgaXMgY3JlYXRlZC4KLSAgICBpZiAoIXNjcmlwdENv
bnRyb2xsZXItPmhhdmVXaW5kb3dTaGVsbCgpKQorICAgIC8vIGlmIHRoZSBzY3JpcHQgZGVidWdn
ZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGEgZG9jdW1lbnQgaXMgY3JlYXRlZC4gIFRoZXNlIGNhbGxz
IHVzZSB0aGUgZGVidWdnZXJXb3JsZCgpLCB3ZSB3aWxsIG5lZWQgdG8gcGFzcyBhIHdvcmxkCisg
ICAgLy8gdG8gYmUgYWJsZSB0byBkZWJ1ZyBpc29sYXRlZCB3b3JsZHMuCisgICAgaWYgKCFzY3Jp
cHRDb250cm9sbGVyLT5leGlzdGluZ1dpbmRvd1NoZWxsKGRlYnVnZ2VyV29ybGQoKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY3JpcHRD
b250cm9sbGVyLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gc2NyaXB0Q29udHJvbGxlci0+Z2xvYmFsT2JqZWN0KGRlYnVnZ2VyV29ybGQoKSk7CiAg
ICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjA3LDcgKzYwOSw3
IEBAIHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSgKICAgICAgICAgcmV0
dXJuIEAiIjsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAg
cmV0dXJuIFN0cmluZyhyZXN1bHQudG9TdHJpbmcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0
KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKTsKKyAgICByZXR1cm4gU3RyaW5nKHJl
c3VsdC50b1N0cmluZyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKSk7CiB9CiAKIC0gKE5TUmVj
dClfY2FyZXRSZWN0QXROb2RlOihET01Ob2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQgYWZm
aW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkKQEAgLTEyMDIsNiArMTIwNCwzNCBA
QCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAgICAgcmV0dXJuIFNl
Y3VyaXR5T3JpZ2luOjpjYW5Mb2FkKFVSTCwgU3RyaW5nKCksIF9wcml2YXRlLT5jb3JlRnJhbWUt
PmRvY3VtZW50KCkpOwogfQogCistIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0SW5Jc29sYXRlZFdvcmxkOih1bnNpZ25lZCl3b3JsZElEIFdpdGhHbG9iYWxPYmplY3Q6
KEpTT2JqZWN0UmVmKWdsb2JhbE9iamVjdFJlZiBGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZworeworICAgIC8vIFN0YXJ0IG9mZiB3aXRoIHNvbWUgZ3Vlc3MgYXQgYSBmcmFtZSBhbmQgYSBn
bG9iYWwgb2JqZWN0LCB3ZSdsbCB0cnkgdG8gZG8gYmV0dGVyLi4uIQorICAgIEpTRE9NV2luZG93
KiBhbnlXb3JsZEdsb2JhbE9iamVjdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworCisgICAgLy8gVGhlIGdsb2Jh
bCBvYmplY3QgaXMgcHJvYmFibHkgYSBzaGVsbCBvYmplY3Q/IC0gaWYgc28sIHdlIGtub3cgaG93
IHRvIHVzZSB0aGlzIQorICAgIEpTQzo6SlNPYmplY3QqIGdsb2JhbE9iamVjdE9iaiA9IHRvSlMo
Z2xvYmFsT2JqZWN0UmVmKTsKKyAgICBpZiAoIXN0cmNtcChnbG9iYWxPYmplY3RPYmotPmNsYXNz
SW5mbygpLT5jbGFzc05hbWUsICJKU0RPTVdpbmRvd1NoZWxsIikpCisgICAgICAgIGFueVdvcmxk
R2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGdsb2JhbE9iamVj
dE9iaiktPndpbmRvdygpOworCisgICAgLy8gR2V0IHRoZSBmcmFtZSBmcm9tZSB0aGUgZ2xvYmFs
IG9iamVjdCB3ZSd2ZSBzZXR0bGVkIG9uLgorICAgIEZyYW1lKiBmcmFtZSA9IGFueVdvcmxkR2xv
YmFsT2JqZWN0LT5pbXBsKCktPmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lLT5kb2N1bWVudCgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzdHJpbmcsIHRydWUpLmpzVmFsdWUoKTsKKworICAgIGlm
ICghZnJhbWUpIC8vIEluIGNhc2UgdGhlIHNjcmlwdCByZW1vdmVkIG91ciBmcmFtZSBmcm9tIHRo
ZSBwYWdlLgorICAgICAgICByZXR1cm4gQCIiOworCisgICAgLy8gVGhpcyBiaXphcnJlIHNldCBv
ZiBydWxlcyBtYXRjaGVzIGJlaGF2aW9yIGZyb20gV2ViS2l0IGZvciBTYWZhcmkgMi4wLgorICAg
IC8vIElmIHlvdSBkb24ndCBsaWtlIGl0LCB1c2UgLVtXZWJTY3JpcHRPYmplY3QgZXZhbHVhdGVX
ZWJTY3JpcHQ6XSBvciAKKyAgICAvLyBKU0V2YWx1YXRlU2NyaXB0IGluc3RlYWQsIHNpbmNlIHRo
ZXkgaGF2ZSBsZXNzIHN1cnByaXNpbmcgc2VtYW50aWNzLgorICAgIGlmICghcmVzdWx0IHx8ICFy
ZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0cmluZygpICYmICFyZXN1bHQuaXNOdW1i
ZXIoKSkKKyAgICAgICAgcmV0dXJuIEAiIjsKKworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgcmV0dXJuIFN0cmluZyhyZXN1bHQudG9TdHJpbmcoYW55V29ybGRH
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkpOworfQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlv
biBXZWJGcmFtZQpAQCAtMTQzMyw3ICsxNDYzLDcgQEAgc3RhdGljIE5TVVJMICpjcmVhdGVVbmlx
dWVXZWJEYXRhVVJMKCkKICAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFt
ZTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRv
R2xvYmFsUmVmKGNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkpOworICAgIHJldHVybiB0b0dsb2JhbFJlZihjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxP
YmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpOwogfQogCiBAZW5k
CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCShyZXZpc2lvbiA0OTk1NykK
KysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtOTYsNiArOTYsOCBAQCB0eXBlZGVmIGVudW0gewogLSAodm9pZClfcmVjdXJzaXZlX3BhdXNl
TnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2luczsKICNlbmRpZgogCistIChOU1N0cmluZyAq
KV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkOih1bnNpZ25lZCl3
b3JsZElEIFdpdGhHbG9iYWxPYmplY3Q6KEpTT2JqZWN0UmVmKWdsb2JhbE9iamVjdCBGcm9tU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZzsKKwogLy8gUGF1c2UgYSBnaXZlbiBDU1MgYW5pbWF0aW9u
IG9yIHRyYW5zaXRpb24gb24gdGhlIHRhcmdldCBub2RlIGF0IGEgc3BlY2lmaWMgdGltZS4KIC8v
IElmIHRoZSBhbmltYXRpb24gb3IgdHJhbnNpdGlvbiBpcyBhbHJlYWR5IHBhdXNlZCwgaXQgd2ls
bCB1cGRhdGUgaXRzIHBhdXNlIHRpbWUuCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IGludGVuZGVk
IHRvIGJlIHVzZWQgZm9yIHRlc3RpbmcgdGhlIENTUyBhbmltYXRpb24gYW5kIHRyYW5zaXRpb24g
c3lzdGVtLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdh
dGUubW0JKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0OSw3ICsyNDksNyBAQCBOU1N0cmlu
ZyAqIGNvbnN0IFdlYlNjcmlwdEVycm9yTGluZU51bWJlCiAgICAgfQogCiAgICAgSlNWYWx1ZSBl
eGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJh
bWUtPmV2YWx1YXRlKFN0cmluZyhzY3JpcHQpLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gRGVidWdnZXJDYWxsRnJhbWVfZXZhbHVhdGVJbldvcmxkKCpfcHJpdmF0ZS0+ZGVidWdn
ZXJDYWxsRnJhbWUsIFN0cmluZyhzY3JpcHQpLCBleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgIHJldHVybiBbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6ZXhjZXB0
aW9uXTsKICAgICByZXR1cm4gcmVzdWx0ID8gW3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVl
OnJlc3VsdF0gOiBuaWw7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNDk5NTcp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDE2
Nyw3ICs0MTY3LDcgQEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zybwog
ICAgIGlmICghcmVzdWx0KSAvLyBGSVhNRTogcGFzcyBlcnJvcnMKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICByZXR1cm4gYWVE
ZXNjRnJvbUpTVmFsdWUoY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSwgcmVzdWx0KTsKKyAgICByZXR1cm4gYWVEZXNjRnJvbUpTVmFsdWUoY29yZUZyYW1l
LT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFs
RXhlYygpLCByZXN1bHQpOwogfQogCiAtIChCT09MKWNhbk1hcmtBbGxUZXh0TWF0Y2hlcwpJbmRl
eDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ5OTU4KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyNyBAQAorMjAwOS0xMC0yMiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJy
YWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZyAmIEdl
b2ZmIEdhcmVuLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMDY5NgorICAgICAgICBVcGRhdGUgdG8gaW5jb3Jwb3JhdGUgc3VwcG9ydCBmb3IgSXNv
bGF0ZWRXb3JsZHMgaW4gSlNDIGJpbmRpbmdzLgorCisgICAgICAgICogSW50ZXJmYWNlcy9JV2Vi
RnJhbWVQcml2YXRlLmlkbDoKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJG
cmFtZTo6Z2xvYmFsQ29udGV4dCk6CisgICAgICAgIChXZWJGcmFtZTo6d2luZG93T2JqZWN0Q2xl
YXJlZCk6CisgICAgICAgIChXZWJGcmFtZTo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdElu
SXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogV2ViRnJhbWUuaDoKKworMjAwOS0xMC0xNiAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRvIGluY29ycG9yYXRlIHN1
cHBvcnQgZm9yIElzb2xhdGVkV29ybGRzIGluIEpTQyBiaW5kaW5ncy4KKworICAgICAgICAqIFdl
YkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpnbG9iYWxDb250ZXh0KToKKyAgICAgICAg
KFdlYkZyYW1lOjp3aW5kb3dPYmplY3RDbGVhcmVkKToKKwogMjAwOS0xMC0yMCAgRnVtaXRvc2hp
IFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBM
ZXZpbi4KSW5kZXg6IFdlYktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lvbiA0OTk1NykKKysrIFdlYktpdC93aW4vV2ViRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw5IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0xvY2suaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI3ByYWdtYSB3YXJuaW5nKHBvcCkKIApAQCAtMTE2LDYgKzExOSwxMSBAQCBleHRl
cm4gIkMiIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAordXNpbmcgSlNDOjpKU0dsb2JhbE9iamVjdDsKK3VzaW5nIEpTQzo6SlNMb2NrOwor
dXNpbmcgSlNDOjpKU1ZhbHVlOwordXNpbmcgSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHk7CisK
ICNkZWZpbmUgRkxBU0hfUkVEUkFXIDAKIAogCkBAIC00NzksNyArNDg3LDcgQEAgSlNHbG9iYWxD
b250ZXh0UmVmIFNURE1FVEhPRENBTExUWVBFIFdlYgogICAgIGlmICghY29yZUZyYW1lKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiB0b0dsb2JhbFJlZihjb3JlRnJhbWUtPnNjcmlw
dCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICByZXR1cm4gdG9HbG9iYWxS
ZWYoY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpKTsKIH0KIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJG
cmFtZTo6bG9hZFJlcXVlc3QoIApAQCAtMTcwMiw4ICsxNzEwLDggQEAgdm9pZCBXZWJGcmFtZTo6
d2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKICAgICBDT01QdHI8SVdlYkZyYW1lTG9hZERlbGVnYXRl
PiBmcmFtZUxvYWREZWxlZ2F0ZTsKICAgICBpZiAoU1VDQ0VFREVEKGQtPndlYlZpZXctPmZyYW1l
TG9hZERlbGVnYXRlKCZmcmFtZUxvYWREZWxlZ2F0ZSkpKSB7Ci0gICAgICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gdG9SZWYoY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSk7Ci0gICAgICAgIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCA9IHRvUmVmKGNv
cmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSB0b1JlZihjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRo
cmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpOworICAgICAgICBKU09iamVjdFJlZiB3
aW5kb3dPYmplY3QgPSB0b1JlZihjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFp
blRocmVhZE5vcm1hbFdvcmxkKCkpKTsKICAgICAgICAgQVNTRVJUKHdpbmRvd09iamVjdCk7CiAK
ICAgICAgICAgaWYgKEZBSUxFRChmcmFtZUxvYWREZWxlZ2F0ZS0+ZGlkQ2xlYXJXaW5kb3dPYmpl
Y3QoZC0+d2ViVmlldywgY29udGV4dCwgd2luZG93T2JqZWN0LCB0aGlzKSkpCkBAIC0yMTQ4LDYg
KzIxNTYsNDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6aXNEZQogICAg
IHJldHVybiBTX09LOwogfQogCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkZyYW1lOjpz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAorICAgIC8qIFtpbl0g
Ki8gdW5zaWduZWQgaW50IHdvcmxkSUQsCisgICAgLyogW2luXSAqLyBPTEVfSEFORExFIGpzR2xv
YmFsT2JqZWN0LAorICAgIC8qIFtpbl0gKi8gQlNUUiBzY3JpcHQsCisgICAgLyogW3JldHZhbF1b
b3V0XSAqLyBCU1RSKiBldmFsdWF0aW9uUmVzdWx0KQoreworICAgIGlmICghZXZhbHVhdGlvblJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqZXZhbHVhdGlvblJlc3VsdCA9
IDA7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh0aGlzKTsKKyAgICBKU09iamVjdFJl
ZiBnbG9iYWxPYmplY3RSZWYgPSByZWludGVycHJldF9jYXN0PEpTT2JqZWN0UmVmPihqc0dsb2Jh
bE9iamVjdCk7CisgICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZyhzY3JpcHQsIFN5c1N0cmluZ0xl
bihzY3JpcHQpKTsKKworICAgIC8vIFN0YXJ0IG9mZiB3aXRoIHNvbWUgZ3Vlc3MgYXQgYSBmcmFt
ZSBhbmQgYSBnbG9iYWwgb2JqZWN0LCB3ZSdsbCB0cnkgdG8gZG8gYmV0dGVyLi4uIQorICAgIEpT
RE9NV2luZG93KiBhbnlXb3JsZEdsb2JhbE9iamVjdCA9IGNvcmVGcmFtZS0+c2NyaXB0KCktPmds
b2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisKKyAgICAvLyBUaGUgZ2xvYmFs
IG9iamVjdCBpcyBwcm9iYWJseSBhIHNoZWxsIG9iamVjdD8gLSBpZiBzbywgd2Uga25vdyBob3cg
dG8gdXNlIHRoaXMhCisgICAgSlNDOjpKU09iamVjdCogZ2xvYmFsT2JqZWN0T2JqID0gdG9KUyhn
bG9iYWxPYmplY3RSZWYpOworICAgIGlmICghc3RyY21wKGdsb2JhbE9iamVjdE9iai0+Y2xhc3NJ
bmZvKCktPmNsYXNzTmFtZSwgIkpTRE9NV2luZG93U2hlbGwiKSkKKyAgICAgICAgYW55V29ybGRH
bG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4oZ2xvYmFsT2JqZWN0
T2JqKS0+d2luZG93KCk7CisKKyAgICAvLyBHZXQgdGhlIGZyYW1lIGZyb21lIHRoZSBnbG9iYWwg
b2JqZWN0IHdlJ3ZlIHNldHRsZWQgb24uCisgICAgRnJhbWUqIGZyYW1lID0gYW55V29ybGRHbG9i
YWxPYmplY3QtPmltcGwoKS0+ZnJhbWUoKTsKKyAgICBBU1NFUlQoZnJhbWUtPmRvY3VtZW50KCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKHdvcmxkSUQsIHN0cmluZywgdHJ1ZSkuanNWYWx1ZSgpOworCisgICAgaWYg
KCFmcmFtZSkgLy8gSW4gY2FzZSB0aGUgc2NyaXB0IHJlbW92ZWQgb3VyIGZyYW1lIGZyb20gdGhl
IHBhZ2UuCisgICAgICAgIHJldHVybiBTX09LOworCisgICAgLy8gVGhpcyBiaXphcnJlIHNldCBv
ZiBydWxlcyBtYXRjaGVzIGJlaGF2aW9yIGZyb20gV2ViS2l0IGZvciBTYWZhcmkgMi4wLgorICAg
IC8vIElmIHlvdSBkb24ndCBsaWtlIGl0LCB1c2UgLVtXZWJTY3JpcHRPYmplY3QgZXZhbHVhdGVX
ZWJTY3JpcHQ6XSBvciAKKyAgICAvLyBKU0V2YWx1YXRlU2NyaXB0IGluc3RlYWQsIHNpbmNlIHRo
ZXkgaGF2ZSBsZXNzIHN1cnByaXNpbmcgc2VtYW50aWNzLgorICAgIGlmICghcmVzdWx0IHx8ICFy
ZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0cmluZygpICYmICFyZXN1bHQuaXNOdW1i
ZXIoKSkKKyAgICAgICAgcmV0dXJuIFNfT0s7CisKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSBTdHJpbmcocmVzdWx0LnRv
U3RyaW5nKGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpKTsKKyAgICAqZXZhbHVh
dGlvblJlc3VsdCA9IEJTdHJpbmcocmVzdWx0U3RyaW5nKS5yZWxlYXNlKCk7CisKKyAgICByZXR1
cm4gU19PSzsKK30KKwogdm9pZCBXZWJGcmFtZTo6dW5tYXJrQWxsTWlzc3BlbGxpbmdzKCkKIHsK
ICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh0aGlzKTsKSW5kZXg6IFdlYktpdC93aW4vV2Vi
RnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkZyYW1lLmgJKHJldmlzaW9uIDQ5
OTU3KQorKysgV2ViS2l0L3dpbi9XZWJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNiAr
MjQ0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgLyogW2luXSAqLyBCU1RSIHVybCwKICAgICAgICAg
LyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpOwogCisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRJbklzb2xhdGVk
V29ybGQoIAorICAgICAgICAvKiBbaW5dICovIHVuc2lnbmVkIGludCB3b3JsZElELAorICAgICAg
ICAvKiBbaW5dICovIE9MRV9IQU5ETEUganNHbG9iYWxPYmplY3QsCisgICAgICAgIC8qIFtpbl0g
Ki8gQlNUUiBzY3JpcHQsCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogZXZhbHVh
dGlvblJlc3VsdCk7CisKICAgICAvLyBJV2ViRG9jdW1lbnRUZXh0CiAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHN1cHBvcnRzVGV4dEVuY29kaW5nKCAKICAgICAgICAgLyog
W3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpOwpJbmRleDogV2ViS2l0L3dpbi9JbnRlcmZh
Y2VzL0lXZWJGcmFtZVByaXZhdGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vSW50ZXJm
YWNlcy9JV2ViRnJhbWVQcml2YXRlLmlkbAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJLaXQvd2lu
L0ludGVyZmFjZXMvSVdlYkZyYW1lUHJpdmF0ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTkzLDQg
KzkzLDYgQEAgaW50ZXJmYWNlIElXZWJGcmFtZVByaXZhdGUgOiBJVW5rbm93bgogICAgIEhSRVNV
TFQgaXNEaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdlKFtvdXQsIHJldHZhbF0gQk9PTCogcmVzdWx0
KTsKIAogICAgIEhSRVNVTFQgYWxsb3dzRm9sbG93aW5nTGluayhbaW5dIEJTVFIgdXJsLCBbb3V0
LCByZXR2YWxdIEJPT0wqIHJlc3VsdCk7CisKKyAgICBIUkVTVUxUIHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRJbklzb2xhdGVkV29ybGQoW2luXSB1bnNpZ25lZCB3b3JsZElELCBbaW5dIE9M
RV9IQU5ETEUganNHbG9iYWxPYmplY3QsIFtpbl0gQlNUUiBzY3JpcHQsIFtvdXQsIHJldHZhbF0g
QlNUUiogcmVzdWx0KTsKIH0KSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ5OTU4KQorKysgV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMTAtMjIg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFNhbSBXZWluaWcgJiBHZW9mZiBHYXJlbi4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2OTYKKyAgICAgICAgRW5hYmxlIGlzb2xh
dGVkLXdvcmxkcyB0ZXN0cyBvbiBtYWMuCisKKwlBZGQgcHJpdmF0ZSBpbnRlcmZhY2UgZm9yIERS
VCB0byBpbnZva2UgZXhlY3V0aW9uIGluIGEgZ2l2ZW4gd29ybGQuCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZENhbGxiYWNrKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5
b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKwogMjAwOS0xMC0yMSAgRXJpYyBTZWlk
ZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4K
SW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDQ5OTU3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAKICNpbmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1Jl
dGFpblB0ci5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC05NzgsNiArOTc5LDE4IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
eworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IGRvdWJsZSB3b3JsZElEID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBzY3JpcHQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAg
Y29udHJvbGxlci0+ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHdvcmxkSUQpLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHNjcmlw
dC5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQor
CiBzdGF0aWMgSlNWYWx1ZVJlZiBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRo
SWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC0xMTg2LDYgKzExOTksNyBA
QCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgImVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCIsIGVsZW1lbnREb2VzQXV0b0Nv
bXBsZXRlRm9yRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImVuY29k
ZUhvc3ROYW1lIiwgZW5jb2RlSG9zdE5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJl
dmFsdWF0ZUluV2ViSW5zcGVjdG9yIiwgZXZhbHVhdGVJbldlYkluc3BlY3RvckNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgZXZhbHVh
dGVTY3JpcHRJbklzb2xhdGVkV29ybGRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJleGVj
Q29tbWFuZCIsIGV4ZWNDb21tYW5kQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZ3JhbnRE
ZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbiIsIGdyYW50RGVza3RvcE5vdGlmaWNhdGlvblBl
cm1pc3Npb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAKICAgICAgICAgeyAiaXNDb21tYW5kRW5hYmxlZCIs
IGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJbmRleDogV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiA0OTk1
NykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMyw2ICsyMTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG93
V2ViSW5zcGVjdG9yKCk7CiAgICAgdm9pZCBjbG9zZVdlYkluc3BlY3RvcigpOwogICAgIHZvaWQg
ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdSZWYgc2NyaXB0KTsK
KyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSWQs
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KTsKIAogICAgIHZv
aWQgc2V0UE9TSVhMb2NhbGUoSlNTdHJpbmdSZWYgbG9jYWxlKTsKIApJbmRleDogV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxl
ck1hYy5tbQkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxNSwzICs1
MTUsMTAgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYgogICAgIE5T
U3RyaW5nICpzY3JpcHROUyA9IChOU1N0cmluZyAqKXNjcmlwdENGLmdldCgpOwogICAgIFtbW21h
aW5GcmFtZSB3ZWJWaWV3XSBpbnNwZWN0b3JdIGV2YWx1YXRlSW5Gcm9udGVuZDpuaWwgY2FsbElk
OmNhbGxJZCBzY3JpcHQ6c2NyaXB0TlNdOwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVj
dFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHNjcmlwdENGKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHNjcmlwdCkpOworICAgIE5TU3RyaW5nICpzY3JpcHROUyA9IChOU1N0
cmluZyAqKXNjcmlwdENGLmdldCgpOworICAgIFttYWluRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRJbklzb2xhdGVkV29ybGQ6d29ybGRJRCBXaXRoR2xvYmFsT2JqZWN0Omdsb2Jh
bE9iamVjdCBGcm9tU3RyaW5nOnNjcmlwdE5TXTsKK30KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNw
cAkocmV2aXNpb24gNDk5NTcpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5
b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDcsNiArOTQ3LDE4
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWIKICAgICBpbnNwZWN0
b3JQcml2YXRlLT5ldmFsdWF0ZUluRnJvbnRlbmQoY2FsbElkLCBic3RyVChzY3JpcHQpLkdldEJT
VFIoKSk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSWQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFt
ZVByaXZhdGUoUXVlcnksIGZyYW1lKTsKKyAgICBpZiAoIWZyYW1lUHJpdmF0ZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQlNUUiByZXN1bHQ7CisgICAgaWYgKEZBSUxFRChmcmFtZVByaXZhdGUt
PnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRJbklzb2xhdGVkV29ybGQod29ybGRJZCwgcmVp
bnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihnbG9iYWxPYmplY3QpLCBic3RyVChzY3JpcHQpLkdl
dEJTVFIoKSwgJnJlc3VsdCkpKQorICAgICAgICByZXR1cm47CisgICAgU3lzRnJlZVN0cmluZyhy
ZXN1bHQpOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVk
TGlua3MoKQogewogICAgIENPTVB0cjxJV2ViSGlzdG9yeT4gaGlzdG9yeTsKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDQ5OTU4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMTAtMTkgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcgJiBHZW9mZiBH
YXJlbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzA2OTYKKyAgICAgICAgRW5hYmxlIGlzb2xhdGVkLXdvcmxkcyB0ZXN0cyBvbiBtYWMuCisgICAg
ICAgICAgKiBVcGRhdGUgdGhlIHJlc3VsdHMgdG8gc3dpdGNoIGZyb20gd2luZG93cyB0byB1bml4
IGxpbmUtZW5kaW5ncy4KKyAgICAgICAgICAqIFVwZGF0ZSBhbGwtd2luZG93LXByb3RvdHlwZXMu
aHRtbCB0byBhbGxvdyBmb3IgcHJvcGVydGllcyBvbgorICAgICAgICAgICAgdGhlIGdsb2JhbCBv
YmplY3Qgd2l0aCBudWxsIHByb3RvdHlwZXMgKGp1c3Qgc2tpcCBvdmVyIHRoZW0pLgorCisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2FsbC13aW5kb3ctcHJvcGVy
dGllcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRl
ZFdvcmxkL2FsbC13aW5kb3ctcHJvdG90eXBlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0
cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2FsbC13aW5kb3ctcHJvdG90eXBlcy5odG1s
OgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9ib2R5LXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0
ZWRXb3JsZC9ib2R5LXByb3RvdHlwZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0
cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2RvY3VtZW50LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9kb2N1bWVudC1w
cm90b3R5cGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNv
bGF0ZWRXb3JsZC9nbG9iYWwtdmFyaWFibGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvaW1hZ2UtcHJvcGVydGllcy1leHBlY3RlZC50
eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2ltYWdlLXBy
b3RvdHlwZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29s
YXRlZFdvcmxkL2xvY2F0aW9uLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9sb2NhdGlvbi1wcm90b3R5cGUtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9udW1i
ZXItcHJvdG90eXBlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L2lzb2xhdGVkV29ybGQvb2JqZWN0LXByb3RvdHlwZS1leHBlY3RlZC50eHQ6CisgICAgICAgICog
aHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3N0b3JhZ2UtcHJvcGVydGllcy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3N0
b3JhZ2UtcHJvdG90eXBlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L2lzb2xhdGVkV29ybGQvc3RyaW5nLXByb3RvdHlwZS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3dpbmRvdy1wcm9wZXJ0aWVzLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKwogMjAwOS0xMC0y
MiAgU2h1IENoYW5nICA8Q2hhbmcuU2h1QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNv
bGF0ZWRXb3JsZC9hbGwtd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9hbGwtd2lu
ZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0OTk1NykKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9hbGwtd2luZG93LXByb3BlcnRp
ZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi1Eb25lLg0KK0RvbmUu
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvYWxs
LXdpbmRvdy1wcm90b3R5cGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvYWxsLXdpbmRvdy1wcm90b3R5cGVz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDk5NTcpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvYWxsLXdpbmRvdy1wcm90b3R5cGVzLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotRG9uZS4NCitEb25lLgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2FsbC13aW5kb3ctcHJvdG90
eXBlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
aXNvbGF0ZWRXb3JsZC9hbGwtd2luZG93LXByb3RvdHlwZXMuaHRtbAkocmV2aXNpb24gNDk5NTcp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvYWxsLXdp
bmRvdy1wcm90b3R5cGVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTUsOCArNSwxMSBAQAogPHNj
cmlwdD4KIGZvciAocCBpbiB3aW5kb3cpIHsKICAgdmFyIG9iaiA9IHdpbmRvd1twXTsKLSAgaWYg
KG9iaikKLSAgICBvYmouX19wcm90b19fLmZvbyA9ICJGQUlMOiBWaXNpYmxlIGluIGlzb2xhdGVk
IHdvcmxkLiI7CisgIGlmIChvYmopIHsKKyAgICB2YXIgcHJvdG8gPSBvYmouX19wcm90b19fOwor
ICAgIGlmIChwcm90bykKKyAgICAgIHByb3RvLmZvbyA9ICJGQUlMOiBWaXNpYmxlIGluIGlzb2xh
dGVkIHdvcmxkLiI7CisgIH0KIH0KIAogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
ewpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2Jv
ZHktcHJvcGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2JvZHktcHJvcGVydGllcy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDQ5OTU3KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9p
c29sYXRlZFdvcmxkL2JvZHktcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEgKzEgQEAKLXVuZGVmaW5lZA0KK3VuZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2JvZHktcHJvdG90eXBlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVk
V29ybGQvYm9keS1wcm90b3R5cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0OTk1NykKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9ib2R5LXByb3RvdHlw
ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLXVuZGVmaW5lZA0KK3Vu
ZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdv
cmxkL2RvY3VtZW50LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9kb2N1bWVudC1wcm9wZXJ0
aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDk5NTcpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvZG9jdW1lbnQtcHJvcGVydGllcy1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLXVuZGVmaW5lZA0KK3VuZGVmaW5lZApJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2RvY3VtZW50
LXByb3RvdHlwZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2RvY3VtZW50LXByb3RvdHlwZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDQ5OTU3KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9p
c29sYXRlZFdvcmxkL2RvY3VtZW50LXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEgKzEgQEAKLXVuZGVmaW5lZA0KK3VuZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2dsb2JhbC12YXJpYWJsZXMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNv
bGF0ZWRXb3JsZC9nbG9iYWwtdmFyaWFibGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDk5NTcp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvZ2xvYmFs
LXZhcmlhYmxlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLXVuZGVm
aW5lZA0KK3VuZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9p
c29sYXRlZFdvcmxkL2ltYWdlLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9pbWFnZS1wcm9w
ZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDk5NTcpCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvaW1hZ2UtcHJvcGVydGllcy1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLXVuZGVmaW5lZA0KK3VuZGVmaW5lZApJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2ltYWdlLXBy
b3RvdHlwZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2ltYWdlLXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDQ5OTU3KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRl
ZFdvcmxkL2ltYWdlLXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEg
KzEgQEAKLXVuZGVmaW5lZA0KK3VuZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2xvY2F0aW9uLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRX
b3JsZC9sb2NhdGlvbi1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDk5NTcpCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvbG9jYXRpb24t
cHJvcGVydGllcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLXVuZGVm
aW5lZA0KK3VuZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9p
c29sYXRlZFdvcmxkL2xvY2F0aW9uLXByb3RvdHlwZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2xvY2F0aW9u
LXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQ5OTU3KQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2xvY2F0aW9uLXByb3RvdHlwZS1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLXVuZGVmaW5lZA0KK3VuZGVmaW5l
ZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL251
bWJlci1wcm90b3R5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9udW1iZXItcHJvdG90eXBlLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNDk5NTcpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L2lzb2xhdGVkV29ybGQvbnVtYmVyLXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEgKzEgQEAKLXVuZGVmaW5lZA0KK3VuZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL29iamVjdC1wcm90b3R5cGUtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNv
bGF0ZWRXb3JsZC9vYmplY3QtcHJvdG90eXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDk5NTcp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvb2JqZWN0
LXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLXVuZGVm
aW5lZA0KK3VuZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9p
c29sYXRlZFdvcmxkL3N0b3JhZ2UtcHJvcGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3N0b3JhZ2Ut
cHJvcGVydGllcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQ5OTU3KQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3N0b3JhZ2UtcHJvcGVydGllcy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLVZpc2libGUgYW5kIFZpc2libGUN
CitWaXNpYmxlIGFuZCBWaXNpYmxlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L2lzb2xhdGVkV29ybGQvc3RvcmFnZS1wcm90b3R5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9zdG9y
YWdlLXByb3RvdHlwZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQ5OTU3KQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3N0b3JhZ2UtcHJvdG90eXBlLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotdW5kZWZpbmVkIGFuZCB1bmRl
ZmluZWQNCit1bmRlZmluZWQgYW5kIHVuZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3N0cmluZy1wcm90b3R5cGUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRX
b3JsZC9zdHJpbmctcHJvdG90eXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDk5NTcpCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvc3RyaW5nLXByb3Rv
dHlwZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLXVuZGVmaW5lZA0K
K3VuZGVmaW5lZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRl
ZFdvcmxkL3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvd2luZG93LXByb3BlcnRp
ZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0OTk1NykKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLXVuZGVmaW5lZA0KK3VuZGVmaW5lZApJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL3dvcmxkLXJldXNl
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L2lzb2xhdGVkV29ybGQvd29ybGQtcmV1c2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0OTk1
NykKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC93b3Js
ZC1yZXVzZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACi0NCi1F
eHBlY3RpbmcgdW5kZWZpbmVkOiB1bmRlZmluZWQNCi1FeHBlY3RpbmcgYmFyOiBiYXINCi1FeHBl
Y3RpbmcgdW5kZWZpbmVkOiB1bmRlZmluZWQNCi1FeHBlY3RpbmcgdW5kZWZpbmVkLHVuZGVmaW5l
ZDogdW5kZWZpbmVkLHVuZGVmaW5lZA0KLUV4cGVjdGluZyB1bmRlZmluZWQsdW5kZWZpbmVkOiB1
bmRlZmluZWQsdW5kZWZpbmVkDQotDQorCitFeHBlY3RpbmcgdW5kZWZpbmVkOiB1bmRlZmluZWQK
K0V4cGVjdGluZyBiYXI6IGJhcgorRXhwZWN0aW5nIHVuZGVmaW5lZDogdW5kZWZpbmVkCitFeHBl
Y3RpbmcgdW5kZWZpbmVkLHVuZGVmaW5lZDogdW5kZWZpbmVkLHVuZGVmaW5lZAorRXhwZWN0aW5n
IHVuZGVmaW5lZCx1bmRlZmluZWQ6IHVuZGVmaW5lZCx1bmRlZmluZWQKKwpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1NraXBwZWQJKHJldmlzaW9uIDQ5OTU3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTcwLDMwICs3MCw2IEBAIHN2Zy9oaXhp
ZS9wZXJmLzAwMi54bWwKICMgPHJkYXI6Ly9wcm9ibGVtLzY3MTA2MjU+IFRlc3QgbWVkaWEvdmlk
ZW8tZXJyb3ItYWJvcnQuaHRtbCBkb2Vzbid0IHdvcmsKIG1lZGlhL3ZpZGVvLWVycm9yLWFib3J0
Lmh0bWwKIAotIyBUaGlzIHBvcnQgZG9lc24ndCBzdXBwb3J0IGlzb2xhdGVkIHdvcmxkcyB5ZXQu
Ci1odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvYWxsLXdpbmRvdy1wcm9wZXJ0aWVz
Lmh0bWwKLWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9hbGwtd2luZG93LXByb3Rv
dHlwZXMuaHRtbAotaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2JvZHktcHJvcGVy
dGllcy5odG1sCi1odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvYm9keS1wcm90b3R5
cGUuaHRtbAotaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2NsaWNrLWV2ZW50Lmh0
bWwKLWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9kb2N1bWVudC1vcGVuLmh0bWwK
LWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9kb2N1bWVudC1wcm9wZXJ0aWVzLmh0
bWwKLWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9kb2N1bWVudC1wcm90b3R5cGUu
aHRtbAotaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2dsb2JhbC12YXJpYWJsZXMu
aHRtbAotaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2ltYWdlLXByb3BlcnRpZXMu
aHRtbAotaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRlZFdvcmxkL2ltYWdlLXByb3RvdHlwZS5o
dG1sCi1odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvbG9jYXRpb24tcHJvcGVydGll
cy5odG1sCi1odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvbG9jYXRpb24tcHJvdG90
eXBlLmh0bWwKLWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC93aW5kb3ctc2V0VGlt
ZW91dC1mdW5jdGlvbi5odG1sCi1odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvd2lu
ZG93LXNldFRpbWVvdXQtc3RyaW5nLmh0bWwKLWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRX
b3JsZC9zdG9yYWdlLXByb3BlcnRpZXMuaHRtbAotaHR0cC90ZXN0cy9zZWN1cml0eS9pc29sYXRl
ZFdvcmxkL3N0b3JhZ2UtcHJvdG90eXBlLmh0bWwKLWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0
ZWRXb3JsZC9udW1iZXItcHJvdG90eXBlLmh0bWwKLWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0
ZWRXb3JsZC9vYmplY3QtcHJvdG90eXBlLmh0bWwKLWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0
ZWRXb3JsZC9zdHJpbmctcHJvdG90eXBlLmh0bWwKLWh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0
ZWRXb3JsZC93aW5kb3ctcHJvcGVydGllcy5odG1sCi1odHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xh
dGVkV29ybGQvd29ybGQtcmV1c2UuaHRtbAotCiAjIE5ldyB0ZXN0IHdpdGggcXVlc3Rpb25hYmxl
IHJlc3VsdHMKICMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
ODA3OSBmb3IgZXhwbGFuYXRpb24uCiBmYXN0L2Zvcm1zL21lbnVsaXN0LXN0eWxlLWNvbG9yLmh0
bWwK
</data>
<flag name="review"
          id="23141"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>