<?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>225813</bug_id>
          
          <creation_ts>2021-05-14 10:15:37 -0700</creation_ts>
          <short_desc>Use PixelBufferFormat to specify ImageBuffer::getPixelBuffer destination format allowing for more control over data conversion</short_desc>
          <delta_ts>2021-05-15 09:51:14 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>225140</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1760124</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 10:15:37 -0700</bug_when>
    <thetext>Use PixelBufferFormat to specify ImageBuffer::getPixelData destination format allowing for more control over data conversion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760137</commentid>
    <comment_count>1</comment_count>
      <attachid>428639</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 10:42:56 -0700</bug_when>
    <thetext>Created attachment 428639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760152</commentid>
    <comment_count>2</comment_count>
      <attachid>428642</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 11:28:25 -0700</bug_when>
    <thetext>Created attachment 428642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760165</commentid>
    <comment_count>3</comment_count>
      <attachid>428646</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 12:15:15 -0700</bug_when>
    <thetext>Created attachment 428646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760172</commentid>
    <comment_count>4</comment_count>
      <attachid>428647</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 12:58:17 -0700</bug_when>
    <thetext>Created attachment 428647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760266</commentid>
    <comment_count>5</comment_count>
      <attachid>428647</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-14 15:40:10 -0700</bug_when>
    <thetext>Comment on attachment 428647
Patch

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

Nice improvement here.

&gt; Source/WebCore/platform/graphics/ImageBufferBackend.cpp:181
&gt; +    unsigned sourceBytesPerRow = 4 * sourcePixelBuffer.size().width();

auto?

&gt; Source/WebCore/platform/graphics/ImageBufferBackend.cpp:182
&gt; +    const uint8_t* sourceRows = sourcePixelBuffer.data().data() + sourceRectClipped.y() * sourceBytesPerRow + sourceRectClipped.x() * 4;

auto?

&gt; Source/WebCore/platform/graphics/ImageBufferBackend.cpp:187
&gt; +    PixelBufferFormat sourceFormat = sourcePixelBuffer.format();

auto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760325</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-14 18:00:06 -0700</bug_when>
    <thetext>Committed r277525 (237753@main): &lt;https://commits.webkit.org/237753@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428647.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760326</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-14 18:01:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/78040673&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760415</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-15 09:51:14 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 428647 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428647&amp;action=review
&gt; 
&gt; Nice improvement here.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ImageBufferBackend.cpp:181
&gt; &gt; +    unsigned sourceBytesPerRow = 4 * sourcePixelBuffer.size().width();
&gt; 
&gt; auto?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ImageBufferBackend.cpp:182
&gt; &gt; +    const uint8_t* sourceRows = sourcePixelBuffer.data().data() + sourceRectClipped.y() * sourceBytesPerRow + sourceRectClipped.x() * 4;
&gt; 
&gt; auto?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ImageBufferBackend.cpp:187
&gt; &gt; +    PixelBufferFormat sourceFormat = sourcePixelBuffer.format();
&gt; 
&gt; auto?

I didn&apos;t ignore these by the way, they are fixed in a different way in my next change (https://bugs.webkit.org/show_bug.cgi?id=225841) and since that was already building, I figured I&apos;d leave well enough alone on this one.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428639</attachid>
            <date>2021-05-14 10:42:56 -0700</date>
            <delta_ts>2021-05-14 11:38:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225813-20210514104255.patch</filename>
            <type>text/plain</type>
            <size>74526</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAyMS0wNS0xNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyRm9ybWF0
IHRvIHNwZWNpZnkgSW1hZ2VCdWZmZXI6OmdldFBpeGVsRGF0YSBkZXN0aW5hdGlvbiBmb3JtYXQg
YWxsb3dpbmcgZm9yIG1vcmUgY29udHJvbCBvdmVyIGRhdGEgY29udmVyc2lvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODEzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHJlcHJldmlvdXMgc2ln
bmF0dXJlIG9mIEltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcjoKKworICAgICAgICAgICAgSW1h
Z2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmKTsKKyAgICAgICAgCisgICAgICAgIG9ubHkgYWxsb3dlZCBzcGVjaWZ5aW5nIHRoZSB0
eXBlIG9mIGFscGhhIHByZW11bHRpcGxpY2F0aW9uIHdhbnRlZCwgYW5kIGhhcmQgY29kZWQKKyAg
ICAgICAgYSBwaXhlbCBmb3JtYXQgb2YgUkdCQTggYW5kIGNvbG9yIHNwYWNlIG9mIFNSR0IuIFRv
IHN1cHBvcnQgYWNjdXJhdGUgYW5kIGVmZmljaWVudAorICAgICAgICBhY2Nlc3MgdG8gcGl4ZWwg
YnVmZmVycyB3aXRoIGRpZmZlcmVudCBwaXhlbCBmb3JtYXRzIGFuZCBjb2xvciBzcGFjZXMgd2Ug
bmVlZCB0byBiZQorICAgICAgICBhYmxlIHRvIHRlbGwgZ2V0UGl4ZWxCdWZmZXIgd2hhdCB3ZSB3
YW50IHVwIGZyb250LCBzbyB0aGF0IGlmIHRoZSBJbWFnZUJ1ZmZlciBhbHJlYWR5CisgICAgICAg
IGhhcyBhIERpc3BsYXlQMyBidWZmZXIsIGFuZCB3ZSB3YW50IERpc3BsYXlQMyBwaXhlbHMsIHdl
IGRvbid0IGZpcnN0IGNvbnZlcnQgdG8gU1JHQgorICAgICAgICBhbmQgdGhlbiBjb252ZXJ0IGJh
Y2sgdG8gRGlzcGxheVAzICh3aGljaCB3b3VsZCBiZSBzbG93IGFuZCBsb3NlIGFueSBvdXQgb2Yg
Z2FtdXQKKyAgICAgICAgZGF0YSkuIFRoZSBuZXcgc2lnbmF0dXJlIGFsbG93cyB1cyB0byBzcGVj
aWZ5IHRoZSBlbnRpcmUgZm9ybWF0IHRyaXBsZToKKyAgICAgICAgCisgICAgICAgICAgICBJbWFn
ZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBJbWFnZUJ1ZmZlcjo6cHV0UGl4ZWxC
dWZmZXIoKSBubyBsb25nZXIgbmVlZHMgdG8gcHJvdmlkZSB0aGUgc291cmNlCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZWl0aGVyLCBhcyB0aGUgUGl4ZWxCdWZmZXIgaXRzZWxmIGFs
c28gY29udGFpbnMgdGhhdCBpbmZvcm1hdGlvbi4KKworICAgICAgICBOb3cgdGhhdCB3ZSBhcmUg
cGFzc2luZyBjb2xvciBzcGFjZSBpbmZvcm1hdGlvbiwgd2UgbmVlZCB0byBzdXBwb3J0IGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24sCisgICAgICAgIHNvIFBpeGVsQnVmZmVyQ29udmVyc2lvbiB3YXMg
dXBkYXRlZCB0byBzdXBwb3J0IGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gb24gQ0cgcGxhdGZvcm1z
CisgICAgICAgIHVzaW5nIHZJbWFnZUNvbnZlcnRfQW55VG9BbnkuIFRoaXMgaXMgbm90IGN1cnJl
bnRseSBleGNlcnNpc2VkLCBidXQgd2lsbCBiZSBpbiBhIHN1YnNlcXVlbnQKKyAgICAgICAgY2hh
bmdlIHdoZXJlIGNhbnZhcyBJbWFnZURhdGEgZ2FpbnMgYSBjb2xvciBzcGFjZSBzZXR0aW5nLCBh
dCB3aGljaCBwb2ludCBpdCBjYW4gYmUgdGVzdGVkLgorCisgICAgICAgIFdlIGFsc28gZG9uJ3Qg
Y3VycmVudGx5IHN1cHBvcnQgY29sb3Igc3BhY2UgY29udmVyc2lvbiBvbiBub24tQ0cgcGxhdGZv
cm1zLiBUaGlzIHdvbid0CisgICAgICAgIGJlIGEgcHJvYmxlbSBpbiB0aGUgc2hvcnQgdGVybSwg
YXMgb25seSBDRyBwbGF0Zm9ybXMgc3VwcG9ydCBEaXNwbGF5UDMsIHRoZSBvbmx5IG90aGVyCisg
ICAgICAgIGNvbG9yIHNwYWNlIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBjdXJyZW50bHksIGJ1dCBh
cyBjbGVhbnVwLCB3ZSBzaG91bGQgYWRkIHN1cHBvcnQgZm9yCisgICAgICAgIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24gdXNpbmcgdGhlIENvbG9yQ29udmVyc2lvbiBhbmQgQ29sb3JUcmFuc2ZlckZ1
bmN0aW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgIGZvciBvdGhlciBwb3J0cywgbW92aW5nIHRo
ZSBleGlzdGluZyBzdXBwb3J0IGZvciBTUkdCIHRvL2Zyb20gTGluZWFyU1JHQiBjb252ZXJzaW9u
cyBmcm9tCisgICAgICAgIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIGFuZCBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC4KKworICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1
ZmZlckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUNHSW1hZ2VG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpjb252ZXJ0SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQ
aXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlB1dFBpeGVsQnVmZmVyOjpzd2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBp
eGVsQnVmZmVyOjpHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6Om91dHB1dEZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmlucHV0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFw
ZSk6CisKIDIwMjEtMDUtMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXNvdXJjZSBUaW1pbmc6IHNlY3VyZUNvbm5lY3Rpb25TdGFydCA9
PSAwIHdoZW4gYSBjb25uZWN0aW9uIGlzIHJlLXVzZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
Mjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3NSw4ICsxMDc1LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAgICAgICAgIGNvbnN0
IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBh
dXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0p
OworICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAgICAgICAgIGlmICghcGl4
ZWxCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6
VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzE2Myw3ICszMTY0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgeyBJbnRQb2ludDo6emVybygp
LCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihpbWFnZURh
dGEtPnBpeGVsQnVmZmVyKCksIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAK
ICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKEltYWdlQml0bWFwQmFj
a2luZyhXVEZNb3ZlKGJ1ZmZlciksIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+Ojpmcm9t
UmF3KHNlcmlhbGl6YXRpb25TdGF0ZSkpKTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0
bWFwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCShyZXZpc2lvbiAyNzc0
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODA3LDcgKzgwNyw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2Ny
aXB0RXgKICAgICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBh
bHBoYVByZW11bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRp
cGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKICAgICBpZiAoc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUu
cmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUgJiYgb3B0aW9ucy5pbWFnZU9y
aWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5vbmUpIHsKLSAg
ICAgICAgYml0bWFwRGF0YS0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3Rhbmds
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyB9LCBhbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAg
ICAgICAgYml0bWFwRGF0YS0+cHV0UGl4ZWxCdWZmZXIoaW1hZ2VEYXRhLT5waXhlbEJ1ZmZlcigp
LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgfSwgYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbik7CiAgICAgICAgIAogICAgICAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRl
KEltYWdlQml0bWFwQmFja2luZyhXVEZNb3ZlKGJpdG1hcERhdGEpKSk7CiAgICAgICAgIC8vIFRo
ZSByZXN1bHQgaXMgaW1wbGljaXRseSBvcmlnaW4tY2xlYW4sIGFuZCBhbHBoYSBwcmVtdWx0aXBs
aWNhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCkBAIC04MjIsNyArODIyLDcgQEAgdm9p
ZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeAogICAgICAgICByZXNvbHZlV2l0
aEJsYW5rSW1hZ2VCdWZmZXIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdHJ1ZSwgV1RGTW92ZShw
cm9taXNlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGVtcEJpdG1hcERhdGEtPnB1
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VEYXRhLT5waXhlbEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwg
aW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAg
dGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVyKGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwg
SW50UmVjdCgwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCkpLCB7
IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9h
dFBvaW50KCksIG91dHB1dFNpemUpOwogICAgIGJpdG1hcERhdGEtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKnRlbXBCaXRtYXBEYXRhLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVhbGl0eShv
cHRpb25zLnJlc2l6ZVF1YWxpdHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRpb24ob3B0
aW9ucy5pbWFnZU9yaWVudGF0aW9uKSB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJ
KHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDcgKzIxOTks
OCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuCiAgICAgaWYgKCFi
dWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFnZURhdGFSZWN0
LnNpemUoKSk7CiAKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJlY3Qp
OworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IgfTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZl
cihmb3JtYXQsIGltYWdlRGF0YVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpIHsKICAgICAg
ICAgY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6OkVycm9yLAogICAgICAg
ICAgICAgbWFrZVN0cmluZygiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIiwgaW1hZ2VEYXRhUmVjdC53aWR0aCgpLCAiIHggIiwgaW1hZ2VE
YXRhUmVjdC5oZWlnaHQoKSkpOwpAQCAtMjI0Niw3ICsyMjQ3LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbQogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJl
Y3QgeyAwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkgfSk7CiAKICAgICBpZiAoIXNv
dXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YS5waXhlbEJ1ZmZlcigpLCBz
b3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAgICAgIGJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIoZGF0YS5waXhlbEJ1ZmZlcigpLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRl
c3RPZmZzZXQgfSk7CiAKICAgICBkaWREcmF3KEZsb2F0UmVjdCB7IGRlc3RSZWN0IH0sIHsgfSk7
IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzAsNyArMzcwLDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6
OgogICAgICAgICAgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwog
ICAgICAgICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzb3VyY2VTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAg
ICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJj
ZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIo
aW1hZ2VEYXRhLT5waXhlbEJ1ZmZlcigpLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3Jl
dGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIo
Y29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwpAQCAtMjM5LDExICsyMzksMTEg
QEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAg
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlk
ZQorICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAgICBmbHVzaENvbnRl
eHQoKTsKLSAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBw
aXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAgICAgICAgICAg
IGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IGRlc3RGb3JtYXQpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNiw4ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQ
aXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCkgPSAwOwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0Nv
bnN1bWluZyhHCiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkKIHsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07
CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKGZvcm1hdCwgbG9naWNhbFJl
Y3QoKSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC04OCw3
ICs4OSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEKICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKICAgICB9CiAKLSAgICBw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpw
aXhlbEJ1ZmZlciwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onplcm8oKSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgcHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2ludDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFj
a2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdApAQCAtMTEzLDEyICsxMTQsMTAgQEAg
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CRwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgdm9pZCogZGF0YSkgY29uc3QKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyRm9ybWF0JiBkZXN0aW5hdGlvbkZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgdm9pZCogZGF0YSkgY29uc3QKIHsKICAgICBhdXRvIHNvdXJjZVJlY3RTY2FsZWQgPSB0b0Jh
Y2tlbmRDb29yZGluYXRlcyhzb3VyY2VSZWN0KTsKIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGRl
c3RpbmF0aW9uRm9ybWF0IHsgZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJH
QkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKLQogICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGRlc3RpbmF0aW9uRm9ybWF0LCBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKQEAgLTE1OCwxNSArMTU3LDE1IEBAIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJ
bWFnZUJ1ZmZlckJhY2tlbmQKICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNv
dXJjZUFscGhhRm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0aW5hdGlvblBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQsIHZvaWQqIGRhdGEpCit2
b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXIm
IHNvdXJjZVBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdGluYXRpb25Qb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0aW5hdGlv
bkFscGhhRm9ybWF0LCB2b2lkKiBkYXRhKQogewogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igbm9uLVJHQkE4IHBpeGVsIGZvcm1hdHMuCi0gICAgQVNTRVJUKHBpeGVsQnVmZmVyLmZvcm1h
dCgpLnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCk7CisgICAgQVNTRVJUKHNvdXJj
ZVBpeGVsQnVmZmVyLmZvcm1hdCgpLnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCk7
CiAKICAgICBhdXRvIHNvdXJjZVJlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzb3Vy
Y2VSZWN0KTsKICAgICBhdXRvIGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29y
ZGluYXRlcyhkZXN0aW5hdGlvblBvaW50KTsKIAotICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBw
ZWQgPSBpbnRlcnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkg
fSwgc291cmNlUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGlu
dGVyc2VjdGlvbih7IEludFBvaW50Ojp6ZXJvKCksIHNvdXJjZVBpeGVsQnVmZmVyLnNpemUoKSB9
LCBzb3VyY2VSZWN0U2NhbGVkKTsKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHNvdXJj
ZVJlY3RDbGlwcGVkOwogICAgIGRlc3RpbmF0aW9uUmVjdC5tb3ZlQnkoZGVzdGluYXRpb25Qb2lu
dFNjYWxlZCk7CiAKQEAgLTE3OSwxMyArMTc4LDEzIEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpwdXRQaXhlbEJ1ZmZlcigKICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGJhY2tlbmRS
ZWN0KCkpOwogICAgIHNvdXJjZVJlY3RDbGlwcGVkLnNldFNpemUoZGVzdGluYXRpb25SZWN0LnNp
emUoKSk7CiAKLSAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZl
ci5zaXplKCkud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxC
dWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVz
UGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VC
eXRlc1BlclJvdyA9IDQgKiBzb3VyY2VQaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VSb3dzID0gc291cmNlUGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEo
KSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVj
dENsaXBwZWQueCgpICogNDsKIAogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cg
PSBieXRlc1BlclJvdygpOwogICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdGluYXRpb25SZWN0LnkoKSAqIGRlc3RpbmF0
aW9uQnl0ZXNQZXJSb3cgKyBkZXN0aW5hdGlvblJlY3QueCgpICogNDsKIAotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IHNvdXJjZUZvcm1hdCB7IHNvdXJjZUFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6
UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OworICAgIFBpeGVsQnVmZmVyRm9y
bWF0IHNvdXJjZUZvcm1hdCA9IHNvdXJjZVBpeGVsQnVmZmVyLmZvcm1hdCgpOwogICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGRlc3RpbmF0aW9uRm9ybWF0IHsgZGVzdGluYXRpb25BbHBoYUZvcm1hdCwg
cGl4ZWxGb3JtYXQoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAKICAgICBDb25z
dFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHJldmlz
aW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTIgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAi
Q29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXNHTC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXJGb3JtYXQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
aW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTEwOSw4ICsxMDgsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFs
IE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpID0gMDsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhl
bEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0wmLCBHQ0dMZW51bSwg
UGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC0xNTAsOCArMTQ5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZv
aWQqIGRhdGEpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOworICAgIFdFQkNPUkVfRVhQ
T1JUIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZl
ckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRh
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBp
eGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIAog
ICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyQ29udmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXJDb252ZXJzaW9uLmNw
cAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGl4ZWxCdWZmZXJDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjQgKzMxLDk1
IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCiAKLSNp
ZiBVU0UoQUNDRUxFUkFURSkKKyNpZiBVU0UoQUNDRUxFUkFURSkgJiYgVVNFKENHKQorI2luY2x1
ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShBQ0NFTEVSQVRFKQorI2lm
IFVTRShBQ0NFTEVSQVRFKSAmJiBVU0UoQ0cpCisKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0NHSW1h
Z2VGb3JtYXQgbWFrZVZJbWFnZUNHSW1hZ2VGb3JtYXQoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQm
IGZvcm1hdCkKK3sKKyAgICAvLyBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IDggYml0IHBpeGVs
IGZvcm1hdHMgZm9yIHRoZXNlIGNvbnZlcnNpb25zLgorCisgICAgYXV0byBiaXRzUGVyQ29tcG9u
ZW50ID0gW10gKFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0KSAtPiB1bnNpZ25lZCB7CisgICAgICAg
IHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCQTg6
CisgICAgICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OkJHUkE4OgorICAgICAgICAgICAgcmV0dXJuIDg7
CisKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCMTA6CisgICAgICAgIGNhc2UgUGl4ZWxG
b3JtYXQ6OlJHQjEwQTg6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gODsKKyAgICB9OworCisgICAg
YXV0byBiaXRzUGVyUGl4ZWwgPSBbXSAoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQpIC0+IHVuc2ln
bmVkIHsKKyAgICAgICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgeworICAgICAgICBjYXNlIFBpeGVs
Rm9ybWF0OjpSR0JBODoKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6QkdSQTg6CisgICAgICAg
ICAgICByZXR1cm4gMzI7CisKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCMTA6CisgICAg
ICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OlJHQjEwQTg6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMzI7
CisgICAgfTsKKworICAgIGF1dG8gYml0bWFwSW5mbyA9IFtdIChBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCkgLT4gQ0dCaXRtYXBJbmZv
IHsKKyAgICAgICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgeworICAgICAgICBjYXNlIFBpeGVsRm9y
bWF0OjpSR0JBODoKKyAgICAgICAgICAgIGlmIChhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQorICAgICAgICAgICAgICAgIHJldHVybiBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4ga0NHQml0bWFwQnl0ZU9yZGVyMzJC
aWcgfCBrQ0dJbWFnZUFscGhhTGFzdDsKKworICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpCR1JB
ODoKKyAgICAgICAgICAgIGlmIChhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKQorICAgICAgICAgICAgICAgIHJldHVybiBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Q7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxl
IHwga0NHSW1hZ2VBbHBoYUZpcnN0OworCisgICAgICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OlJHQjEw
OgorICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpSR0IxMEE4OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0OworICAg
IH07CisKKyAgICB2SW1hZ2VfQ0dJbWFnZUZvcm1hdCByZXN1bHQ7CisKKyAgICByZXN1bHQuYml0
c1BlckNvbXBvbmVudCA9IGJpdHNQZXJDb21wb25lbnQoZm9ybWF0LnBpeGVsRm9ybWF0KTsKKyAg
ICByZXN1bHQuYml0c1BlclBpeGVsID0gYml0c1BlclBpeGVsKGZvcm1hdC5waXhlbEZvcm1hdCk7
CisgICAgcmVzdWx0LmNvbG9yU3BhY2UgPSBjYWNoZWRDR0NvbG9yU3BhY2UoZm9ybWF0LmNvbG9y
U3BhY2UpOworICAgIHJlc3VsdC5iaXRtYXBJbmZvID0gYml0bWFwSW5mbyhmb3JtYXQuYWxwaGFG
b3JtYXQsIGZvcm1hdC5waXhlbEZvcm1hdCk7CisgICAgcmVzdWx0LnZlcnNpb24gPSAwOworICAg
IHJlc3VsdC5kZWNvZGUgPSBudWxscHRyOworICAgIHJlc3VsdC5yZW5kZXJpbmdJbnRlbnQgPSBr
Q0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVmlldz4gc3RhdGljIHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZl
cihjb25zdCBWaWV3JiB2aWV3LCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHZJbWFnZV9C
dWZmZXIgdkltYWdlQnVmZmVyOworICAgIHZJbWFnZV9CdWZmZXIgcmVzdWx0OwogCi0gICAgdklt
YWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVp
Z2h0KCkpOwotICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVs
Q291bnQ+KHNpemUud2lkdGgoKSk7Ci0gICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0gdmlldy5i
eXRlc1BlclJvdzsKLSAgICB2SW1hZ2VCdWZmZXIuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+
KHZpZXcucm93cyk7CisgICAgcmVzdWx0LmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVs
Q291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHJlc3VsdC53aWR0aCA9IHN0YXRpY19jYXN0PHZJ
bWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgcmVzdWx0LnJvd0J5dGVzID0gdmll
dy5ieXRlc1BlclJvdzsKKyAgICByZXN1bHQuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHZp
ZXcucm93cyk7CiAKLSAgICByZXR1cm4gdkltYWdlQnVmZmVyOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIHN0YXRpYyB2b2lkIGNvbnZlcnRJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKGNvbnN0IENv
bnN0UGl4ZWxCdWZmZXJDb252ZXJzaW9uVmlldyYgc291cmNlLCBjb25zdCBQaXhlbEJ1ZmZlckNv
bnZlcnNpb25WaWV3JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgZGVzdGluYXRpb25TaXpl
KQpAQCAtNTYsNiArMTI3LDIyIEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRJbWFnZVBpeGVsc0FjY2Vs
ZXJhdGUKICAgICBhdXRvIHNvdXJjZVZJbWFnZUJ1ZmZlciA9IG1ha2VWSW1hZ2VCdWZmZXIoc291
cmNlLCBkZXN0aW5hdGlvblNpemUpOwogICAgIGF1dG8gZGVzdGluYXRpb25WSW1hZ2VCdWZmZXIg
PSBtYWtlVkltYWdlQnVmZmVyKGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvblNpemUpOwogCisgICAg
aWYgKHNvdXJjZS5mb3JtYXQuY29sb3JTcGFjZSAhPSBkZXN0aW5hdGlvbi5mb3JtYXQuY29sb3JT
cGFjZSkgeworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgdkltYWdlQ29udmVydF9B
bnlUb0FueSBmb3IgYWxsIGNvbnZlcnNpb25zLCBub3QganVzdCBvbmVzIHRoYXQgbmVlZCBhIGNv
bG9yIHNwYWNlIGNvbnZlcnNpb24sCisgICAgICAgIC8vIGFmdGVyIGp1ZGljaW91c2x5IHBlcmZv
cm1hbmNlIHRlc3RpbmcgdGhlbSBhZ2FpbnN0IGVhY2ggb3RoZXIuCisKKyAgICAgICAgYXV0byBz
b3VyY2VDR0ltYWdlRm9ybWF0ID0gbWFrZVZJbWFnZUNHSW1hZ2VGb3JtYXQoc291cmNlLmZvcm1h
dCk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25DR0ltYWdlRm9ybWF0ID0gbWFrZVZJbWFnZUNH
SW1hZ2VGb3JtYXQoZGVzdGluYXRpb24uZm9ybWF0KTsKKworICAgICAgICB2SW1hZ2VfRXJyb3Ig
Y29udmVydGVyQ3JlYXRlRXJyb3IgPSBrdkltYWdlTm9FcnJvcjsKKyAgICAgICAgYXV0byBjb252
ZXJ0ZXIgPSBhZG9wdENGKHZJbWFnZUNvbnZlcnRlcl9DcmVhdGVXaXRoQ0dJbWFnZUZvcm1hdCgm
c291cmNlQ0dJbWFnZUZvcm1hdCwgJmRlc3RpbmF0aW9uQ0dJbWFnZUZvcm1hdCwgbnVsbHB0ciwg
a3ZJbWFnZU5vRmxhZ3MsICZjb252ZXJ0ZXJDcmVhdGVFcnJvcikpOworICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGNvbnZlcnRlckNyZWF0ZUVycm9yICE9IGt2SW1hZ2VOb0Vycm9yLCAidklt
YWdlQ29udmVydGVyIGNyZWF0aW9uIGZhaWxlZCB3aXRoIGVycm9yOiAlemQiLCBjb252ZXJ0ZXJD
cmVhdGVFcnJvcik7CisKKyAgICAgICAgdkltYWdlX0Vycm9yIGNvbnZlcnRlckNvbnZlcnRFcnJv
ciA9IHZJbWFnZUNvbnZlcnRfQW55VG9BbnkoY29udmVydGVyLmdldCgpLCAmc291cmNlVkltYWdl
QnVmZmVyLCAmZGVzdGluYXRpb25WSW1hZ2VCdWZmZXIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdz
KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb252ZXJ0ZXJDb252ZXJ0RXJyb3IgPT0g
a3ZJbWFnZU5vRXJyb3IsICJ2SW1hZ2VDb252ZXJ0X0FueVRvQW55IGZhaWxlZCBjb252ZXJzaW9u
IHdpdGggZXJyb3I6ICV6ZCIsIGNvbnZlcnRlckNvbnZlcnRFcnJvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBpZiAoc291cmNlLmZvcm1hdC5hbHBoYUZvcm1hdCAhPSBkZXN0aW5h
dGlvbi5mb3JtYXQuYWxwaGFGb3JtYXQpIHsKICAgICAgICAgaWYgKGRlc3RpbmF0aW9uLmZvcm1h
dC5hbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
IHsKICAgICAgICAgICAgIGlmIChzb3VyY2UuZm9ybWF0LnBpeGVsRm9ybWF0ID09IFBpeGVsRm9y
bWF0OjpSR0JBOCkKQEAgLTE4NCwxMCArMjcxLDcgQEAgdm9pZCBjb252ZXJ0SW1hZ2VQaXhlbHMo
Y29uc3QgQ29uc3RQaXhlbAogICAgIEFTU0VSVChzb3VyY2UuZm9ybWF0LnBpeGVsRm9ybWF0ID09
IFBpeGVsRm9ybWF0OjpSR0JBOCB8fCBzb3VyY2UuZm9ybWF0LnBpeGVsRm9ybWF0ID09IFBpeGVs
Rm9ybWF0OjpCR1JBOCk7CiAgICAgQVNTRVJUKGRlc3RpbmF0aW9uLmZvcm1hdC5waXhlbEZvcm1h
dCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZGVzdGluYXRpb24uZm9ybWF0LnBpeGVsRm9ybWF0
ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAKLSAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgc3Vw
cG9ydCBjb252ZXJ0aW5nIHBpeGVsIGRhdGEgYmV0d2VlbiBkaWZmZXJlbnQgY29sb3Igc3BhY2Vz
LgotICAgIEFTU0VSVChzb3VyY2UuZm9ybWF0LmNvbG9yU3BhY2UgPT0gZGVzdGluYXRpb24uZm9y
bWF0LmNvbG9yU3BhY2UpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCisjaWYgVVNFKEFDQ0VMRVJB
VEUpICYmIFVTRShDRykKICAgICBpZiAoc291cmNlLmZvcm1hdC5hbHBoYUZvcm1hdCA9PSBkZXN0
aW5hdGlvbi5mb3JtYXQuYWxwaGFGb3JtYXQgJiYgc291cmNlLmZvcm1hdC5waXhlbEZvcm1hdCA9
PSBkZXN0aW5hdGlvbi5mb3JtYXQucGl4ZWxGb3JtYXQpIHsKICAgICAgICAgLy8gRklYTUU6IENh
biB0aGVzIGJvdGgganVzdCB1c2UgcGVyLXJvdyBtZW1jcHk/CiAgICAgICAgIGlmIChzb3VyY2Uu
Zm9ybWF0LmFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpCkBAIC0xOTcsNiArMjgxLDEwIEBAIHZvaWQgY29udmVydEltYWdlUGl4ZWxzKGNvbnN0IENv
bnN0UGl4ZWwKICAgICB9IGVsc2UKICAgICAgICAgY29udmVydEltYWdlUGl4ZWxzQWNjZWxlcmF0
ZWQoc291cmNlLCBkZXN0aW5hdGlvbiwgZGVzdGluYXRpb25TaXplKTsKICNlbHNlCisgICAgLy8g
RklYTUU6IFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGNvbnZlcnRpbmcgcGl4ZWwgZGF0YSBi
ZXR3ZWVuIGRpZmZlcmVudCBjb2xvciBzcGFjZXMgaW4gdGhlIG5vbi1hY2NlbGVyYXRlZCBwYXRo
LgorICAgIC8vIFRoaXMgY291bGQgYmUgYWRkZWQgdXNpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMg
ZnJvbSBDb2xvckNvbnZlcnNpb24uaC4KKyAgICBBU1NFUlQoc291cmNlLmZvcm1hdC5jb2xvclNw
YWNlID09IGRlc3RpbmF0aW9uLmZvcm1hdC5jb2xvclNwYWNlKTsKKwogICAgIGlmIChzb3VyY2Uu
Zm9ybWF0LmFscGhhRm9ybWF0ID09IGRlc3RpbmF0aW9uLmZvcm1hdC5hbHBoYUZvcm1hdCkgewog
ICAgICAgICBpZiAoc291cmNlLmZvcm1hdC5waXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvbi5mb3Jt
YXQucGl4ZWxGb3JtYXQpIHsKICAgICAgICAgICAgIGlmIChzb3VyY2UuZm9ybWF0LmFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkocmV2aXNp
b24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMywxMyArOTAzLDE0IEBAIHZvaWQgU2hhZG93Qmx1
cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFnZUIKICAgICBpZiAobV90eXBlICE9IEJsdXJTaGFkb3cp
CiAgICAgICAgIHJldHVybjsKIAorICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBv
aW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1
clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRQaXhlbEJ1ZmZlcihm
b3JtYXQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCkuZGF0YSgpLCBibHVyUmVjdC5z
aXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwg
Ymx1clJlY3QpOworICAgIGxheWVySW1hZ2UucHV0UGl4ZWxCdWZmZXIoKmxheWVyRGF0YSwgYmx1
clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJ
bWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZp
c2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAs
MTQgKzEyMCwxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCCiAg
ICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAotT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRQaXhlbEJ1
ZmZlcihQaXhlbEJ1ZmZlckZvcm1hdCBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZm
ZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1f
c3VyZmFjZS5nZXQoKSkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
Cit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29u
c3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
CiB7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwg
cGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RG
b3JtYXQsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiAK
ICAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0
KTsKICAgICBJbnRQb2ludCBkZXN0UG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhk
ZXN0UG9pbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw4ICs0NSw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZl
ciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyRm9ybWF0IG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNv
bnN0IFBhcmFtZXRlcnMmLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgzLDcgKzE4Myw4IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dC
YWNrZW4KIAogICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewogICAgICAg
ICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFu
dWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IGxvZ2ljYWxSZWN0KCkpOworICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OworICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0g
Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBsb2dpY2FsUmVjdCgpKTsKICAgICAgICAgaWYgKCFwaXhl
bEJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1OSwxNCArMTU5LDE0IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2UKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JH
UkFEYXRhKG1fZGF0YSk7CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBp
eGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9y
bWF0KQogewotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3Jt
YXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7
CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc3Jj
UmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2RhdGEpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgJKHJldmlzaW9u
IDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDggQEAgcHVi
bGljOgogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhl
bEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNPcmlnaW5BdFVwcGVyTGVmdENvcm5lciA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDE2ICsxODMsMTYgQEAgVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFjawogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRv
QkdSQURhdGEobG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CiB9CiAKLU9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBj
b25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2Nr
KCptX3N1cmZhY2UpOwogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVm
ZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CiB9
CiAKLXZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZm
ZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsKICAgICBJT1N1cmZhY2U6OkxvY2tl
ciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3Jp
dGUpOwotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQs
IHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFj
ZUJhc2VBZGRyZXNzKCkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIo
cGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbG9jay5zdXJmYWNl
QmFzZUFkZHJlc3MoKSk7CiAgICAgbV9yZXF1aXJlc0RyYXdBZnRlclB1dFBpeGVsQnVmZmVyID0g
dHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHJldmlz
aW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw4IEBA
IHB1YmxpYzoKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3Jt
YXQpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihj
b25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGlzSW5V
c2UoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHJlbGVhc2VHcmFwaGljc0NvbnRleHQoKSBv
dmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJKHJldmlz
aW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzc1LDIwICs3NzUs
MTggQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgIHJldHVy
biB0czsKIH0KIAotUHV0UGl4ZWxCdWZmZXI6OlB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQorUHV0UGl4ZWxCdWZmZXI6OlB1dFBpeGVsQnVmZmVy
KGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9y
bWF0KQogICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9p
bnQpCiAgICAgLCBtX3BpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmRlZXBDbG9uZSgpKSAvLyBUaGlz
IGNvcHkgaXMgYWN0dWFsbHkgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBw
dXRQaXhlbEJ1ZmZlcigpLgotICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKICAgICAs
IG1fZGVzdEZvcm1hdChkZXN0Rm9ybWF0KQogewogfQogCi1QdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXIm
JiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQorUHV0UGl4ZWxCdWZm
ZXI6OlB1dFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkKICAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0
UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9waXhlbEJ1ZmZlcihXVEZNb3ZlKHBpeGVsQnVmZmVy
KSkKLSAgICAsIG1faW5wdXRGb3JtYXQoaW5wdXRGb3JtYXQpCiAgICAgLCBtX2Rlc3RGb3JtYXQo
ZGVzdEZvcm1hdCkKIHsKIH0KQEAgLTc5Nyw3ICs3OTUsNiBAQCBQdXRQaXhlbEJ1ZmZlcjo6UHV0
UGl4ZWxCdWZmZXIoY29uc3QgUHV0CiAgICAgOiBtX3NyY1JlY3Qob3RoZXIubV9zcmNSZWN0KQog
ICAgICwgbV9kZXN0UG9pbnQob3RoZXIubV9kZXN0UG9pbnQpCiAgICAgLCBtX3BpeGVsQnVmZmVy
KG90aGVyLm1fcGl4ZWxCdWZmZXIuZGVlcENsb25lKCkpCi0gICAgLCBtX2lucHV0Rm9ybWF0KG90
aGVyLm1faW5wdXRGb3JtYXQpCiAgICAgLCBtX2Rlc3RGb3JtYXQob3RoZXIubV9kZXN0Rm9ybWF0
KQogewogfQpAQCAtODE0LDEzICs4MTEsMTEgQEAgdm9pZCBQdXRQaXhlbEJ1ZmZlcjo6c3dhcChQ
dXRQaXhlbEJ1ZmZlcgogICAgIHN0ZDo6c3dhcChtX3NyY1JlY3QsIG90aGVyLm1fc3JjUmVjdCk7
CiAgICAgc3RkOjpzd2FwKG1fZGVzdFBvaW50LCBvdGhlci5tX2Rlc3RQb2ludCk7CiAgICAgc3Rk
Ojpzd2FwKG1fcGl4ZWxCdWZmZXIsIG90aGVyLm1fcGl4ZWxCdWZmZXIpOwotICAgIHN0ZDo6c3dh
cChtX2lucHV0Rm9ybWF0LCBvdGhlci5tX2lucHV0Rm9ybWF0KTsKICAgICBzdGQ6OnN3YXAobV9k
ZXN0Rm9ybWF0LCBvdGhlci5tX2Rlc3RGb3JtYXQpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0UGl4ZWxCdWZmZXImIGl0ZW0pCiB7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbnB1dEZvcm1hdCIsIGl0ZW0uaW5wdXRGb3JtYXQoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwaXhlbEJ1ZmZlclNpemUiLCBpdGVtLnBpeGVsQnVmZmVy
KCkuc2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3QiLCBpdGVtLnNyY1JlY3Qo
KSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0UG9pbnQiLCBpdGVtLmRlc3RQb2ludCgpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAkocmV2aXNpb24gMjc3NDUxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwNSwxOCArMTkwNSwxOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIEdldFBpeGVs
QnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KQorICAgIEdldFBpeGVsQnVmZmVyKFdlYkNvcmU6
OlBpeGVsQnVmZmVyRm9ybWF0IG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
c3JjUmVjdCkKICAgICAgICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAgICAgLCBtX291dHB1
dEZvcm1hdChvdXRwdXRGb3JtYXQpCiAgICAgewogICAgIH0KIAotICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9vdXRwdXRGb3JtYXQ7IH0K
KyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBvdXRwdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX291
dHB1dEZvcm1hdDsgfQogICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Jj
UmVjdDsgfQogCiBwcml2YXRlOgogICAgIEludFJlY3QgbV9zcmNSZWN0OwotICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gbV9vdXRwdXRGb3JtYXQ7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgbV9v
dXRwdXRGb3JtYXQ7CiB9OwogCiBjbGFzcyBQdXRQaXhlbEJ1ZmZlciB7CkBAIC0xOTI1LDggKzE5
MjUsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIFB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBQaXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBQdXRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3Jt
YXQpOwogCiAgICAgUHV0UGl4ZWxCdWZmZXIoY29uc3QgUHV0UGl4ZWxCdWZmZXImKTsKICAgICBQ
dXRQaXhlbEJ1ZmZlcihQdXRQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CkBAIC0xOTM1LDcgKzE5
MzUsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN3YXAoUHV0UGl4ZWxCdWZmZXImKTsKIAotICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2lu
cHV0Rm9ybWF0OyB9CiAgICAgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9waXhlbEJ1ZmZlcjsgfQogICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3JjUmVjdDsgfQogICAgIEludFBvaW50IGRlc3RQb2ludCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzdFBvaW50OyB9CkBAIC0xOTUxLDE0ICsxOTUwLDEyIEBAIHByaXZhdGU6CiAgICAg
SW50UmVjdCBtX3NyY1JlY3Q7CiAgICAgSW50UG9pbnQgbV9kZXN0UG9pbnQ7CiAgICAgUGl4ZWxC
dWZmZXIgbV9waXhlbEJ1ZmZlcjsKLSAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1faW5wdXRG
b3JtYXQ7CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2Rlc3RGb3JtYXQ7CiB9OwogCiB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdXRQaXhlbEJ1ZmZlcjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0OwogICAg
IGVuY29kZXIgPDwgbV9waXhlbEJ1ZmZlcjsKICAgICBlbmNvZGVyIDw8IG1fc3JjUmVjdDsKICAg
ICBlbmNvZGVyIDw8IG1fZGVzdFBvaW50OwpAQCAtMTk2OCwxNiArMTk2NSwxMSBAQCB2b2lkIFB1
dFBpeGVsQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgogT3B0aW9uYWw8UHV0UGl4ZWxCdWZmZXI+IFB1dFBpeGVsQnVmZmVyOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKLSAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxpY2F0aW9uPiBpbnB1
dEZvcm1hdDsKICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcGl4ZWxCdWZmZXI7CiAgICAgT3B0
aW9uYWw8SW50UmVjdD4gc3JjUmVjdDsKICAgICBPcHRpb25hbDxJbnRQb2ludD4gZGVzdFBvaW50
OwogICAgIE9wdGlvbmFsPEFscGhhUHJlbXVsdGlwbGljYXRpb24+IGRlc3RGb3JtYXQ7CiAKLSAg
ICBkZWNvZGVyID4+IGlucHV0Rm9ybWF0OwotICAgIGlmICghaW5wdXRGb3JtYXQpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KICAgICBkZWNvZGVyID4+IHBpeGVsQnVmZmVyOwogICAg
IGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xOTk0
LDcgKzE5ODYsNyBAQCBPcHRpb25hbDxQdXRQaXhlbEJ1ZmZlcj4gUHV0UGl4ZWxCdWZmZXI6CiAg
ICAgaWYgKCFkZXN0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
cmV0dXJuIHt7ICppbnB1dEZvcm1hdCwgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCAqc3JjUmVjdCwg
KmRlc3RQb2ludCwgKmRlc3RGb3JtYXQgfX07CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBpeGVs
QnVmZmVyKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0IH19OwogfQogCiAjaWYg
RU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxNCArNTUsMTQgQEAgUmVjb3JkZXI6On5SZWNvcmRlcigpCiAgICAgTE9HKERpc3BsYXlM
aXN0cywgIlJlY29yZGVkIGRpc3BsYXkgbGlzdDpcbiVzIiwgbV9kaXNwbGF5TGlzdC5kZXNjcmlw
dGlvbigpLmRhdGEoKSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
KQordm9pZCBSZWNvcmRlcjo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQm
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKIHsKICAgICBhcHBlbmQ8
R2V0UGl4ZWxCdWZmZXI+KG91dHB1dEZvcm1hdCwgc291cmNlUmVjdCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OnB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQ
b2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBS
ZWNvcmRlcjo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVs
QnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpCiB7Ci0gICAgYXBwZW5kPFB1dFBpeGVsQnVmZmVyPihpbnB1dEZvcm1hdCwgcGl4ZWxC
dWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CisgICAgYXBwZW5kPFB1dFBp
eGVsQnVmZmVyPihwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsK
IH0KIAogc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVj
b3JkZXIoR3JhcGhpY3NDb250ZXh0JiwgRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBo
c0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1
Y3Rpb246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRl
cigpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQ
aXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVm
ZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAogICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjg1LDggKzI4NSw5IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXIK
ICAgICBpZiAoaW5CdWZmZXIpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwogCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OwogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVy
ID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTMxMyw3ICszMTQsNyBAQCB2b2lkIEZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsICpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXN1bHRJbWFn
ZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhU
eXBlJiB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OSwxNSArOTksMTYgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZQogCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJS
YWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CiAKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBm
b3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OwogICAgIEludFJlY3Qgc2hh
ZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0
byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhKTsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7CiAg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgc291cmNl
UGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgY29udGV4dFNoYWRvdy5ibHVy
TGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwg
NCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CiAgICAgCi0gICAgcmVzdWx0SW1hZ2Ut
PnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpw
aXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlz
aW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdl
QnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmUKIAogICAgIEludFJlY3QgZGVzdGlu
YXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBp
ZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1
bHQtPnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
ICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKKyAg
ICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJS
ZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQzOSw3ICs0MzksNyBAQCBzdGF0aWMgdm9pZCBjb3B5VW5w
cmVtdWx0aXBseWluZ0FscGhhKGNvCiAjZW5kaWYKIH0KIAotT3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCiB7
CiAgICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBkbyBpdCBkaXJlY3RseS4K
IApAQCAtNDUwLDIwICs0NTAsMjYgQEAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVj
dDo6Y29udgogICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVy
YXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZl
cihvdXRwdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVy
biBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZl
ciwgZGVzdGluYXRpb25SZWN0LCBvdXRwdXRGb3JtYXQpOworICAgIGJ1ZmZlci0+cHV0UGl4ZWxC
dWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgcmV0dXJuIGNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5h
dGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgpLmFscGhhRm9ybWF0KTsKIH0KIAotT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYg
aW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0KQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQpCiB7CisgICAgLy8gRklYTUU6
IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNp
b24uCisKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUocmVjdC5zaXplKCkpOworCiAgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhl
IGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24KICAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAo
IWNvbnZlcnRlZEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwogICAgIC8v
IENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBm
cm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgogICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgcmV0dXJuIGNv
bnZlcnRlZEJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCByZWN0KTsKKyAgICAK
KyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBoYUZvcm1hdCwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKKyAgICByZXR1cm4g
Y29udmVydGVkQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOwogfQogCiB2b2lk
IEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCkBAIC00NzUsMTEgKzQ4MSwxMSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUNv
bnZlcnRlZEltYWdlQnVmCiAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXIt
PmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBp
eGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogewogICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0
b3JlZCBpbiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LAogICAgIC8vIHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlv
bgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0UGl4ZWxCdWZmZXJUb0Nv
bG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4ZWxCdWZmZXIsIG91dHB1dEZvcm1hdCk7CisgICAgYXV0
byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShj
b2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7CiAgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVy
LT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CkBAIC00OTgsNyArNTA0LDggQEAgdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bAogICAgICAgICAgICAgICAgIGNv
cHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CisgICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1h
dCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVs
Rm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CisgICAgICAgICAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4
ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
IH0pOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTUxMyw3ICs1MjAsNyBAQCB2
b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsCiAgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNw
YWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7CisgICAgICAgIGNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgcmVjdCk7CkBAIC01MzIsNyArNTM5LDggQEAgdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdQogICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJ
bWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkgfSk7CisgICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAg
ICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTU0OCw3ICs1NTYsNyBAQCB2b2lkIEZpbHRlckVmZmVj
dDo6Y29weVByZW11bHRpcGxpZWRSZXN1CiAgICAgfQogCiAgICAgaWYgKHJlcXVpcmVzUGl4ZWxC
dWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29u
dmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCByZWN0KTsKKyAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0
aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JT
cGFjZSwgcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29weUltYWdlQnl0ZXMo
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDQsMTAgKzIwNCwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFn
ZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lk
IGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkm
LCBQaXhlbEJ1ZmZlciYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVy
VG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIFBpeGVsQnVmZmVyJiwgRGVzdGluYXRp
b25Db2xvclNwYWNlLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7
Ci0gICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbik7CiAgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVj
dCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBj
b252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlLCBQaXhl
bEJ1ZmZlciYpOwogICAgIAogCiAgICAgRmlsdGVyJiBtX2ZpbHRlcjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDE2ICszMTIsMTYgQEAgVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZQogICAgIHJldHVybiB7IH07CiB9CiAKLU9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OmdldFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyRm9ybWF0IG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3Jj
UmVjdCwgbnVsbHB0cik7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9p
ZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxC
dWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0
LCBudWxscHRyKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKHBpeGVs
QnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG51bGxwdHIpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDggKzUzLDggQEAgcHVibGljOgogICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsK
ICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyRm9ybWF0
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsNyArMTk3LDggQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRl
UmFzdAogICAgIGlmIChpbWFnZSkKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgq
aW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgYXV0
byBwaXhlbEJ1ZmZlciA9IGltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUo
KSB9KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCIH07CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGltYWdlQnVmZmVyLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSB9KTsKICAg
ICAKICAgICAvLyBXZSBjb3VsZCBnZXQgdG8gYSB2YWx1ZSB3aGVyZSBQaXhlbEJ1ZmZlciBjb3Vs
ZCBiZSBudWxsb3B0LiBBIGNhc2Ugd2hlcmUgSW1hZ2VSZWN0LnNpemUoKSBpcyBodWdlLCBQaXhl
bEJ1ZmZlcjo6dHJ5Q3JlYXRlCiAgICAgLy8gY2FuIHJldHVybiBhIG51bGxvcHQgYmVjYXVzZSBk
YXRhIHNpemUgaGFzIG92ZXJmbG93ZWQuIFJlZmVyIHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3NDk3KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAyMS0wNS0xNCAgU2FtIFdlaW5pZyAg
PHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyRm9ybWF0IHRvIHNw
ZWNpZnkgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyIGRlc3RpbmF0aW9uIGZvcm1hdCBhbGxv
d2luZyBmb3IgbW9yZSBjb250cm9sIG92ZXIgZGF0YSBjb252ZXJzaW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4MTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMvaW1wbGVtZW50
YXRpb25zIG9mIGdldFBpeGVsQnVmZmVyL3B1dFBpeGVsQnVmZmVyIHRvIGFkanVzdAorICAgICAg
ICB0byBuZXcgc2lnbmF0dXJlLiAKKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpDR0Rpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KToKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRQaXhlbEJ1
ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5OjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpnZXRQ
aXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5o
OgorCiAyMDIxLTA1LTE0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmVzb3VyY2UgVGltaW5nOiBzZWN1cmVDb25uZWN0aW9uU3RhcnQgPT0g
MCB3aGVuIGEgY29ubmVjdGlvbiBpcyByZS11c2VkCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24g
Mjc3NDUxKQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKIAogICAg
ICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI+KCkp
IHsKICAgICAgICAgICAgIGF1dG8mIHB1dFBpeGVsQnVmZmVySXRlbSA9IGl0ZW0uZ2V0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcj4oKTsKLSAgICAgICAgICAgIHB1dFBpeGVs
QnVmZmVyKHB1dFBpeGVsQnVmZmVySXRlbS5pbnB1dEZvcm1hdCgpLCBwdXRQaXhlbEJ1ZmZlckl0
ZW0ucGl4ZWxCdWZmZXIoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnNyY1JlY3QoKSwgcHV0UGl4ZWxC
dWZmZXJJdGVtLmRlc3RQb2ludCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVzdEZvcm1hdCgpKTsK
KyAgICAgICAgICAgIHB1dFBpeGVsQnVmZmVyKHB1dFBpeGVsQnVmZmVySXRlbS5waXhlbEJ1ZmZl
cigpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uc3JjUmVjdCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVz
dFBvaW50KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0Rm9ybWF0KCkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVt
b3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTMgKzEwNSwxMyBAQCBWZWN0b3I8dWludDhfdD4g
Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotT3B0aW9uYWw8
V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBjb25zdAorT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IENHRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OlBpeGVsQnVmZmVyRm9ybWF0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBDR0Rp
c3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24pCit2b2lkIENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5
ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNpb24gMjc3NDUx
KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBwdWJs
aWM6CiAgICAgLy8gTk9URTogVGhlc2UgYWxsIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIFJl
ZlB0cjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tp
bmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsK
ICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9w
dGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXIm
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1
ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNPcmlnaW5BdFVwcGVyTGVmdENvcm5lciA9IHRydWU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAJKHJl
dmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYzLDE0ICsxNjMsMTQgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bQogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobV9iaXRtYXAtPmRh
dGEoKSk7CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29u
c3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCkgY29uc3QKIHsKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZl
cihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fYml0bWFwLT5kYXRhKCkpOwogfQogCi12b2lkIElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXIm
IHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0g
ICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxC
dWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9iaXRtYXAtPmRhdGEoKSk7
CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc3Jj
UmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2JpdG1hcC0+ZGF0YSgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZT4gY29weUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3Jl
OjpDb3B5QmFja2luZ1N0b3JlLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gPSBXZWJDb3Jl
OjpQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8V2ViQ29y
ZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQs
IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBi
eXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQs
MTIgKzE5NCwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBiaXRtYXAtPmNyZWF0ZUlt
YWdlKCk7CiAgICAgfQogCi0gICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBp
eGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQorICAgIE9wdGlv
bmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQ
aXhlbEJ1ZmZlckZvcm1hdCYgZGVzdGluYXRpb25Gb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFko
IW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQgZGVzdGluYXRp
b25Gb3JtYXQgeyBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OlBpeGVsRm9ybWF0OjpSR0JBOCwgV2Vi
Q29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAgICAgICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSBXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGRlc3RpbmF0aW9uRm9ybWF0
LCBzcmNSZWN0LnNpemUoKSk7CiAgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMjExLDcgKzIxMCw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgYXV0byYgbXV0YWJsZVRo
aXMgPSBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkmPigqdGhpcyk7Ci0gICAgICAg
IG11dGFibGVUaGlzLm1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRQaXhlbEJ1ZmZlcihv
dXRwdXRGb3JtYXQsIHNyY1JlY3QpOworICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250
ZXh0LnJlY29yZGVyKCkuZ2V0UGl4ZWxCdWZmZXIoZGVzdGluYXRpb25Gb3JtYXQsIHNyY1JlY3Qp
OwogICAgICAgICBtdXRhYmxlVGhpcy5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKIAogICAg
ICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPndhaXRGb3JHZXRQaXhlbEJ1
ZmZlclRvQ29tcGxldGUodGltZW91dCkpCkBAIC0yMjEsMTIgKzIyMCwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKICAgICB9CiAKLSAgICB2b2lkIHB1dFBpeGVs
QnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKKyAgICB2b2lkIHB1dFBp
eGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0g
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUK
ICAgICB7CiAgICAgICAgIC8vIFRoZSBtYXRoIGluc2lkZSBQaXhlbEJ1ZmZlcjo6Y3JlYXRlKCkg
ZG9lc24ndCBhZ3JlZSB3aXRoIHRoZSBtYXRoIGluc2lkZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1
dFBpeGVsQnVmZmVyKCkgYWJvdXQgaG93IG1fcmVzb2x1dGlvblNjYWxlIGludGVyYWN0cyB3aXRo
IHRoZSBkYXRhIGluIHRoZSBJbWFnZUJ1ZmZlci4KICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0
IHB1dFBpeGVsQnVmZmVyKCkgaXMgb25seSBjYWxsZWQgd2hlbiByZXNvbHV0aW9uU2NhbGUoKSA9
PSAxLgogICAgICAgICBBU1NFUlQocmVzb2x1dGlvblNjYWxlKCkgPT0gMSk7Ci0gICAgICAgIG1f
ZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5wdXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwgcGl4
ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CisgICAgICAgIG1fZHJh
d2luZ0NvbnRleHQucmVjb3JkZXIoKS5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc3JjUmVj
dCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICB9CiAKICAgICBib29sIHByZWZlcnNQcmVw
YXJhdGlvbkZvckRpc3BsYXkoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMyArMTIwLDEzIEBAIFZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3UKICAgICByZXR1cm4geyB9OwogfQogCi1PcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpnZXRQaXhl
bEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3QKK09w
dGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6
OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiwgY29uc3QgSW50UmVjdCYp
IGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6cHV0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgUGl4ZWxCdWZmZXImLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKQor
dm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9J
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsK
ICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhl
bEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6
UGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6
UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3Jp
Z2luQXRVcHBlckxlZnRDb3JuZXIgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBj
YW5NYXBCYWNraW5nU3RvcmUgPSBmYWxzZTsK
</data>
<flag name="commit-queue"
          id="449613"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428642</attachid>
            <date>2021-05-14 11:28:25 -0700</date>
            <delta_ts>2021-05-14 12:19:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225813-20210514112825.patch</filename>
            <type>text/plain</type>
            <size>74540</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAyMS0wNS0xNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyRm9ybWF0
IHRvIHNwZWNpZnkgSW1hZ2VCdWZmZXI6OmdldFBpeGVsRGF0YSBkZXN0aW5hdGlvbiBmb3JtYXQg
YWxsb3dpbmcgZm9yIG1vcmUgY29udHJvbCBvdmVyIGRhdGEgY29udmVyc2lvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODEzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHJlcHJldmlvdXMgc2ln
bmF0dXJlIG9mIEltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcjoKKworICAgICAgICAgICAgSW1h
Z2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmKTsKKyAgICAgICAgCisgICAgICAgIG9ubHkgYWxsb3dlZCBzcGVjaWZ5aW5nIHRoZSB0
eXBlIG9mIGFscGhhIHByZW11bHRpcGxpY2F0aW9uIHdhbnRlZCwgYW5kIGhhcmQgY29kZWQKKyAg
ICAgICAgYSBwaXhlbCBmb3JtYXQgb2YgUkdCQTggYW5kIGNvbG9yIHNwYWNlIG9mIFNSR0IuIFRv
IHN1cHBvcnQgYWNjdXJhdGUgYW5kIGVmZmljaWVudAorICAgICAgICBhY2Nlc3MgdG8gcGl4ZWwg
YnVmZmVycyB3aXRoIGRpZmZlcmVudCBwaXhlbCBmb3JtYXRzIGFuZCBjb2xvciBzcGFjZXMgd2Ug
bmVlZCB0byBiZQorICAgICAgICBhYmxlIHRvIHRlbGwgZ2V0UGl4ZWxCdWZmZXIgd2hhdCB3ZSB3
YW50IHVwIGZyb250LCBzbyB0aGF0IGlmIHRoZSBJbWFnZUJ1ZmZlciBhbHJlYWR5CisgICAgICAg
IGhhcyBhIERpc3BsYXlQMyBidWZmZXIsIGFuZCB3ZSB3YW50IERpc3BsYXlQMyBwaXhlbHMsIHdl
IGRvbid0IGZpcnN0IGNvbnZlcnQgdG8gU1JHQgorICAgICAgICBhbmQgdGhlbiBjb252ZXJ0IGJh
Y2sgdG8gRGlzcGxheVAzICh3aGljaCB3b3VsZCBiZSBzbG93IGFuZCBsb3NlIGFueSBvdXQgb2Yg
Z2FtdXQKKyAgICAgICAgZGF0YSkuIFRoZSBuZXcgc2lnbmF0dXJlIGFsbG93cyB1cyB0byBzcGVj
aWZ5IHRoZSBlbnRpcmUgZm9ybWF0IHRyaXBsZToKKyAgICAgICAgCisgICAgICAgICAgICBJbWFn
ZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBJbWFnZUJ1ZmZlcjo6cHV0UGl4ZWxC
dWZmZXIoKSBubyBsb25nZXIgbmVlZHMgdG8gcHJvdmlkZSB0aGUgc291cmNlCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZWl0aGVyLCBhcyB0aGUgUGl4ZWxCdWZmZXIgaXRzZWxmIGFs
c28gY29udGFpbnMgdGhhdCBpbmZvcm1hdGlvbi4KKworICAgICAgICBOb3cgdGhhdCB3ZSBhcmUg
cGFzc2luZyBjb2xvciBzcGFjZSBpbmZvcm1hdGlvbiwgd2UgbmVlZCB0byBzdXBwb3J0IGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24sCisgICAgICAgIHNvIFBpeGVsQnVmZmVyQ29udmVyc2lvbiB3YXMg
dXBkYXRlZCB0byBzdXBwb3J0IGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gb24gQ0cgcGxhdGZvcm1z
CisgICAgICAgIHVzaW5nIHZJbWFnZUNvbnZlcnRfQW55VG9BbnkuIFRoaXMgaXMgbm90IGN1cnJl
bnRseSBleGNlcnNpc2VkLCBidXQgd2lsbCBiZSBpbiBhIHN1YnNlcXVlbnQKKyAgICAgICAgY2hh
bmdlIHdoZXJlIGNhbnZhcyBJbWFnZURhdGEgZ2FpbnMgYSBjb2xvciBzcGFjZSBzZXR0aW5nLCBh
dCB3aGljaCBwb2ludCBpdCBjYW4gYmUgdGVzdGVkLgorCisgICAgICAgIFdlIGFsc28gZG9uJ3Qg
Y3VycmVudGx5IHN1cHBvcnQgY29sb3Igc3BhY2UgY29udmVyc2lvbiBvbiBub24tQ0cgcGxhdGZv
cm1zLiBUaGlzIHdvbid0CisgICAgICAgIGJlIGEgcHJvYmxlbSBpbiB0aGUgc2hvcnQgdGVybSwg
YXMgb25seSBDRyBwbGF0Zm9ybXMgc3VwcG9ydCBEaXNwbGF5UDMsIHRoZSBvbmx5IG90aGVyCisg
ICAgICAgIGNvbG9yIHNwYWNlIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBjdXJyZW50bHksIGJ1dCBh
cyBjbGVhbnVwLCB3ZSBzaG91bGQgYWRkIHN1cHBvcnQgZm9yCisgICAgICAgIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24gdXNpbmcgdGhlIENvbG9yQ29udmVyc2lvbiBhbmQgQ29sb3JUcmFuc2ZlckZ1
bmN0aW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgIGZvciBvdGhlciBwb3J0cywgbW92aW5nIHRo
ZSBleGlzdGluZyBzdXBwb3J0IGZvciBTUkdCIHRvL2Zyb20gTGluZWFyU1JHQiBjb252ZXJzaW9u
cyBmcm9tCisgICAgICAgIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIGFuZCBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC4KKworICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1
ZmZlckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUNHSW1hZ2VG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpjb252ZXJ0SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQ
aXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlB1dFBpeGVsQnVmZmVyOjpzd2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBp
eGVsQnVmZmVyOjpHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6Om91dHB1dEZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmlucHV0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFw
ZSk6CisKIDIwMjEtMDUtMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXNvdXJjZSBUaW1pbmc6IHNlY3VyZUNvbm5lY3Rpb25TdGFydCA9
PSAwIHdoZW4gYSBjb25uZWN0aW9uIGlzIHJlLXVzZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
Mjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3NSw4ICsxMDc1LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAgICAgICAgIGNvbnN0
IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBh
dXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0p
OworICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAgICAgICAgIGlmICghcGl4
ZWxCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6
VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzE2Myw3ICszMTY0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgeyBJbnRQb2ludDo6emVybygp
LCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihpbWFnZURh
dGEtPnBpeGVsQnVmZmVyKCksIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAK
ICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKEltYWdlQml0bWFwQmFj
a2luZyhXVEZNb3ZlKGJ1ZmZlciksIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+Ojpmcm9t
UmF3KHNlcmlhbGl6YXRpb25TdGF0ZSkpKTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0
bWFwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCShyZXZpc2lvbiAyNzc0
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODA3LDcgKzgwNyw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2Ny
aXB0RXgKICAgICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBh
bHBoYVByZW11bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRp
cGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKICAgICBpZiAoc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUu
cmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUgJiYgb3B0aW9ucy5pbWFnZU9y
aWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5vbmUpIHsKLSAg
ICAgICAgYml0bWFwRGF0YS0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3Rhbmds
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyB9LCBhbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAg
ICAgICAgYml0bWFwRGF0YS0+cHV0UGl4ZWxCdWZmZXIoaW1hZ2VEYXRhLT5waXhlbEJ1ZmZlcigp
LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgfSwgYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbik7CiAgICAgICAgIAogICAgICAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRl
KEltYWdlQml0bWFwQmFja2luZyhXVEZNb3ZlKGJpdG1hcERhdGEpKSk7CiAgICAgICAgIC8vIFRo
ZSByZXN1bHQgaXMgaW1wbGljaXRseSBvcmlnaW4tY2xlYW4sIGFuZCBhbHBoYSBwcmVtdWx0aXBs
aWNhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCkBAIC04MjIsNyArODIyLDcgQEAgdm9p
ZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeAogICAgICAgICByZXNvbHZlV2l0
aEJsYW5rSW1hZ2VCdWZmZXIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdHJ1ZSwgV1RGTW92ZShw
cm9taXNlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGVtcEJpdG1hcERhdGEtPnB1
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VEYXRhLT5waXhlbEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwg
aW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAg
dGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVyKGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwg
SW50UmVjdCgwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCkpLCB7
IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9h
dFBvaW50KCksIG91dHB1dFNpemUpOwogICAgIGJpdG1hcERhdGEtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKnRlbXBCaXRtYXBEYXRhLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVhbGl0eShv
cHRpb25zLnJlc2l6ZVF1YWxpdHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRpb24ob3B0
aW9ucy5pbWFnZU9yaWVudGF0aW9uKSB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJ
KHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDcgKzIxOTks
OCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuCiAgICAgaWYgKCFi
dWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFnZURhdGFSZWN0
LnNpemUoKSk7CiAKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJlY3Qp
OworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IgfTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZl
cihmb3JtYXQsIGltYWdlRGF0YVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpIHsKICAgICAg
ICAgY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6OkVycm9yLAogICAgICAg
ICAgICAgbWFrZVN0cmluZygiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIiwgaW1hZ2VEYXRhUmVjdC53aWR0aCgpLCAiIHggIiwgaW1hZ2VE
YXRhUmVjdC5oZWlnaHQoKSkpOwpAQCAtMjI0Niw3ICsyMjQ3LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbQogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJl
Y3QgeyAwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkgfSk7CiAKICAgICBpZiAoIXNv
dXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YS5waXhlbEJ1ZmZlcigpLCBz
b3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAgICAgIGJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIoZGF0YS5waXhlbEJ1ZmZlcigpLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRl
c3RPZmZzZXQgfSk7CiAKICAgICBkaWREcmF3KEZsb2F0UmVjdCB7IGRlc3RSZWN0IH0sIHsgfSk7
IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzAsNyArMzcwLDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6
OgogICAgICAgICAgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwog
ICAgICAgICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzb3VyY2VTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAg
ICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJj
ZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIo
aW1hZ2VEYXRhLT5waXhlbEJ1ZmZlcigpLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3Jl
dGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIo
Y29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwpAQCAtMjM5LDExICsyMzksMTEg
QEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAg
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlk
ZQorICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAgICBmbHVzaENvbnRl
eHQoKTsKLSAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBw
aXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAgICAgICAgICAg
IGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IGRlc3RGb3JtYXQpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNiw4ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQ
aXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCkgPSAwOwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0Nv
bnN1bWluZyhHCiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkKIHsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07
CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKGZvcm1hdCwgbG9naWNhbFJl
Y3QoKSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC04OCw3
ICs4OSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEKICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKICAgICB9CiAKLSAgICBw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpw
aXhlbEJ1ZmZlciwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onplcm8oKSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgcHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2ludDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFj
a2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdApAQCAtMTEzLDEyICsxMTQsMTAgQEAg
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CRwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgdm9pZCogZGF0YSkgY29uc3QKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyRm9ybWF0JiBkZXN0aW5hdGlvbkZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgdm9pZCogZGF0YSkgY29uc3QKIHsKICAgICBhdXRvIHNvdXJjZVJlY3RTY2FsZWQgPSB0b0Jh
Y2tlbmRDb29yZGluYXRlcyhzb3VyY2VSZWN0KTsKIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGRl
c3RpbmF0aW9uRm9ybWF0IHsgZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJH
QkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKLQogICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGRlc3RpbmF0aW9uRm9ybWF0LCBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKQEAgLTE1OCwxNSArMTU3LDE1IEBAIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJ
bWFnZUJ1ZmZlckJhY2tlbmQKICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNv
dXJjZUFscGhhRm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0aW5hdGlvblBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQsIHZvaWQqIGRhdGEpCit2
b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXIm
IHNvdXJjZVBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdGluYXRpb25Qb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0aW5hdGlv
bkFscGhhRm9ybWF0LCB2b2lkKiBkYXRhKQogewogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igbm9uLVJHQkE4IHBpeGVsIGZvcm1hdHMuCi0gICAgQVNTRVJUKHBpeGVsQnVmZmVyLmZvcm1h
dCgpLnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCk7CisgICAgQVNTRVJUKHNvdXJj
ZVBpeGVsQnVmZmVyLmZvcm1hdCgpLnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCk7
CiAKICAgICBhdXRvIHNvdXJjZVJlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzb3Vy
Y2VSZWN0KTsKICAgICBhdXRvIGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29y
ZGluYXRlcyhkZXN0aW5hdGlvblBvaW50KTsKIAotICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBw
ZWQgPSBpbnRlcnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkg
fSwgc291cmNlUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGlu
dGVyc2VjdGlvbih7IEludFBvaW50Ojp6ZXJvKCksIHNvdXJjZVBpeGVsQnVmZmVyLnNpemUoKSB9
LCBzb3VyY2VSZWN0U2NhbGVkKTsKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHNvdXJj
ZVJlY3RDbGlwcGVkOwogICAgIGRlc3RpbmF0aW9uUmVjdC5tb3ZlQnkoZGVzdGluYXRpb25Qb2lu
dFNjYWxlZCk7CiAKQEAgLTE3OSwxMyArMTc4LDEzIEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpwdXRQaXhlbEJ1ZmZlcigKICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGJhY2tlbmRS
ZWN0KCkpOwogICAgIHNvdXJjZVJlY3RDbGlwcGVkLnNldFNpemUoZGVzdGluYXRpb25SZWN0LnNp
emUoKSk7CiAKLSAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZl
ci5zaXplKCkud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxC
dWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVz
UGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VC
eXRlc1BlclJvdyA9IDQgKiBzb3VyY2VQaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VSb3dzID0gc291cmNlUGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEo
KSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVj
dENsaXBwZWQueCgpICogNDsKIAogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cg
PSBieXRlc1BlclJvdygpOwogICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdGluYXRpb25SZWN0LnkoKSAqIGRlc3RpbmF0
aW9uQnl0ZXNQZXJSb3cgKyBkZXN0aW5hdGlvblJlY3QueCgpICogNDsKIAotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IHNvdXJjZUZvcm1hdCB7IHNvdXJjZUFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6
UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OworICAgIFBpeGVsQnVmZmVyRm9y
bWF0IHNvdXJjZUZvcm1hdCA9IHNvdXJjZVBpeGVsQnVmZmVyLmZvcm1hdCgpOwogICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGRlc3RpbmF0aW9uRm9ybWF0IHsgZGVzdGluYXRpb25BbHBoYUZvcm1hdCwg
cGl4ZWxGb3JtYXQoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAKICAgICBDb25z
dFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHJldmlz
aW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTIgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAi
Q29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXNHTC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXJGb3JtYXQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
aW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTEwOSw4ICsxMDgsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFs
IE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpID0gMDsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhl
bEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0wmLCBHQ0dMZW51bSwg
UGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC0xNTAsOCArMTQ5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZv
aWQqIGRhdGEpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOworICAgIFdFQkNPUkVfRVhQ
T1JUIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZl
ckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRh
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBp
eGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIAog
ICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyQ29udmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXJDb252ZXJzaW9uLmNw
cAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGl4ZWxCdWZmZXJDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjQgKzMxLDk1
IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCiAKLSNp
ZiBVU0UoQUNDRUxFUkFURSkKKyNpZiBVU0UoQUNDRUxFUkFURSkgJiYgVVNFKENHKQorI2luY2x1
ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShBQ0NFTEVSQVRFKQorI2lm
IFVTRShBQ0NFTEVSQVRFKSAmJiBVU0UoQ0cpCisKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0NHSW1h
Z2VGb3JtYXQgbWFrZVZJbWFnZUNHSW1hZ2VGb3JtYXQoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQm
IGZvcm1hdCkKK3sKKyAgICAvLyBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IDggYml0IHBpeGVs
IGZvcm1hdHMgZm9yIHRoZXNlIGNvbnZlcnNpb25zLgorCisgICAgYXV0byBiaXRzUGVyQ29tcG9u
ZW50ID0gW10gKFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0KSAtPiB1bnNpZ25lZCB7CisgICAgICAg
IHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCQTg6
CisgICAgICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OkJHUkE4OgorICAgICAgICAgICAgcmV0dXJuIDg7
CisKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCMTA6CisgICAgICAgIGNhc2UgUGl4ZWxG
b3JtYXQ6OlJHQjEwQTg6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gODsKKyAgICB9OworCisgICAg
YXV0byBiaXRzUGVyUGl4ZWwgPSBbXSAoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQpIC0+IHVuc2ln
bmVkIHsKKyAgICAgICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgeworICAgICAgICBjYXNlIFBpeGVs
Rm9ybWF0OjpSR0JBODoKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6QkdSQTg6CisgICAgICAg
ICAgICByZXR1cm4gMzI7CisKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCMTA6CisgICAg
ICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OlJHQjEwQTg6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMzI7
CisgICAgfTsKKworICAgIGF1dG8gYml0bWFwSW5mbyA9IFtdIChBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCkgLT4gQ0dCaXRtYXBJbmZv
IHsKKyAgICAgICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgeworICAgICAgICBjYXNlIFBpeGVsRm9y
bWF0OjpSR0JBODoKKyAgICAgICAgICAgIGlmIChhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQorICAgICAgICAgICAgICAgIHJldHVybiBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4ga0NHQml0bWFwQnl0ZU9yZGVyMzJC
aWcgfCBrQ0dJbWFnZUFscGhhTGFzdDsKKworICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpCR1JB
ODoKKyAgICAgICAgICAgIGlmIChhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKQorICAgICAgICAgICAgICAgIHJldHVybiBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Q7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxl
IHwga0NHSW1hZ2VBbHBoYUZpcnN0OworCisgICAgICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OlJHQjEw
OgorICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpSR0IxMEE4OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0OworICAg
IH07CisKKyAgICB2SW1hZ2VfQ0dJbWFnZUZvcm1hdCByZXN1bHQ7CisKKyAgICByZXN1bHQuYml0
c1BlckNvbXBvbmVudCA9IGJpdHNQZXJDb21wb25lbnQoZm9ybWF0LnBpeGVsRm9ybWF0KTsKKyAg
ICByZXN1bHQuYml0c1BlclBpeGVsID0gYml0c1BlclBpeGVsKGZvcm1hdC5waXhlbEZvcm1hdCk7
CisgICAgcmVzdWx0LmNvbG9yU3BhY2UgPSBjYWNoZWRDR0NvbG9yU3BhY2UoZm9ybWF0LmNvbG9y
U3BhY2UpOworICAgIHJlc3VsdC5iaXRtYXBJbmZvID0gYml0bWFwSW5mbyhmb3JtYXQuYWxwaGFG
b3JtYXQsIGZvcm1hdC5waXhlbEZvcm1hdCk7CisgICAgcmVzdWx0LnZlcnNpb24gPSAwOworICAg
IHJlc3VsdC5kZWNvZGUgPSBudWxscHRyOworICAgIHJlc3VsdC5yZW5kZXJpbmdJbnRlbnQgPSBr
Q0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVmlldz4gc3RhdGljIHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZl
cihjb25zdCBWaWV3JiB2aWV3LCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHZJbWFnZV9C
dWZmZXIgdkltYWdlQnVmZmVyOworICAgIHZJbWFnZV9CdWZmZXIgcmVzdWx0OwogCi0gICAgdklt
YWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVp
Z2h0KCkpOwotICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVs
Q291bnQ+KHNpemUud2lkdGgoKSk7Ci0gICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0gdmlldy5i
eXRlc1BlclJvdzsKLSAgICB2SW1hZ2VCdWZmZXIuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+
KHZpZXcucm93cyk7CisgICAgcmVzdWx0LmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVs
Q291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHJlc3VsdC53aWR0aCA9IHN0YXRpY19jYXN0PHZJ
bWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgcmVzdWx0LnJvd0J5dGVzID0gdmll
dy5ieXRlc1BlclJvdzsKKyAgICByZXN1bHQuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHZp
ZXcucm93cyk7CiAKLSAgICByZXR1cm4gdkltYWdlQnVmZmVyOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIHN0YXRpYyB2b2lkIGNvbnZlcnRJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKGNvbnN0IENv
bnN0UGl4ZWxCdWZmZXJDb252ZXJzaW9uVmlldyYgc291cmNlLCBjb25zdCBQaXhlbEJ1ZmZlckNv
bnZlcnNpb25WaWV3JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgZGVzdGluYXRpb25TaXpl
KQpAQCAtNTYsNiArMTI3LDIyIEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRJbWFnZVBpeGVsc0FjY2Vs
ZXJhdGUKICAgICBhdXRvIHNvdXJjZVZJbWFnZUJ1ZmZlciA9IG1ha2VWSW1hZ2VCdWZmZXIoc291
cmNlLCBkZXN0aW5hdGlvblNpemUpOwogICAgIGF1dG8gZGVzdGluYXRpb25WSW1hZ2VCdWZmZXIg
PSBtYWtlVkltYWdlQnVmZmVyKGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvblNpemUpOwogCisgICAg
aWYgKHNvdXJjZS5mb3JtYXQuY29sb3JTcGFjZSAhPSBkZXN0aW5hdGlvbi5mb3JtYXQuY29sb3JT
cGFjZSkgeworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgdkltYWdlQ29udmVydF9B
bnlUb0FueSBmb3IgYWxsIGNvbnZlcnNpb25zLCBub3QganVzdCBvbmVzIHRoYXQgbmVlZCBhIGNv
bG9yIHNwYWNlIGNvbnZlcnNpb24sCisgICAgICAgIC8vIGFmdGVyIGp1ZGljaW91c2x5IHBlcmZv
cm1hbmNlIHRlc3RpbmcgdGhlbSBhZ2FpbnN0IGVhY2ggb3RoZXIuCisKKyAgICAgICAgYXV0byBz
b3VyY2VDR0ltYWdlRm9ybWF0ID0gbWFrZVZJbWFnZUNHSW1hZ2VGb3JtYXQoc291cmNlLmZvcm1h
dCk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25DR0ltYWdlRm9ybWF0ID0gbWFrZVZJbWFnZUNH
SW1hZ2VGb3JtYXQoZGVzdGluYXRpb24uZm9ybWF0KTsKKworICAgICAgICB2SW1hZ2VfRXJyb3Ig
Y29udmVydGVyQ3JlYXRlRXJyb3IgPSBrdkltYWdlTm9FcnJvcjsKKyAgICAgICAgYXV0byBjb252
ZXJ0ZXIgPSBhZG9wdENGKHZJbWFnZUNvbnZlcnRlcl9DcmVhdGVXaXRoQ0dJbWFnZUZvcm1hdCgm
c291cmNlQ0dJbWFnZUZvcm1hdCwgJmRlc3RpbmF0aW9uQ0dJbWFnZUZvcm1hdCwgbnVsbHB0ciwg
a3ZJbWFnZU5vRmxhZ3MsICZjb252ZXJ0ZXJDcmVhdGVFcnJvcikpOworICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFX1VOVVNFRChjb252ZXJ0ZXJDcmVhdGVFcnJvciAhPSBrdkltYWdlTm9FcnJv
ciwgInZJbWFnZUNvbnZlcnRlciBjcmVhdGlvbiBmYWlsZWQgd2l0aCBlcnJvcjogJXpkIiwgY29u
dmVydGVyQ3JlYXRlRXJyb3IpOworCisgICAgICAgIHZJbWFnZV9FcnJvciBjb252ZXJ0ZXJDb252
ZXJ0RXJyb3IgPSB2SW1hZ2VDb252ZXJ0X0FueVRvQW55KGNvbnZlcnRlci5nZXQoKSwgJnNvdXJj
ZVZJbWFnZUJ1ZmZlciwgJmRlc3RpbmF0aW9uVkltYWdlQnVmZmVyLCBudWxscHRyLCBrdkltYWdl
Tm9GbGFncyk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKGNvbnZlcnRlckNv
bnZlcnRFcnJvciA9PSBrdkltYWdlTm9FcnJvciwgInZJbWFnZUNvbnZlcnRfQW55VG9BbnkgZmFp
bGVkIGNvbnZlcnNpb24gd2l0aCBlcnJvcjogJXpkIiwgY29udmVydGVyQ29udmVydEVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChzb3VyY2UuZm9ybWF0LmFscGhhRm9y
bWF0ICE9IGRlc3RpbmF0aW9uLmZvcm1hdC5hbHBoYUZvcm1hdCkgewogICAgICAgICBpZiAoZGVz
dGluYXRpb24uZm9ybWF0LmFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewogICAgICAgICAgICAgaWYgKHNvdXJjZS5mb3JtYXQucGl4ZWxGb3Jt
YXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4KQpAQCAtMTg0LDEwICsyNzEsNyBAQCB2b2lkIGNvbnZl
cnRJbWFnZVBpeGVscyhjb25zdCBDb25zdFBpeGVsCiAgICAgQVNTRVJUKHNvdXJjZS5mb3JtYXQu
cGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IHNvdXJjZS5mb3JtYXQucGl4ZWxG
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBBU1NFUlQoZGVzdGluYXRpb24uZm9y
bWF0LnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCB8fCBkZXN0aW5hdGlvbi5mb3Jt
YXQucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIC8vIFdlIGRvbid0
IGN1cnJlbnRseSBzdXBwb3J0IGNvbnZlcnRpbmcgcGl4ZWwgZGF0YSBiZXR3ZWVuIGRpZmZlcmVu
dCBjb2xvciBzcGFjZXMuCi0gICAgQVNTRVJUKHNvdXJjZS5mb3JtYXQuY29sb3JTcGFjZSA9PSBk
ZXN0aW5hdGlvbi5mb3JtYXQuY29sb3JTcGFjZSk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKKyNp
ZiBVU0UoQUNDRUxFUkFURSkgJiYgVVNFKENHKQogICAgIGlmIChzb3VyY2UuZm9ybWF0LmFscGhh
Rm9ybWF0ID09IGRlc3RpbmF0aW9uLmZvcm1hdC5hbHBoYUZvcm1hdCAmJiBzb3VyY2UuZm9ybWF0
LnBpeGVsRm9ybWF0ID09IGRlc3RpbmF0aW9uLmZvcm1hdC5waXhlbEZvcm1hdCkgewogICAgICAg
ICAvLyBGSVhNRTogQ2FuIHRoZXMgYm90aCBqdXN0IHVzZSBwZXItcm93IG1lbWNweT8KICAgICAg
ICAgaWYgKHNvdXJjZS5mb3JtYXQuYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCkKQEAgLTE5Nyw2ICsyODEsMTAgQEAgdm9pZCBjb252ZXJ0SW1hZ2VQ
aXhlbHMoY29uc3QgQ29uc3RQaXhlbAogICAgIH0gZWxzZQogICAgICAgICBjb252ZXJ0SW1hZ2VQ
aXhlbHNBY2NlbGVyYXRlZChzb3VyY2UsIGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvblNpemUpOwog
I2Vsc2UKKyAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgY29udmVydGlu
ZyBwaXhlbCBkYXRhIGJldHdlZW4gZGlmZmVyZW50IGNvbG9yIHNwYWNlcyBpbiB0aGUgbm9uLWFj
Y2VsZXJhdGVkIHBhdGguCisgICAgLy8gVGhpcyBjb3VsZCBiZSBhZGRlZCB1c2luZyBjb252ZXJz
aW9uIGZ1bmN0aW9ucyBmcm9tIENvbG9yQ29udmVyc2lvbi5oLgorICAgIEFTU0VSVChzb3VyY2Uu
Zm9ybWF0LmNvbG9yU3BhY2UgPT0gZGVzdGluYXRpb24uZm9ybWF0LmNvbG9yU3BhY2UpOworCiAg
ICAgaWYgKHNvdXJjZS5mb3JtYXQuYWxwaGFGb3JtYXQgPT0gZGVzdGluYXRpb24uZm9ybWF0LmFs
cGhhRm9ybWF0KSB7CiAgICAgICAgIGlmIChzb3VyY2UuZm9ybWF0LnBpeGVsRm9ybWF0ID09IGRl
c3RpbmF0aW9uLmZvcm1hdC5waXhlbEZvcm1hdCkgewogICAgICAgICAgICAgaWYgKHNvdXJjZS5m
b3JtYXQuYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAzLDEzICs5MDMsMTQgQEAg
dm9pZCBTaGFkb3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKEltYWdlQgogICAgIGlmIChtX3R5cGUg
IT0gQmx1clNoYWRvdykKICAgICAgICAgcmV0dXJuOwogCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQg
Zm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OwogICAgIEludFJlY3Qg
Ymx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKLSAgICBhdXRvIGxheWVyRGF0YSA9
IGxheWVySW1hZ2UuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdl
dFBpeGVsQnVmZmVyKGZvcm1hdCwgYmx1clJlY3QpOwogICAgIGlmICghbGF5ZXJEYXRhKQogICAg
ICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKS5kYXRh
KCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1h
Z2UucHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCAqbGF5ZXJEYXRhLCBibHVyUmVjdCk7CisgICAgbGF5ZXJJbWFnZS5wdXRQaXhlbEJ1ZmZlcigq
bGF5ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9y
U2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1w
bGF0ZVNpemUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMCwxNCArMTIwLDE0IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUIKICAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCi1PcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkg
Y29uc3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQ6OmdldFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyRm9ybWF0IG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRQ
aXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0
LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRl
c3RQb2ludCwgZGVzdEZvcm1hdCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZh
Y2UuZ2V0KCkpKTsKIAogICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKHNyY1JlY3QpOwogICAgIEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9IHRvQmFja2Vu
ZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgogICAgIFJlZlB0cjxOYXRp
dmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXJGb3Jt
YXQgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNyArMTgzLDggQEAgUmV0YWluUHRyPENGRGF0YVJlZj4g
SW1hZ2VCdWZmZXJDR0JhY2tlbgogCiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJ
KCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28g
d2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBh
dXRvIHBpeGVsQnVmZmVyID0gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3QoKSk7CisgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CisgICAgICAgIGF1dG8g
cGl4ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGxvZ2ljYWxSZWN0KCkpOwogICAg
ICAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDE0ICsxNTksMTQgQEAgVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZQogICAgIHJldHVybiBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnRvQkdSQURhdGEobV9kYXRhKTsKIH0KIAotT3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09w
dGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxC
dWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQ
aXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1
ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZv
cm1hdCwgbV9kYXRhKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKHBp
eGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEs
OCArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVm
ZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVm
ZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0VXBwZXJMZWZ0Q29ybmVyID0gdHJ1ZTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc0NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTYgKzE4MywxNiBAQCBWZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrCiAgICAgcmV0dXJuIEltYWdlQnVm
ZmVyQmFja2VuZDo6dG9CR1JBRGF0YShsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKIH0KIAot
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIElPU3VyZmFj
ZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2Vu
ZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZhY2VCYXNl
QWRkcmVzcygpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIElP
U3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vz
c01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZl
cihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1h
dCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpw
dXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0
LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKICAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0
UGl4ZWxCdWZmZXIgPSB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDggKzYzLDggQEAgcHVibGljOgogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdl
dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0
IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAog
ICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcmVsZWFzZUdyYXBo
aWNzQ29udGV4dCgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NzUsMjAgKzc3NSwxOCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtCiAgICAgcmV0dXJuIHRzOwogfQogCi1QdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBp
eGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCitQdXRQaXhlbEJ1ZmZlcjo6
UHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQpCiAgICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVz
dFBvaW50KGRlc3RQb2ludCkKICAgICAsIG1fcGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZGVlcENs
b25lKCkpIC8vIFRoaXMgY29weSBpcyBhY3R1YWxseSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUg
c2VtYW50aWNzIG9mIHB1dFBpeGVsQnVmZmVyKCkuCi0gICAgLCBtX2lucHV0Rm9ybWF0KGlucHV0
Rm9ybWF0KQogICAgICwgbV9kZXN0Rm9ybWF0KGRlc3RGb3JtYXQpCiB7CiB9CiAKLVB1dFBpeGVs
QnVmZmVyOjpQdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
CitQdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZl
ciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogICAgIDogbV9zcmNSZWN0KHNyY1JlY3Qp
CiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9pbnQpCiAgICAgLCBtX3BpeGVsQnVmZmVyKFdURk1v
dmUocGl4ZWxCdWZmZXIpKQotICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKICAgICAs
IG1fZGVzdEZvcm1hdChkZXN0Rm9ybWF0KQogewogfQpAQCAtNzk3LDcgKzc5NSw2IEBAIFB1dFBp
eGVsQnVmZmVyOjpQdXRQaXhlbEJ1ZmZlcihjb25zdCBQdXQKICAgICA6IG1fc3JjUmVjdChvdGhl
ci5tX3NyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChvdGhlci5tX2Rlc3RQb2ludCkKICAgICAs
IG1fcGl4ZWxCdWZmZXIob3RoZXIubV9waXhlbEJ1ZmZlci5kZWVwQ2xvbmUoKSkKLSAgICAsIG1f
aW5wdXRGb3JtYXQob3RoZXIubV9pbnB1dEZvcm1hdCkKICAgICAsIG1fZGVzdEZvcm1hdChvdGhl
ci5tX2Rlc3RGb3JtYXQpCiB7CiB9CkBAIC04MTQsMTMgKzgxMSwxMSBAQCB2b2lkIFB1dFBpeGVs
QnVmZmVyOjpzd2FwKFB1dFBpeGVsQnVmZmVyCiAgICAgc3RkOjpzd2FwKG1fc3JjUmVjdCwgb3Ro
ZXIubV9zcmNSZWN0KTsKICAgICBzdGQ6OnN3YXAobV9kZXN0UG9pbnQsIG90aGVyLm1fZGVzdFBv
aW50KTsKICAgICBzdGQ6OnN3YXAobV9waXhlbEJ1ZmZlciwgb3RoZXIubV9waXhlbEJ1ZmZlcik7
Ci0gICAgc3RkOjpzd2FwKG1faW5wdXRGb3JtYXQsIG90aGVyLm1faW5wdXRGb3JtYXQpOwogICAg
IHN0ZDo6c3dhcChtX2Rlc3RGb3JtYXQsIG90aGVyLm1fZGVzdEZvcm1hdCk7CiB9CiAKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRQaXhlbEJ1
ZmZlciYgaXRlbSkKIHsKLSAgICB0cy5kdW1wUHJvcGVydHkoImlucHV0Rm9ybWF0IiwgaXRlbS5p
bnB1dEZvcm1hdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBpeGVsQnVmZmVyU2l6ZSIsIGl0
ZW0ucGl4ZWxCdWZmZXIoKS5zaXplKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic3JjUmVjdCIs
IGl0ZW0uc3JjUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3RQb2ludCIsIGl0ZW0u
ZGVzdFBvaW50KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCShyZXZp
c2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTA1LDE4ICsxOTA1
LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
dHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwog
Ci0gICAgR2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCisgICAgR2V0UGl4ZWxC
dWZmZXIoV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQgb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzcmNSZWN0KQogICAgICAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAg
ICAgICAsIG1fb3V0cHV0Rm9ybWF0KG91dHB1dEZvcm1hdCkKICAgICB7CiAgICAgfQogCi0gICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX291
dHB1dEZvcm1hdDsgfQorICAgIFBpeGVsQnVmZmVyRm9ybWF0IG91dHB1dEZvcm1hdCgpIGNvbnN0
IHsgcmV0dXJuIG1fb3V0cHV0Rm9ybWF0OyB9CiAgICAgSW50UmVjdCBzcmNSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9zcmNSZWN0OyB9CiAKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3NyY1JlY3Q7
Ci0gICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX291dHB1dEZvcm1hdDsKKyAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBtX291dHB1dEZvcm1hdDsKIH07CiAKIGNsYXNzIFB1dFBpeGVsQnVmZmVyIHsK
QEAgLTE5MjUsOCArMTkyNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIFB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFBpeGVsQnVmZmVyJiYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUHV0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworICAg
IFdFQkNPUkVfRVhQT1JUIFB1dFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCk7CiAKICAgICBQdXRQaXhlbEJ1ZmZlcihjb25zdCBQdXRQaXhlbEJ1
ZmZlciYpOwogICAgIFB1dFBpeGVsQnVmZmVyKFB1dFBpeGVsQnVmZmVyJiYpID0gZGVmYXVsdDsK
QEAgLTE5MzUsNyArMTkzNSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3dhcChQdXRQaXhlbEJ1
ZmZlciYpOwogCi0gICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5wdXRGb3JtYXQ7IH0KICAgICBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVmZmVyOyB9CiAgICAgSW50UmVjdCBzcmNS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9CiAgICAgSW50UG9pbnQgZGVzdFBvaW50
KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0UG9pbnQ7IH0KQEAgLTE5NTEsMTQgKzE5NTAsMTIgQEAg
cHJpdmF0ZToKICAgICBJbnRSZWN0IG1fc3JjUmVjdDsKICAgICBJbnRQb2ludCBtX2Rlc3RQb2lu
dDsKICAgICBQaXhlbEJ1ZmZlciBtX3BpeGVsQnVmZmVyOwotICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gbV9pbnB1dEZvcm1hdDsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVzdEZv
cm1hdDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1dFBpeGVsQnVmZmVy
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8IG1faW5w
dXRGb3JtYXQ7CiAgICAgZW5jb2RlciA8PCBtX3BpeGVsQnVmZmVyOwogICAgIGVuY29kZXIgPDwg
bV9zcmNSZWN0OwogICAgIGVuY29kZXIgPDwgbV9kZXN0UG9pbnQ7CkBAIC0xOTY4LDE2ICsxOTY1
LDExIEBAIHZvaWQgUHV0UGl4ZWxCdWZmZXI6OmVuY29kZShFbmNvZGVyJiBlbmMKIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+CiBPcHRpb25hbDxQdXRQaXhlbEJ1ZmZlcj4gUHV0UGl4ZWxCdWZmZXI6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPEFscGhhUHJlbXVsdGlw
bGljYXRpb24+IGlucHV0Rm9ybWF0OwogICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwaXhlbEJ1
ZmZlcjsKICAgICBPcHRpb25hbDxJbnRSZWN0PiBzcmNSZWN0OwogICAgIE9wdGlvbmFsPEludFBv
aW50PiBkZXN0UG9pbnQ7CiAgICAgT3B0aW9uYWw8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4gZGVz
dEZvcm1hdDsKIAotICAgIGRlY29kZXIgPj4gaW5wdXRGb3JtYXQ7Ci0gICAgaWYgKCFpbnB1dEZv
cm1hdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQogICAgIGRlY29kZXIgPj4gcGl4
ZWxCdWZmZXI7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKQEAgLTE5OTQsNyArMTk4Niw3IEBAIE9wdGlvbmFsPFB1dFBpeGVsQnVmZmVyPiBQdXRQ
aXhlbEJ1ZmZlcjoKICAgICBpZiAoIWRlc3RGb3JtYXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCpwaXhlbEJ1ZmZl
ciksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAqZGVzdEZvcm1hdCB9fTsKKyAgICByZXR1cm4ge3sg
V1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCAqc3JjUmVjdCwgKmRlc3RQb2ludCwgKmRlc3RGb3JtYXQg
fX07CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSwxNCBAQCBSZWNvcmRlcjo6flJlY29yZGVyKCkKICAg
ICBMT0coRGlzcGxheUxpc3RzLCAiUmVjb3JkZWQgZGlzcGxheSBsaXN0OlxuJXMiLCBtX2Rpc3Bs
YXlMaXN0LmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Z2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QpCit2b2lkIFJlY29yZGVyOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhl
bEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQog
ewogICAgIGFwcGVuZDxHZXRQaXhlbEJ1ZmZlcj4ob3V0cHV0Rm9ybWF0LCBzb3VyY2VSZWN0KTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6cHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVs
QnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpCit2b2lkIFJlY29yZGVyOjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhl
bEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkKIHsKLSAgICBhcHBlbmQ8UHV0UGl4ZWxCdWZmZXI+KGlucHV0
Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAg
ICBhcHBlbmQ8UHV0UGl4ZWxCdWZmZXI+KHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IGRlc3RGb3JtYXQpOwogfQogCiBzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNo
YW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw4IEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBEaXNwbGF5TGlzdCYsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0ciwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgflJlY29yZGVyKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFBpeGVs
QnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIo
Y29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODUsOCArMjg1LDkgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcgogICAgIGlmIChpbkJ1ZmZlcikKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBm
b3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAgICAgSW50UmVjdCBp
bWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1
dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwog
ICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzEzLDcgKzMxNCw3
IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXIKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOwor
ICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7
CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lv
biAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE1ICs5OSwxNiBAQCB2b2lkIEZF
RHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAKICAgICBTaGFkb3dCbHVyIGNvbnRl
eHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKIAorICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAg
ICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6
ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEpOworICAg
IGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBz
aGFkb3dBcmVhKTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKICAg
ICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICBjb250
ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBwaXhlbEJ1
ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsKICAgICAKLSAg
ICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKKyAgICByZXN1bHRJbWFnZS0+
cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7
CiAgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksOSAr
Mjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZQogCiAgICAg
SW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJl
Y3QpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5h
dGlvblJlY3QpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDM5LDcgKzQzOSw3IEBAIHN0YXRp
YyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY28KICNlbmRpZgogfQogCi1PcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQpCitPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlcikKIHsKICAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVy
Zm9ybSB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRv
IGl0IGRpcmVjdGx5LgogCkBAIC00NTAsMjAgKzQ1MCwyNiBAQCBPcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gRmlsdGVyRWZmZWN0Ojpjb252CiAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRl
clNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAg
ICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBidWZmZXIt
PnB1dFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVj
dCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xv
clNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIG91dHB1dEZvcm1hdCk7CisgICAgYnVm
ZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBy
ZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpi
dWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQp
OwogfQogCi1PcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VC
dWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIHRhcmdldENvbG9yU3BhY2Us
IEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgcmVjdCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVy
RWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlIHRhcmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50
UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKIHsK
KyAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVs
QnVmZmVyQ29udmVyc2lvbi4KKwogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisKICAgICAvLyBDcmVhdGUgYW4gSW1hZ2VC
dWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5k
bGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgogICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBt
X2ZpbHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwogICAgIGlmICghY29udmVydGVkQnVmZmVyKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCiAgICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkg
d2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCiAgICAgY29udmVy
dGVkQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGlucHV0QnVmZmVyLCByZWN0KTsK
LSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQs
IHJlY3QpOworICAgIAorICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IG91dHB1dEFscGhh
Rm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9
OworICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVj
dCk7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xv
clNwYWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKQEAgLTQ3NSwxMSArNDgxLDExIEBAIHZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWYKICAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0
ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgRGVz
dGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQ29udmVy
dHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsCiAgICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZl
IHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlciwgb3V0cHV0Rm9y
bWF0KTsKKyAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVy
VG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKICAgICBpZiAoIWNvbnZlcnRl
ZFBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgY29weUltYWdlQnl0ZXMoY29udmVy
dGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKQEAgLTQ5OCw3
ICs1MDQsOCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsCiAgICAg
ICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5h
dGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgcmVjdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJ
bnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgICAgIFBp
eGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Ig
fTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpAQCAtNTEz
LDcgKzUyMCw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWwKICAg
ICAgICAgfQogICAgIH0KICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252
ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRv
RGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29s
b3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsK
KyAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlv
biwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKQEAgLTUzMiw3ICs1MzksOCBAQCB2
b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1CiAgICAgICAgICAgICAgICAg
Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9y
U3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CisgICAgICAgICAgICBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9
KTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpAQCAtNTQ4LDcgKzU1Niw3IEBAIHZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3UKICAgICB9CiAKICAgICBpZiAo
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0g
ICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24s
ICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOworICAgICAgICBjb3B5Q29udmVydGVkUGl4
ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
b3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgcmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwNCwxMCArMjA0LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNv
cHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIHZvaWQgY29w
eUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVj
dCYpOwotICAgIHZvaWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYsIFBpeGVsQnVmZmVyJiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBjb3B5Q29udmVy
dGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZm
ZXImLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmKTsKICAgICBib29sIHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+KTsKLSAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uKTsKICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydElt
YWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgSW1hZ2VCdWZmZXIm
LCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2UsIFBpeGVsQnVmZmVyJik7CiAgICAgCiAKICAgICBGaWx0ZXImIG1fZmlsdGVyOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc0
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsMTYgKzMxMiwxNiBAQCBW
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpn
ZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXJGb3JtYXQgb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZl
cihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZv
cm1hdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9p
bnQsIGRlc3RGb3JtYXQsIG51bGxwdHIpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4
ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbnVs
bHB0cik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5oCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRv
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNv
bnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0
KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoUGl4
ZWxCdWZmZXJGb3JtYXQgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAkocmV2aXNp
b24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+
IFNoYXBlOjpjcmVhdGVSYXN0CiAgICAgaWYgKGltYWdlKQogICAgICAgICBncmFwaGljc0NvbnRl
eHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgp
KSk7CiAKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBp
bWFnZVJlY3Quc2l6ZSgpIH0pOworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gaW1h
Z2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Qu
c2l6ZSgpIH0pOwogICAgIAogICAgIC8vIFdlIGNvdWxkIGdldCB0byBhIHZhbHVlIHdoZXJlIFBp
eGVsQnVmZmVyIGNvdWxkIGJlIG51bGxvcHQuIEEgY2FzZSB3aGVyZSBJbWFnZVJlY3Quc2l6ZSgp
IGlzIGh1Z2UsIFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUKICAgICAvLyBjYW4gcmV0dXJuIGEgbnVs
bG9wdCBiZWNhdXNlIGRhdGEgc2l6ZSBoYXMgb3ZlcmZsb3dlZC4gUmVmZXIgcmRhcjovL3Byb2Js
ZW0vNjE3OTM4ODQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc0OTcpCisrKyBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA1LTE0
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgUGl4ZWxCdWZm
ZXJGb3JtYXQgdG8gc3BlY2lmeSBJbWFnZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIgZGVzdGluYXRp
b24gZm9ybWF0IGFsbG93aW5nIGZvciBtb3JlIGNvbnRyb2wgb3ZlciBkYXRhIGNvbnZlcnNpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgxMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBj
YWxscy9pbXBsZW1lbnRhdGlvbnMgb2YgZ2V0UGl4ZWxCdWZmZXIvcHV0UGl4ZWxCdWZmZXIgdG8g
YWRqdXN0CisgICAgICAgIHRvIG5ldyBzaWduYXR1cmUuIAorCisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVM
YXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNw
bGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9J
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmg6CisKIDIwMjEtMDUtMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXNvdXJjZSBUaW1pbmc6IHNlY3VyZUNvbm5l
Y3Rpb25TdGFydCA9PSAwIHdoZW4gYSBjb25uZWN0aW9uIGlzIHJlLXVzZWQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZl
ci5oCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBw
cml2YXRlOgogCiAgICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQ
aXhlbEJ1ZmZlcj4oKSkgewogICAgICAgICAgICAgYXV0byYgcHV0UGl4ZWxCdWZmZXJJdGVtID0g
aXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPigpOwotICAgICAg
ICAgICAgcHV0UGl4ZWxCdWZmZXIocHV0UGl4ZWxCdWZmZXJJdGVtLmlucHV0Rm9ybWF0KCksIHB1
dFBpeGVsQnVmZmVySXRlbS5waXhlbEJ1ZmZlcigpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uc3JjUmVj
dCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVzdFBvaW50KCksIHB1dFBpeGVsQnVmZmVySXRlbS5k
ZXN0Rm9ybWF0KCkpOworICAgICAgICAgICAgcHV0UGl4ZWxCdWZmZXIocHV0UGl4ZWxCdWZmZXJJ
dGVtLnBpeGVsQnVmZmVyKCksIHB1dFBpeGVsQnVmZmVySXRlbS5zcmNSZWN0KCksIHB1dFBpeGVs
QnVmZmVySXRlbS5kZXN0UG9pbnQoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLmRlc3RGb3JtYXQoKSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2Vu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVl
L0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisr
KyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdl
QnVmZmVyQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMyArMTA1LDEzIEBAIFZl
Y3Rvcjx1aW50OF90PiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIKICAgICByZXR1cm4geyB9Owog
fQogCi1PcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gQ0dEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0CitPcHRpb25hbDxXZWJDb3JlOjpQaXhl
bEJ1ZmZlcj4gQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVm
ZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jiwg
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKK3ZvaWQgQ0dEaXNwbGF5TGlzdEltYWdl
QnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXIm
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCShy
ZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUv
Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4
ICs1MCw4IEBAIHB1YmxpYzoKICAgICAvLyBOT1RFOiBUaGVzZSBhbGwgQVNTRVJUX05PVF9SRUFD
SEVEKCkuCiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2Uo
V2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNv
bnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVy
KFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3Jl
OjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZm
ZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBvdXRw
dXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2lu
dCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0VXBwZXJMZWZ0Q29ybmVyID0g
dHJ1ZTsKIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjMsMTQgKzE2MywxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtCiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0
YShtX2JpdG1hcC0+ZGF0YSgpKTsKIH0KIAotT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRQ
aXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEoKSk7
CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3Zv
aWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihjb25z
dCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0
Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2Jp
dG1hcC0+ZGF0YSgpKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKHBp
eGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fYml0bWFwLT5kYXRh
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAg
ICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3Jl
Q29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1
dGlvbiA9IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBP
cHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVy
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0
KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxC
dWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxC
dWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5NCwxMiArMTk0LDExIEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGJp
dG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB9CiAKLSAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhl
bEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJy
aWRlCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNv
bnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBkZXN0aW5hdGlvbkZvcm1hdCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAg
IGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZv
cm1hdCBkZXN0aW5hdGlvbkZvcm1hdCB7IG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6UGl4ZWxGb3Jt
YXQ6OlJHQkE4LCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKICAgICAg
ICAgYXV0byBwaXhlbEJ1ZmZlciA9IFdlYkNvcmU6OlBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZGVz
dGluYXRpb25Gb3JtYXQsIHNyY1JlY3Quc2l6ZSgpKTsKICAgICAgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0yMTEsNyArMjEwLDcgQEAg
cHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBh
dXRvJiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0
aGlzKTsKLSAgICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmdl
dFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIG11dGFibGVUaGlz
Lm1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbkZv
cm1hdCwgc3JjUmVjdCk7CiAgICAgICAgIG11dGFibGVUaGlzLmZsdXNoRHJhd2luZ0NvbnRleHRB
c3luYygpOwogCiAgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2Fp
dEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZSh0aW1lb3V0KSkKQEAgLTIyMSwxMiArMjIwLDEy
IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogICAgIH0KIAotICAg
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBv
aW50ID0geyB9LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQor
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVs
QnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgLy8gVGhlIG1hdGggaW5zaWRlIFBpeGVsQnVm
ZmVyOjpjcmVhdGUoKSBkb2Vzbid0IGFncmVlIHdpdGggdGhlIG1hdGggaW5zaWRlIEltYWdlQnVm
ZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoKSBhYm91dCBob3cgbV9yZXNvbHV0aW9uU2NhbGUg
aW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgaW4gdGhlIEltYWdlQnVmZmVyLgogICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgcHV0UGl4ZWxCdWZmZXIoKSBpcyBvbmx5IGNhbGxlZCB3aGVuIHJlc29s
dXRpb25TY2FsZSgpID09IDEuCiAgICAgICAgIEFTU0VSVChyZXNvbHV0aW9uU2NhbGUoKSA9PSAx
KTsKLSAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1dFBpeGVsQnVmZmVyKGlu
cHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsK
KyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1dFBpeGVsQnVmZmVyKHBpeGVs
QnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpOwogICAgIH0KIAogICAgIGJv
b2wgcHJlZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEzICsxMjAsMTMgQEAgVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdQogICAgIHJldHVybiB7IH07CiB9
CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJl
Y3QmKSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmLCBj
b25zdCBJbnRSZWN0JikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBQ
aXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24pCit2b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50UG9pbnQmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDgg
QEAgcHVibGljOgogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKICAgICBW
ZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFs
PFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNPcmlnaW5BdFVwcGVyTGVmdENvcm5lciA9IHRydWU7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGNhbk1hcEJhY2tpbmdTdG9yZSA9IGZhbHNlOwo=
</data>
<flag name="commit-queue"
          id="449622"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428646</attachid>
            <date>2021-05-14 12:15:15 -0700</date>
            <delta_ts>2021-05-14 12:58:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225813-20210514121514.patch</filename>
            <type>text/plain</type>
            <size>73987</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAyMS0wNS0xNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyRm9ybWF0
IHRvIHNwZWNpZnkgSW1hZ2VCdWZmZXI6OmdldFBpeGVsRGF0YSBkZXN0aW5hdGlvbiBmb3JtYXQg
YWxsb3dpbmcgZm9yIG1vcmUgY29udHJvbCBvdmVyIGRhdGEgY29udmVyc2lvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODEzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHJlcHJldmlvdXMgc2ln
bmF0dXJlIG9mIEltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcjoKKworICAgICAgICAgICAgSW1h
Z2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmKTsKKyAgICAgICAgCisgICAgICAgIG9ubHkgYWxsb3dlZCBzcGVjaWZ5aW5nIHRoZSB0
eXBlIG9mIGFscGhhIHByZW11bHRpcGxpY2F0aW9uIHdhbnRlZCwgYW5kIGhhcmQgY29kZWQKKyAg
ICAgICAgYSBwaXhlbCBmb3JtYXQgb2YgUkdCQTggYW5kIGNvbG9yIHNwYWNlIG9mIFNSR0IuIFRv
IHN1cHBvcnQgYWNjdXJhdGUgYW5kIGVmZmljaWVudAorICAgICAgICBhY2Nlc3MgdG8gcGl4ZWwg
YnVmZmVycyB3aXRoIGRpZmZlcmVudCBwaXhlbCBmb3JtYXRzIGFuZCBjb2xvciBzcGFjZXMgd2Ug
bmVlZCB0byBiZQorICAgICAgICBhYmxlIHRvIHRlbGwgZ2V0UGl4ZWxCdWZmZXIgd2hhdCB3ZSB3
YW50IHVwIGZyb250LCBzbyB0aGF0IGlmIHRoZSBJbWFnZUJ1ZmZlciBhbHJlYWR5CisgICAgICAg
IGhhcyBhIERpc3BsYXlQMyBidWZmZXIsIGFuZCB3ZSB3YW50IERpc3BsYXlQMyBwaXhlbHMsIHdl
IGRvbid0IGZpcnN0IGNvbnZlcnQgdG8gU1JHQgorICAgICAgICBhbmQgdGhlbiBjb252ZXJ0IGJh
Y2sgdG8gRGlzcGxheVAzICh3aGljaCB3b3VsZCBiZSBzbG93IGFuZCBsb3NlIGFueSBvdXQgb2Yg
Z2FtdXQKKyAgICAgICAgZGF0YSkuIFRoZSBuZXcgc2lnbmF0dXJlIGFsbG93cyB1cyB0byBzcGVj
aWZ5IHRoZSBlbnRpcmUgZm9ybWF0IHRyaXBsZToKKyAgICAgICAgCisgICAgICAgICAgICBJbWFn
ZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBJbWFnZUJ1ZmZlcjo6cHV0UGl4ZWxC
dWZmZXIoKSBubyBsb25nZXIgbmVlZHMgdG8gcHJvdmlkZSB0aGUgc291cmNlCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZWl0aGVyLCBhcyB0aGUgUGl4ZWxCdWZmZXIgaXRzZWxmIGFs
c28gY29udGFpbnMgdGhhdCBpbmZvcm1hdGlvbi4KKworICAgICAgICBOb3cgdGhhdCB3ZSBhcmUg
cGFzc2luZyBjb2xvciBzcGFjZSBpbmZvcm1hdGlvbiwgd2UgbmVlZCB0byBzdXBwb3J0IGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24sCisgICAgICAgIHNvIFBpeGVsQnVmZmVyQ29udmVyc2lvbiB3YXMg
dXBkYXRlZCB0byBzdXBwb3J0IGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gb24gQ0cgcGxhdGZvcm1z
CisgICAgICAgIHVzaW5nIHZJbWFnZUNvbnZlcnRfQW55VG9BbnkuIFRoaXMgaXMgbm90IGN1cnJl
bnRseSBleGNlcnNpc2VkLCBidXQgd2lsbCBiZSBpbiBhIHN1YnNlcXVlbnQKKyAgICAgICAgY2hh
bmdlIHdoZXJlIGNhbnZhcyBJbWFnZURhdGEgZ2FpbnMgYSBjb2xvciBzcGFjZSBzZXR0aW5nLCBh
dCB3aGljaCBwb2ludCBpdCBjYW4gYmUgdGVzdGVkLgorCisgICAgICAgIFdlIGFsc28gZG9uJ3Qg
Y3VycmVudGx5IHN1cHBvcnQgY29sb3Igc3BhY2UgY29udmVyc2lvbiBvbiBub24tQ0cgcGxhdGZv
cm1zLiBUaGlzIHdvbid0CisgICAgICAgIGJlIGEgcHJvYmxlbSBpbiB0aGUgc2hvcnQgdGVybSwg
YXMgb25seSBDRyBwbGF0Zm9ybXMgc3VwcG9ydCBEaXNwbGF5UDMsIHRoZSBvbmx5IG90aGVyCisg
ICAgICAgIGNvbG9yIHNwYWNlIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBjdXJyZW50bHksIGJ1dCBh
cyBjbGVhbnVwLCB3ZSBzaG91bGQgYWRkIHN1cHBvcnQgZm9yCisgICAgICAgIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24gdXNpbmcgdGhlIENvbG9yQ29udmVyc2lvbiBhbmQgQ29sb3JUcmFuc2ZlckZ1
bmN0aW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgIGZvciBvdGhlciBwb3J0cywgbW92aW5nIHRo
ZSBleGlzdGluZyBzdXBwb3J0IGZvciBTUkdCIHRvL2Zyb20gTGluZWFyU1JHQiBjb252ZXJzaW9u
cyBmcm9tCisgICAgICAgIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIGFuZCBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC4KKworICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1
ZmZlckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUNHSW1hZ2VG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpjb252ZXJ0SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQ
aXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlB1dFBpeGVsQnVmZmVyOjpzd2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBp
eGVsQnVmZmVyOjpHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6Om91dHB1dEZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmlucHV0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFw
ZSk6CisKIDIwMjEtMDUtMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXNvdXJjZSBUaW1pbmc6IHNlY3VyZUNvbm5lY3Rpb25TdGFydCA9
PSAwIHdoZW4gYSBjb25uZWN0aW9uIGlzIHJlLXVzZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
Mjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3NSw4ICsxMDc1LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAgICAgICAgIGNvbnN0
IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBh
dXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0p
OworICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAgICAgICAgIGlmICghcGl4
ZWxCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6
VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzE2Myw3ICszMTY0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgeyBJbnRQb2ludDo6emVybygp
LCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihpbWFnZURh
dGEtPnBpeGVsQnVmZmVyKCksIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAK
ICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKEltYWdlQml0bWFwQmFj
a2luZyhXVEZNb3ZlKGJ1ZmZlciksIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+Ojpmcm9t
UmF3KHNlcmlhbGl6YXRpb25TdGF0ZSkpKTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0
bWFwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCShyZXZpc2lvbiAyNzc0
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODA3LDcgKzgwNyw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2Ny
aXB0RXgKICAgICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBh
bHBoYVByZW11bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRp
cGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKICAgICBpZiAoc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUu
cmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUgJiYgb3B0aW9ucy5pbWFnZU9y
aWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5vbmUpIHsKLSAg
ICAgICAgYml0bWFwRGF0YS0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3Rhbmds
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyB9LCBhbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAg
ICAgICAgYml0bWFwRGF0YS0+cHV0UGl4ZWxCdWZmZXIoaW1hZ2VEYXRhLT5waXhlbEJ1ZmZlcigp
LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgfSwgYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbik7CiAgICAgICAgIAogICAgICAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRl
KEltYWdlQml0bWFwQmFja2luZyhXVEZNb3ZlKGJpdG1hcERhdGEpKSk7CiAgICAgICAgIC8vIFRo
ZSByZXN1bHQgaXMgaW1wbGljaXRseSBvcmlnaW4tY2xlYW4sIGFuZCBhbHBoYSBwcmVtdWx0aXBs
aWNhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCkBAIC04MjIsNyArODIyLDcgQEAgdm9p
ZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeAogICAgICAgICByZXNvbHZlV2l0
aEJsYW5rSW1hZ2VCdWZmZXIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdHJ1ZSwgV1RGTW92ZShw
cm9taXNlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGVtcEJpdG1hcERhdGEtPnB1
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VEYXRhLT5waXhlbEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwg
aW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAg
dGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVyKGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwg
SW50UmVjdCgwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCkpLCB7
IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9h
dFBvaW50KCksIG91dHB1dFNpemUpOwogICAgIGJpdG1hcERhdGEtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKnRlbXBCaXRtYXBEYXRhLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVhbGl0eShv
cHRpb25zLnJlc2l6ZVF1YWxpdHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRpb24ob3B0
aW9ucy5pbWFnZU9yaWVudGF0aW9uKSB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJ
KHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDcgKzIxOTks
OCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuCiAgICAgaWYgKCFi
dWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFnZURhdGFSZWN0
LnNpemUoKSk7CiAKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJlY3Qp
OworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IgfTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZl
cihmb3JtYXQsIGltYWdlRGF0YVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpIHsKICAgICAg
ICAgY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6OkVycm9yLAogICAgICAg
ICAgICAgbWFrZVN0cmluZygiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIiwgaW1hZ2VEYXRhUmVjdC53aWR0aCgpLCAiIHggIiwgaW1hZ2VE
YXRhUmVjdC5oZWlnaHQoKSkpOwpAQCAtMjI0Niw3ICsyMjQ3LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbQogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJl
Y3QgeyAwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkgfSk7CiAKICAgICBpZiAoIXNv
dXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YS5waXhlbEJ1ZmZlcigpLCBz
b3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAgICAgIGJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIoZGF0YS5waXhlbEJ1ZmZlcigpLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRl
c3RPZmZzZXQgfSk7CiAKICAgICBkaWREcmF3KEZsb2F0UmVjdCB7IGRlc3RSZWN0IH0sIHsgfSk7
IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzAsNyArMzcwLDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6
OgogICAgICAgICAgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwog
ICAgICAgICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzb3VyY2VTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAg
ICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJj
ZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIo
aW1hZ2VEYXRhLT5waXhlbEJ1ZmZlcigpLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3Jl
dGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIo
Y29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwpAQCAtMjM5LDExICsyMzksMTEg
QEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAg
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlk
ZQorICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAgICBmbHVzaENvbnRl
eHQoKTsKLSAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBw
aXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAgICAgICAgICAg
IGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IGRlc3RGb3JtYXQpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNiw4ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQ
aXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCkgPSAwOwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0Nv
bnN1bWluZyhHCiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkKIHsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07
CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKGZvcm1hdCwgbG9naWNhbFJl
Y3QoKSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC04OCw3
ICs4OSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEKICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKICAgICB9CiAKLSAgICBw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpw
aXhlbEJ1ZmZlciwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onplcm8oKSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgcHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2ludDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFj
a2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdApAQCAtMTEzLDEyICsxMTQsMTAgQEAg
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CRwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgdm9pZCogZGF0YSkgY29uc3QKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyRm9ybWF0JiBkZXN0aW5hdGlvbkZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgdm9pZCogZGF0YSkgY29uc3QKIHsKICAgICBhdXRvIHNvdXJjZVJlY3RTY2FsZWQgPSB0b0Jh
Y2tlbmRDb29yZGluYXRlcyhzb3VyY2VSZWN0KTsKIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGRl
c3RpbmF0aW9uRm9ybWF0IHsgZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJH
QkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKLQogICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGRlc3RpbmF0aW9uRm9ybWF0LCBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKQEAgLTE1OCwxNSArMTU3LDE1IEBAIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJ
bWFnZUJ1ZmZlckJhY2tlbmQKICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNv
dXJjZUFscGhhRm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0aW5hdGlvblBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQsIHZvaWQqIGRhdGEpCit2
b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXIm
IHNvdXJjZVBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdGluYXRpb25Qb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0aW5hdGlv
bkFscGhhRm9ybWF0LCB2b2lkKiBkYXRhKQogewogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igbm9uLVJHQkE4IHBpeGVsIGZvcm1hdHMuCi0gICAgQVNTRVJUKHBpeGVsQnVmZmVyLmZvcm1h
dCgpLnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCk7CisgICAgQVNTRVJUKHNvdXJj
ZVBpeGVsQnVmZmVyLmZvcm1hdCgpLnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCk7
CiAKICAgICBhdXRvIHNvdXJjZVJlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzb3Vy
Y2VSZWN0KTsKICAgICBhdXRvIGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29y
ZGluYXRlcyhkZXN0aW5hdGlvblBvaW50KTsKIAotICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBw
ZWQgPSBpbnRlcnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkg
fSwgc291cmNlUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGlu
dGVyc2VjdGlvbih7IEludFBvaW50Ojp6ZXJvKCksIHNvdXJjZVBpeGVsQnVmZmVyLnNpemUoKSB9
LCBzb3VyY2VSZWN0U2NhbGVkKTsKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHNvdXJj
ZVJlY3RDbGlwcGVkOwogICAgIGRlc3RpbmF0aW9uUmVjdC5tb3ZlQnkoZGVzdGluYXRpb25Qb2lu
dFNjYWxlZCk7CiAKQEAgLTE3OSwxMyArMTc4LDEzIEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpwdXRQaXhlbEJ1ZmZlcigKICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGJhY2tlbmRS
ZWN0KCkpOwogICAgIHNvdXJjZVJlY3RDbGlwcGVkLnNldFNpemUoZGVzdGluYXRpb25SZWN0LnNp
emUoKSk7CiAKLSAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZl
ci5zaXplKCkud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxC
dWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVz
UGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VC
eXRlc1BlclJvdyA9IDQgKiBzb3VyY2VQaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VSb3dzID0gc291cmNlUGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEo
KSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVj
dENsaXBwZWQueCgpICogNDsKIAogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cg
PSBieXRlc1BlclJvdygpOwogICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdGluYXRpb25SZWN0LnkoKSAqIGRlc3RpbmF0
aW9uQnl0ZXNQZXJSb3cgKyBkZXN0aW5hdGlvblJlY3QueCgpICogNDsKIAotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IHNvdXJjZUZvcm1hdCB7IHNvdXJjZUFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6
UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OworICAgIFBpeGVsQnVmZmVyRm9y
bWF0IHNvdXJjZUZvcm1hdCA9IHNvdXJjZVBpeGVsQnVmZmVyLmZvcm1hdCgpOwogICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGRlc3RpbmF0aW9uRm9ybWF0IHsgZGVzdGluYXRpb25BbHBoYUZvcm1hdCwg
cGl4ZWxGb3JtYXQoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAKICAgICBDb25z
dFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHJldmlz
aW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTIgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAi
Q29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXNHTC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXJGb3JtYXQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
aW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTEwOSw4ICsxMDgsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFs
IE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpID0gMDsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhl
bEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0wmLCBHQ0dMZW51bSwg
UGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC0xNTAsOCArMTQ5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZv
aWQqIGRhdGEpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOworICAgIFdFQkNPUkVfRVhQ
T1JUIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZl
ckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRh
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBp
eGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIAog
ICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyQ29udmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXJDb252ZXJzaW9uLmNw
cAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGl4ZWxCdWZmZXJDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjQgKzMxLDY1
IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCiAKLSNp
ZiBVU0UoQUNDRUxFUkFURSkKKyNpZiBVU0UoQUNDRUxFUkFURSkgJiYgVVNFKENHKQorI2luY2x1
ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShBQ0NFTEVSQVRFKQorI2lm
IFVTRShBQ0NFTEVSQVRFKSAmJiBVU0UoQ0cpCisKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0NHSW1h
Z2VGb3JtYXQgbWFrZVZJbWFnZUNHSW1hZ2VGb3JtYXQoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQm
IGZvcm1hdCkKK3sKKyAgICBhdXRvIFtiaXRzUGVyQ29tcG9uZW50LCBiaXRzUGVyUGl4ZWwsIGJp
dG1hcEluZm9dID0gW10gKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBmb3JtYXQpIC0+IHN0ZDo6
dHVwbGU8dW5zaWduZWQsIHVuc2lnbmVkLCBDR0JpdG1hcEluZm8+IHsKKyAgICAgICAgc3dpdGNo
IChmb3JtYXQucGl4ZWxGb3JtYXQpIHsKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCQTg6
CisgICAgICAgICAgICBpZiAoZm9ybWF0LmFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV90
dXBsZSg4dSwgMzJ1LCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV90dXBsZSg4dSwgMzJ1LCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyB8IGtDR0lt
YWdlQWxwaGFMYXN0KTsKKworICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpCR1JBODoKKyAgICAg
ICAgICAgIGlmIChmb3JtYXQuYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKDh1
LCAzMnUsIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV90dXBsZSg4dSwgMzJ1LCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0lt
YWdlQWxwaGFGaXJzdCk7CisKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCMTA6CisgICAg
ICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OlJHQjEwQTg6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgOCBiaXQgcGl4ZWwg
Zm9ybWF0cyBmb3IgdGhlc2UgY29udmVyc2lvbnMuCisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoOHUsIDMydSwga0NHQml0bWFw
Qnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmlyc3QpOworICAgIH0oZm9ybWF0KTsK
KworICAgIHZJbWFnZV9DR0ltYWdlRm9ybWF0IHJlc3VsdDsKKworICAgIHJlc3VsdC5iaXRzUGVy
Q29tcG9uZW50ID0gYml0c1BlckNvbXBvbmVudDsKKyAgICByZXN1bHQuYml0c1BlclBpeGVsID0g
Yml0c1BlclBpeGVsOworICAgIHJlc3VsdC5jb2xvclNwYWNlID0gY2FjaGVkQ0dDb2xvclNwYWNl
KGZvcm1hdC5jb2xvclNwYWNlKTsKKyAgICByZXN1bHQuYml0bWFwSW5mbyA9IGJpdG1hcEluZm87
CisgICAgcmVzdWx0LnZlcnNpb24gPSAwOworICAgIHJlc3VsdC5kZWNvZGUgPSBudWxscHRyOwor
ICAgIHJlc3VsdC5yZW5kZXJpbmdJbnRlbnQgPSBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0Owor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlldz4gc3RhdGlj
IHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZlcihjb25zdCBWaWV3JiB2aWV3LCBjb25zdCBJ
bnRTaXplJiBzaXplKQogewotICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworICAgIHZJ
bWFnZV9CdWZmZXIgcmVzdWx0OwogCi0gICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19j
YXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOwotICAgIHZJbWFnZUJ1ZmZlci53
aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7Ci0gICAg
dkltYWdlQnVmZmVyLnJvd0J5dGVzID0gdmlldy5ieXRlc1BlclJvdzsKLSAgICB2SW1hZ2VCdWZm
ZXIuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHZpZXcucm93cyk7CisgICAgcmVzdWx0Lmhl
aWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAg
IHJlc3VsdC53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgo
KSk7CisgICAgcmVzdWx0LnJvd0J5dGVzID0gdmlldy5ieXRlc1BlclJvdzsKKyAgICByZXN1bHQu
ZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHZpZXcucm93cyk7CiAKLSAgICByZXR1cm4gdklt
YWdlQnVmZmVyOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbnZlcnRJ
bWFnZVBpeGVsc0FjY2VsZXJhdGVkKGNvbnN0IENvbnN0UGl4ZWxCdWZmZXJDb252ZXJzaW9uVmll
dyYgc291cmNlLCBjb25zdCBQaXhlbEJ1ZmZlckNvbnZlcnNpb25WaWV3JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50U2l6ZSYgZGVzdGluYXRpb25TaXplKQpAQCAtNTYsNiArOTcsMjIgQEAgc3RhdGlj
IHZvaWQgY29udmVydEltYWdlUGl4ZWxzQWNjZWxlcmF0ZQogICAgIGF1dG8gc291cmNlVkltYWdl
QnVmZmVyID0gbWFrZVZJbWFnZUJ1ZmZlcihzb3VyY2UsIGRlc3RpbmF0aW9uU2l6ZSk7CiAgICAg
YXV0byBkZXN0aW5hdGlvblZJbWFnZUJ1ZmZlciA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdGluYXRp
b24sIGRlc3RpbmF0aW9uU2l6ZSk7CiAKKyAgICBpZiAoc291cmNlLmZvcm1hdC5jb2xvclNwYWNl
ICE9IGRlc3RpbmF0aW9uLmZvcm1hdC5jb2xvclNwYWNlKSB7CisgICAgICAgIC8vIEZJWE1FOiBD
b25zaWRlciB1c2luZyB2SW1hZ2VDb252ZXJ0X0FueVRvQW55IGZvciBhbGwgY29udmVyc2lvbnMs
IG5vdCBqdXN0IG9uZXMgdGhhdCBuZWVkIGEgY29sb3Igc3BhY2UgY29udmVyc2lvbiwKKyAgICAg
ICAgLy8gYWZ0ZXIganVkaWNpb3VzbHkgcGVyZm9ybWFuY2UgdGVzdGluZyB0aGVtIGFnYWluc3Qg
ZWFjaCBvdGhlci4KKworICAgICAgICBhdXRvIHNvdXJjZUNHSW1hZ2VGb3JtYXQgPSBtYWtlVklt
YWdlQ0dJbWFnZUZvcm1hdChzb3VyY2UuZm9ybWF0KTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlv
bkNHSW1hZ2VGb3JtYXQgPSBtYWtlVkltYWdlQ0dJbWFnZUZvcm1hdChkZXN0aW5hdGlvbi5mb3Jt
YXQpOworCisgICAgICAgIHZJbWFnZV9FcnJvciBjb252ZXJ0ZXJDcmVhdGVFcnJvciA9IGt2SW1h
Z2VOb0Vycm9yOworICAgICAgICBhdXRvIGNvbnZlcnRlciA9IGFkb3B0Q0YodkltYWdlQ29udmVy
dGVyX0NyZWF0ZVdpdGhDR0ltYWdlRm9ybWF0KCZzb3VyY2VDR0ltYWdlRm9ybWF0LCAmZGVzdGlu
YXRpb25DR0ltYWdlRm9ybWF0LCBudWxscHRyLCBrdkltYWdlTm9GbGFncywgJmNvbnZlcnRlckNy
ZWF0ZUVycm9yKSk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKGNvbnZlcnRl
ckNyZWF0ZUVycm9yLCBjb252ZXJ0ZXJDcmVhdGVFcnJvciAhPSBrdkltYWdlTm9FcnJvciwgInZJ
bWFnZUNvbnZlcnRlciBjcmVhdGlvbiBmYWlsZWQgd2l0aCBlcnJvcjogJXpkIiwgY29udmVydGVy
Q3JlYXRlRXJyb3IpOworCisgICAgICAgIHZJbWFnZV9FcnJvciBjb252ZXJ0ZXJDb252ZXJ0RXJy
b3IgPSB2SW1hZ2VDb252ZXJ0X0FueVRvQW55KGNvbnZlcnRlci5nZXQoKSwgJnNvdXJjZVZJbWFn
ZUJ1ZmZlciwgJmRlc3RpbmF0aW9uVkltYWdlQnVmZmVyLCBudWxscHRyLCBrdkltYWdlTm9GbGFn
cyk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKGNvbnZlcnRlckNvbnZlcnRF
cnJvciwgY29udmVydGVyQ29udmVydEVycm9yID09IGt2SW1hZ2VOb0Vycm9yLCAidkltYWdlQ29u
dmVydF9BbnlUb0FueSBmYWlsZWQgY29udmVyc2lvbiB3aXRoIGVycm9yOiAlemQiLCBjb252ZXJ0
ZXJDb252ZXJ0RXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNvdXJj
ZS5mb3JtYXQuYWxwaGFGb3JtYXQgIT0gZGVzdGluYXRpb24uZm9ybWF0LmFscGhhRm9ybWF0KSB7
CiAgICAgICAgIGlmIChkZXN0aW5hdGlvbi5mb3JtYXQuYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CiAgICAgICAgICAgICBpZiAoc291cmNl
LmZvcm1hdC5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTgpCkBAIC0xODQsMTAgKzI0
MSw3IEBAIHZvaWQgY29udmVydEltYWdlUGl4ZWxzKGNvbnN0IENvbnN0UGl4ZWwKICAgICBBU1NF
UlQoc291cmNlLmZvcm1hdC5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgc291
cmNlLmZvcm1hdC5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAgIEFTU0VS
VChkZXN0aW5hdGlvbi5mb3JtYXQucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8
IGRlc3RpbmF0aW9uLmZvcm1hdC5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6QkdSQTgpOwog
Ci0gICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgY29udmVydGluZyBwaXhlbCBkYXRh
IGJldHdlZW4gZGlmZmVyZW50IGNvbG9yIHNwYWNlcy4KLSAgICBBU1NFUlQoc291cmNlLmZvcm1h
dC5jb2xvclNwYWNlID09IGRlc3RpbmF0aW9uLmZvcm1hdC5jb2xvclNwYWNlKTsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKQorI2lmIFVTRShBQ0NFTEVSQVRFKSAmJiBVU0UoQ0cpCiAgICAgaWYgKHNv
dXJjZS5mb3JtYXQuYWxwaGFGb3JtYXQgPT0gZGVzdGluYXRpb24uZm9ybWF0LmFscGhhRm9ybWF0
ICYmIHNvdXJjZS5mb3JtYXQucGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb24uZm9ybWF0LnBpeGVs
Rm9ybWF0KSB7CiAgICAgICAgIC8vIEZJWE1FOiBDYW4gdGhlcyBib3RoIGp1c3QgdXNlIHBlci1y
b3cgbWVtY3B5PwogICAgICAgICBpZiAoc291cmNlLmZvcm1hdC5hbHBoYUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQpAQCAtMTk3LDYgKzI1MSwxMCBAQCB2
b2lkIGNvbnZlcnRJbWFnZVBpeGVscyhjb25zdCBDb25zdFBpeGVsCiAgICAgfSBlbHNlCiAgICAg
ICAgIGNvbnZlcnRJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNvdXJjZSwgZGVzdGluYXRpb24sIGRl
c3RpbmF0aW9uU2l6ZSk7CiAjZWxzZQorICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkg
c3VwcG9ydCBjb252ZXJ0aW5nIHBpeGVsIGRhdGEgYmV0d2VlbiBkaWZmZXJlbnQgY29sb3Igc3Bh
Y2VzIGluIHRoZSBub24tYWNjZWxlcmF0ZWQgcGF0aC4KKyAgICAvLyBUaGlzIGNvdWxkIGJlIGFk
ZGVkIHVzaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZyb20gQ29sb3JDb252ZXJzaW9uLmguCisg
ICAgQVNTRVJUKHNvdXJjZS5mb3JtYXQuY29sb3JTcGFjZSA9PSBkZXN0aW5hdGlvbi5mb3JtYXQu
Y29sb3JTcGFjZSk7CisKICAgICBpZiAoc291cmNlLmZvcm1hdC5hbHBoYUZvcm1hdCA9PSBkZXN0
aW5hdGlvbi5mb3JtYXQuYWxwaGFGb3JtYXQpIHsKICAgICAgICAgaWYgKHNvdXJjZS5mb3JtYXQu
cGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb24uZm9ybWF0LnBpeGVsRm9ybWF0KSB7CiAgICAgICAg
ICAgICBpZiAoc291cmNlLmZvcm1hdC5hbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MDMsMTMgKzkwMywxNCBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VC
CiAgICAgaWYgKG1fdHlwZSAhPSBCbHVyU2hhZG93KQogICAgICAgICByZXR1cm47CiAKKyAgICBQ
aXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
IH07CiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1wbGF0ZVNpemUpOwotICAg
IGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0
YSA9IGxheWVySW1hZ2UuZ2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBibHVyUmVjdCk7CiAgICAgaWYg
KCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJsdXJMYXllckltYWdlKGxheWVy
RGF0YS0+ZGF0YSgpLmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICog
NCk7Ci0gICAgbGF5ZXJJbWFnZS5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJsdXJSZWN0KTsKKyAgICBsYXllckltYWdl
LnB1dFBpeGVsQnVmZmVyKCpsYXllckRhdGEsIGJsdXJSZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dC
bHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNv
bnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDE0ICsxMjAsMTQgQEAgVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQgogICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAK
LU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6Omdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXJGb3JtYXQgb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIHJldHVybiBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKIH0KIAotdm9p
ZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZl
ciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZl
ciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAgIEltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNl
LmdldCgpKSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1
ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOwogCiAgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVk
ID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CiAgICAgSW50UG9pbnQgZGVzdFBvaW50
U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzc0NTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6
CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZl
cihQaXhlbEJ1ZmZlckZvcm1hdCBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIElt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJiwgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4mJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lv
biAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw3ICsxODMsOCBAQCBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuCiAKICAgICBpZiAoQ0ZFcXVhbCh1
dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBh
bHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2Yg
YmxhY2suCi0gICAgICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICAgICAg
UGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Ig
fTsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKGZvcm1hdCwgbG9n
aWNhbFJlY3QoKSk7CiAgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAko
cmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTQg
KzE1OSwxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlCiAgICAg
cmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOwogfQogCi1PcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIHJldHVybiBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRh
KTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBp
eGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwg
ZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2RhdGEpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1h
dCwgbV9kYXRhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBPcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3Ju
ZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJ
KHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Mywx
NiArMTgzLDE2IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2sKICAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxvY2suc3VyZmFjZUJhc2VB
ZGRyZXNzKCkpOwogfQogCi1PcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFBpeGVsQnVmZmVy
PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0
CiB7CiAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKICAgICByZXR1cm4g
SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3Qs
IGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpCiB7CiAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlLCBJT1N1cmZh
Y2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVz
dFBvaW50LCBkZXN0Rm9ybWF0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKyAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOwogICAgIG1fcmVx
dWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlciA9IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsOCBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBPcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVm
ZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0
UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3Jt
YXQpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc0luVXNlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dm9pZCByZWxlYXNlR3JhcGhpY3NDb250ZXh0KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3NSwyMCArNzc1LDE4IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICByZXR1cm4gdHM7CiB9CiAKLVB1dFBpeGVsQnVmZmVy
OjpQdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkK
K1B1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKICAgICA6IG1fc3JjUmVjdChzcmNS
ZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9waXhlbEJ1ZmZlcihw
aXhlbEJ1ZmZlci5kZWVwQ2xvbmUoKSkgLy8gVGhpcyBjb3B5IGlzIGFjdHVhbGx5IHJlcXVpcmVk
IHRvIHByZXNlcnZlIHRoZSBzZW1hbnRpY3Mgb2YgcHV0UGl4ZWxCdWZmZXIoKS4KLSAgICAsIG1f
aW5wdXRGb3JtYXQoaW5wdXRGb3JtYXQpCiAgICAgLCBtX2Rlc3RGb3JtYXQoZGVzdEZvcm1hdCkK
IHsKIH0KIAotUHV0UGl4ZWxCdWZmZXI6OlB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkKK1B1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1ZmZlcihQaXhlbEJ1
ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiAgICAgOiBt
X3NyY1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KGRlc3RQb2ludCkKICAgICAsIG1f
cGl4ZWxCdWZmZXIoV1RGTW92ZShwaXhlbEJ1ZmZlcikpCi0gICAgLCBtX2lucHV0Rm9ybWF0KGlu
cHV0Rm9ybWF0KQogICAgICwgbV9kZXN0Rm9ybWF0KGRlc3RGb3JtYXQpCiB7CiB9CkBAIC03OTcs
NyArNzk1LDYgQEAgUHV0UGl4ZWxCdWZmZXI6OlB1dFBpeGVsQnVmZmVyKGNvbnN0IFB1dAogICAg
IDogbV9zcmNSZWN0KG90aGVyLm1fc3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KG90aGVyLm1f
ZGVzdFBvaW50KQogICAgICwgbV9waXhlbEJ1ZmZlcihvdGhlci5tX3BpeGVsQnVmZmVyLmRlZXBD
bG9uZSgpKQotICAgICwgbV9pbnB1dEZvcm1hdChvdGhlci5tX2lucHV0Rm9ybWF0KQogICAgICwg
bV9kZXN0Rm9ybWF0KG90aGVyLm1fZGVzdEZvcm1hdCkKIHsKIH0KQEAgLTgxNCwxMyArODExLDEx
IEBAIHZvaWQgUHV0UGl4ZWxCdWZmZXI6OnN3YXAoUHV0UGl4ZWxCdWZmZXIKICAgICBzdGQ6OnN3
YXAobV9zcmNSZWN0LCBvdGhlci5tX3NyY1JlY3QpOwogICAgIHN0ZDo6c3dhcChtX2Rlc3RQb2lu
dCwgb3RoZXIubV9kZXN0UG9pbnQpOwogICAgIHN0ZDo6c3dhcChtX3BpeGVsQnVmZmVyLCBvdGhl
ci5tX3BpeGVsQnVmZmVyKTsKLSAgICBzdGQ6OnN3YXAobV9pbnB1dEZvcm1hdCwgb3RoZXIubV9p
bnB1dEZvcm1hdCk7CiAgICAgc3RkOjpzd2FwKG1fZGVzdEZvcm1hdCwgb3RoZXIubV9kZXN0Rm9y
bWF0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFB1dFBpeGVsQnVmZmVyJiBpdGVtKQogewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW5w
dXRGb3JtYXQiLCBpdGVtLmlucHV0Rm9ybWF0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGl4
ZWxCdWZmZXJTaXplIiwgaXRlbS5waXhlbEJ1ZmZlcigpLnNpemUoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZGVzdFBvaW50IiwgaXRlbS5kZXN0UG9pbnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5MDUsMTggKzE5MDUsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7CiAKLSAgICBHZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVj
dCkKKyAgICBHZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCBvdXRwdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCiAgICAgICAgIDogbV9zcmNS
ZWN0KHNyY1JlY3QpCiAgICAgICAgICwgbV9vdXRwdXRGb3JtYXQob3V0cHV0Rm9ybWF0KQogICAg
IHsKICAgICB9CiAKLSAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3V0cHV0Rm9ybWF0OyB9CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgb3V0
cHV0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9vdXRwdXRGb3JtYXQ7IH0KICAgICBJbnRSZWN0
IHNyY1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KIAogcHJpdmF0ZToKICAgICBJ
bnRSZWN0IG1fc3JjUmVjdDsKLSAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fb3V0cHV0Rm9y
bWF0OworICAgIFBpeGVsQnVmZmVyRm9ybWF0IG1fb3V0cHV0Rm9ybWF0OwogfTsKIAogY2xhc3Mg
UHV0UGl4ZWxCdWZmZXIgewpAQCAtMTkyNSw4ICsxOTI1LDggQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhl
bEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgUHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4
ZWxCdWZmZXImJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBQdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUHV0UGl4ZWxCdWZmZXIoUGl4ZWxCdWZm
ZXImJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAogICAgIFB1dFBpeGVsQnVmZmVy
KGNvbnN0IFB1dFBpeGVsQnVmZmVyJik7CiAgICAgUHV0UGl4ZWxCdWZmZXIoUHV0UGl4ZWxCdWZm
ZXImJikgPSBkZWZhdWx0OwpAQCAtMTkzNSw3ICsxOTM1LDYgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzd2FwKFB1dFBpeGVsQnVmZmVyJik7CiAKLSAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEZvcm1hdDsgfQogICAgIGNvbnN0IFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXI7IH0K
ICAgICBJbnRSZWN0IHNyY1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBJ
bnRQb2ludCBkZXN0UG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RQb2ludDsgfQpAQCAtMTk1
MSwxNCArMTk1MCwxMiBAQCBwcml2YXRlOgogICAgIEludFJlY3QgbV9zcmNSZWN0OwogICAgIElu
dFBvaW50IG1fZGVzdFBvaW50OwogICAgIFBpeGVsQnVmZmVyIG1fcGl4ZWxCdWZmZXI7Ci0gICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2lucHV0Rm9ybWF0OwogICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gbV9kZXN0Rm9ybWF0OwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZv
aWQgUHV0UGl4ZWxCdWZmZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAg
IGVuY29kZXIgPDwgbV9pbnB1dEZvcm1hdDsKICAgICBlbmNvZGVyIDw8IG1fcGl4ZWxCdWZmZXI7
CiAgICAgZW5jb2RlciA8PCBtX3NyY1JlY3Q7CiAgICAgZW5jb2RlciA8PCBtX2Rlc3RQb2ludDsK
QEAgLTE5NjgsMTYgKzE5NjUsMTEgQEAgdm9pZCBQdXRQaXhlbEJ1ZmZlcjo6ZW5jb2RlKEVuY29k
ZXImIGVuYwogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIE9wdGlvbmFsPFB1dFBpeGVsQnVmZmVy
PiBQdXRQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgT3B0aW9u
YWw8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4gaW5wdXRGb3JtYXQ7CiAgICAgT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IHBpeGVsQnVmZmVyOwogICAgIE9wdGlvbmFsPEludFJlY3Q+IHNyY1JlY3Q7CiAg
ICAgT3B0aW9uYWw8SW50UG9pbnQ+IGRlc3RQb2ludDsKICAgICBPcHRpb25hbDxBbHBoYVByZW11
bHRpcGxpY2F0aW9uPiBkZXN0Rm9ybWF0OwogCi0gICAgZGVjb2RlciA+PiBpbnB1dEZvcm1hdDsK
LSAgICBpZiAoIWlucHV0Rm9ybWF0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCiAg
ICAgZGVjb2RlciA+PiBwaXhlbEJ1ZmZlcjsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTk5NCw3ICsxOTg2LDcgQEAgT3B0aW9uYWw8UHV0
UGl4ZWxCdWZmZXI+IFB1dFBpeGVsQnVmZmVyOgogICAgIGlmICghZGVzdEZvcm1hdCkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiB7eyAqaW5wdXRGb3JtYXQsIFdU
Rk1vdmUoKnBpeGVsQnVmZmVyKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0IH19
OworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksICpzcmNSZWN0LCAqZGVzdFBv
aW50LCAqZGVzdEZvcm1hdCB9fTsKIH0KIAogI2lmIEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTQgKzU1LDE0IEBAIFJlY29yZGVy
Ojp+UmVjb3JkZXIoKQogICAgIExPRyhEaXNwbGF5TGlzdHMsICJSZWNvcmRlZCBkaXNwbGF5IGxp
c3Q6XG4lcyIsIG1fZGlzcGxheUxpc3QuZGVzY3JpcHRpb24oKS5kYXRhKCkpOwogfQogCi12b2lk
IFJlY29yZGVyOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmdldFBpeGVs
QnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QpCiB7CiAgICAgYXBwZW5kPEdldFBpeGVsQnVmZmVyPihvdXRwdXRGb3Jt
YXQsIHNvdXJjZVJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpwdXRQaXhlbEJ1ZmZlcihXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQ
aXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgUmVjb3JkZXI6OnB1dFBpeGVsQnVmZmVyKGNv
bnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAgIGFwcGVuZDxQdXRQ
aXhlbEJ1ZmZlcj4oaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IGRlc3RGb3JtYXQpOworICAgIGFwcGVuZDxQdXRQaXhlbEJ1ZmZlcj4ocGl4ZWxCdWZmZXIsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CiB9CiAKIHN0YXRpYyBib29sIGNvbnRhaW5z
T25seUlubGluZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYg
Y2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxh
Z3MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgJKHJldmlzaW9u
IDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDggQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERp
c3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3Qm
IGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRy
LCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlw
aHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4
ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCk7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlM
aXN0LmlzRW1wdHkoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDI3
NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw4ICsyODUsOSBAQCB2b2lkIEZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAgaWYgKGluQnVmZmVyKQogICAgICAg
ICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAorICAgIFBp
eGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Ig
fTsKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNh
bFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7
CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIGltYWdlUmVjdCk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
CkBAIC0zMTMsNyArMzE0LDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29m
dHdhcgogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxCdWZm
ZXIsIGltYWdlUmVjdCk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1
ZmZlciwgaW1hZ2VSZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTUg
Kzk5LDE2IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKIAogICAg
IFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29s
b3IpOwogCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IgfTsKICAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0
SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFn
ZS0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
c2hhZG93QXJlYSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhl
bEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+
ZGF0YSgpOwogICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJh
eS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndp
ZHRoKCkpOwogICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOwor
ICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEp
OwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFn
ZUJ1ZmZlclJlCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBp
eGVsQnVmZmVyKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsK
ICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJl
Y3QpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC00Mzks
NyArNDM5LDcgQEAgc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjbwogI2Vu
ZGlmCiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhl
bEJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFj
ZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhl
bEJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFj
ZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQogewogICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJ
bWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVj
ZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCiAKQEAgLTQ1MCwyMCArNDUwLDI2IEBAIE9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnYKICAgICBhdXRvIGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUo
KSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBwaXhlbEJ1ZmZl
ciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xv
clNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgb3V0cHV0
Rm9ybWF0KTsKKyAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0aW5h
dGlvblJlY3QpOworICAgIHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFy
Z2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5mb3Jt
YXQoKS5hbHBoYUZvcm1hdCk7CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZl
Y3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
dGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0
QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEFscGhhRm9ybWF0KQogeworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZGly
ZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJDb252ZXJzaW9uLgorCiAgICAgRmxvYXRTaXplIGNsYW1w
ZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKwogICAgIC8v
IENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1
dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCiAgICAgYXV0byBjb252
ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2Us
IFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhh
cHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFu
b3RoZXIKICAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5w
dXRCdWZmZXIsIHJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVm
ZmVyKG91dHB1dEZvcm1hdCwgcmVjdCk7CisgICAgCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCIH07CisgICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCByZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQpAQCAtNDc1LDExICs0ODEs
MTEgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZgogICAgIGNvcHlJ
bWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0
UmVjdCk7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJU
b0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgUGl4ZWxCdWZmZXIm
IHBpeGVsQnVmZmVyLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkK
IHsKICAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwKICAgICAvLyB3aGljaGV2ZXIgaXNu
J3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVs
QnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVs
QnVmZmVyLCBvdXRwdXRGb3JtYXQpOworICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBj
b252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4ZWxCdWZmZXIpOwog
ICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBjb3B5
SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVz
dFJlY3QpOwpAQCAtNDk4LDcgKzUwNCw4IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0
aXBsaWVkUmVzdWwKICAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0p
OworICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQiB9OworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICghbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0gZWxzZSB7CkBAIC01MTMsNyArNTIwLDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11
bHRpcGxpZWRSZXN1bAogICAgICAgICB9CiAgICAgfQogICAgIGlmIChyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZl
cnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIHJlY3QpOworICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3Bh
Y2UsIHJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNvcHlJbWFnZUJ5dGVzKG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwpAQCAt
NTMyLDcgKzUzOSw4IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3UK
ICAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgcmVjdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7
IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOworICAgICAgICAgICAg
UGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Ig
fTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CkBAIC01
NDgsNyArNTU2LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdQog
ICAgIH0KIAogICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24o
Y29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5h
dGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7CisgICAgICAg
IGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkocmV2aXNp
b24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDEwICsyMDQsMTAgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29u
c3Q7CiAgICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4
Q2xhbXBlZEFycmF5JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJU
b0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVk
QXJyYXkmLCBQaXhlbEJ1ZmZlciYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgY29uc3QgSW50UmVj
dCYpOwogICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKE9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlLCBQ
aXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIE9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
KTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImKTsKICAgICAKIAogICAgIEZp
bHRlciYgbV9maWx0ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5j
cHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
MiwxNiArMzEyLDE2IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2UK
ICAgICByZXR1cm4geyB9OwogfQogCi1PcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihQaXhlbEJ1
ZmZlckZvcm1hdCBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpn
ZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOwogfQogCi12b2lk
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIs
IHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbnVsbHB0cik7CisgICAgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50
LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw4IEBAIHB1YmxpYzoKICAgICBW
ZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdS
QURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBn
ZXRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlckZvcm1hdCBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogcHJvdGVj
dGVkOgogICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
U2hhcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
U2hhcGUuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw4IEBAIHN0ZDo6
dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3QKICAgICBpZiAoaW1hZ2UpCiAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCks
IGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZl
ci0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCB7IEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CisgICAgUGl4ZWxCdWZmZXJGb3Jt
YXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhl
bEZvcm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OworICAgIGF1dG8g
cGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBv
aW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CiAgICAgCiAgICAgLy8gV2UgY291bGQgZ2V0IHRv
IGEgdmFsdWUgd2hlcmUgUGl4ZWxCdWZmZXIgY291bGQgYmUgbnVsbG9wdC4gQSBjYXNlIHdoZXJl
IEltYWdlUmVjdC5zaXplKCkgaXMgaHVnZSwgUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZQogICAgIC8v
IGNhbiByZXR1cm4gYSBudWxsb3B0IGJlY2F1c2UgZGF0YSBzaXplIGhhcyBvdmVyZmxvd2VkLiBS
ZWZlciByZGFyOi8vcHJvYmxlbS82MTc5Mzg4NApJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzQ5
NykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjkgQEAKKzIwMjEtMDUtMTQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAg
ICAgIFVzZSBQaXhlbEJ1ZmZlckZvcm1hdCB0byBzcGVjaWZ5IEltYWdlQnVmZmVyOjpnZXRQaXhl
bEJ1ZmZlciBkZXN0aW5hdGlvbiBmb3JtYXQgYWxsb3dpbmcgZm9yIG1vcmUgY29udHJvbCBvdmVy
IGRhdGEgY29udmVyc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI1ODEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlIGNhbGxzL2ltcGxlbWVudGF0aW9ucyBvZiBnZXRQaXhlbEJ1ZmZlci9w
dXRQaXhlbEJ1ZmZlciB0byBhZGp1c3QKKyAgICAgICAgdG8gbmV3IHNpZ25hdHVyZS4gCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmg6CisgICAgICAg
ICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpDR0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgICogU2hhcmVkL1JlbW90
ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cHV0UGl4ZWxCdWZmZXIp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVs
QnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDoKKwogMjAyMS0wNS0xNCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlc291cmNlIFRp
bWluZzogc2VjdXJlQ29ubmVjdGlvblN0YXJ0ID09IDAgd2hlbiBhIGNvbm5lY3Rpb24gaXMgcmUt
dXNlZApJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPigpKSB7CiAgICAgICAgICAgICBhdXRvJiBwdXRQ
aXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxC
dWZmZXI+KCk7Ci0gICAgICAgICAgICBwdXRQaXhlbEJ1ZmZlcihwdXRQaXhlbEJ1ZmZlckl0ZW0u
aW5wdXRGb3JtYXQoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnBpeGVsQnVmZmVyKCksIHB1dFBpeGVs
QnVmZmVySXRlbS5zcmNSZWN0KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0UG9pbnQoKSwgcHV0
UGl4ZWxCdWZmZXJJdGVtLmRlc3RGb3JtYXQoKSk7CisgICAgICAgICAgICBwdXRQaXhlbEJ1ZmZl
cihwdXRQaXhlbEJ1ZmZlckl0ZW0ucGl4ZWxCdWZmZXIoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnNy
Y1JlY3QoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLmRlc3RQb2ludCgpLCBwdXRQaXhlbEJ1ZmZlckl0
ZW0uZGVzdEZvcm1hdCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJl
dmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9D
R0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDEzICsxMDUsMTMgQEAgVmVjdG9yPHVpbnQ4X3Q+IENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcgog
ICAgIHJldHVybiB7IH07CiB9CiAKLU9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBDR0Rp
c3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QKK09wdGlv
bmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3Qg
V2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uKQordm9pZCBD
R0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJD
b3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24pCiB7CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVM
YXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXJCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgcHVibGljOgogICAgIC8vIE5PVEU6IFRoZXNlIGFs
bCBBU1NFUlRfTk9UX1JFQUNIRUQoKS4KICAgICBSZWZQdHI8V2ViQ29yZTo6TmF0aXZlSW1hZ2U+
IGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29w
eUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdS
QURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZl
cj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lk
IHB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxX
ZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxC
dWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxC
dWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRV
cHBlckxlZnRDb3JuZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywxNCArMTYzLDE0IEBAIFZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG0KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjp0b0JHUkFEYXRhKG1fYml0bWFwLT5kYXRhKCkpOwogfQogCi1PcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBt
X2JpdG1hcC0+ZGF0YSgpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1
dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0
UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IGRlc3RGb3JtYXQsIG1fYml0bWFwLT5kYXRhKCkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1h
dCwgbV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCShyZXZpc2lv
biAyNzc0NTEpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1
OSw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGNvcHlJbWFnZShXZWJD
b3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSwgV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uOjpObykg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0UGl4ZWxCdWZm
ZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2Vi
Q29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVs
QnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYg
b3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0
UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlk
ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCShyZXZpc2lvbiAyNzc0NTEpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDEyICsxOTQsMTEgQEAgcHJvdGVjdGVkOgog
ICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KIAotICAgIE9wdGlv
bmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4g
Z2V0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIGRlc3RpbmF0
aW9uRm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlk
ZQogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIFdlYkNv
cmU6OlBpeGVsQnVmZmVyRm9ybWF0IGRlc3RpbmF0aW9uRm9ybWF0IHsgb3V0cHV0Rm9ybWF0LCBX
ZWJDb3JlOjpQaXhlbEZvcm1hdDo6UkdCQTgsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQiB9OwogICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gV2ViQ29yZTo6UGl4ZWxCdWZm
ZXI6OnRyeUNyZWF0ZShkZXN0aW5hdGlvbkZvcm1hdCwgc3JjUmVjdC5zaXplKCkpOwogICAgICAg
ICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAg
LTIxMSw3ICsyMTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgICAgIGF1dG8mIG11dGFibGVUaGlzID0gY29uc3RfY2FzdDxSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5Jj4oKnRoaXMpOwotICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250
ZXh0LnJlY29yZGVyKCkuZ2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKKyAg
ICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmdldFBpeGVsQnVm
ZmVyKGRlc3RpbmF0aW9uRm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgbXV0YWJsZVRoaXMuZmx1
c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CiAKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LT53YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKHRpbWVvdXQpKQpA
QCAtMjIxLDEyICsyMjAsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gcGl4ZWxCdWZm
ZXI7CiAgICAgfQogCi0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpIG92ZXJyaWRlCisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQ
aXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpIG92ZXJyaWRlCiAgICAgewogICAgICAgICAvLyBUaGUgbWF0
aCBpbnNpZGUgUGl4ZWxCdWZmZXI6OmNyZWF0ZSgpIGRvZXNuJ3QgYWdyZWUgd2l0aCB0aGUgbWF0
aCBpbnNpZGUgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcigpIGFib3V0IGhvdyBt
X3Jlc29sdXRpb25TY2FsZSBpbnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBpbiB0aGUgSW1hZ2VCdWZm
ZXIuCiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBwdXRQaXhlbEJ1ZmZlcigpIGlzIG9ubHkg
Y2FsbGVkIHdoZW4gcmVzb2x1dGlvblNjYWxlKCkgPT0gMS4KICAgICAgICAgQVNTRVJUKHJlc29s
dXRpb25TY2FsZSgpID09IDEpOwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCku
cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9p
bnQsIGRlc3RGb3JtYXQpOworICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkucHV0
UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7
CiAgICAgfQogCiAgICAgYm9vbCBwcmVmZXJzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2Ev
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUx
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAs
MTMgKzEyMCwxMyBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhl
bEJ1ZmZlckZvcm1hdCYsIGNvbnN0IEludFJlY3QmKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb24sIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBv
aW50JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAkocmV2
aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9j
b2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0
IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQ
aXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+
IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IHB1dFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwg
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0VXBwZXJMZWZ0Q29ybmVyID0gdHJ1
ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgY2FuTWFwQmFja2luZ1N0b3JlID0gZmFsc2U7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428647</attachid>
            <date>2021-05-14 12:58:17 -0700</date>
            <delta_ts>2021-05-14 18:00:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225813-20210514125816.patch</filename>
            <type>text/plain</type>
            <size>74015</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAyMS0wNS0xNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyRm9ybWF0
IHRvIHNwZWNpZnkgSW1hZ2VCdWZmZXI6OmdldFBpeGVsRGF0YSBkZXN0aW5hdGlvbiBmb3JtYXQg
YWxsb3dpbmcgZm9yIG1vcmUgY29udHJvbCBvdmVyIGRhdGEgY29udmVyc2lvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODEzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHJlcHJldmlvdXMgc2ln
bmF0dXJlIG9mIEltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcjoKKworICAgICAgICAgICAgSW1h
Z2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmKTsKKyAgICAgICAgCisgICAgICAgIG9ubHkgYWxsb3dlZCBzcGVjaWZ5aW5nIHRoZSB0
eXBlIG9mIGFscGhhIHByZW11bHRpcGxpY2F0aW9uIHdhbnRlZCwgYW5kIGhhcmQgY29kZWQKKyAg
ICAgICAgYSBwaXhlbCBmb3JtYXQgb2YgUkdCQTggYW5kIGNvbG9yIHNwYWNlIG9mIFNSR0IuIFRv
IHN1cHBvcnQgYWNjdXJhdGUgYW5kIGVmZmljaWVudAorICAgICAgICBhY2Nlc3MgdG8gcGl4ZWwg
YnVmZmVycyB3aXRoIGRpZmZlcmVudCBwaXhlbCBmb3JtYXRzIGFuZCBjb2xvciBzcGFjZXMgd2Ug
bmVlZCB0byBiZQorICAgICAgICBhYmxlIHRvIHRlbGwgZ2V0UGl4ZWxCdWZmZXIgd2hhdCB3ZSB3
YW50IHVwIGZyb250LCBzbyB0aGF0IGlmIHRoZSBJbWFnZUJ1ZmZlciBhbHJlYWR5CisgICAgICAg
IGhhcyBhIERpc3BsYXlQMyBidWZmZXIsIGFuZCB3ZSB3YW50IERpc3BsYXlQMyBwaXhlbHMsIHdl
IGRvbid0IGZpcnN0IGNvbnZlcnQgdG8gU1JHQgorICAgICAgICBhbmQgdGhlbiBjb252ZXJ0IGJh
Y2sgdG8gRGlzcGxheVAzICh3aGljaCB3b3VsZCBiZSBzbG93IGFuZCBsb3NlIGFueSBvdXQgb2Yg
Z2FtdXQKKyAgICAgICAgZGF0YSkuIFRoZSBuZXcgc2lnbmF0dXJlIGFsbG93cyB1cyB0byBzcGVj
aWZ5IHRoZSBlbnRpcmUgZm9ybWF0IHRyaXBsZToKKyAgICAgICAgCisgICAgICAgICAgICBJbWFn
ZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBJbWFnZUJ1ZmZlcjo6cHV0UGl4ZWxC
dWZmZXIoKSBubyBsb25nZXIgbmVlZHMgdG8gcHJvdmlkZSB0aGUgc291cmNlCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZWl0aGVyLCBhcyB0aGUgUGl4ZWxCdWZmZXIgaXRzZWxmIGFs
c28gY29udGFpbnMgdGhhdCBpbmZvcm1hdGlvbi4KKworICAgICAgICBOb3cgdGhhdCB3ZSBhcmUg
cGFzc2luZyBjb2xvciBzcGFjZSBpbmZvcm1hdGlvbiwgd2UgbmVlZCB0byBzdXBwb3J0IGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24sCisgICAgICAgIHNvIFBpeGVsQnVmZmVyQ29udmVyc2lvbiB3YXMg
dXBkYXRlZCB0byBzdXBwb3J0IGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gb24gQ0cgcGxhdGZvcm1z
CisgICAgICAgIHVzaW5nIHZJbWFnZUNvbnZlcnRfQW55VG9BbnkuIFRoaXMgaXMgbm90IGN1cnJl
bnRseSBleGNlcnNpc2VkLCBidXQgd2lsbCBiZSBpbiBhIHN1YnNlcXVlbnQKKyAgICAgICAgY2hh
bmdlIHdoZXJlIGNhbnZhcyBJbWFnZURhdGEgZ2FpbnMgYSBjb2xvciBzcGFjZSBzZXR0aW5nLCBh
dCB3aGljaCBwb2ludCBpdCBjYW4gYmUgdGVzdGVkLgorCisgICAgICAgIFdlIGFsc28gZG9uJ3Qg
Y3VycmVudGx5IHN1cHBvcnQgY29sb3Igc3BhY2UgY29udmVyc2lvbiBvbiBub24tQ0cgcGxhdGZv
cm1zLiBUaGlzIHdvbid0CisgICAgICAgIGJlIGEgcHJvYmxlbSBpbiB0aGUgc2hvcnQgdGVybSwg
YXMgb25seSBDRyBwbGF0Zm9ybXMgc3VwcG9ydCBEaXNwbGF5UDMsIHRoZSBvbmx5IG90aGVyCisg
ICAgICAgIGNvbG9yIHNwYWNlIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBjdXJyZW50bHksIGJ1dCBh
cyBjbGVhbnVwLCB3ZSBzaG91bGQgYWRkIHN1cHBvcnQgZm9yCisgICAgICAgIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24gdXNpbmcgdGhlIENvbG9yQ29udmVyc2lvbiBhbmQgQ29sb3JUcmFuc2ZlckZ1
bmN0aW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgIGZvciBvdGhlciBwb3J0cywgbW92aW5nIHRo
ZSBleGlzdGluZyBzdXBwb3J0IGZvciBTUkdCIHRvL2Zyb20gTGluZWFyU1JHQiBjb252ZXJzaW9u
cyBmcm9tCisgICAgICAgIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIGFuZCBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC4KKworICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1
ZmZlckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUNHSW1hZ2VG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpjb252ZXJ0SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQ
aXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlB1dFBpeGVsQnVmZmVyOjpzd2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBp
eGVsQnVmZmVyOjpHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6Om91dHB1dEZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI6OmlucHV0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFw
ZSk6CisKIDIwMjEtMDUtMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXNvdXJjZSBUaW1pbmc6IHNlY3VyZUNvbm5lY3Rpb25TdGFydCA9
PSAwIHdoZW4gYSBjb25uZWN0aW9uIGlzIHJlLXVzZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
Mjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3NSw4ICsxMDc1LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAgICAgICAgIGNvbnN0
IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBh
dXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0p
OworICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAgICAgICAgIGlmICghcGl4
ZWxCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6
VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzE2Myw3ICszMTY0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgeyBJbnRQb2ludDo6emVybygp
LCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihpbWFnZURh
dGEtPnBpeGVsQnVmZmVyKCksIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAK
ICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKEltYWdlQml0bWFwQmFj
a2luZyhXVEZNb3ZlKGJ1ZmZlciksIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+Ojpmcm9t
UmF3KHNlcmlhbGl6YXRpb25TdGF0ZSkpKTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0
bWFwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCShyZXZpc2lvbiAyNzc0
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODA3LDcgKzgwNyw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2Ny
aXB0RXgKICAgICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBh
bHBoYVByZW11bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRp
cGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKICAgICBpZiAoc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUu
cmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUgJiYgb3B0aW9ucy5pbWFnZU9y
aWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5vbmUpIHsKLSAg
ICAgICAgYml0bWFwRGF0YS0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3Rhbmds
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyB9LCBhbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAg
ICAgICAgYml0bWFwRGF0YS0+cHV0UGl4ZWxCdWZmZXIoaW1hZ2VEYXRhLT5waXhlbEJ1ZmZlcigp
LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgfSwgYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbik7CiAgICAgICAgIAogICAgICAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRl
KEltYWdlQml0bWFwQmFja2luZyhXVEZNb3ZlKGJpdG1hcERhdGEpKSk7CiAgICAgICAgIC8vIFRo
ZSByZXN1bHQgaXMgaW1wbGljaXRseSBvcmlnaW4tY2xlYW4sIGFuZCBhbHBoYSBwcmVtdWx0aXBs
aWNhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCkBAIC04MjIsNyArODIyLDcgQEAgdm9p
ZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeAogICAgICAgICByZXNvbHZlV2l0
aEJsYW5rSW1hZ2VCdWZmZXIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdHJ1ZSwgV1RGTW92ZShw
cm9taXNlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGVtcEJpdG1hcERhdGEtPnB1
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VEYXRhLT5waXhlbEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwg
aW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAg
dGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVyKGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwg
SW50UmVjdCgwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCkpLCB7
IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9h
dFBvaW50KCksIG91dHB1dFNpemUpOwogICAgIGJpdG1hcERhdGEtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKnRlbXBCaXRtYXBEYXRhLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVhbGl0eShv
cHRpb25zLnJlc2l6ZVF1YWxpdHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRpb24ob3B0
aW9ucy5pbWFnZU9yaWVudGF0aW9uKSB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJ
KHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDcgKzIxOTks
OCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuCiAgICAgaWYgKCFi
dWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFnZURhdGFSZWN0
LnNpemUoKSk7CiAKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJlY3Qp
OworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IgfTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gYnVmZmVyLT5nZXRQaXhlbEJ1ZmZl
cihmb3JtYXQsIGltYWdlRGF0YVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpIHsKICAgICAg
ICAgY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6OkVycm9yLAogICAgICAg
ICAgICAgbWFrZVN0cmluZygiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIiwgaW1hZ2VEYXRhUmVjdC53aWR0aCgpLCAiIHggIiwgaW1hZ2VE
YXRhUmVjdC5oZWlnaHQoKSkpOwpAQCAtMjI0Niw3ICsyMjQ3LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbQogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJl
Y3QgeyAwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkgfSk7CiAKICAgICBpZiAoIXNv
dXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YS5waXhlbEJ1ZmZlcigpLCBz
b3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAgICAgIGJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIoZGF0YS5waXhlbEJ1ZmZlcigpLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRl
c3RPZmZzZXQgfSk7CiAKICAgICBkaWREcmF3KEZsb2F0UmVjdCB7IGRlc3RSZWN0IH0sIHsgfSk7
IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzAsNyArMzcwLDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6
OgogICAgICAgICAgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwog
ICAgICAgICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzb3VyY2VTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAg
ICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJj
ZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIo
aW1hZ2VEYXRhLT5waXhlbEJ1ZmZlcigpLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3Jl
dGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIo
Y29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwpAQCAtMjM5LDExICsyMzksMTEg
QEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAg
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlk
ZQorICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAgICBmbHVzaENvbnRl
eHQoKTsKLSAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBw
aXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAgICAgICAgICAg
IGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQs
IGRlc3RGb3JtYXQpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNiw4ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQ
aXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCkgPSAwOwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKICAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0Nv
bnN1bWluZyhHCiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkKIHsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07
CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKGZvcm1hdCwgbG9naWNhbFJl
Y3QoKSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC04OCw3
ICs4OSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEKICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKICAgICB9CiAKLSAgICBw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpw
aXhlbEJ1ZmZlciwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onplcm8oKSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgcHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2ludDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFj
a2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdApAQCAtMTEzLDEyICsxMTQsMTAgQEAg
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CRwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgdm9pZCogZGF0YSkgY29uc3QKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyRm9ybWF0JiBkZXN0aW5hdGlvbkZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgdm9pZCogZGF0YSkgY29uc3QKIHsKICAgICBhdXRvIHNvdXJjZVJlY3RTY2FsZWQgPSB0b0Jh
Y2tlbmRDb29yZGluYXRlcyhzb3VyY2VSZWN0KTsKIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGRl
c3RpbmF0aW9uRm9ybWF0IHsgZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJH
QkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKLQogICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGRlc3RpbmF0aW9uRm9ybWF0LCBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKQEAgLTE1OCwxNSArMTU3LDE1IEBAIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJ
bWFnZUJ1ZmZlckJhY2tlbmQKICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNv
dXJjZUFscGhhRm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0aW5hdGlvblBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQsIHZvaWQqIGRhdGEpCit2
b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXIm
IHNvdXJjZVBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdGluYXRpb25Qb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0aW5hdGlv
bkFscGhhRm9ybWF0LCB2b2lkKiBkYXRhKQogewogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igbm9uLVJHQkE4IHBpeGVsIGZvcm1hdHMuCi0gICAgQVNTRVJUKHBpeGVsQnVmZmVyLmZvcm1h
dCgpLnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCk7CisgICAgQVNTRVJUKHNvdXJj
ZVBpeGVsQnVmZmVyLmZvcm1hdCgpLnBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCk7
CiAKICAgICBhdXRvIHNvdXJjZVJlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzb3Vy
Y2VSZWN0KTsKICAgICBhdXRvIGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29y
ZGluYXRlcyhkZXN0aW5hdGlvblBvaW50KTsKIAotICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBw
ZWQgPSBpbnRlcnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkg
fSwgc291cmNlUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGlu
dGVyc2VjdGlvbih7IEludFBvaW50Ojp6ZXJvKCksIHNvdXJjZVBpeGVsQnVmZmVyLnNpemUoKSB9
LCBzb3VyY2VSZWN0U2NhbGVkKTsKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHNvdXJj
ZVJlY3RDbGlwcGVkOwogICAgIGRlc3RpbmF0aW9uUmVjdC5tb3ZlQnkoZGVzdGluYXRpb25Qb2lu
dFNjYWxlZCk7CiAKQEAgLTE3OSwxMyArMTc4LDEzIEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpwdXRQaXhlbEJ1ZmZlcigKICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGJhY2tlbmRS
ZWN0KCkpOwogICAgIHNvdXJjZVJlY3RDbGlwcGVkLnNldFNpemUoZGVzdGluYXRpb25SZWN0LnNp
emUoKSk7CiAKLSAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZl
ci5zaXplKCkud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxC
dWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVz
UGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VC
eXRlc1BlclJvdyA9IDQgKiBzb3VyY2VQaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VSb3dzID0gc291cmNlUGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEo
KSArIHNvdXJjZVJlY3RDbGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVj
dENsaXBwZWQueCgpICogNDsKIAogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cg
PSBieXRlc1BlclJvdygpOwogICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdGluYXRpb25SZWN0LnkoKSAqIGRlc3RpbmF0
aW9uQnl0ZXNQZXJSb3cgKyBkZXN0aW5hdGlvblJlY3QueCgpICogNDsKIAotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IHNvdXJjZUZvcm1hdCB7IHNvdXJjZUFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6
UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OworICAgIFBpeGVsQnVmZmVyRm9y
bWF0IHNvdXJjZUZvcm1hdCA9IHNvdXJjZVBpeGVsQnVmZmVyLmZvcm1hdCgpOwogICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGRlc3RpbmF0aW9uRm9ybWF0IHsgZGVzdGluYXRpb25BbHBoYUZvcm1hdCwg
cGl4ZWxGb3JtYXQoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAKICAgICBDb25z
dFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHJldmlz
aW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTIgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAi
Q29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXNHTC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXJGb3JtYXQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
aW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTEwOSw4ICsxMDgsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFs
IE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpID0gMDsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhl
bEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0wmLCBHQ0dMZW51bSwg
UGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC0xNTAsOCArMTQ5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZv
aWQqIGRhdGEpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOworICAgIFdFQkNPUkVfRVhQ
T1JUIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZl
ckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRh
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBp
eGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIAog
ICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyQ29udmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXJDb252ZXJzaW9uLmNw
cAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGl4ZWxCdWZmZXJDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjQgKzMxLDY1
IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCiAKLSNp
ZiBVU0UoQUNDRUxFUkFURSkKKyNpZiBVU0UoQUNDRUxFUkFURSkgJiYgVVNFKENHKQorI2luY2x1
ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShBQ0NFTEVSQVRFKQorI2lm
IFVTRShBQ0NFTEVSQVRFKSAmJiBVU0UoQ0cpCisKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0NHSW1h
Z2VGb3JtYXQgbWFrZVZJbWFnZUNHSW1hZ2VGb3JtYXQoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQm
IGZvcm1hdCkKK3sKKyAgICBhdXRvIFtiaXRzUGVyQ29tcG9uZW50LCBiaXRzUGVyUGl4ZWwsIGJp
dG1hcEluZm9dID0gW10gKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBmb3JtYXQpIC0+IHN0ZDo6
dHVwbGU8dW5zaWduZWQsIHVuc2lnbmVkLCBDR0JpdG1hcEluZm8+IHsKKyAgICAgICAgc3dpdGNo
IChmb3JtYXQucGl4ZWxGb3JtYXQpIHsKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCQTg6
CisgICAgICAgICAgICBpZiAoZm9ybWF0LmFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV90
dXBsZSg4dSwgMzJ1LCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV90dXBsZSg4dSwgMzJ1LCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyB8IGtDR0lt
YWdlQWxwaGFMYXN0KTsKKworICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpCR1JBODoKKyAgICAg
ICAgICAgIGlmIChmb3JtYXQuYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKDh1
LCAzMnUsIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV90dXBsZSg4dSwgMzJ1LCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0lt
YWdlQWxwaGFGaXJzdCk7CisKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCMTA6CisgICAg
ICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OlJHQjEwQTg6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgOCBiaXQgcGl4ZWwg
Zm9ybWF0cyBmb3IgdGhlc2UgY29udmVyc2lvbnMuCisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoOHUsIDMydSwga0NHQml0bWFw
Qnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmlyc3QpOworICAgIH0oZm9ybWF0KTsK
KworICAgIHZJbWFnZV9DR0ltYWdlRm9ybWF0IHJlc3VsdDsKKworICAgIHJlc3VsdC5iaXRzUGVy
Q29tcG9uZW50ID0gYml0c1BlckNvbXBvbmVudDsKKyAgICByZXN1bHQuYml0c1BlclBpeGVsID0g
Yml0c1BlclBpeGVsOworICAgIHJlc3VsdC5jb2xvclNwYWNlID0gY2FjaGVkQ0dDb2xvclNwYWNl
KGZvcm1hdC5jb2xvclNwYWNlKTsKKyAgICByZXN1bHQuYml0bWFwSW5mbyA9IGJpdG1hcEluZm87
CisgICAgcmVzdWx0LnZlcnNpb24gPSAwOworICAgIHJlc3VsdC5kZWNvZGUgPSBudWxscHRyOwor
ICAgIHJlc3VsdC5yZW5kZXJpbmdJbnRlbnQgPSBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0Owor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlldz4gc3RhdGlj
IHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZlcihjb25zdCBWaWV3JiB2aWV3LCBjb25zdCBJ
bnRTaXplJiBzaXplKQogewotICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworICAgIHZJ
bWFnZV9CdWZmZXIgcmVzdWx0OwogCi0gICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19j
YXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOwotICAgIHZJbWFnZUJ1ZmZlci53
aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7Ci0gICAg
dkltYWdlQnVmZmVyLnJvd0J5dGVzID0gdmlldy5ieXRlc1BlclJvdzsKLSAgICB2SW1hZ2VCdWZm
ZXIuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHZpZXcucm93cyk7CisgICAgcmVzdWx0Lmhl
aWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAg
IHJlc3VsdC53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgo
KSk7CisgICAgcmVzdWx0LnJvd0J5dGVzID0gdmlldy5ieXRlc1BlclJvdzsKKyAgICByZXN1bHQu
ZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHZpZXcucm93cyk7CiAKLSAgICByZXR1cm4gdklt
YWdlQnVmZmVyOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbnZlcnRJ
bWFnZVBpeGVsc0FjY2VsZXJhdGVkKGNvbnN0IENvbnN0UGl4ZWxCdWZmZXJDb252ZXJzaW9uVmll
dyYgc291cmNlLCBjb25zdCBQaXhlbEJ1ZmZlckNvbnZlcnNpb25WaWV3JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50U2l6ZSYgZGVzdGluYXRpb25TaXplKQpAQCAtNTYsNiArOTcsMjIgQEAgc3RhdGlj
IHZvaWQgY29udmVydEltYWdlUGl4ZWxzQWNjZWxlcmF0ZQogICAgIGF1dG8gc291cmNlVkltYWdl
QnVmZmVyID0gbWFrZVZJbWFnZUJ1ZmZlcihzb3VyY2UsIGRlc3RpbmF0aW9uU2l6ZSk7CiAgICAg
YXV0byBkZXN0aW5hdGlvblZJbWFnZUJ1ZmZlciA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdGluYXRp
b24sIGRlc3RpbmF0aW9uU2l6ZSk7CiAKKyAgICBpZiAoc291cmNlLmZvcm1hdC5jb2xvclNwYWNl
ICE9IGRlc3RpbmF0aW9uLmZvcm1hdC5jb2xvclNwYWNlKSB7CisgICAgICAgIC8vIEZJWE1FOiBD
b25zaWRlciB1c2luZyB2SW1hZ2VDb252ZXJ0X0FueVRvQW55IGZvciBhbGwgY29udmVyc2lvbnMs
IG5vdCBqdXN0IG9uZXMgdGhhdCBuZWVkIGEgY29sb3Igc3BhY2UgY29udmVyc2lvbiwKKyAgICAg
ICAgLy8gYWZ0ZXIganVkaWNpb3VzbHkgcGVyZm9ybWFuY2UgdGVzdGluZyB0aGVtIGFnYWluc3Qg
ZWFjaCBvdGhlci4KKworICAgICAgICBhdXRvIHNvdXJjZUNHSW1hZ2VGb3JtYXQgPSBtYWtlVklt
YWdlQ0dJbWFnZUZvcm1hdChzb3VyY2UuZm9ybWF0KTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlv
bkNHSW1hZ2VGb3JtYXQgPSBtYWtlVkltYWdlQ0dJbWFnZUZvcm1hdChkZXN0aW5hdGlvbi5mb3Jt
YXQpOworCisgICAgICAgIHZJbWFnZV9FcnJvciBjb252ZXJ0ZXJDcmVhdGVFcnJvciA9IGt2SW1h
Z2VOb0Vycm9yOworICAgICAgICBhdXRvIGNvbnZlcnRlciA9IGFkb3B0Q0YodkltYWdlQ29udmVy
dGVyX0NyZWF0ZVdpdGhDR0ltYWdlRm9ybWF0KCZzb3VyY2VDR0ltYWdlRm9ybWF0LCAmZGVzdGlu
YXRpb25DR0ltYWdlRm9ybWF0LCBudWxscHRyLCBrdkltYWdlTm9GbGFncywgJmNvbnZlcnRlckNy
ZWF0ZUVycm9yKSk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKGNvbnZlcnRl
ckNyZWF0ZUVycm9yLCBjb252ZXJ0ZXJDcmVhdGVFcnJvciAhPSBrdkltYWdlTm9FcnJvciwgInZJ
bWFnZUNvbnZlcnRlciBjcmVhdGlvbiBmYWlsZWQgd2l0aCBlcnJvcjogJXpkIiwgY29udmVydGVy
Q3JlYXRlRXJyb3IpOworCisgICAgICAgIHZJbWFnZV9FcnJvciBjb252ZXJ0ZXJDb252ZXJ0RXJy
b3IgPSB2SW1hZ2VDb252ZXJ0X0FueVRvQW55KGNvbnZlcnRlci5nZXQoKSwgJnNvdXJjZVZJbWFn
ZUJ1ZmZlciwgJmRlc3RpbmF0aW9uVkltYWdlQnVmZmVyLCBudWxscHRyLCBrdkltYWdlTm9GbGFn
cyk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKGNvbnZlcnRlckNvbnZlcnRF
cnJvciwgY29udmVydGVyQ29udmVydEVycm9yID09IGt2SW1hZ2VOb0Vycm9yLCAidkltYWdlQ29u
dmVydF9BbnlUb0FueSBmYWlsZWQgY29udmVyc2lvbiB3aXRoIGVycm9yOiAlemQiLCBjb252ZXJ0
ZXJDb252ZXJ0RXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNvdXJj
ZS5mb3JtYXQuYWxwaGFGb3JtYXQgIT0gZGVzdGluYXRpb24uZm9ybWF0LmFscGhhRm9ybWF0KSB7
CiAgICAgICAgIGlmIChkZXN0aW5hdGlvbi5mb3JtYXQuYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CiAgICAgICAgICAgICBpZiAoc291cmNl
LmZvcm1hdC5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTgpCkBAIC0xODQsMTAgKzI0
MSw3IEBAIHZvaWQgY29udmVydEltYWdlUGl4ZWxzKGNvbnN0IENvbnN0UGl4ZWwKICAgICBBU1NF
UlQoc291cmNlLmZvcm1hdC5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgc291
cmNlLmZvcm1hdC5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAgIEFTU0VS
VChkZXN0aW5hdGlvbi5mb3JtYXQucGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8
IGRlc3RpbmF0aW9uLmZvcm1hdC5waXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6QkdSQTgpOwog
Ci0gICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgY29udmVydGluZyBwaXhlbCBkYXRh
IGJldHdlZW4gZGlmZmVyZW50IGNvbG9yIHNwYWNlcy4KLSAgICBBU1NFUlQoc291cmNlLmZvcm1h
dC5jb2xvclNwYWNlID09IGRlc3RpbmF0aW9uLmZvcm1hdC5jb2xvclNwYWNlKTsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKQorI2lmIFVTRShBQ0NFTEVSQVRFKSAmJiBVU0UoQ0cpCiAgICAgaWYgKHNv
dXJjZS5mb3JtYXQuYWxwaGFGb3JtYXQgPT0gZGVzdGluYXRpb24uZm9ybWF0LmFscGhhRm9ybWF0
ICYmIHNvdXJjZS5mb3JtYXQucGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb24uZm9ybWF0LnBpeGVs
Rm9ybWF0KSB7CiAgICAgICAgIC8vIEZJWE1FOiBDYW4gdGhlcyBib3RoIGp1c3QgdXNlIHBlci1y
b3cgbWVtY3B5PwogICAgICAgICBpZiAoc291cmNlLmZvcm1hdC5hbHBoYUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQpAQCAtMTk3LDYgKzI1MSwxMCBAQCB2
b2lkIGNvbnZlcnRJbWFnZVBpeGVscyhjb25zdCBDb25zdFBpeGVsCiAgICAgfSBlbHNlCiAgICAg
ICAgIGNvbnZlcnRJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNvdXJjZSwgZGVzdGluYXRpb24sIGRl
c3RpbmF0aW9uU2l6ZSk7CiAjZWxzZQorICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkg
c3VwcG9ydCBjb252ZXJ0aW5nIHBpeGVsIGRhdGEgYmV0d2VlbiBkaWZmZXJlbnQgY29sb3Igc3Bh
Y2VzIGluIHRoZSBub24tYWNjZWxlcmF0ZWQgcGF0aC4KKyAgICAvLyBUaGlzIGNvdWxkIGJlIGFk
ZGVkIHVzaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZyb20gQ29sb3JDb252ZXJzaW9uLmguCisg
ICAgQVNTRVJUKHNvdXJjZS5mb3JtYXQuY29sb3JTcGFjZSA9PSBkZXN0aW5hdGlvbi5mb3JtYXQu
Y29sb3JTcGFjZSk7CisKICAgICBpZiAoc291cmNlLmZvcm1hdC5hbHBoYUZvcm1hdCA9PSBkZXN0
aW5hdGlvbi5mb3JtYXQuYWxwaGFGb3JtYXQpIHsKICAgICAgICAgaWYgKHNvdXJjZS5mb3JtYXQu
cGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb24uZm9ybWF0LnBpeGVsRm9ybWF0KSB7CiAgICAgICAg
ICAgICBpZiAoc291cmNlLmZvcm1hdC5hbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MDMsMTMgKzkwMywxNCBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VC
CiAgICAgaWYgKG1fdHlwZSAhPSBCbHVyU2hhZG93KQogICAgICAgICByZXR1cm47CiAKKyAgICBQ
aXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
IH07CiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1wbGF0ZVNpemUpOwotICAg
IGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0
YSA9IGxheWVySW1hZ2UuZ2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBibHVyUmVjdCk7CiAgICAgaWYg
KCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJsdXJMYXllckltYWdlKGxheWVy
RGF0YS0+ZGF0YSgpLmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICog
NCk7Ci0gICAgbGF5ZXJJbWFnZS5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJsdXJSZWN0KTsKKyAgICBsYXllckltYWdl
LnB1dFBpeGVsQnVmZmVyKCpsYXllckRhdGEsIGJsdXJSZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dC
bHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNv
bnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDE0ICsxMjAsMTQgQEAgVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQgogICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAK
LU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6Omdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3Jt
YXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNy
Y1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiB9
CiAKLXZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsKLSAgICBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVj
dCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1f
c3VyZmFjZS5nZXQoKSkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIo
cGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKIAogICAgIEludFJlY3Qgc3JjUmVj
dFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOwogICAgIEludFBvaW50IGRl
c3RQb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3
NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAg
cHVibGljOgogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4
ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4
ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiBwcm90
ZWN0ZWQ6CiAgICAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IFBhcmFtZXRl
cnMmLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcg
KzE4Myw4IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW4KIAogICAg
IGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBk
b24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9z
aXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0
KCkpOworICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQiB9OworICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gZ2V0UGl4ZWxCdWZm
ZXIoZm9ybWF0LCBsb2dpY2FsUmVjdCgpKTsKICAgICAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OSwxNCArMTU5LDE0IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2UKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fZGF0
YSk7CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9y
bWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBtX2RhdGEpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQ
aXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3Zv
aWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAg
IEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVm
ZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7CisgICAgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0LCBtX2RhdGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDggQEAgcHVibGljOgogCiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIE9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4
ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1h
dCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNPcmlnaW5B
dFVwcGVyTGVmdENvcm5lciA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgzLDE2ICsxODMsMTYgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFjawogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobG9j
ay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QKIHsKICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2Up
OwogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZv
cm1hdCwgc3JjUmVjdCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkKIHsKICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1
cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwotICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVy
LCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNz
KCkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIs
IHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3Mo
KSk7CiAgICAgbV9yZXF1aXJlc0RyYXdBZnRlclB1dFBpeGVsQnVmZmVyID0gdHJ1ZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzQ1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw4IEBAIHB1YmxpYzoKICAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1
ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGlzSW5Vc2UoKSBjb25zdCBv
dmVycmlkZTsKICAgICB2b2lkIHJlbGVhc2VHcmFwaGljc0NvbnRleHQoKSBvdmVycmlkZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJKHJldmlzaW9uIDI3NzQ1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzc1LDIwICs3NzUsMTggQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgIHJldHVybiB0czsKIH0KIAot
UHV0UGl4ZWxCdWZmZXI6OlB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQorUHV0UGl4ZWxCdWZmZXI6OlB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogICAgIDog
bV9zcmNSZWN0KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9pbnQpCiAgICAgLCBt
X3BpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0
dWFsbHkgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRQaXhlbEJ1ZmZl
cigpLgotICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKICAgICAsIG1fZGVzdEZvcm1h
dChkZXN0Rm9ybWF0KQogewogfQogCi1QdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZl
ciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQorUHV0UGl4ZWxCdWZmZXI6OlB1dFBpeGVs
QnVmZmVyKFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZv
cm1hdCkKICAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBv
aW50KQogICAgICwgbV9waXhlbEJ1ZmZlcihXVEZNb3ZlKHBpeGVsQnVmZmVyKSkKLSAgICAsIG1f
aW5wdXRGb3JtYXQoaW5wdXRGb3JtYXQpCiAgICAgLCBtX2Rlc3RGb3JtYXQoZGVzdEZvcm1hdCkK
IHsKIH0KQEAgLTc5Nyw3ICs3OTUsNiBAQCBQdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIo
Y29uc3QgUHV0CiAgICAgOiBtX3NyY1JlY3Qob3RoZXIubV9zcmNSZWN0KQogICAgICwgbV9kZXN0
UG9pbnQob3RoZXIubV9kZXN0UG9pbnQpCiAgICAgLCBtX3BpeGVsQnVmZmVyKG90aGVyLm1fcGl4
ZWxCdWZmZXIuZGVlcENsb25lKCkpCi0gICAgLCBtX2lucHV0Rm9ybWF0KG90aGVyLm1faW5wdXRG
b3JtYXQpCiAgICAgLCBtX2Rlc3RGb3JtYXQob3RoZXIubV9kZXN0Rm9ybWF0KQogewogfQpAQCAt
ODE0LDEzICs4MTEsMTEgQEAgdm9pZCBQdXRQaXhlbEJ1ZmZlcjo6c3dhcChQdXRQaXhlbEJ1ZmZl
cgogICAgIHN0ZDo6c3dhcChtX3NyY1JlY3QsIG90aGVyLm1fc3JjUmVjdCk7CiAgICAgc3RkOjpz
d2FwKG1fZGVzdFBvaW50LCBvdGhlci5tX2Rlc3RQb2ludCk7CiAgICAgc3RkOjpzd2FwKG1fcGl4
ZWxCdWZmZXIsIG90aGVyLm1fcGl4ZWxCdWZmZXIpOwotICAgIHN0ZDo6c3dhcChtX2lucHV0Rm9y
bWF0LCBvdGhlci5tX2lucHV0Rm9ybWF0KTsKICAgICBzdGQ6OnN3YXAobV9kZXN0Rm9ybWF0LCBv
dGhlci5tX2Rlc3RGb3JtYXQpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0UGl4ZWxCdWZmZXImIGl0ZW0pCiB7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJpbnB1dEZvcm1hdCIsIGl0ZW0uaW5wdXRGb3JtYXQoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJwaXhlbEJ1ZmZlclNpemUiLCBpdGVtLnBpeGVsQnVmZmVyKCkuc2l6ZSgpKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3QiLCBpdGVtLnNyY1JlY3QoKSk7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJkZXN0UG9pbnQiLCBpdGVtLmRlc3RQb2ludCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTkwNSwxOCArMTkwNSwxOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIEdldFBpeGVsQnVmZmVyKFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzcmNSZWN0KQorICAgIEdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OlBpeGVsQnVmZmVy
Rm9ybWF0IG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCkKICAg
ICAgICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAgICAgLCBtX291dHB1dEZvcm1hdChvdXRw
dXRGb3JtYXQpCiAgICAgewogICAgIH0KIAotICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9vdXRwdXRGb3JtYXQ7IH0KKyAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBvdXRwdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX291dHB1dEZvcm1hdDsg
fQogICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQogCiBw
cml2YXRlOgogICAgIEludFJlY3QgbV9zcmNSZWN0OwotICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gbV9vdXRwdXRGb3JtYXQ7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgbV9vdXRwdXRGb3JtYXQ7
CiB9OwogCiBjbGFzcyBQdXRQaXhlbEJ1ZmZlciB7CkBAIC0xOTI1LDggKzE5MjUsOCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIFB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBQdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBQaXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRQaXhlbEJ1
ZmZlcihQaXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAg
UHV0UGl4ZWxCdWZmZXIoY29uc3QgUHV0UGl4ZWxCdWZmZXImKTsKICAgICBQdXRQaXhlbEJ1ZmZl
cihQdXRQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CkBAIC0xOTM1LDcgKzE5MzUsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHN3YXAoUHV0UGl4ZWxCdWZmZXImKTsKIAotICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2lucHV0Rm9ybWF0OyB9
CiAgICAgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9w
aXhlbEJ1ZmZlcjsgfQogICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Jj
UmVjdDsgfQogICAgIEludFBvaW50IGRlc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdFBv
aW50OyB9CkBAIC0xOTUxLDE0ICsxOTUwLDEyIEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3Ny
Y1JlY3Q7CiAgICAgSW50UG9pbnQgbV9kZXN0UG9pbnQ7CiAgICAgUGl4ZWxCdWZmZXIgbV9waXhl
bEJ1ZmZlcjsKLSAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1faW5wdXRGb3JtYXQ7CiAgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2Rlc3RGb3JtYXQ7CiB9OwogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogdm9pZCBQdXRQaXhlbEJ1ZmZlcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiB7Ci0gICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0OwogICAgIGVuY29kZXIgPDwg
bV9waXhlbEJ1ZmZlcjsKICAgICBlbmNvZGVyIDw8IG1fc3JjUmVjdDsKICAgICBlbmNvZGVyIDw8
IG1fZGVzdFBvaW50OwpAQCAtMTk2OCwxNiArMTk2NSwxMSBAQCB2b2lkIFB1dFBpeGVsQnVmZmVy
OjplbmNvZGUoRW5jb2RlciYgZW5jCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogT3B0aW9uYWw8
UHV0UGl4ZWxCdWZmZXI+IFB1dFBpeGVsQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IHsKLSAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxpY2F0aW9uPiBpbnB1dEZvcm1hdDsKICAg
ICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcGl4ZWxCdWZmZXI7CiAgICAgT3B0aW9uYWw8SW50UmVj
dD4gc3JjUmVjdDsKICAgICBPcHRpb25hbDxJbnRQb2ludD4gZGVzdFBvaW50OwogICAgIE9wdGlv
bmFsPEFscGhhUHJlbXVsdGlwbGljYXRpb24+IGRlc3RGb3JtYXQ7CiAKLSAgICBkZWNvZGVyID4+
IGlucHV0Rm9ybWF0OwotICAgIGlmICghaW5wdXRGb3JtYXQpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KICAgICBkZWNvZGVyID4+IHBpeGVsQnVmZmVyOwogICAgIGlmICghcGl4ZWxC
dWZmZXIpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xOTk0LDcgKzE5ODYsNyBA
QCBPcHRpb25hbDxQdXRQaXhlbEJ1ZmZlcj4gUHV0UGl4ZWxCdWZmZXI6CiAgICAgaWYgKCFkZXN0
Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHt7ICpp
bnB1dEZvcm1hdCwgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCAqc3JjUmVjdCwgKmRlc3RQb2ludCwg
KmRlc3RGb3JtYXQgfX07CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgKnNy
Y1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0IH19OwogfQogCiAjaWYgRU5BQkxFKFZJREVP
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAkocmV2aXNp
b24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNCArNTUs
MTQgQEAgUmVjb3JkZXI6On5SZWNvcmRlcigpCiAgICAgTE9HKERpc3BsYXlMaXN0cywgIlJlY29y
ZGVkIGRpc3BsYXkgbGlzdDpcbiVzIiwgbV9kaXNwbGF5TGlzdC5kZXNjcmlwdGlvbigpLmRhdGEo
KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQordm9pZCBSZWNv
cmRlcjo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKIHsKICAgICBhcHBlbmQ8R2V0UGl4ZWxCdWZm
ZXI+KG91dHB1dEZvcm1hdCwgc291cmNlUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnB1dFBp
eGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBSZWNvcmRlcjo6cHV0
UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0g
ICAgYXBwZW5kPFB1dFBpeGVsQnVmZmVyPihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1Jl
Y3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CisgICAgYXBwZW5kPFB1dFBpeGVsQnVmZmVyPihw
aXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGlj
IGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBjaGFuZ2VGbGFncykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTgsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoR3JhcGhp
Y3NDb250ZXh0JiwgRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVn
YXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0
aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29u
c3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZv
cm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDggKzI4NSw5
IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXIKICAgICBpZiAoaW5C
dWZmZXIpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpp
bkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSkpOwogCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQiB9OwogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3Vs
dEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1h
Z2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgaW1hZ2VSZWN0KTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBp
eGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTMxMyw3ICszMTQsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdElt
YWdlLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsICpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxC
dWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OSwxNSArOTksMTYgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZQogCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNl
dCwgbV9zaGFkb3dDb2xvcik7CiAKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OwogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQ
b2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7CiAgICAgaWYgKCFwaXhl
bEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9
IHBpeGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShz
b3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVm
ZmVyLT5zaXplKCkud2lkdGgoKSk7CiAgICAgCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpwaXhlbEJ1ZmZlciwg
c2hhZG93QXJlYSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZl
ciwgc2hhZG93QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBt
X3NoYWRvd0NvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmUKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0
aW5hdGlvblJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
IGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7
CiB9CiAKQEAgLTQzOSw3ICs0MzksNyBAQCBzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWlu
Z0FscGhhKGNvCiAjZW5kaWYKIH0KIAotT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVj
dDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0
YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0KQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVj
dDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0
YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCiB7CiAgICAgLy8gRklY
TUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZl
cnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBkbyBpdCBkaXJlY3RseS4KIApAQCAtNDUwLDIw
ICs0NTAsMjYgQEAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udgogICAg
IGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIu
cmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNw
YWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3Jt
YXQsIHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0SW1h
Z2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRp
b25SZWN0LCBvdXRwdXRGb3JtYXQpOworICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxC
dWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRv
Q29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBp
eGVsQnVmZmVyLmZvcm1hdCgpLmFscGhhRm9ybWF0KTsKIH0KIAotT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIs
IGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
KQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVy
VG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFn
ZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJl
IGRvbmUgbW9yZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24uCisKICAgICBG
bG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXpl
KCkpOworCiAgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29s
b3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24K
ICAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNp
emUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFy
Z2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIWNvbnZlcnRlZEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwogICAgIC8vIENvbG9yIHNwYWNl
IGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFn
ZSBidWZmZXIgdG8gYW5vdGhlcgogICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZl
ci0+Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCByZWN0KTsKKyAgICAKKyAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKKyAgICByZXR1cm4gY29udmVydGVkQnVm
ZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCkBA
IC00NzUsMTEgKzQ4MSwxMSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdl
QnVmCiAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVz
dGluYXRpb24sIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCit2b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9E
ZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlciwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KQogewogICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LAogICAgIC8v
IHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8g
Y29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29s
b3JTcGFjZSwgcGl4ZWxCdWZmZXIsIG91dHB1dEZvcm1hdCk7CisgICAgYXV0byBjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBw
aXhlbEJ1ZmZlcik7CiAgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuOwogICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBkZXN0UmVjdCk7CkBAIC00OTgsNyArNTA0LDggQEAgdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bAogICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJ
bWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkgfSk7CisgICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CisgICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9y
bWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAgICAg
ICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTUxMyw3ICs1MjAsNyBAQCB2b2lkIEZpbHRlckVm
ZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAg
ICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7CisgICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhl
bEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29w
eUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlv
biwgcmVjdCk7CkBAIC01MzIsNyArNTM5LDggQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVt
dWx0aXBsaWVkUmVzdQogICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRv
RGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1h
Z2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7
CisgICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQiB9OworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fSBlbHNlIHsKQEAgLTU0OCw3ICs1NTYsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11
bHRpcGxpZWRSZXN1CiAgICAgfQogCiAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxC
dWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBy
ZWN0KTsKKyAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0
aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMTAgKzIw
NCwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmKSBjb25zdDsKICAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVz
dGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlDb252ZXJ0
ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1ZmZl
ciYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZvaWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlv
bihVaW50OENsYW1wZWRBcnJheSYsIFBpeGVsQnVmZmVyJiwgRGVzdGluYXRpb25Db2xvclNwYWNl
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFj
ZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAg
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24pOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0UGl4ZWxC
dWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYpOwog
ICAgIAogCiAgICAgRmlsdGVyJiBtX2ZpbHRlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEyLDE2ICszMTIsMTYgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZQogICAgIHJldHVybiB7IH07CiB9CiAKLU9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitP
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldFBpeGVs
QnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3Qs
IG51bGxwdHIpOwogfQogCi12b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRQaXhl
bEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1
ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVy
JiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1
dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbnVs
bHB0cik7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZl
ciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJ
KHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1
Myw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIE9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4
ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1h
dCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlz
aWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAkocmV2aXNpb24gMjc3NDUxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Nyw3ICsxOTcsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVh
dGVSYXN0CiAgICAgaWYgKGltYWdlKQogICAgICAgICBncmFwaGljc0NvbnRleHQuZHJhd0ltYWdl
KCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICBh
dXRvIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6
ZSgpIH0pOworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IgfTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdl
dFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpIH0pOwog
ICAgIAogICAgIC8vIFdlIGNvdWxkIGdldCB0byBhIHZhbHVlIHdoZXJlIFBpeGVsQnVmZmVyIGNv
dWxkIGJlIG51bGxvcHQuIEEgY2FzZSB3aGVyZSBJbWFnZVJlY3Quc2l6ZSgpIGlzIGh1Z2UsIFBp
eGVsQnVmZmVyOjp0cnlDcmVhdGUKICAgICAvLyBjYW4gcmV0dXJuIGEgbnVsbG9wdCBiZWNhdXNl
IGRhdGEgc2l6ZSBoYXMgb3ZlcmZsb3dlZC4gUmVmZXIgcmRhcjovL3Byb2JsZW0vNjE3OTM4ODQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzc0OTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA1LTE0ICBTYW0gV2Vpbmln
ICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgUGl4ZWxCdWZmZXJGb3JtYXQgdG8g
c3BlY2lmeSBJbWFnZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIgZGVzdGluYXRpb24gZm9ybWF0IGFs
bG93aW5nIGZvciBtb3JlIGNvbnRyb2wgb3ZlciBkYXRhIGNvbnZlcnNpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgxMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscy9pbXBsZW1l
bnRhdGlvbnMgb2YgZ2V0UGl4ZWxCdWZmZXIvcHV0UGl4ZWxCdWZmZXIgdG8gYWRqdXN0CisgICAg
ICAgIHRvIG5ldyBzaWduYXR1cmUuIAorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dE
aXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNHRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZm
ZXIpOgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdl
QnVmZmVyQmFja2VuZC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dFBpeGVs
QnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyUHJveHk6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6Omdl
dFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
Lmg6CisKIDIwMjEtMDUtMTQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXNvdXJjZSBUaW1pbmc6IHNlY3VyZUNvbm5lY3Rpb25TdGFydCA9
PSAwIHdoZW4gYSBjb25uZWN0aW9uIGlzIHJlLXVzZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCShyZXZpc2lv
biAyNzc0NTEpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogCiAg
ICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcj4o
KSkgewogICAgICAgICAgICAgYXV0byYgcHV0UGl4ZWxCdWZmZXJJdGVtID0gaXRlbS5nZXQ8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPigpOwotICAgICAgICAgICAgcHV0UGl4
ZWxCdWZmZXIocHV0UGl4ZWxCdWZmZXJJdGVtLmlucHV0Rm9ybWF0KCksIHB1dFBpeGVsQnVmZmVy
SXRlbS5waXhlbEJ1ZmZlcigpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uc3JjUmVjdCgpLCBwdXRQaXhl
bEJ1ZmZlckl0ZW0uZGVzdFBvaW50KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0Rm9ybWF0KCkp
OworICAgICAgICAgICAgcHV0UGl4ZWxCdWZmZXIocHV0UGl4ZWxCdWZmZXJJdGVtLnBpeGVsQnVm
ZmVyKCksIHB1dFBpeGVsQnVmZmVySXRlbS5zcmNSZWN0KCksIHB1dFBpeGVsQnVmZmVySXRlbS5k
ZXN0UG9pbnQoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLmRlc3RGb3JtYXQoKSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9S
ZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc0NTEpCisrKyBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMyArMTA1LDEzIEBAIFZlY3Rvcjx1aW50OF90
PiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIKICAgICByZXR1cm4geyB9OwogfQogCi1PcHRpb25h
bDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpIGNvbnN0CitPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gQ0dE
aXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29y
ZTo6UGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QKIHsK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIENH
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbikKK3ZvaWQgQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDog
U291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlckJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVM
YXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzc0
NTEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlz
dEltYWdlQnVmZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIHB1
YmxpYzoKICAgICAvLyBOT1RFOiBUaGVzZSBhbGwgQVNTRVJUX05PVF9SRUFDSEVEKCkuCiAgICAg
UmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6QmFj
a2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRl
OwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
T3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZl
ciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVs
QnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVs
QnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0VXBwZXJMZWZ0Q29ybmVyID0gdHJ1ZTsKIApJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAko
cmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjMsMTQgKzE2MywxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtCiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2JpdG1hcC0+
ZGF0YSgpKTsKIH0KIAotT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihj
b25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAogewogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVm
ZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKLXZvaWQg
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZm
ZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsK
LSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhl
bEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2JpdG1hcC0+ZGF0YSgp
KTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBz
cmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fYml0bWFwLT5kYXRhKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNv
cmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiA9IFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxXZWJD
b3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2lu
dCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3Qg
V2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3Qg
V2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHVuc2lnbmVk
IGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaAkocmV2aXNpb24gMjc3NDUxKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
NCwxMiArMTk0LDExIEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRl
SW1hZ2UoKTsKICAgICB9CiAKLSAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0
UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0
aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OlBpeGVsQnVmZmVyRm9ybWF0JiBkZXN0aW5hdGlvbkZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc3JjUmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VM
WSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgICAgICBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCBkZXN0aW5h
dGlvbkZvcm1hdCB7IG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQ6OlJHQkE4LCBX
ZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsKICAgICAgICAgYXV0byBwaXhl
bEJ1ZmZlciA9IFdlYkNvcmU6OlBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZGVzdGluYXRpb25Gb3Jt
YXQsIHNyY1JlY3Quc2l6ZSgpKTsKICAgICAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0yMTEsNyArMjEwLDcgQEAgcHJvdGVjdGVkOgog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBhdXRvJiBtdXRhYmxl
VGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0aGlzKTsKLSAgICAg
ICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmdldFBpeGVsQnVmZmVy
KG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIG11dGFibGVUaGlzLm1fZHJhd2luZ0Nv
bnRleHQucmVjb3JkZXIoKS5nZXRQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvbkZvcm1hdCwgc3JjUmVj
dCk7CiAgICAgICAgIG11dGFibGVUaGlzLmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwogCiAg
ICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2FpdEZvckdldFBpeGVs
QnVmZmVyVG9Db21wbGV0ZSh0aW1lb3V0KSkKQEAgLTIyMSwxMiArMjIwLDEyIEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgcHV0UGl4
ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQorICAgIHZvaWQgcHV0
UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50ID0geyB9LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQg
PSBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlk
ZQogICAgIHsKICAgICAgICAgLy8gVGhlIG1hdGggaW5zaWRlIFBpeGVsQnVmZmVyOjpjcmVhdGUo
KSBkb2Vzbid0IGFncmVlIHdpdGggdGhlIG1hdGggaW5zaWRlIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIoKSBhYm91dCBob3cgbV9yZXNvbHV0aW9uU2NhbGUgaW50ZXJhY3RzIHdp
dGggdGhlIGRhdGEgaW4gdGhlIEltYWdlQnVmZmVyLgogICAgICAgICAvLyBUaGlzIG1lYW5zIHRo
YXQgcHV0UGl4ZWxCdWZmZXIoKSBpcyBvbmx5IGNhbGxlZCB3aGVuIHJlc29sdXRpb25TY2FsZSgp
ID09IDEuCiAgICAgICAgIEFTU0VSVChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxKTsKLSAgICAgICAg
bV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBw
aXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAgICAgICAgbV9k
cmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzcmNS
ZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpOwogICAgIH0KIAogICAgIGJvb2wgcHJlZmVyc1By
ZXBhcmF0aW9uRm9yRGlzcGxheSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEzICsxMjAsMTMgQEAgVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdQogICAgIHJldHVybiB7IH07CiB9CiAKLU9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdAor
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBJbnRSZWN0
JikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpw
dXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24p
Cit2b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29h
L0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzQ1MSkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgog
ICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRl
OwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBp
eGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3Jl
OjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3Jl
OjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNP
cmlnaW5BdFVwcGVyTGVmdENvcm5lciA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGNhbk1hcEJhY2tpbmdTdG9yZSA9IGZhbHNlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>