<?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>80733</bug_id>
          
          <creation_ts>2012-03-09 14:44:20 -0800</creation_ts>
          <short_desc>Rename JSDOMWindowShell to JSDOMWindowProxy to match the HTML5 spec.</short_desc>
          <delta_ts>2017-06-13 09:47:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>code.vineet</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>575254</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-03-09 14:44:20 -0800</bug_when>
    <thetext>It had a good run, but WindowShell should be renamed to WindowProxy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318425</commentid>
    <comment_count>1</comment_count>
      <attachid>312713</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-12 15:52:28 -0700</bug_when>
    <thetext>Created attachment 312713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318664</commentid>
    <comment_count>2</comment_count>
      <attachid>312713</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-13 09:19:26 -0700</bug_when>
    <thetext>Comment on attachment 312713
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318681</commentid>
    <comment_count>3</comment_count>
      <attachid>312713</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-13 09:47:46 -0700</bug_when>
    <thetext>Comment on attachment 312713
Patch

Clearing flags on attachment: 312713

Committed r218179: &lt;http://trac.webkit.org/changeset/218179&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318682</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-13 09:47:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312713</attachid>
            <date>2017-06-12 15:52:28 -0700</date>
            <delta_ts>2017-06-13 09:47:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80733-20170612155301.patch</filename>
            <type>text/plain</type>
            <size>108262</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODE0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAxNy0wNi0xMiAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBKU0RPTVdpbmRvd1NoZWxs
IHRvIEpTRE9NV2luZG93UHJveHkgdG8gbWF0Y2ggdGhlIEhUTUw1IHNwZWMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDczMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdvb2RieWUgZGVhciBzaGVsbC4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjp+RE9NV3JhcHBlcldvcmxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6Y2xlYXJXcmFwcGVycyk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmg6CisgICAgICAgIChXZWJDb3Jl
OjpET01XcmFwcGVyV29ybGQ6OmRpZENyZWF0ZVdpbmRvd1Byb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVdyYXBwZXJXb3JsZDo6ZGlkRGVzdHJveVdpbmRvd1Byb3h5KToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6ZGlkQ3JlYXRlV2luZG93U2hlbGwpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjpkaWREZXN0cm95V2luZG93U2hlbGwp
OiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93QmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjp3aWxsUmVtb3ZlRnJvbVdpbmRvd1Byb3h5KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6cHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU0RP
TVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OndpbGxSZW1vdmVG
cm9tV2luZG93U2hlbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpzaGVsbCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNE
T01XaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojp0b1dyYXBwZWQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01XaW5kb3dQcm9wZXJ0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1Byb3Bl
cnRpZXM6OkpTRE9NV2luZG93UHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01XaW5kb3dQcm94eS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1Byb3h5OjpKU0RP
TVdpbmRvd1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93UHJveHk6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93UHJveHk6OmRlc3Ryb3kp
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dQcm94eTo6c2V0V2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93UHJveHk6OndyYXBwZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01XaW5kb3dQcm94eTo6dG9XcmFwcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMp
OgorICAgICAgICAoV2ViQ29yZTo6dG9KU0RPTVdpbmRvd1Byb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93U2hlbGw6OkpTRE9NV2luZG93U2hlbGwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6ZGVzdHJveSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3cpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6d3JhcHBlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjp0b1dyYXBwZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6dG9KU0RPTVdpbmRvd1NoZWxsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3h5Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oLgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3dQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNET01XaW5kb3dQcm94eSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjp3aW5kb3cpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjp3b3JsZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjp0b0pTRE9NV2luZG93U2hlbGwpOiBEZWxldGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZl
bnRUYXJnZXQ6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1l
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om9wZW4pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdENhY2hlZEZyYW1lRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRG
cmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDYWNoZWRGcmFtZURhdGE6OnJlc3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEdhcmJhZ2VBZnRlcldp
bmRvd1Byb3h5RGVzdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6flNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6ZGVzdHJveVdpbmRvd1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmNyZWF0ZVdpbmRvd1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
Ojpsb2FkTW9kdWxlU2NyaXB0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250
cm9sbGVyOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGVTY3JpcHRJbldvcmxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1Byb3hpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dQcm94aWVzTm90TWF0Y2hpbmdET01XaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0RE9NV2luZG93Rm9yV2lu
ZG93UHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpzZXR1cE1vZHVsZVNjcmlw
dEhhbmRsZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFu
ZGxlclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmVuYWJs
ZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZGlzYWJsZUV2YWwp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FuQWNjZXNzRnJvbUN1cnJl
bnRPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVi
dWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FjaGVhYmxlQmluZGlu
Z1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YmluZGlu
Z1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRl
Um9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0
SXNvbGF0ZWRDb250ZXh0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3
aW5kb3dTY3JpcHROUE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
Ojpqc09iamVjdEZvclBsdWdpbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6Y29sbGVjdEdhcmJhZ2VBZnRlcldpbmRvd1NoZWxsRGVzdHJ1Y3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZGVzdHJveVdpbmRvd1No
ZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0
ZVdpbmRvd1NoZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OndpbmRvd1NoZWxscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250
cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsc05vdE1hdGNoaW5nRE9NV2luZG93KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnNldERPTVdpbmRvd0ZvcldpbmRv
d1NoZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dQcm94eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1Byb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6Omdsb2JhbE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjptYWluV29ybGRFeGVjU3RhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJh
dGVPdmVybG9hZERpc3BhdGNoZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RP
dmVybG9hZERpc3BhdGNoZXIpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAg
ICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRD
cmVhdGVXaW5kb3dQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmRpZENyZWF0ZVdpbmRvd1NoZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3kuaDoKKwogMjAxNy0wNi0xMiAgRXJpYyBDYXJsc29uICA8ZXJp
Yy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWVkaWFTdHJlYW0gaU9TXSBTZXQgYXVk
aW8gc2Vzc2lvbiBtb2RlIGFuZCBvcHRpb25zIHdoZW4gY2FwdHVyaW5nCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjE4MTM3KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExNjksNyArMTE2OSw3IEBAIHNldChXZWJDb3JlX1NP
VVJDRVMKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCiAgICAgYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9w
ZXJ0aWVzLmNwcAotICAgIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCisgICAgYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dQcm94eS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdyYXBw
ZXIuY3BwCiAgICAgYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwCiAgICAgYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxODEzNykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNTgzMyw4ICs1ODMzLDggQEAKIAkJQkNCQjhBQkExM0YxQUZCMDAwNzM0REYwIC8q
IFBPREludGVydmFsVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNCQjhBQjYxM0YxQUZCMDAwNzM0REYwIC8qIFBPREludGVydmFsVHJlZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDQkI4QUJC
MTNGMUFGQjAwMDczNERGMCAvKiBQT0RSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkI4QUI3MTNGMUFGQjAwMDczNERGMCAvKiBQ
T0RSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0JEMjFBQjBFNDE3QUQ0MDBBMDcwRjIgLyogVVJMSGFzaC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCRDIxQUEwRTQxN0FENDAw
QTA3MEYyIC8qIFVSTEhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlCQ0JGQjUzQzBEQ0QyOUNGMDAxOUIzRTUgLyogSlNET01XaW5kb3dTaGVs
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JG
QjUzQTBEQ0QyOUNGMDAxOUIzRTUgLyogSlNET01XaW5kb3dTaGVsbC5jcHAgKi87IH07Ci0JCUJD
QkZCNTNEMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1NoZWxsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JGQjUzQjBEQ0QyOUNGMDAxOUIz
RTUgLyogSlNET01XaW5kb3dTaGVsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUJDQkZCNTNDMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRv
d1Byb3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDQkZCNTNBMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1Byb3h5LmNwcCAqLzsgfTsK
KwkJQkNCRkI1M0QwRENEMjlDRjAwMTlCM0U1IC8qIEpTRE9NV2luZG93UHJveHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkZCNTNCMERDRDI5Q0Yw
MDE5QjNFNSAvKiBKU0RPTVdpbmRvd1Byb3h5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNDMEU4NzUxQkZFNzBFOTAwOEY3RjUwIC8qIEhUTUxQ
aWN0dXJlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0MwRTg3MzFCRkU3MEU5MDA4RjdGNTAgLyogSFRNTFBpY3R1cmVFbGVtZW50LmNw
cCAqLzsgfTsKIAkJQkNDMEU4NzYxQkZFNzBFOTAwOEY3RjUwIC8qIEhUTUxQaWN0dXJlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDMEU4
NzQxQkZFNzBFOTAwOEY3RjUwIC8qIEhUTUxQaWN0dXJlRWxlbWVudC5oICovOyB9OwogCQlCQ0M1
QkUwMDBDMEU5MzExMDAxMUMyREIgLyogSlNDU1NTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzVCREZFMEMwRTkzMTEwMDExQzJE
QiAvKiBKU0NTU1N0eWxlU2hlZXQuY3BwICovOyB9OwpAQCAtMTQzMzQsOCArMTQzMzQsOCBAQAog
CQlCQ0JCOEFCNjEzRjFBRkIwMDA3MzRERjAgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPREludGVydmFsVHJlZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0JCOEFCNzEzRjFBRkIwMDA3MzRERjAgLyogUE9EUmVkQmxhY2tU
cmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPRFJlZEJsYWNrVHJlZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0JEMjFBQTBFNDE3QUQ0MDBBMDcwRjIg
LyogVVJMSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxIYXNoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDQkZCNTNBMERDRDI5Q0YwMDE5QjNFNSAv
KiBKU0RPTVdpbmRvd1NoZWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRE9NV2luZG93U2hlbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
Q0JGQjUzQjBEQ0QyOUNGMDAxOUIzRTUgLyogSlNET01XaW5kb3dTaGVsbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTVdpbmRvd1NoZWxsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUJDQkZCNTNBMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1By
b3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NV2luZG93
UHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0JGQjUzQjBEQ0QyOUNG
MDAxOUIzRTUgLyogSlNET01XaW5kb3dQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0RPTVdpbmRvd1Byb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDQzBFODczMUJGRTcwRTkwMDhGN0Y1MCAvKiBIVE1MUGljdHVyZUVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFBpY3R1cmVFbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDMEU4NzQxQkZFNzBFOTAwOEY3RjUwIC8q
IEhUTUxQaWN0dXJlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
VE1MUGljdHVyZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDNUJE
RkUwQzBFOTMxMTAwMTFDMkRCIC8qIEpTQ1NTU3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNTc0LDggKzIzNTc0LDggQEAKIAkJCQlCQzY5MzI3MjBEN0Uy
OTM5MDBBRTQ0RDEgLyogSlNET01XaW5kb3dCYXNlLmggKi8sCiAJCQkJNDYwQ0JGMzMxRDRCQ0NG
RTAwOTJFODhFIC8qIEpTRE9NV2luZG93UHJvcGVydGllcy5jcHAgKi8sCiAJCQkJNDYwQ0JGMzQx
RDRCQ0NGRTAwOTJFODhFIC8qIEpTRE9NV2luZG93UHJvcGVydGllcy5oICovLAotCQkJCUJDQkZC
NTNBMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1NoZWxsLmNwcCAqLywKLQkJCQlCQ0JG
QjUzQjBEQ0QyOUNGMDAxOUIzRTUgLyogSlNET01XaW5kb3dTaGVsbC5oICovLAorCQkJCUJDQkZC
NTNBMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1Byb3h5LmNwcCAqLywKKwkJCQlCQ0JG
QjUzQjBEQ0QyOUNGMDAxOUIzRTUgLyogSlNET01XaW5kb3dQcm94eS5oICovLAogCQkJCTQxNzBB
MkU5MUQ4QzBDQzAwMDMxODQ1MiAvKiBKU0RPTVdyYXBwZXIuY3BwICovLAogCQkJCTY1RTBFOTQz
MTEzM0M4OUYwMEI0Q0IxMCAvKiBKU0RPTVdyYXBwZXIuaCAqLywKIAkJCQk3QzQ1QzlDQjFFM0U4
RTQ5MDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2FjaGUuY3BwICovLApAQCAtMjc5NjYsNyArMjc5
NjYsNyBAQAogCQkJCUJDNjkzMjc0MEQ3RTI5MzkwMEFFNDREMSAvKiBKU0RPTVdpbmRvd0Jhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1MkZCQkJDMERFMjdDQjYwMDAxRDM4NiAvKiBKU0RPTVdp
bmRvd0N1c3RvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDYwQ0JGMzYxRDRCQ0QwRTAwOTJFODhF
IC8qIEpTRE9NV2luZG93UHJvcGVydGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNCRkI1M0Qw
RENEMjlDRjAwMTlCM0U1IC8qIEpTRE9NV2luZG93U2hlbGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDQkZCNTNEMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1Byb3h5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2NUUwRTk0NDExMzNDODlGMDBCNENCMTAgLyogSlNET01XcmFwcGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QzQ1QzlEMzFFM0ZDQkQ3MDBBQUI1NTggLyogSlNET01XcmFwcGVy
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTgwNjFFMUUwM0I1ODUwMDhBMUYyNiAvKiBK
U0RvdWJsZVJhbmdlLmggaW4gSGVhZGVycyAqLywKQEAgLTMxOTM3LDcgKzMxOTM3LDcgQEAKIAkJ
CQlCQzY5MzI3MzBEN0UyOTM5MDBBRTQ0RDEgLyogSlNET01XaW5kb3dCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDRDlDMjYyMEMxN0FBNjcwMDVDOTBBMiAvKiBKU0RPTVdpbmRvd0N1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NjBDQkYzNTFENEJDRDBFMDA5MkU4OEUgLyogSlNE
T01XaW5kb3dQcm9wZXJ0aWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDQkZCNTNDMERDRDI5
Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1NoZWxsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJD
QkZCNTNDMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1Byb3h5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQxNzBBMkVBMUQ4QzBDQ0EwMDMxODQ1MiAvKiBKU0RPTVdyYXBwZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M0NUM5RDAxRTNFRkRGQjAwQUFCNTU4IC8qIEpTRE9NV3JhcHBl
ckNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQTgwNjFEMUUwM0I1ODUwMDhBMUYyNiAv
KiBKU0RvdWJsZVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAyMTgxMzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIERPTVdyYXBwZXJXb3JsZDo6fkRPTVdyYXBwZXJXb3Js
ZCgpCiAgICAgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihjbGllbnREYXRhKS0+Zm9yZ2V0
V29ybGQoKnRoaXMpOwogCiAgICAgLy8gVGhlc2UgaXRlbXMgYXJlIGNyZWF0ZWQgbGF6aWx5Lgot
ICAgIHdoaWxlICghbV9zY3JpcHRDb250cm9sbGVyc1dpdGhXaW5kb3dTaGVsbHMuaXNFbXB0eSgp
KQotICAgICAgICAoKm1fc2NyaXB0Q29udHJvbGxlcnNXaXRoV2luZG93U2hlbGxzLmJlZ2luKCkp
LT5kZXN0cm95V2luZG93U2hlbGwoKnRoaXMpOworICAgIHdoaWxlICghbV9zY3JpcHRDb250cm9s
bGVyc1dpdGhXaW5kb3dQcm94aWVzLmlzRW1wdHkoKSkKKyAgICAgICAgKCptX3NjcmlwdENvbnRy
b2xsZXJzV2l0aFdpbmRvd1Byb3hpZXMuYmVnaW4oKSktPmRlc3Ryb3lXaW5kb3dQcm94eSgqdGhp
cyk7CiB9CiAKIHZvaWQgRE9NV3JhcHBlcldvcmxkOjpjbGVhcldyYXBwZXJzKCkKQEAgLTU2LDgg
KzU2LDggQEAgdm9pZCBET01XcmFwcGVyV29ybGQ6OmNsZWFyV3JhcHBlcnMoKQogICAgIG1fd3Jh
cHBlcnMuY2xlYXIoKTsKIAogICAgIC8vIFRoZXNlIGl0ZW1zIGFyZSBjcmVhdGVkIGxhemlseS4K
LSAgICB3aGlsZSAoIW1fc2NyaXB0Q29udHJvbGxlcnNXaXRoV2luZG93U2hlbGxzLmlzRW1wdHko
KSkKLSAgICAgICAgKCptX3NjcmlwdENvbnRyb2xsZXJzV2l0aFdpbmRvd1NoZWxscy5iZWdpbigp
KS0+ZGVzdHJveVdpbmRvd1NoZWxsKCp0aGlzKTsKKyAgICB3aGlsZSAoIW1fc2NyaXB0Q29udHJv
bGxlcnNXaXRoV2luZG93UHJveGllcy5pc0VtcHR5KCkpCisgICAgICAgICgqbV9zY3JpcHRDb250
cm9sbGVyc1dpdGhXaW5kb3dQcm94aWVzLmJlZ2luKCkpLT5kZXN0cm95V2luZG93UHJveHkoKnRo
aXMpOwogfQogCiBET01XcmFwcGVyV29ybGQmIG5vcm1hbFdvcmxkKEpTQzo6Vk0mIHZtKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgJKHJldmlz
aW9uIDIxODEzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3Js
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIHB1YmxpYzoKICAgICAvLyBGcmVl
IGFzIG11Y2ggbWVtb3J5IGhlbGQgb250byBieSB0aGlzIHdvcmxkIGFzIHBvc3NpYmxlLgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJXcmFwcGVycygpOwogCi0gICAgdm9pZCBkaWRDcmVh
dGVXaW5kb3dTaGVsbChTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyKSB7IG1fc2Ny
aXB0Q29udHJvbGxlcnNXaXRoV2luZG93U2hlbGxzLmFkZChzY3JpcHRDb250cm9sbGVyKTsgfQot
ICAgIHZvaWQgZGlkRGVzdHJveVdpbmRvd1NoZWxsKFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENv
bnRyb2xsZXIpIHsgbV9zY3JpcHRDb250cm9sbGVyc1dpdGhXaW5kb3dTaGVsbHMucmVtb3ZlKHNj
cmlwdENvbnRyb2xsZXIpOyB9CisgICAgdm9pZCBkaWRDcmVhdGVXaW5kb3dQcm94eShTY3JpcHRD
b250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyKSB7IG1fc2NyaXB0Q29udHJvbGxlcnNXaXRoV2lu
ZG93UHJveGllcy5hZGQoc2NyaXB0Q29udHJvbGxlcik7IH0KKyAgICB2b2lkIGRpZERlc3Ryb3lX
aW5kb3dQcm94eShTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyKSB7IG1fc2NyaXB0
Q29udHJvbGxlcnNXaXRoV2luZG93UHJveGllcy5yZW1vdmUoc2NyaXB0Q29udHJvbGxlcik7IH0K
IAogICAgIHZvaWQgc2V0U2hhZG93Um9vdElzQWx3YXlzT3BlbigpIHsgbV9zaGFkb3dSb290SXNB
bHdheXNPcGVuID0gdHJ1ZTsgfQogICAgIGJvb2wgc2hhZG93Um9vdElzQWx3YXlzT3BlbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZG93Um9vdElzQWx3YXlzT3BlbjsgfQpAQCAtNjEsNyArNjEsNyBA
QCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgSlNDOjpWTSYgbV92bTsKLSAgICBIYXNoU2V0
PFNjcmlwdENvbnRyb2xsZXIqPiBtX3NjcmlwdENvbnRyb2xsZXJzV2l0aFdpbmRvd1NoZWxsczsK
KyAgICBIYXNoU2V0PFNjcmlwdENvbnRyb2xsZXIqPiBtX3NjcmlwdENvbnRyb2xsZXJzV2l0aFdp
bmRvd1Byb3hpZXM7CiAgICAgYm9vbCBtX2lzTm9ybWFsOwogICAgIGJvb2wgbV9zaGFkb3dSb290
SXNBbHdheXNPcGVuIHsgZmFsc2UgfTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDIxODEzNykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuY3Bw
IgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0RPTVdpbmRv
d1Byb3BlcnRpZXMuY3BwIgotI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuY3BwIgorI2luY2x1
ZGUgIkpTRE9NV2luZG93UHJveHkuY3BwIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5jcHAiCiAj
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuY3BwIgogI2luY2x1ZGUgIkpTRG9jdW1lbnRDdXN0
b20uY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuY3BwCShyZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywyMiArNzcsMjIgQEAg
Y29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNET01XaW5kbwogICAgICZkZWZhdWx0TGFu
Z3VhZ2UKIH07CiAKLUpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxET01XaW5kb3c+JiYgd2luZG93LCBKU0RPTVdpbmRv
d1NoZWxsKiBzaGVsbCkKLSAgICA6IEpTRE9NR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIHNo
ZWxsLT53b3JsZCgpLCAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKK0pTRE9NV2luZG93QmFz
ZTo6SlNET01XaW5kb3dCYXNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxE
T01XaW5kb3c+JiYgd2luZG93LCBKU0RPTVdpbmRvd1Byb3h5KiBwcm94eSkKKyAgICA6IEpTRE9N
R2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIHByb3h5LT53b3JsZCgpLCAmc19nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSkKICAgICAsIG1fd2luZG93Q2xvc2VXYXRjaHBvaW50cygod2luZG93ICYm
IHdpbmRvdy0+ZnJhbWUoKSkgPyBJc1dhdGNoZWQgOiBJc0ludmFsaWRhdGVkKQogICAgICwgbV93
cmFwcGVkKFdURk1vdmUod2luZG93KSkKLSAgICAsIG1fc2hlbGwoc2hlbGwpCisgICAgLCBtX3By
b3h5KHByb3h5KQogewogfQogCi12b2lkIEpTRE9NV2luZG93QmFzZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCkKK3ZvaWQgSlNET01XaW5kb3dCYXNlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NV2luZG93UHJveHkqIHByb3h5KQogewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtLCBzaGVsbCk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIHByb3h5KTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogCiAgICAgR2xv
YmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKICAgICAgICAgR2xvYmFsUHJvcGVy
dHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmRvY3VtZW50LCBqc051bGwoKSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMt
PndpbmRvdywgbV9zaGVsbCwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgR2xvYmFs
UHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPndpbmRvdywgbV9wcm94eSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KSwKICAgICB9OwogCiAgICAgYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9i
YWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKQEAgLTIzNSwxNCArMjM1LDE0
IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpxdWV1ZVRhc2tUb0V2ZW50TG8KICAgICBNaWNyb3Rh
c2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVlKCkuYXBwZW5kKFdURk1vdmUobWljcm90YXNrKSk7CiB9
CiAKLXZvaWQgSlNET01XaW5kb3dCYXNlOjp3aWxsUmVtb3ZlRnJvbVdpbmRvd1NoZWxsKCkKK3Zv
aWQgSlNET01XaW5kb3dCYXNlOjp3aWxsUmVtb3ZlRnJvbVdpbmRvd1Byb3h5KCkKIHsKICAgICBz
ZXRDdXJyZW50RXZlbnQoMCk7CiB9CiAKLUpTRE9NV2luZG93U2hlbGwqIEpTRE9NV2luZG93QmFz
ZTo6c2hlbGwoKSBjb25zdAorSlNET01XaW5kb3dQcm94eSogSlNET01XaW5kb3dCYXNlOjpwcm94
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2hlbGw7CisgICAgcmV0dXJuIG1fcHJveHk7CiB9
CiAKIC8vIEpTRE9NR2xvYmFsT2JqZWN0KiBpcyBpZ25vcmVkLCBhY2Nlc3NpbmcgYSB3aW5kb3cg
aW4gYW55IGNvbnRleHQgd2lsbApAQCAtMjY0LDcgKzI2NCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVj
U3RhdGUqIHN0YXRlLCBET01XaW5kb3cKIAogSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coRnJh
bWUmIGZyYW1lLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIHJldHVybiBmcmFtZS5z
Y3JpcHQoKS53aW5kb3dTaGVsbCh3b3JsZCktPndpbmRvdygpOworICAgIHJldHVybiBmcmFtZS5z
Y3JpcHQoKS53aW5kb3dQcm94eSh3b3JsZCktPndpbmRvdygpOwogfQogCiBKU0RPTVdpbmRvdyog
dG9KU0RPTVdpbmRvdyhKU0M6OlZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKQEAgLTI3Nyw4ICsyNzcs
OCBAQCBKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU0M6OlZNJiB2bSwgCiAgICAgICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0pOwogICAgICAg
ICBpZiAoY2xhc3NJbmZvID09IEpTRE9NV2luZG93OjppbmZvKCkpCiAgICAgICAgICAgICByZXR1
cm4ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKLSAgICAgICAgaWYgKGNsYXNzSW5mbyA9
PSBKU0RPTVdpbmRvd1NoZWxsOjppbmZvKCkpCi0gICAgICAgICAgICByZXR1cm4ganNDYXN0PEpT
RE9NV2luZG93U2hlbGwqPihvYmplY3QpLT53aW5kb3coKTsKKyAgICAgICAgaWYgKGNsYXNzSW5m
byA9PSBKU0RPTVdpbmRvd1Byb3h5OjppbmZvKCkpCisgICAgICAgICAgICByZXR1cm4ganNDYXN0
PEpTRE9NV2luZG93UHJveHkqPihvYmplY3QpLT53aW5kb3coKTsKICAgICAgICAgdmFsdWUgPSBv
YmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShy
ZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsODggKzI1LDg4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGNsYXNzIERPTVdpbmRvdzsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBj
bGFzcyBET01XcmFwcGVyV29ybGQ7Ci0gICAgY2xhc3MgSlNET01XaW5kb3c7Ci0gICAgY2xhc3Mg
SlNET01XaW5kb3dTaGVsbDsKLQotICAgIGNsYXNzIEpTRE9NV2luZG93QmFzZVByaXZhdGU7Ci0K
LSAgICBjbGFzcyBXRUJDT1JFX0VYUE9SVCBKU0RPTVdpbmRvd0Jhc2UgOiBwdWJsaWMgSlNET01H
bG9iYWxPYmplY3QgewotICAgICAgICB0eXBlZGVmIEpTRE9NR2xvYmFsT2JqZWN0IEJhc2U7Ci0g
ICAgcHJvdGVjdGVkOgotICAgICAgICBKU0RPTVdpbmRvd0Jhc2UoSlNDOjpWTSYsIEpTQzo6U3Ry
dWN0dXJlKiwgUmVmUHRyPERPTVdpbmRvdz4mJiwgSlNET01XaW5kb3dTaGVsbCopOwotICAgICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTVdpbmRvd1NoZWxsKik7Ci0KLSAg
ICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQotICAgIHB1YmxpYzoKLSAgICAg
ICAgdm9pZCB1cGRhdGVEb2N1bWVudCgpOwotCi0gICAgICAgIERPTVdpbmRvdyYgd3JhcHBlZCgp
IGNvbnN0IHsgcmV0dXJuICptX3dyYXBwZWQ7IH0KLSAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwotCi0gICAgICAgIC8vIENhbGxl
ZCBqdXN0IGJlZm9yZSByZW1vdmluZyB0aGlzIHdpbmRvdyBmcm9tIHRoZSBKU0RPTVdpbmRvd1No
ZWxsLgotICAgICAgICB2b2lkIHdpbGxSZW1vdmVGcm9tV2luZG93U2hlbGwoKTsKLQotICAgICAg
ICBERUNMQVJFX0lORk87Ci0KLSAgICAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpHbG9iYWxP
YmplY3RNZXRob2RUYWJsZSBzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlOwotCi0gICAgICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzUmljaFNvdXJjZUluZm8oY29uc3QgSlNDOjpKU0dsb2JhbE9iamVj
dCopOwotICAgICAgICBzdGF0aWMgYm9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHQoY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgICAgICBzdGF0aWMgYm9vbCBzaG91bGRJbnRlcnJ1cHRT
Y3JpcHRCZWZvcmVUaW1lb3V0KGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICAgICAg
c3RhdGljIEpTQzo6UnVudGltZUZsYWdzIGphdmFTY3JpcHRSdW50aW1lRmxhZ3MoY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgICAgICBzdGF0aWMgdm9pZCBxdWV1ZVRhc2tUb0V2ZW50
TG9vcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVmPEpTQzo6TWljcm90YXNrPiYmKTsKLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3Q7
Ci0KLSAgICAgICAgSlNET01XaW5kb3dTaGVsbCogc2hlbGwoKSBjb25zdDsKLQotICAgICAgICBz
dGF0aWMgdm9pZCBmaXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93
Kik7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTQzo6V2F0Y2hwb2ludFNldCBtX3dpbmRv
d0Nsb3NlV2F0Y2hwb2ludHM7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgSlNDOjpK
U0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyUmVzb2x2ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBKU0M6OkpTSW50ZXJu
YWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFs
dWUpOwotICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG1vZHVsZUxvYWRlckV2YWx1YXRlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNNb2R1bGVMb2FkZXIq
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKLSAgICAgICAgc3Rh
dGljIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwg
SlNDOjpKU1N0cmluZyosIGNvbnN0IEpTQzo6U291cmNlT3JpZ2luJik7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIHByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNQcm9taXNlKiwgSlNDOjpKU1Byb21pc2VSZWplY3Rpb25PcGVy
YXRpb24pOwotCi0gICAgICAgIFJlZlB0cjxET01XaW5kb3c+IG1fd3JhcHBlZDsKLSAgICAgICAg
SlNET01XaW5kb3dTaGVsbCogbV9zaGVsbDsKLSAgICB9OwotCi0gICAgLy8gVGhlIGZvbGxvd2lu
ZyByZXR1cm4gYSBKU0RPTVdpbmRvd1NoZWxsIG9yIGpzTnVsbCgpCi0gICAgLy8gSlNET01HbG9i
YWxPYmplY3QqIGlzIGlnbm9yZWQsIGFjY2Vzc2luZyBhIHdpbmRvdyBpbiBhbnkgY29udGV4dCB3
aWxsIHVzZSB0aGF0IERPTVdpbmRvdydzIHByb3RvdHlwZSBjaGFpbi4KLSAgICBXRUJDT1JFX0VY
UE9SVCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgRE9NV2luZG93Jik7Ci0gICAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NV2luZG93KiB3
aW5kb3cpIHsgcmV0dXJuIHdpbmRvdyA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKndpbmRv
dykgOiBKU0M6OmpzTnVsbCgpOyB9Ci0gICAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEZyYW1lJik7Ci0gICAgaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRnJhbWUqIGZyYW1lKSB7IHJldHVybiBmcmFtZSA/IHRvSlMoc3RhdGUsIGdsb2JhbE9i
amVjdCwgKmZyYW1lKSA6IEpTQzo6anNOdWxsKCk7IH0KLSAgICBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYpOwotICAgIGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERPTVdpbmRvdyogd2luZG93KSB7IHJldHVybiB3aW5k
b3cgPyB0b0pTKHN0YXRlLCAqd2luZG93KSA6IEpTQzo6anNOdWxsKCk7IH0KLQotICAgIC8vIFRo
ZSBmb2xsb3dpbmcgcmV0dXJuIGEgSlNET01XaW5kb3cgb3IgbnVsbHB0ci4KLSAgICBKU0RPTVdp
bmRvdyogdG9KU0RPTVdpbmRvdyhGcmFtZSYsIERPTVdyYXBwZXJXb3JsZCYpOwotICAgIGlubGlu
ZSBKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQpIHsgcmV0dXJuIGZyYW1lID8gdG9KU0RPTVdpbmRvdygqZnJhbWUsIHdvcmxkKSA6
IG51bGxwdHI7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRv
dyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotICAgIC8vIERPTVdpbmRvdyBhc3NvY2lhdGVk
IHdpdGggZ2xvYmFsIG9iamVjdCBvZiB0aGUgIm1vc3QtcmVjZW50bHktZW50ZXJlZCBhdXRob3Ig
ZnVuY3Rpb24gb3Igc2NyaXB0Ci0gICAgLy8gb24gdGhlIHN0YWNrLCBvciB0aGUgYXV0aG9yIGZ1
bmN0aW9uIG9yIHNjcmlwdCB0aGF0IG9yaWdpbmFsbHkgc2NoZWR1bGVkIHRoZSBjdXJyZW50bHkt
cnVubmluZyBjYWxsYmFjay4iCi0gICAgLy8gKDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3Jn
L211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjY29uY2VwdC1pbmN1bWJlbnQtZXZlcnl0aGluZz4s
IDI3IEFwcmlsIDIwMTcpCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIGZvciBhbiAiYXV0
aG9yIGZ1bmN0aW9uIG9yIHNjcmlwdCB0aGF0IG9yaWdpbmFsbHkgc2NoZWR1bGVkIHRoZSBjdXJy
ZW50bHktcnVubmluZyBjYWxsYmFjay4iCi0gICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDEyPi4KLSAgICBET01XaW5kb3cmIGluY3VtYmVudERP
TVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworY2xhc3MgRE9NV2luZG93OworY2xhc3MgRnJhbWU7
CitjbGFzcyBET01XcmFwcGVyV29ybGQ7CitjbGFzcyBKU0RPTVdpbmRvdzsKK2NsYXNzIEpTRE9N
V2luZG93UHJveHk7CisKK2NsYXNzIEpTRE9NV2luZG93QmFzZVByaXZhdGU7CisKK2NsYXNzIFdF
QkNPUkVfRVhQT1JUIEpTRE9NV2luZG93QmFzZSA6IHB1YmxpYyBKU0RPTUdsb2JhbE9iamVjdCB7
CisgICAgdHlwZWRlZiBKU0RPTUdsb2JhbE9iamVjdCBCYXNlOworcHJvdGVjdGVkOgorICAgIEpT
RE9NV2luZG93QmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8RE9NV2luZG93
PiYmLCBKU0RPTVdpbmRvd1Byb3h5Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
JiwgSlNET01XaW5kb3dQcm94eSopOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKKworcHVibGljOgorICAgIHZvaWQgdXBkYXRlRG9jdW1lbnQoKTsKKworICAgIERPTVdpbmRv
dyYgd3JhcHBlZCgpIGNvbnN0IHsgcmV0dXJuICptX3dyYXBwZWQ7IH0KKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisKKyAgICAvLyBD
YWxsZWQganVzdCBiZWZvcmUgcmVtb3ZpbmcgdGhpcyB3aW5kb3cgZnJvbSB0aGUgSlNET01XaW5k
b3dQcm94eS4KKyAgICB2b2lkIHdpbGxSZW1vdmVGcm9tV2luZG93UHJveHkoKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBzX2dsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlOworCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNSaWNoU291cmNl
SW5mbyhjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wgc2hvdWxk
SW50ZXJydXB0U2NyaXB0KGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMg
Ym9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0KGNvbnN0IEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpSdW50aW1lRmxhZ3MgamF2YVNjcmlwdFJ1bnRp
bWVGbGFncyhjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIHZvaWQgcXVl
dWVUYXNrVG9FdmVudExvb3AoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFJlZjxKU0M6Ok1pY3JvdGFz
az4mJik7CisKKyAgICB2b2lkIHByaW50RXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0
OworCisgICAgSlNET01XaW5kb3dQcm94eSogcHJveHkoKSBjb25zdDsKKworICAgIHN0YXRpYyB2
b2lkIGZpcmVGcmFtZUNsZWFyZWRXYXRjaHBvaW50c0ZvcldpbmRvdyhET01XaW5kb3cqKTsKKwor
cHJvdGVjdGVkOgorICAgIEpTQzo6V2F0Y2hwb2ludFNldCBtX3dpbmRvd0Nsb3NlV2F0Y2hwb2lu
dHM7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIG1vZHVs
ZUxvYWRlclJlc29sdmUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFs
dWUpOworICAgIHN0YXRpYyBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRj
aChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTTW9kdWxlTG9h
ZGVyKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgbW9kdWxlTG9hZGVyRXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVM
b2FkZXJJbXBvcnRNb2R1bGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNTdHJpbmcqLCBjb25zdCBKU0M6OlNvdXJjZU9y
aWdpbiYpOworICAgIHN0YXRpYyB2b2lkIHByb21pc2VSZWplY3Rpb25UcmFja2VyKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNQcm9taXNlKiwgSlNDOjpKU1By
b21pc2VSZWplY3Rpb25PcGVyYXRpb24pOworCisgICAgUmVmUHRyPERPTVdpbmRvdz4gbV93cmFw
cGVkOworICAgIEpTRE9NV2luZG93UHJveHkqIG1fcHJveHk7Cit9OworCisvLyBUaGUgZm9sbG93
aW5nIHJldHVybiBhIEpTRE9NV2luZG93UHJveHkgb3IganNOdWxsKCkKKy8vIEpTRE9NR2xvYmFs
T2JqZWN0KiBpcyBpZ25vcmVkLCBhY2Nlc3NpbmcgYSB3aW5kb3cgaW4gYW55IGNvbnRleHQgd2ls
bCB1c2UgdGhhdCBET01XaW5kb3cncyBwcm90b3R5cGUgY2hhaW4uCitXRUJDT1JFX0VYUE9SVCBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgRE9N
V2luZG93Jik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBET01XaW5kb3cqIHdpbmRvdykgeyBy
ZXR1cm4gd2luZG93ID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqd2luZG93KSA6IEpTQzo6
anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBGcmFtZSYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRnJhbWUqIGZyYW1l
KSB7IHJldHVybiBmcmFtZSA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmZyYW1lKSA6IEpT
Qzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgRE9NV2lu
ZG93Jik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBE
T01XaW5kb3cqIHdpbmRvdykgeyByZXR1cm4gd2luZG93ID8gdG9KUyhzdGF0ZSwgKndpbmRvdykg
OiBKU0M6OmpzTnVsbCgpOyB9CisKKy8vIFRoZSBmb2xsb3dpbmcgcmV0dXJuIGEgSlNET01XaW5k
b3cgb3IgbnVsbHB0ci4KK0pTRE9NV2luZG93KiB0b0pTRE9NV2luZG93KEZyYW1lJiwgRE9NV3Jh
cHBlcldvcmxkJik7CitpbmxpbmUgSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coRnJhbWUqIGZy
YW1lLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKSB7IHJldHVybiBmcmFtZSA/IHRvSlNET01XaW5k
b3coKmZyYW1lLCB3b3JsZCkgOiBudWxscHRyOyB9CitXRUJDT1JFX0VYUE9SVCBKU0RPTVdpbmRv
dyogdG9KU0RPTVdpbmRvdyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gRE9NV2luZG93
IGFzc29jaWF0ZWQgd2l0aCBnbG9iYWwgb2JqZWN0IG9mIHRoZSAibW9zdC1yZWNlbnRseS1lbnRl
cmVkIGF1dGhvciBmdW5jdGlvbiBvciBzY3JpcHQKKy8vIG9uIHRoZSBzdGFjaywgb3IgdGhlIGF1
dGhvciBmdW5jdGlvbiBvciBzY3JpcHQgdGhhdCBvcmlnaW5hbGx5IHNjaGVkdWxlZCB0aGUgY3Vy
cmVudGx5LXJ1bm5pbmcgY2FsbGJhY2suIgorLy8gKDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cu
b3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjY29uY2VwdC1pbmN1bWJlbnQtZXZlcnl0aGlu
Zz4sIDI3IEFwcmlsIDIwMTcpCisvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgZm9yIGFuICJhdXRo
b3IgZnVuY3Rpb24gb3Igc2NyaXB0IHRoYXQgb3JpZ2luYWxseSBzY2hlZHVsZWQgdGhlIGN1cnJl
bnRseS1ydW5uaW5nIGNhbGxiYWNrLiIKKy8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzQxMj4uCitET01XaW5kb3cmIGluY3VtYmVudERPTVdpbmRvdyhK
U0M6OkV4ZWNTdGF0ZSopOwogCi0gICAgRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUqKTsKLSAgICBET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRl
Kik7CitET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworRE9NV2lu
ZG93JiBmaXJzdERPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCShyZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw4ICs1NjUs
OCBAQCBET01XaW5kb3cqIEpTRE9NV2luZG93Ojp0b1dyYXBwZWQoVk0mIHZtCiAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICBpZiAob2JqZWN0LT5pbmhlcml0cyh2
bSwgSlNET01XaW5kb3c6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiAmanNDYXN0PEpTRE9NV2lu
ZG93Kj4ob2JqZWN0KS0+d3JhcHBlZCgpOwotICAgIGlmIChvYmplY3QtPmluaGVyaXRzKHZtLCBK
U0RPTVdpbmRvd1NoZWxsOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gJmpzQ2FzdDxKU0RPTVdp
bmRvd1NoZWxsKj4ob2JqZWN0KS0+d3JhcHBlZCgpOworICAgIGlmIChvYmplY3QtPmluaGVyaXRz
KHZtLCBKU0RPTVdpbmRvd1Byb3h5OjppbmZvKCkpKQorICAgICAgICByZXR1cm4gJmpzQ2FzdDxK
U0RPTVdpbmRvd1Byb3h5Kj4ob2JqZWN0KS0+d3JhcHBlZCgpOwogICAgIHJldHVybiBudWxscHRy
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmgJKHJldmlzaW9uIDIxODEzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlICJKU0RPTVdp
bmRvd1NoZWxsLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dQcm94eS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
UHJvcGVydGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93UHJvcGVydGllcy5oCShyZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgSlNET01XaW5kb3dQcm9wZXJ0
aWVzKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKICAgICAgICAgOiBKU0RPTU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkK
LSAgICB7IH0KKyAgICB7CisgICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm94eS5jcHAJ
KHJldmlzaW9uIDIxODEzNykJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5jcHA6MjE4MTM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKKworI2luY2x1ZGUgIkNv
bW1vblZNLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93UHJvcGVydGll
cy5oIgorI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9s
bGVyLmgiCisjaW5jbHVkZSA8aGVhcC9TdHJvbmdJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9KU09iamVjdC5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8gPSB7ICJKU0RP
TVdpbmRvd1NoZWxsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0RPTVdpbmRvd1NoZWxsKSB9OworCitKU0RPTVdpbmRvd1NoZWxsOjpKU0RP
TVdpbmRvd1NoZWxsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3dvcmxkKHdvcmxk
KQoreworfQorCit2b2lkIEpTRE9NV2luZG93U2hlbGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
UmVmUHRyPERPTVdpbmRvdz4mJiB3aW5kb3cpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisgICAgc2V0V2luZG93KFdU
Rk1vdmUod2luZG93KSk7Cit9CisKK3ZvaWQgSlNET01XaW5kb3dTaGVsbDo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGNlbGwpLT5K
U0RPTVdpbmRvd1NoZWxsOjp+SlNET01XaW5kb3dTaGVsbCgpOworfQorCit2b2lkIEpTRE9NV2lu
ZG93U2hlbGw6OnNldFdpbmRvdyhWTSYgdm0sIEpTRE9NV2luZG93KiB3aW5kb3cpCit7CisgICAg
QVNTRVJUX0FSRyh3aW5kb3csIHdpbmRvdyk7CisgICAgc2V0VGFyZ2V0KHZtLCB3aW5kb3cpOwor
ICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3Qodm0sIHdpbmRvdyk7CisgICAgR0NDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKK30KKwordm9pZCBKU0RP
TVdpbmRvd1NoZWxsOjpzZXRXaW5kb3coUmVmUHRyPERPTVdpbmRvdz4mJiBkb21XaW5kb3cpCit7
CisgICAgLy8gUmVwbGFjaW5nIEpTRE9NV2luZG93IHZpYSB0ZWxsaW5nIEpTRE9NV2luZG93U2hl
bGwgdG8gdXNlIHRoZSBzYW1lIERPTVdpbmRvdyBpdCBhbHJlYWR5IHVzZXMgbWFrZXMgbm8gc2Vu
c2UsCisgICAgLy8gc28gd2UnZCBiZXR0ZXIgbmV2ZXIgdHJ5IHRvLgorICAgIEFTU0VSVCghd2lu
ZG93KCkgfHwgZG9tV2luZG93LmdldCgpICE9ICZ3aW5kb3coKS0+d3JhcHBlZCgpKTsKKyAgICAv
LyBFeHBsaWNpdGx5IHByb3RlY3QgdGhlIGdsb2JhbCBvYmplY3QncyBwcm90b3R5cGUgc28gaXQg
aXNuJ3QgY29sbGVjdGVkCisgICAgLy8gd2hlbiB3ZSBhbGxvY2F0ZSB0aGUgZ2xvYmFsIG9iamVj
dC4gKE9uY2UgdGhlIGdsb2JhbCBvYmplY3QgaXMgZnVsbHkKKyAgICAvLyBjb25zdHJ1Y3RlZCwg
aXQgY2FuIG1hcmsgaXRzIG93biBwcm90b3R5cGUuKQorICAgIAorICAgIFZNJiB2bSA9IGNvbW1v
blZNKCk7CisgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSBKU0RPTVdpbmRvd1By
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBudWxscHRyLCBqc051bGwoKSk7CisgICAgU3Ry
b25nPEpTRE9NV2luZG93UHJvdG90eXBlPiBwcm90b3R5cGUodm0sIEpTRE9NV2luZG93UHJvdG90
eXBlOjpjcmVhdGUodm0sIG51bGxwdHIsIHByb3RvdHlwZVN0cnVjdHVyZSkpOworCisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0RPTVdpbmRvdzo6Y3JlYXRlU3RydWN0dXJlKHZtLCBudWxs
cHRyLCBwcm90b3R5cGUuZ2V0KCkpOworICAgIEpTRE9NV2luZG93KiBqc0RPTVdpbmRvdyA9IEpT
RE9NV2luZG93OjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgKmRvbVdpbmRvdywgdGhpcyk7CisgICAg
cHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0R2xvYmFsT2JqZWN0KHZtLCBqc0RPTVdpbmRvdyk7
CisKKyAgICBTdHJ1Y3R1cmUqIHdpbmRvd1Byb3BlcnRpZXNTdHJ1Y3R1cmUgPSBKU0RPTVdpbmRv
d1Byb3BlcnRpZXM6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNET01XaW5kb3csIEpTRXZlbnRUYXJn
ZXQ6OnByb3RvdHlwZSh2bSwgKmpzRE9NV2luZG93KSk7CisgICAgSlNET01XaW5kb3dQcm9wZXJ0
aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpjcmVhdGUod2lu
ZG93UHJvcGVydGllc1N0cnVjdHVyZSwgKmpzRE9NV2luZG93KTsKKworICAgIHByb3RvdHlwZS0+
c3RydWN0dXJlKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKHZtLCB3aW5kb3dQcm9w
ZXJ0aWVzKTsKKyAgICBzZXRXaW5kb3codm0sIGpzRE9NV2luZG93KTsKKyAgICBBU1NFUlQoanNE
T01XaW5kb3ctPmdsb2JhbE9iamVjdCgpID09IGpzRE9NV2luZG93KTsKKyAgICBBU1NFUlQocHJv
dG90eXBlLT5nbG9iYWxPYmplY3QoKSA9PSBqc0RPTVdpbmRvdyk7Cit9CisKKy8vIC0tLS0KKy8v
IEpTRE9NV2luZG93IG1ldGhvZHMKKy8vIC0tLS0KKworRE9NV2luZG93JiBKU0RPTVdpbmRvd1No
ZWxsOjp3cmFwcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2luZG93KCktPndyYXBwZWQoKTsK
K30KKworRE9NV2luZG93KiBKU0RPTVdpbmRvd1NoZWxsOjp0b1dyYXBwZWQoVk0mIHZtLCBKU09i
amVjdCogdmFsdWUpCit7CisgICAgYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
RE9NV2luZG93U2hlbGwqPih2bSwgdmFsdWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICZ3cmFwcGVyLT53aW5kb3coKS0+d3JhcHBlZCgp
OworfQorCisvLyAtLS0tCisvLyBDb252ZXJzaW9uIG1ldGhvZHMKKy8vIC0tLS0KKworSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUmIGZyYW1lKQoreworICAgIHJldHVybiBmcmFt
ZS5zY3JpcHQoKS53aW5kb3dTaGVsbChjdXJyZW50V29ybGQoZXhlYykpOworfQorCitKU0RPTVdp
bmRvd1NoZWxsKiB0b0pTRE9NV2luZG93U2hlbGwoRnJhbWUmIGZyYW1lLCBET01XcmFwcGVyV29y
bGQmIHdvcmxkKQoreworICAgIHJldHVybiBmcmFtZS5zY3JpcHQoKS53aW5kb3dTaGVsbCh3b3Js
ZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93UHJveHkuY3BwCShyZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0RPTVdp
bmRvd1NoZWxsLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dQcm94eS5oIgogCiAjaW5jbHVkZSAi
Q29tbW9uVk0uaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDMsMjcgKzQzLDI3IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgQ2xhc3NJbmZv
IEpTRE9NV2luZG93U2hlbGw6OnNfaW5mbyA9IHsgIkpTRE9NV2luZG93U2hlbGwiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRE9NV2luZG93
U2hlbGwpIH07Citjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dQcm94eTo6c19pbmZvID0geyAi
SlNET01XaW5kb3dQcm94eSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNET01XaW5kb3dQcm94eSkgfTsKIAotSlNET01XaW5kb3dTaGVsbDo6
SlNET01XaW5kb3dTaGVsbChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBET01XcmFwcGVy
V29ybGQmIHdvcmxkKQorSlNET01XaW5kb3dQcm94eTo6SlNET01XaW5kb3dQcm94eShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQogICAgICwgbV93b3JsZCh3b3JsZCkKIHsKIH0KIAotdm9pZCBKU0RP
TVdpbmRvd1NoZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0cjxET01XaW5kb3c+JiYg
d2luZG93KQordm9pZCBKU0RPTVdpbmRvd1Byb3h5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJl
ZlB0cjxET01XaW5kb3c+JiYgd2luZG93KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIHNldFdpbmRvdyhXVEZN
b3ZlKHdpbmRvdykpOwogfQogCi12b2lkIEpTRE9NV2luZG93U2hlbGw6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQordm9pZCBKU0RPTVdpbmRvd1Byb3h5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsK
LSAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4oY2VsbCktPkpTRE9NV2luZG93U2hl
bGw6On5KU0RPTVdpbmRvd1NoZWxsKCk7CisgICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dQcm94
eSo+KGNlbGwpLT5KU0RPTVdpbmRvd1Byb3h5Ojp+SlNET01XaW5kb3dQcm94eSgpOwogfQogCi12
b2lkIEpTRE9NV2luZG93U2hlbGw6OnNldFdpbmRvdyhWTSYgdm0sIEpTRE9NV2luZG93KiB3aW5k
b3cpCit2b2lkIEpTRE9NV2luZG93UHJveHk6OnNldFdpbmRvdyhWTSYgdm0sIEpTRE9NV2luZG93
KiB3aW5kb3cpCiB7CiAgICAgQVNTRVJUX0FSRyh3aW5kb3csIHdpbmRvdyk7CiAgICAgc2V0VGFy
Z2V0KHZtLCB3aW5kb3cpOwpAQCAtNzEsOSArNzEsOSBAQCB2b2lkIEpTRE9NV2luZG93U2hlbGw6
OnNldFdpbmRvdyhWTSYgdm0sCiAgICAgR0NDb250cm9sbGVyOjpzaW5nbGV0b24oKS5nYXJiYWdl
Q29sbGVjdFNvb24oKTsKIH0KIAotdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3coUmVm
UHRyPERPTVdpbmRvdz4mJiBkb21XaW5kb3cpCit2b2lkIEpTRE9NV2luZG93UHJveHk6OnNldFdp
bmRvdyhSZWZQdHI8RE9NV2luZG93PiYmIGRvbVdpbmRvdykKIHsKLSAgICAvLyBSZXBsYWNpbmcg
SlNET01XaW5kb3cgdmlhIHRlbGxpbmcgSlNET01XaW5kb3dTaGVsbCB0byB1c2UgdGhlIHNhbWUg
RE9NV2luZG93IGl0IGFscmVhZHkgdXNlcyBtYWtlcyBubyBzZW5zZSwKKyAgICAvLyBSZXBsYWNp
bmcgSlNET01XaW5kb3cgdmlhIHRlbGxpbmcgSlNET01XaW5kb3dQcm94eSB0byB1c2UgdGhlIHNh
bWUgRE9NV2luZG93IGl0IGFscmVhZHkgdXNlcyBtYWtlcyBubyBzZW5zZSwKICAgICAvLyBzbyB3
ZSdkIGJldHRlciBuZXZlciB0cnkgdG8uCiAgICAgQVNTRVJUKCF3aW5kb3coKSB8fCBkb21XaW5k
b3cuZ2V0KCkgIT0gJndpbmRvdygpLT53cmFwcGVkKCkpOwogICAgIC8vIEV4cGxpY2l0bHkgcHJv
dGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBpc24ndCBjb2xsZWN0ZWQK
QEAgLTEwMSwxNCArMTAxLDE0IEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2luZG93KFJl
ZlB0cjwKIC8vIEpTRE9NV2luZG93IG1ldGhvZHMKIC8vIC0tLS0KIAotRE9NV2luZG93JiBKU0RP
TVdpbmRvd1NoZWxsOjp3cmFwcGVkKCkgY29uc3QKK0RPTVdpbmRvdyYgSlNET01XaW5kb3dQcm94
eTo6d3JhcHBlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHdpbmRvdygpLT53cmFwcGVkKCk7CiB9
CiAKLURPTVdpbmRvdyogSlNET01XaW5kb3dTaGVsbDo6dG9XcmFwcGVkKFZNJiB2bSwgSlNPYmpl
Y3QqIHZhbHVlKQorRE9NV2luZG93KiBKU0RPTVdpbmRvd1Byb3h5Ojp0b1dyYXBwZWQoVk0mIHZt
LCBKU09iamVjdCogdmFsdWUpCiB7Ci0gICAgYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTRE9NV2luZG93U2hlbGwqPih2bSwgdmFsdWUpOworICAgIGF1dG8qIHdyYXBwZXIgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU0RPTVdpbmRvd1Byb3h5Kj4odm0sIHZhbHVlKTsKICAgICBpZiAo
IXdyYXBwZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiAmd3JhcHBlci0+
d2luZG93KCktPndyYXBwZWQoKTsKQEAgLTEyMCwxMiArMTIwLDEyIEBAIERPTVdpbmRvdyogSlNE
T01XaW5kb3dTaGVsbDo6dG9XcmFwcGVkKFYKIAogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgRnJhbWUmIGZyYW1lKQogewotICAgIHJldHVybiBmcmFtZS5zY3JpcHQoKS53aW5kb3dTaGVs
bChjdXJyZW50V29ybGQoZXhlYykpOworICAgIHJldHVybiBmcmFtZS5zY3JpcHQoKS53aW5kb3dQ
cm94eShjdXJyZW50V29ybGQoZXhlYykpOwogfQogCi1KU0RPTVdpbmRvd1NoZWxsKiB0b0pTRE9N
V2luZG93U2hlbGwoRnJhbWUmIGZyYW1lLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQorSlNET01X
aW5kb3dQcm94eSogdG9KU0RPTVdpbmRvd1Byb3h5KEZyYW1lJiBmcmFtZSwgRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2NyaXB0KCkud2luZG93U2hlbGwod29y
bGQpOworICAgIHJldHVybiBmcmFtZS5zY3JpcHQoKS53aW5kb3dQcm94eSh3b3JsZCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1Byb3h5LmgJKHJldmlzaW9uIDIxODEzNykJKGZyb20gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oOjIxODEzNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNE
T01XaW5kb3cuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTUHJveHkuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGcmFtZTsKKworLy8gRklYTUU6IFJlbmFtZSB0byBKU0RPTVdpbmRv
d1Byb3h5IG9yIEpTV2luZG93UHJveHkgdG8gbWF0Y2ggSFRNTCBzcGVjIG5hbWluZy4gKGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzgwNzMzKQorY2xhc3MgSlNET01XaW5kb3dTaGVsbCA6IHB1YmxpYyBK
U0M6OkpTUHJveHkgeworICAgIHR5cGVkZWYgSlNDOjpKU1Byb3h5IEJhc2U7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIEpTRE9NV2luZG93KiB3aW5k
b3coKSBjb25zdCB7IHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvdyo+KHRhcmdldCgpKTsg
fQorICAgIHZvaWQgc2V0V2luZG93KEpTQzo6Vk0mLCBKU0RPTVdpbmRvdyopOworICAgIHZvaWQg
c2V0V2luZG93KFJlZlB0cjxET01XaW5kb3c+JiYpOworCisgICAgREVDTEFSRV9JTkZPOworCisg
ICAgRE9NV2luZG93JiB3cmFwcGVkKCkgY29uc3Q7CisgICAgc3RhdGljIFdFQkNPUkVfRVhQT1JU
IERPTVdpbmRvdyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTT2JqZWN0Kik7CisKKyAgICBz
dGF0aWMgSlNET01XaW5kb3dTaGVsbCogY3JlYXRlKEpTQzo6Vk0mIHZtLCBSZWZQdHI8RE9NV2lu
ZG93PiYmIHdpbmRvdywgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCkKKyAgICB7CisgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0RPTVdpbmRvd1NoZWxsPih2bS5oZWFwKSkgSlNE
T01XaW5kb3dTaGVsbCh2bSwgc3RydWN0dXJlLCB3b3JsZCk7CisgICAgICAgIHNoZWxsLT5maW5p
c2hDcmVhdGlvbih2bSwgV1RGTW92ZSh3aW5kb3cpKTsKKyAgICAgICAgcmV0dXJuIHNoZWxsOwor
ICAgIH0KKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
OlB1cmVGb3J3YXJkaW5nUHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCisgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQ7IH0KKwor
cHJvdGVjdGVkOgorICAgIEpTRE9NV2luZG93U2hlbGwoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJl
KiwgRE9NV3JhcHBlcldvcmxkJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwg
UmVmUHRyPERPTVdpbmRvdz4mJik7CisKKyAgICBSZWY8RE9NV3JhcHBlcldvcmxkPiBtX3dvcmxk
OworfTsKKworLy8gSlNET01XaW5kb3dTaGVsbCBpcyBhIGxpdHRsZSBvZGQgaW4gdGhhdCBpdCdz
IG5vdCBhIHRyYWRpdGlvbmFsIHdyYXBwZXIgYW5kIGhhcyBubyBiYWNrIHBvaW50ZXIuIEl0Cisv
LyBpcyBob3dldmVyIHN0cm9uZ2x5IG93bmVkIGJ5IEZyYW1lICh2aWEgaXRzIFNjcmlwdENvbnRy
b2xsZXIpLCBhbmQgdGhlcmVmb3JlLCB0byBnZXQgdGhlIEpTRE9NV2luZG93U2hlbGwKKy8vIGEg
RnJhbWUgaXMgcGFzc2VkLgorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBGcmFt
ZSYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJh
bWUqIGZyYW1lKSB7IHJldHVybiBmcmFtZSA/IHRvSlMoc3RhdGUsICpmcmFtZSkgOiBKU0M6Ompz
TnVsbCgpOyB9CisKK0pTRE9NV2luZG93U2hlbGwqIHRvSlNET01XaW5kb3dTaGVsbChGcmFtZSYs
IERPTVdyYXBwZXJXb3JsZCYpOworaW5saW5lIEpTRE9NV2luZG93U2hlbGwqIHRvSlNET01XaW5k
b3dTaGVsbChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCYgd29ybGQpIHsgcmV0dXJuIGZy
YW1lID8gdG9KU0RPTVdpbmRvd1NoZWxsKCpmcmFtZSwgd29ybGQpIDogbnVsbHB0cjsgfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVv
bC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJv
eHkuaAkocmV2aXNpb24gMjE4MTM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiAKLS8vIEZJWE1FOiBSZW5hbWUgdG8gSlNET01X
aW5kb3dQcm94eSBvciBKU1dpbmRvd1Byb3h5IHRvIG1hdGNoIEhUTUwgc3BlYyBuYW1pbmcuICho
dHRwczovL3dlYmtpdC5vcmcvYi84MDczMykKLWNsYXNzIEpTRE9NV2luZG93U2hlbGwgOiBwdWJs
aWMgSlNDOjpKU1Byb3h5IHsKK2NsYXNzIEpTRE9NV2luZG93UHJveHkgOiBwdWJsaWMgSlNDOjpK
U1Byb3h5IHsKICAgICB0eXBlZGVmIEpTQzo6SlNQcm94eSBCYXNlOwogcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC01MSwxMSArNTAsMTEgQEAgcHVibGljOgog
ICAgIERPTVdpbmRvdyYgd3JhcHBlZCgpIGNvbnN0OwogICAgIHN0YXRpYyBXRUJDT1JFX0VYUE9S
VCBET01XaW5kb3cqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU09iamVjdCopOwogCi0gICAg
c3RhdGljIEpTRE9NV2luZG93U2hlbGwqIGNyZWF0ZShKU0M6OlZNJiB2bSwgUmVmUHRyPERPTVdp
bmRvdz4mJiB3aW5kb3csIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQpCisgICAgc3RhdGljIEpTRE9NV2luZG93UHJveHkqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgUmVmUHRyPERPTVdpbmRvdz4mJiB3aW5kb3csIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCiAgICAgewotICAgICAgICBKU0RPTVdpbmRvd1NoZWxs
KiBzaGVsbCA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNET01XaW5kb3dTaGVs
bD4odm0uaGVhcCkpIEpTRE9NV2luZG93U2hlbGwodm0sIHN0cnVjdHVyZSwgd29ybGQpOwotICAg
ICAgICBzaGVsbC0+ZmluaXNoQ3JlYXRpb24odm0sIFdURk1vdmUod2luZG93KSk7Ci0gICAgICAg
IHJldHVybiBzaGVsbDsKKyAgICAgICAgSlNET01XaW5kb3dQcm94eSogcHJveHkgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRE9NV2luZG93UHJveHk+KHZtLmhlYXApKSBKU0RP
TVdpbmRvd1Byb3h5KHZtLCBzdHJ1Y3R1cmUsIHdvcmxkKTsKKyAgICAgICAgcHJveHktPmZpbmlz
aENyZWF0aW9uKHZtLCBXVEZNb3ZlKHdpbmRvdykpOworICAgICAgICByZXR1cm4gcHJveHk7CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC02NiwxOSArNjUsMTkgQEAgcHVibGlj
OgogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQoKSB7IHJldHVybiBtX3dvcmxkOyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBKU0RPTVdpbmRvd1NoZWxsKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSos
IERPTVdyYXBwZXJXb3JsZCYpOworICAgIEpTRE9NV2luZG93UHJveHkoSlNDOjpWTSYsIEpTQzo6
U3RydWN0dXJlKiwgRE9NV3JhcHBlcldvcmxkJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgUmVmUHRyPERPTVdpbmRvdz4mJik7CiAKICAgICBSZWY8RE9NV3JhcHBlcldvcmxk
PiBtX3dvcmxkOwogfTsKIAotLy8gSlNET01XaW5kb3dTaGVsbCBpcyBhIGxpdHRsZSBvZGQgaW4g
dGhhdCBpdCdzIG5vdCBhIHRyYWRpdGlvbmFsIHdyYXBwZXIgYW5kIGhhcyBubyBiYWNrIHBvaW50
ZXIuIEl0Ci0vLyBpcyBob3dldmVyIHN0cm9uZ2x5IG93bmVkIGJ5IEZyYW1lICh2aWEgaXRzIFNj
cmlwdENvbnRyb2xsZXIpLCBhbmQgdGhlcmVmb3JlLCB0byBnZXQgdGhlIEpTRE9NV2luZG93U2hl
bGwKKy8vIEpTRE9NV2luZG93UHJveHkgaXMgYSBsaXR0bGUgb2RkIGluIHRoYXQgaXQncyBub3Qg
YSB0cmFkaXRpb25hbCB3cmFwcGVyIGFuZCBoYXMgbm8gYmFjayBwb2ludGVyLiBJdAorLy8gaXMg
aG93ZXZlciBzdHJvbmdseSBvd25lZCBieSBGcmFtZSAodmlhIGl0cyBTY3JpcHRDb250cm9sbGVy
KSwgYW5kIHRoZXJlZm9yZSwgdG8gZ2V0IHRoZSBKU0RPTVdpbmRvd1Byb3h5CiAvLyBhIEZyYW1l
IGlzIHBhc3NlZC4KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUmKTsK
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZyYW1lKiBm
cmFtZSkgeyByZXR1cm4gZnJhbWUgPyB0b0pTKHN0YXRlLCAqZnJhbWUpIDogSlNDOjpqc051bGwo
KTsgfQogCi1KU0RPTVdpbmRvd1NoZWxsKiB0b0pTRE9NV2luZG93U2hlbGwoRnJhbWUmLCBET01X
cmFwcGVyV29ybGQmKTsKLWlubGluZSBKU0RPTVdpbmRvd1NoZWxsKiB0b0pTRE9NV2luZG93U2hl
bGwoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKSB7IHJldHVybiBmcmFtZSA/
IHRvSlNET01XaW5kb3dTaGVsbCgqZnJhbWUsIHdvcmxkKSA6IG51bGxwdHI7IH0KK0pTRE9NV2lu
ZG93UHJveHkqIHRvSlNET01XaW5kb3dQcm94eShGcmFtZSYsIERPTVdyYXBwZXJXb3JsZCYpOwor
aW5saW5lIEpTRE9NV2luZG93UHJveHkqIHRvSlNET01XaW5kb3dQcm94eShGcmFtZSogZnJhbWUs
IERPTVdyYXBwZXJXb3JsZCYgd29ybGQpIHsgcmV0dXJuIGZyYW1lID8gdG9KU0RPTVdpbmRvd1By
b3h5KCpmcmFtZSwgd29ybGQpIDogbnVsbHB0cjsgfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxs
LmNwcAkocmV2aXNpb24gMjE4MTM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dTaGVsbC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dTaGVsbC5oIgotCi0jaW5jbHVkZSAiQ29t
bW9uVk0uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgot
I2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dQcm9wZXJ0aWVz
LmgiCi0jaW5jbHVkZSAiSlNFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0pTT2JqZWN0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY29uc3QgQ2xhc3NJbmZvIEpTRE9NV2luZG93U2hlbGw6OnNfaW5mbyA9IHsgIkpTRE9N
V2luZG93U2hlbGwiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTRE9NV2luZG93U2hlbGwpIH07Ci0KLUpTRE9NV2luZG93U2hlbGw6OkpTRE9N
V2luZG93U2hlbGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCkKLSAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fd29ybGQod29ybGQp
Ci17Ci19Ci0KLXZvaWQgSlNET01XaW5kb3dTaGVsbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBS
ZWZQdHI8RE9NV2luZG93PiYmIHdpbmRvdykKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBzZXRXaW5kb3coV1RG
TW92ZSh3aW5kb3cpKTsKLX0KLQotdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKLXsKLSAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4oY2VsbCktPkpT
RE9NV2luZG93U2hlbGw6On5KU0RPTVdpbmRvd1NoZWxsKCk7Ci19Ci0KLXZvaWQgSlNET01XaW5k
b3dTaGVsbDo6c2V0V2luZG93KFZNJiB2bSwgSlNET01XaW5kb3cqIHdpbmRvdykKLXsKLSAgICBB
U1NFUlRfQVJHKHdpbmRvdywgd2luZG93KTsKLSAgICBzZXRUYXJnZXQodm0sIHdpbmRvdyk7Ci0g
ICAgc3RydWN0dXJlKCktPnNldEdsb2JhbE9iamVjdCh2bSwgd2luZG93KTsKLSAgICBHQ0NvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwotfQotCi12b2lkIEpTRE9N
V2luZG93U2hlbGw6OnNldFdpbmRvdyhSZWZQdHI8RE9NV2luZG93PiYmIGRvbVdpbmRvdykKLXsK
LSAgICAvLyBSZXBsYWNpbmcgSlNET01XaW5kb3cgdmlhIHRlbGxpbmcgSlNET01XaW5kb3dTaGVs
bCB0byB1c2UgdGhlIHNhbWUgRE9NV2luZG93IGl0IGFscmVhZHkgdXNlcyBtYWtlcyBubyBzZW5z
ZSwKLSAgICAvLyBzbyB3ZSdkIGJldHRlciBuZXZlciB0cnkgdG8uCi0gICAgQVNTRVJUKCF3aW5k
b3coKSB8fCBkb21XaW5kb3cuZ2V0KCkgIT0gJndpbmRvdygpLT53cmFwcGVkKCkpOwotICAgIC8v
IEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBp
c24ndCBjb2xsZWN0ZWQKLSAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0
LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBmdWxseQotICAgIC8vIGNvbnN0cnVjdGVkLCBp
dCBjYW4gbWFyayBpdHMgb3duIHByb3RvdHlwZS4pCi0gICAgCi0gICAgVk0mIHZtID0gY29tbW9u
Vk0oKTsKLSAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IEpTRE9NV2luZG93UHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIG51bGxwdHIsIGpzTnVsbCgpKTsKLSAgICBTdHJv
bmc8SlNET01XaW5kb3dQcm90b3R5cGU+IHByb3RvdHlwZSh2bSwgSlNET01XaW5kb3dQcm90b3R5
cGU6OmNyZWF0ZSh2bSwgbnVsbHB0ciwgcHJvdG90eXBlU3RydWN0dXJlKSk7Ci0KLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IEpTRE9NV2luZG93OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIG51bGxw
dHIsIHByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNET01XaW5kb3cqIGpzRE9NV2luZG93ID0gSlNE
T01XaW5kb3c6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCAqZG9tV2luZG93LCB0aGlzKTsKLSAgICBw
cm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3Qodm0sIGpzRE9NV2luZG93KTsK
LQotICAgIFN0cnVjdHVyZSogd2luZG93UHJvcGVydGllc1N0cnVjdHVyZSA9IEpTRE9NV2luZG93
UHJvcGVydGllczo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc0RPTVdpbmRvdywgSlNFdmVudFRhcmdl
dDo6cHJvdG90eXBlKHZtLCAqanNET01XaW5kb3cpKTsKLSAgICBKU0RPTVdpbmRvd1Byb3BlcnRp
ZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OmNyZWF0ZSh3aW5k
b3dQcm9wZXJ0aWVzU3RydWN0dXJlLCAqanNET01XaW5kb3cpOwotCi0gICAgcHJvdG90eXBlLT5z
dHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24odm0sIHdpbmRvd1Byb3Bl
cnRpZXMpOwotICAgIHNldFdpbmRvdyh2bSwganNET01XaW5kb3cpOwotICAgIEFTU0VSVChqc0RP
TVdpbmRvdy0+Z2xvYmFsT2JqZWN0KCkgPT0ganNET01XaW5kb3cpOwotICAgIEFTU0VSVChwcm90
b3R5cGUtPmdsb2JhbE9iamVjdCgpID09IGpzRE9NV2luZG93KTsKLX0KLQotLy8gLS0tLQotLy8g
SlNET01XaW5kb3cgbWV0aG9kcwotLy8gLS0tLQotCi1ET01XaW5kb3cmIEpTRE9NV2luZG93U2hl
bGw6OndyYXBwZWQoKSBjb25zdAotewotICAgIHJldHVybiB3aW5kb3coKS0+d3JhcHBlZCgpOwot
fQotCi1ET01XaW5kb3cqIEpTRE9NV2luZG93U2hlbGw6OnRvV3JhcHBlZChWTSYgdm0sIEpTT2Jq
ZWN0KiB2YWx1ZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNE
T01XaW5kb3dTaGVsbCo+KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCF3cmFwcGVyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gJndyYXBwZXItPndpbmRvdygpLT53cmFwcGVkKCk7
Ci19Ci0KLS8vIC0tLS0KLS8vIENvbnZlcnNpb24gbWV0aG9kcwotLy8gLS0tLQotCi1KU1ZhbHVl
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBGcmFtZSYgZnJhbWUpCi17Ci0gICAgcmV0dXJuIGZyYW1l
LnNjcmlwdCgpLndpbmRvd1NoZWxsKGN1cnJlbnRXb3JsZChleGVjKSk7Ci19Ci0KLUpTRE9NV2lu
ZG93U2hlbGwqIHRvSlNET01XaW5kb3dTaGVsbChGcmFtZSYgZnJhbWUsIERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQpCi17Ci0gICAgcmV0dXJuIGZyYW1lLnNjcmlwdCgpLndpbmRvd1NoZWxsKHdvcmxk
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpE
ZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd1NoZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dTaGVsbC5oCShyZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3cu
aCIKLSNpbmNsdWRlIDxydW50aW1lL0pTUHJveHkuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBGcmFtZTsKLQotLy8gRklYTUU6IFJlbmFtZSB0byBKU0RPTVdpbmRvd1Byb3h5IG9y
IEpTV2luZG93UHJveHkgdG8gbWF0Y2ggSFRNTCBzcGVjIG5hbWluZy4gKGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzgwNzMzKQotY2xhc3MgSlNET01XaW5kb3dTaGVsbCA6IHB1YmxpYyBKU0M6OkpTUHJv
eHkgewotICAgIHR5cGVkZWYgSlNDOjpKU1Byb3h5IEJhc2U7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQotICAgIEpTRE9NV2luZG93KiB3aW5kb3coKSBjb25z
dCB7IHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvdyo+KHRhcmdldCgpKTsgfQotICAgIHZv
aWQgc2V0V2luZG93KEpTQzo6Vk0mLCBKU0RPTVdpbmRvdyopOwotICAgIHZvaWQgc2V0V2luZG93
KFJlZlB0cjxET01XaW5kb3c+JiYpOwotCi0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgRE9NV2lu
ZG93JiB3cmFwcGVkKCkgY29uc3Q7Ci0gICAgc3RhdGljIFdFQkNPUkVfRVhQT1JUIERPTVdpbmRv
dyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTT2JqZWN0Kik7Ci0KLSAgICBzdGF0aWMgSlNE
T01XaW5kb3dTaGVsbCogY3JlYXRlKEpTQzo6Vk0mIHZtLCBSZWZQdHI8RE9NV2luZG93PiYmIHdp
bmRvdywgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkK
LSAgICB7Ci0gICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU0RPTVdpbmRvd1NoZWxsPih2bS5oZWFwKSkgSlNET01XaW5kb3dT
aGVsbCh2bSwgc3RydWN0dXJlLCB3b3JsZCk7Ci0gICAgICAgIHNoZWxsLT5maW5pc2hDcmVhdGlv
bih2bSwgV1RGTW92ZSh3aW5kb3cpKTsKLSAgICAgICAgcmV0dXJuIHNoZWxsOwotICAgIH0KLQot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6OlB1cmVGb3J3
YXJkaW5nUHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAg
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQ7IH0KLQotcHJvdGVjdGVk
OgotICAgIEpTRE9NV2luZG93U2hlbGwoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgRE9NV3Jh
cHBlcldvcmxkJik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgUmVmUHRyPERP
TVdpbmRvdz4mJik7Ci0KLSAgICBSZWY8RE9NV3JhcHBlcldvcmxkPiBtX3dvcmxkOwotfTsKLQot
Ly8gSlNET01XaW5kb3dTaGVsbCBpcyBhIGxpdHRsZSBvZGQgaW4gdGhhdCBpdCdzIG5vdCBhIHRy
YWRpdGlvbmFsIHdyYXBwZXIgYW5kIGhhcyBubyBiYWNrIHBvaW50ZXIuIEl0Ci0vLyBpcyBob3dl
dmVyIHN0cm9uZ2x5IG93bmVkIGJ5IEZyYW1lICh2aWEgaXRzIFNjcmlwdENvbnRyb2xsZXIpLCBh
bmQgdGhlcmVmb3JlLCB0byBnZXQgdGhlIEpTRE9NV2luZG93U2hlbGwKLS8vIGEgRnJhbWUgaXMg
cGFzc2VkLgotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSYpOwotaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIGZyYW1l
KSB7IHJldHVybiBmcmFtZSA/IHRvSlMoc3RhdGUsICpmcmFtZSkgOiBKU0M6OmpzTnVsbCgpOyB9
Ci0KLUpTRE9NV2luZG93U2hlbGwqIHRvSlNET01XaW5kb3dTaGVsbChGcmFtZSYsIERPTVdyYXBw
ZXJXb3JsZCYpOwotaW5saW5lIEpTRE9NV2luZG93U2hlbGwqIHRvSlNET01XaW5kb3dTaGVsbChG
cmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCYgd29ybGQpIHsgcmV0dXJuIGZyYW1lID8gdG9K
U0RPTVdpbmRvd1NoZWxsKCpmcmFtZSwgd29ybGQpIDogbnVsbHB0cjsgfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxl
CiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjE4MTM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudFRhcmdldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
ICNpbmNsdWRlICJFdmVudFRhcmdldEhlYWRlcnMuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldElu
dGVyZmFjZXMuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkpTRE9NV2lu
ZG93U2hlbGwuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd1Byb3h5LmgiCiAjaW5jbHVkZSAiSlNF
dmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNXb3JrZXJHbG9iYWxTY29wZS5oIgogI2luY2x1
ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCkBAIC02Miw3ICs2Miw3IEBAIEpTVmFsdWUgdG9KUyhF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKIAogRXZlbnRUYXJnZXQqIEpTRXZlbnRUYXJnZXQ6
OnRvV3JhcHBlZChWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVFJZX1RPX1VOV1JBUF9X
SVRIX0lOVEVSRkFDRShET01XaW5kb3dTaGVsbCkKKyAgICBUUllfVE9fVU5XUkFQX1dJVEhfSU5U
RVJGQUNFKERPTVdpbmRvd1Byb3h5KQogICAgIFRSWV9UT19VTldSQVBfV0lUSF9JTlRFUkZBQ0Uo
RE9NV2luZG93KQogICAgIFRSWV9UT19VTldSQVBfV0lUSF9JTlRFUkZBQ0UoV29ya2VyR2xvYmFs
U2NvcGUpCiAgICAgVFJZX1RPX1VOV1JBUF9XSVRIX0lOVEVSRkFDRShFdmVudFRhcmdldCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDIxODEzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3
IEBAIEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0YXRlJiAKICAgICAvLyBGb3Ig
Y29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGJyb3dzZXJzLCBwYXNzIG9wZW4gY2FsbHMgd2l0aCBt
b3JlIHRoYW4gMiBwYXJhbWV0ZXJzIHRvIHRoZSB3aW5kb3cuCiAgICAgaWYgKHN0YXRlLmFyZ3Vt
ZW50Q291bnQoKSA+IDIpIHsKICAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gd3JhcHBlZCgpLmZy
YW1lKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gdG9KU0RPTVdpbmRvd1No
ZWxsKGZyYW1lLCBjdXJyZW50V29ybGQoJnN0YXRlKSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiB3cmFwcGVyID0gdG9KU0RPTVdpbmRvd1Byb3h5KGZyYW1lLCBjdXJyZW50V29ybGQoJnN0YXRl
KSkpIHsKICAgICAgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0gd3JhcHBlci0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJvcGVuIikpOwogICAgICAgICAgICAg
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFR5cGUgPSA6
OmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHJldmlzaW9uIDIxODEzNykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShE
b2N1bWVudCYgCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2Z1bmN0aW9uKQotICAgICAg
ICBleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQod2luZG93LCB3aW5kb3ctPnNoZWxsKCksIGRvY3Vt
ZW50KTsKKyAgICAgICAgZXhlY3V0ZUZ1bmN0aW9uSW5Db250ZXh0KHdpbmRvdywgd2luZG93LT5w
cm94eSgpLCBkb2N1bWVudCk7CiAgICAgZWxzZQogICAgICAgICBmcmFtZS0+c2NyaXB0KCkuZXhl
Y3V0ZVNjcmlwdEluV29ybGQobV9pc29sYXRlZFdvcmxkLCBtX2NvZGUpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEu
Y3BwCShyZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMyArNTIsMTEgQEAg
U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZQogewogICAgIEpTTG9ja0hv
bGRlciBsb2NrKGNvbW1vblZNKCkpOwogCi0gICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29u
dHJvbGxlciA9IGZyYW1lLnNjcmlwdCgpOwotICAgIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0RPTVdp
bmRvd1NoZWxsPj4gd2luZG93U2hlbGxzID0gc2NyaXB0Q29udHJvbGxlci53aW5kb3dTaGVsbHMo
KTsKKyAgICBhdXRvJiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUuc2NyaXB0KCk7CiAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd1NoZWxscy5zaXplKCk7ICsraSkgewotICAgICAg
ICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IHdpbmRvd1NoZWxsc1tpXS5nZXQoKTsK
LSAgICAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHdpbmRvd1NoZWxsLT53aW5kb3coKTsKLSAg
ICAgICAgbV93aW5kb3dzLmFkZCgmd2luZG93U2hlbGwtPndvcmxkKCksIFN0cm9uZzxKU0RPTVdp
bmRvdz4od2luZG93LT52bSgpLCB3aW5kb3cpKTsKKyAgICBmb3IgKGF1dG8gd2luZG93UHJveHkg
OiBzY3JpcHRDb250cm9sbGVyLndpbmRvd1Byb3hpZXMoKSkgeworICAgICAgICBhdXRvKiB3aW5k
b3cgPSB3aW5kb3dQcm94eS0+d2luZG93KCk7CisgICAgICAgIG1fd2luZG93cy5hZGQoJndpbmRv
d1Byb3h5LT53b3JsZCgpLCBTdHJvbmc8SlNET01XaW5kb3c+KHdpbmRvdy0+dm0oKSwgd2luZG93
KSk7CiAgICAgICAgIHdpbmRvdy0+c2V0Q29uc29sZUNsaWVudChudWxscHRyKTsKICAgICB9CiAK
QEAgLTc1LDMwICs3MywyOCBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShG
cmFtCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAKICAgICBQYWdlKiBwYWdl
ID0gZnJhbWUucGFnZSgpOwotICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIg
PSBmcmFtZS5zY3JpcHQoKTsKLSAgICBWZWN0b3I8SlNDOjpTdHJvbmc8SlNET01XaW5kb3dTaGVs
bD4+IHdpbmRvd1NoZWxscyA9IHNjcmlwdENvbnRyb2xsZXIud2luZG93U2hlbGxzKCk7CisgICAg
YXV0byYgc2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLnNjcmlwdCgpOwogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB3aW5kb3dTaGVsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSlNET01X
aW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSB3aW5kb3dTaGVsbHNbaV0uZ2V0KCk7Ci0gICAgICAg
IERPTVdyYXBwZXJXb3JsZCogd29ybGQgPSAmd2luZG93U2hlbGwtPndvcmxkKCk7CisgICAgZm9y
IChhdXRvIHdpbmRvd1Byb3h5IDogc2NyaXB0Q29udHJvbGxlci53aW5kb3dQcm94aWVzKCkpIHsK
KyAgICAgICAgYXV0byogd29ybGQgPSAmd2luZG93UHJveHktPndvcmxkKCk7CiAKLSAgICAgICAg
aWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBtX3dpbmRvd3MuZ2V0KHdvcmxkKS5nZXQoKSkKLSAg
ICAgICAgICAgIHdpbmRvd1NoZWxsLT5zZXRXaW5kb3cod2luZG93LT52bSgpLCB3aW5kb3cpOwor
ICAgICAgICBpZiAoYXV0byogd2luZG93ID0gbV93aW5kb3dzLmdldCh3b3JsZCkuZ2V0KCkpCisg
ICAgICAgICAgICB3aW5kb3dQcm94eS0+c2V0V2luZG93KHdpbmRvdy0+dm0oKSwgd2luZG93KTsK
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBET01XaW5kb3cqIGRvbVdpbmRvdyA9IGZyYW1l
LmRvY3VtZW50KCktPmRvbVdpbmRvdygpOwotICAgICAgICAgICAgaWYgKCZ3aW5kb3dTaGVsbC0+
d2luZG93KCktPndyYXBwZWQoKSA9PSBkb21XaW5kb3cpCisgICAgICAgICAgICBhdXRvKiBkb21X
aW5kb3cgPSBmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKTsKKyAgICAgICAgICAgIGlmICgm
d2luZG93UHJveHktPndpbmRvdygpLT53cmFwcGVkKCkgPT0gZG9tV2luZG93KQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICB3aW5kb3dTaGVsbC0+c2V0V2luZG93KGRv
bVdpbmRvdyk7CisgICAgICAgICAgICB3aW5kb3dQcm94eS0+c2V0V2luZG93KGRvbVdpbmRvdyk7
CiAKICAgICAgICAgICAgIGlmIChwYWdlKSB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0Q29udHJv
bGxlci5hdHRhY2hEZWJ1Z2dlcih3aW5kb3dTaGVsbCwgcGFnZS0+ZGVidWdnZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgd2luZG93U2hlbGwtPndpbmRvdygpLT5zZXRQcm9maWxlR3JvdXAocGFnZS0+
Z3JvdXAoKS5pZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgIHNjcmlwdENvbnRyb2xsZXIu
YXR0YWNoRGVidWdnZXIod2luZG93UHJveHkuZ2V0KCksIHBhZ2UtPmRlYnVnZ2VyKCkpOworICAg
ICAgICAgICAgICAgIHdpbmRvd1Byb3h5LT53aW5kb3coKS0+c2V0UHJvZmlsZUdyb3VwKHBhZ2Ut
Pmdyb3VwKCkuaWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChwYWdlKQotICAgICAgICAgICAgd2luZG93U2hlbGwtPndpbmRvdygpLT5zZXRDb25z
b2xlQ2xpZW50KCZwYWdlLT5jb25zb2xlKCkpOworICAgICAgICAgICAgd2luZG93UHJveHktPndp
bmRvdygpLT5zZXRDb25zb2xlQ2xpZW50KCZwYWdlLT5jb25zb2xlKCkpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDIxODEzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgY29sbGVj
dEdhcmJhZ2VBZnRlcldpbmRvd1NoZWxsRGVzdHJ1Y3Rpb24oKQorc3RhdGljIHZvaWQgY29sbGVj
dEdhcmJhZ2VBZnRlcldpbmRvd1Byb3h5RGVzdHJ1Y3Rpb24oKQogewogICAgIC8vIE1ha2Ugc3Vy
ZSB0byBHQyBFeHRyYSBTb29uKHRtKSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlIGNvbmRpdGlvbnMK
ICAgICAvLyB0byBzb2Z0ZW4gaGlnaCBwZWFrcyBvZiBtZW1vcnkgdXNhZ2UgZHVyaW5nIG5hdmln
YXRpb24uCkBAIC0xMTQsMzYgKzExNCwzNiBAQCBTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29u
dHJvbGxlcigpCiAgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QgPSBudWxscHRy
OwogICAgIH0KIAotICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQgZGVzdHJveWluZyBtX3dpbmRvd1No
ZWxscyB3aWxsIGNyZWF0ZSBhIGxvdCBvZiBnYXJiYWdlLgotICAgIGlmICghbV93aW5kb3dTaGVs
bHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHdoaWxlICghbV93aW5kb3dTaGVsbHMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxz
LmJlZ2luKCk7CisgICAgLy8gSXQncyBsaWtlbHkgdGhhdCBkZXN0cm95aW5nIG1fd2luZG93UHJv
eGllcyB3aWxsIGNyZWF0ZSBhIGxvdCBvZiBnYXJiYWdlLgorICAgIGlmICghbV93aW5kb3dQcm94
aWVzLmlzRW1wdHkoKSkgeworICAgICAgICB3aGlsZSAoIW1fd2luZG93UHJveGllcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fd2luZG93UHJveGllcy5iZWdpbigpOwog
ICAgICAgICAgICAgaXRlci0+dmFsdWUtPndpbmRvdygpLT5zZXRDb25zb2xlQ2xpZW50KG51bGxw
dHIpOwotICAgICAgICAgICAgZGVzdHJveVdpbmRvd1NoZWxsKCppdGVyLT5rZXkpOworICAgICAg
ICAgICAgZGVzdHJveVdpbmRvd1Byb3h5KCppdGVyLT5rZXkpOwogICAgICAgICB9Ci0gICAgICAg
IGNvbGxlY3RHYXJiYWdlQWZ0ZXJXaW5kb3dTaGVsbERlc3RydWN0aW9uKCk7CisgICAgICAgIGNv
bGxlY3RHYXJiYWdlQWZ0ZXJXaW5kb3dQcm94eURlc3RydWN0aW9uKCk7CiAgICAgfQogfQogCi12
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmRlc3Ryb3lXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQm
IHdvcmxkKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpkZXN0cm95V2luZG93UHJveHkoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCkKIHsKLSAgICBBU1NFUlQobV93aW5kb3dTaGVsbHMuY29udGFpbnMo
JndvcmxkKSk7Ci0gICAgbV93aW5kb3dTaGVsbHMucmVtb3ZlKCZ3b3JsZCk7Ci0gICAgd29ybGQu
ZGlkRGVzdHJveVdpbmRvd1NoZWxsKHRoaXMpOworICAgIEFTU0VSVChtX3dpbmRvd1Byb3hpZXMu
Y29udGFpbnMoJndvcmxkKSk7CisgICAgbV93aW5kb3dQcm94aWVzLnJlbW92ZSgmd29ybGQpOwor
ICAgIHdvcmxkLmRpZERlc3Ryb3lXaW5kb3dQcm94eSh0aGlzKTsKIH0KIAotSlNET01XaW5kb3dT
aGVsbCYgU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCkKK0pTRE9NV2luZG93UHJveHkmIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdpbmRv
d1Byb3h5KERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCiB7Ci0gICAgQVNTRVJUKCFtX3dpbmRvd1No
ZWxscy5jb250YWlucygmd29ybGQpKTsKKyAgICBBU1NFUlQoIW1fd2luZG93UHJveGllcy5jb250
YWlucygmd29ybGQpKTsKIAogICAgIFZNJiB2bSA9IHdvcmxkLnZtKCk7CiAKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IEpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNO
dWxsKCkpOwotICAgIFN0cm9uZzxKU0RPTVdpbmRvd1NoZWxsPiB3aW5kb3dTaGVsbCh2bSwgSlNE
T01XaW5kb3dTaGVsbDo6Y3JlYXRlKHZtLCBtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygp
LCBzdHJ1Y3R1cmUsIHdvcmxkKSk7Ci0gICAgU3Ryb25nPEpTRE9NV2luZG93U2hlbGw+IHdpbmRv
d1NoZWxsMih3aW5kb3dTaGVsbCk7Ci0gICAgbV93aW5kb3dTaGVsbHMuYWRkKCZ3b3JsZCwgd2lu
ZG93U2hlbGwpOwotICAgIHdvcmxkLmRpZENyZWF0ZVdpbmRvd1NoZWxsKHRoaXMpOwotICAgIHJl
dHVybiAqd2luZG93U2hlbGwuZ2V0KCk7CisgICAgYXV0byogc3RydWN0dXJlID0gSlNET01XaW5k
b3dQcm94eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSk7CisgICAgU3Ryb25nPEpTRE9N
V2luZG93UHJveHk+IHdpbmRvd1Byb3h5KHZtLCBKU0RPTVdpbmRvd1Byb3h5OjpjcmVhdGUodm0s
IG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHN0cnVjdHVyZSwgd29ybGQpKTsKKyAg
ICBTdHJvbmc8SlNET01XaW5kb3dQcm94eT4gd2luZG93UHJveHkyKHdpbmRvd1Byb3h5KTsKKyAg
ICBtX3dpbmRvd1Byb3hpZXMuYWRkKCZ3b3JsZCwgd2luZG93UHJveHkpOworICAgIHdvcmxkLmRp
ZENyZWF0ZVdpbmRvd1Byb3h5KHRoaXMpOworICAgIHJldHVybiAqd2luZG93UHJveHkuZ2V0KCk7
CiB9CiAKIEpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKGNvbnN0IFNj
cmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEV4Y2Vw
dGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCkBAIC0xNjAsOCArMTYwLDggQEAgSlNWYWx1
ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybAogICAgIC8vIGFuZCBmYWxzZSBmb3Ig
PHNjcmlwdD5kb1NvbWV0aGluZygpPC9zY3JpcHQ+LiBDaGVjayBpZiBpdCBoYXMgdGhlCiAgICAg
Ly8gZXhwZWN0ZWQgdmFsdWUgaW4gYWxsIGNhc2VzLgogICAgIC8vIFNlZSBzbWFydCB3aW5kb3cu
b3BlbiBwb2xpY3kgZm9yIHdoZXJlIHRoaXMgaXMgdXNlZC4KLSAgICBKU0RPTVdpbmRvd1NoZWxs
KiBzaGVsbCA9IHdpbmRvd1NoZWxsKHdvcmxkKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBzaGVs
bC0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBhdXRvJiBwcm94eSA9ICp3aW5kb3dQcm94
eSh3b3JsZCk7CisgICAgYXV0byYgZXhlYyA9ICpwcm94eS53aW5kb3coKS0+Z2xvYmFsRXhlYygp
OwogICAgIGNvbnN0IFN0cmluZyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKICAgICBt
X3NvdXJjZVVSTCA9ICZzb3VyY2VVUkw7CiAKQEAgLTE3MCwxMiArMTcwLDEyIEBAIEpTVmFsdWUg
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmwKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVh
dGVTY3JpcHQobV9mcmFtZSwgc291cmNlVVJMLCBzb3VyY2VDb2RlLnN0YXJ0TGluZSgpKTsKIAog
ICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpT
VmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OnByb2ZpbGVkRXZhbHVh
dGUoZXhlYywgSlNDOjpQcm9maWxpbmdSZWFzb246Ok90aGVyLCBqc1NvdXJjZUNvZGUsIHNoZWxs
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpwcm9maWxlZEV2YWx1YXRlKCZleGVjLCBKU0M6OlByb2ZpbGluZ1Jl
YXNvbjo6T3RoZXIsIGpzU291cmNlQ29kZSwgJnByb3h5LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsK
IAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQoY29va2ll
LCBtX2ZyYW1lKTsKIAogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKSB7Ci0gICAgICAgIHJl
cG9ydEV4Y2VwdGlvbihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uLCBzb3VyY2VDb2RlLmNhY2hl
ZFNjcmlwdCgpLCBleGNlcHRpb25EZXRhaWxzKTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZl
eGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uLCBzb3VyY2VDb2RlLmNhY2hlZFNjcmlwdCgpLCBleGNl
cHRpb25EZXRhaWxzKTsKICAgICAgICAgbV9zb3VyY2VVUkwgPSBzYXZlZFNvdXJjZVVSTDsKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0xOTMsOCArMTkzLDggQEAgdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpsb2FkTW9kdWxlU2NyaXB0SQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKHdv
cmxkLnZtKCkpOwogCi0gICAgYXV0byYgc2hlbGwgPSAqd2luZG93U2hlbGwod29ybGQpOwotICAg
IGF1dG8mIHN0YXRlID0gKnNoZWxsLndpbmRvdygpLT5nbG9iYWxFeGVjKCk7CisgICAgYXV0byYg
cHJveHkgPSAqd2luZG93UHJveHkod29ybGQpOworICAgIGF1dG8mIHN0YXRlID0gKnByb3h5Lndp
bmRvdygpLT5nbG9iYWxFeGVjKCk7CiAKICAgICBhdXRvJiBwcm9taXNlID0gSlNNYWluVGhyZWFk
RXhlY1N0YXRlOjpsb2FkTW9kdWxlKHN0YXRlLCBtb2R1bGVOYW1lLCBKU0M6OkpTU2NyaXB0RmV0
Y2hlcjo6Y3JlYXRlKHN0YXRlLnZtKCksIHsgJm1vZHVsZVNjcmlwdCB9KSk7CiAgICAgc2V0dXBN
b2R1bGVTY3JpcHRIYW5kbGVycyhtb2R1bGVTY3JpcHQsIHByb21pc2UsIHdvcmxkKTsKQEAgLTIw
OSw4ICsyMDksOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmxvYWRNb2R1bGVTY3JpcHRJCiB7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sod29ybGQudm0oKSk7CiAKLSAgICBhdXRvJiBzaGVsbCA9
ICp3aW5kb3dTaGVsbCh3b3JsZCk7Ci0gICAgYXV0byYgc3RhdGUgPSAqc2hlbGwud2luZG93KCkt
Pmdsb2JhbEV4ZWMoKTsKKyAgICBhdXRvJiBwcm94eSA9ICp3aW5kb3dQcm94eSh3b3JsZCk7Cisg
ICAgYXV0byYgc3RhdGUgPSAqcHJveHkud2luZG93KCktPmdsb2JhbEV4ZWMoKTsKIAogICAgIGF1
dG8mIHByb21pc2UgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmxvYWRNb2R1bGUoc3RhdGUsIHNv
dXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIEpTQzo6SlNTY3JpcHRGZXRjaGVyOjpjcmVhdGUoc3Rh
dGUudm0oKSwgeyAmbW9kdWxlU2NyaXB0IH0pKTsKICAgICBzZXR1cE1vZHVsZVNjcmlwdEhhbmRs
ZXJzKG1vZHVsZVNjcmlwdCwgcHJvbWlzZSwgd29ybGQpOwpAQCAtMjI1LDggKzIyNSw4IEBAIEpT
Qzo6SlNWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpsaW5rQW5kRXYKIHsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh3b3JsZC52bSgpKTsKIAotICAgIGF1dG8mIHNoZWxsID0gKndpbmRvd1NoZWxsKHdv
cmxkKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpzaGVsbC53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwor
ICAgIGF1dG8mIHByb3h5ID0gKndpbmRvd1Byb3h5KHdvcmxkKTsKKyAgICBhdXRvJiBzdGF0ZSA9
ICpwcm94eS53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwogCiAgICAgLy8gRklYTUU6IFByZXZlbnRp
bmcgRnJhbWUgZnJvbSBiZWluZyBkZXN0cm95ZWQgaXMgZXNzZW50aWFsbHkgdW5uZWNlc3Nhcnku
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDc2MwpA
QCAtMjU0LDggKzI1NCw4IEBAIEpTQzo6SlNWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZU0KIAogICAgIGNvbnN0IGF1dG8mIGpzU291cmNlQ29kZSA9IG1vZHVsZVJlY29yZC5zb3VyY2VD
b2RlKCk7CiAKLSAgICBhdXRvJiBzaGVsbCA9ICp3aW5kb3dTaGVsbCh3b3JsZCk7Ci0gICAgYXV0
byYgc3RhdGUgPSAqc2hlbGwud2luZG93KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBhdXRvJiBwcm94
eSA9ICp3aW5kb3dQcm94eSh3b3JsZCk7CisgICAgYXV0byYgc3RhdGUgPSAqcHJveHkud2luZG93
KCktPmdsb2JhbEV4ZWMoKTsKICAgICBTZXRGb3JTY29wZTxjb25zdCBTdHJpbmcqPiBzb3VyY2VV
UkxTY29wZShtX3NvdXJjZVVSTCwgJnNvdXJjZVVSTC5zdHJpbmcoKSk7CiAKICAgICBSZWY8RnJh
bWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKQEAgLTI3OCwxMSArMjc4LDExIEBAIFJlZjxET01XcmFw
cGVyV29ybGQ+IFNjcmlwdENvbnRyb2xsZXI6OmMKICAgICByZXR1cm4gRE9NV3JhcHBlcldvcmxk
OjpjcmVhdGUoY29tbW9uVk0oKSk7CiB9CiAKLVZlY3RvcjxKU0M6OlN0cm9uZzxKU0RPTVdpbmRv
d1NoZWxsPj4gU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hlbGxzKCkKK1ZlY3RvcjxKU0M6OlN0
cm9uZzxKU0RPTVdpbmRvd1Byb3h5Pj4gU2NyaXB0Q29udHJvbGxlcjo6d2luZG93UHJveGllcygp
CiB7Ci0gICAgVmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9NV2luZG93U2hlbGw+PiB3aW5kb3dTaGVs
bHM7Ci0gICAgY29weVZhbHVlc1RvVmVjdG9yKG1fd2luZG93U2hlbGxzLCB3aW5kb3dTaGVsbHMp
OwotICAgIHJldHVybiB3aW5kb3dTaGVsbHM7CisgICAgVmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9N
V2luZG93UHJveHk+PiB3aW5kb3dQcm94aWVzOworICAgIGNvcHlWYWx1ZXNUb1ZlY3RvcihtX3dp
bmRvd1Byb3hpZXMsIHdpbmRvd1Byb3hpZXMpOworICAgIHJldHVybiB3aW5kb3dQcm94aWVzOwog
fQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyhWZWN0b3I8UmVmPERPTVdy
YXBwZXJXb3JsZD4+JiB3b3JsZHMpCkBAIC0yOTAsNzcgKzI5MCw3NyBAQCB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmdldEFsbFdvcmxkcyhWZWN0CiAgICAgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPihjb21tb25WTSgpLmNsaWVudERhdGEpLT5nZXRBbGxXb3JsZHMod29ybGRzKTsKIH0KIAot
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsc05vdE1hdGNoaW5nRE9NV2lu
ZG93KERPTVdpbmRvdyogbmV3RE9NV2luZG93LCBib29sIGdvaW5nSW50b1BhZ2VDYWNoZSkKK3Zv
aWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dQcm94aWVzTm90TWF0Y2hpbmdET01XaW5k
b3coRE9NV2luZG93KiBuZXdET01XaW5kb3csIGJvb2wgZ29pbmdJbnRvUGFnZUNhY2hlKQogewot
ICAgIGlmIChtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpCisgICAgaWYgKG1fd2luZG93UHJveGll
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKGNv
bW1vblZNKCkpOwogCi0gICAgZm9yIChhdXRvJiB3aW5kb3dTaGVsbCA6IHdpbmRvd1NoZWxscygp
KSB7Ci0gICAgICAgIGlmICgmd2luZG93U2hlbGwtPndpbmRvdygpLT53cmFwcGVkKCkgPT0gbmV3
RE9NV2luZG93KQorICAgIGZvciAoYXV0byYgd2luZG93UHJveHkgOiB3aW5kb3dQcm94aWVzKCkp
IHsKKyAgICAgICAgaWYgKCZ3aW5kb3dQcm94eS0+d2luZG93KCktPndyYXBwZWQoKSA9PSBuZXdE
T01XaW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBDbGVhciB0aGUg
ZGVidWdnZXIgYW5kIGNvbnNvbGUgZnJvbSB0aGUgY3VycmVudCB3aW5kb3cgYmVmb3JlIHNldHRp
bmcgdGhlIG5ldyB3aW5kb3cuCi0gICAgICAgIGF0dGFjaERlYnVnZ2VyKHdpbmRvd1NoZWxsLmdl
dCgpLCBudWxscHRyKTsKLSAgICAgICAgd2luZG93U2hlbGwtPndpbmRvdygpLT5zZXRDb25zb2xl
Q2xpZW50KG51bGxwdHIpOwotICAgICAgICB3aW5kb3dTaGVsbC0+d2luZG93KCktPndpbGxSZW1v
dmVGcm9tV2luZG93U2hlbGwoKTsKKyAgICAgICAgYXR0YWNoRGVidWdnZXIod2luZG93UHJveHku
Z2V0KCksIG51bGxwdHIpOworICAgICAgICB3aW5kb3dQcm94eS0+d2luZG93KCktPnNldENvbnNv
bGVDbGllbnQobnVsbHB0cik7CisgICAgICAgIHdpbmRvd1Byb3h5LT53aW5kb3coKS0+d2lsbFJl
bW92ZUZyb21XaW5kb3dQcm94eSgpOwogICAgIH0KIAogICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQg
cmVzZXR0aW5nIG91ciB3aW5kb3dzIGNyZWF0ZWQgYSBsb3Qgb2YgZ2FyYmFnZSwgdW5sZXNzCiAg
ICAgLy8gaXQgd2VudCBpbiBhIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICBpZiAoIWdvaW5nSW50
b1BhZ2VDYWNoZSkKLSAgICAgICAgY29sbGVjdEdhcmJhZ2VBZnRlcldpbmRvd1NoZWxsRGVzdHJ1
Y3Rpb24oKTsKKyAgICAgICAgY29sbGVjdEdhcmJhZ2VBZnRlcldpbmRvd1Byb3h5RGVzdHJ1Y3Rp
b24oKTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRET01XaW5kb3dGb3JXaW5kb3dT
aGVsbChET01XaW5kb3cqIG5ld0RPTVdpbmRvdykKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0
RE9NV2luZG93Rm9yV2luZG93UHJveHkoRE9NV2luZG93KiBuZXdET01XaW5kb3cpCiB7Ci0gICAg
aWYgKG1fd2luZG93U2hlbGxzLmlzRW1wdHkoKSkKKyAgICBpZiAobV93aW5kb3dQcm94aWVzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKGNv
bW1vblZNKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgd2luZG93U2hlbGwgOiB3aW5kb3dTaGVs
bHMoKSkgewotICAgICAgICBpZiAoJndpbmRvd1NoZWxsLT53aW5kb3coKS0+d3JhcHBlZCgpID09
IG5ld0RPTVdpbmRvdykKKyAgICBmb3IgKGF1dG8mIHdpbmRvd1Byb3h5IDogd2luZG93UHJveGll
cygpKSB7CisgICAgICAgIGlmICgmd2luZG93UHJveHktPndpbmRvdygpLT53cmFwcGVkKCkgPT0g
bmV3RE9NV2luZG93KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICB3
aW5kb3dTaGVsbC0+c2V0V2luZG93KG5ld0RPTVdpbmRvdyk7CisgICAgICAgIHdpbmRvd1Byb3h5
LT5zZXRXaW5kb3cobmV3RE9NV2luZG93KTsKICAgICAgICAgCiAgICAgICAgIC8vIEFuIG1fY2Fj
aGVhYmxlQmluZGluZ1Jvb3RPYmplY3QgcGVyc2lzdHMgYmV0d2VlbiBwYWdlIG5hdmlnYXRpb25z
CiAgICAgICAgIC8vIHNvIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIG5ldyBKU0RPTVdpbmRvdy4K
ICAgICAgICAgaWYgKG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpCi0gICAgICAgICAgICBt
X2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0LT51cGRhdGVHbG9iYWxPYmplY3Qod2luZG93U2hl
bGwtPndpbmRvdygpKTsKKyAgICAgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3Qt
PnVwZGF0ZUdsb2JhbE9iamVjdCh3aW5kb3dQcm94eS0+d2luZG93KCkpOwogCiAgICAgICAgIGlm
IChQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpIHsKLSAgICAgICAgICAgIGF0dGFjaERlYnVn
Z2VyKHdpbmRvd1NoZWxsLmdldCgpLCBwYWdlLT5kZWJ1Z2dlcigpKTsKLSAgICAgICAgICAgIHdp
bmRvd1NoZWxsLT53aW5kb3coKS0+c2V0UHJvZmlsZUdyb3VwKHBhZ2UtPmdyb3VwKCkuaWRlbnRp
ZmllcigpKTsKLSAgICAgICAgICAgIHdpbmRvd1NoZWxsLT53aW5kb3coKS0+c2V0Q29uc29sZUNs
aWVudCgmcGFnZS0+Y29uc29sZSgpKTsKKyAgICAgICAgICAgIGF0dGFjaERlYnVnZ2VyKHdpbmRv
d1Byb3h5LmdldCgpLCBwYWdlLT5kZWJ1Z2dlcigpKTsKKyAgICAgICAgICAgIHdpbmRvd1Byb3h5
LT53aW5kb3coKS0+c2V0UHJvZmlsZUdyb3VwKHBhZ2UtPmdyb3VwKCkuaWRlbnRpZmllcigpKTsK
KyAgICAgICAgICAgIHdpbmRvd1Byb3h5LT53aW5kb3coKS0+c2V0Q29uc29sZUNsaWVudCgmcGFn
ZS0+Y29uc29sZSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotSlNET01XaW5kb3dTaGVsbCog
U2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdChET01XcmFwcGVyV29ybGQmIHdvcmxkKQorSlNE
T01XaW5kb3dQcm94eSogU2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdChET01XcmFwcGVyV29y
bGQmIHdvcmxkKQogewotICAgIEFTU0VSVCghbV93aW5kb3dTaGVsbHMuY29udGFpbnMoJndvcmxk
KSk7CisgICAgQVNTRVJUKCFtX3dpbmRvd1Byb3hpZXMuY29udGFpbnMoJndvcmxkKSk7CiAKICAg
ICBKU0xvY2tIb2xkZXIgbG9jayh3b3JsZC52bSgpKTsKIAotICAgIEpTRE9NV2luZG93U2hlbGwm
IHdpbmRvd1NoZWxsID0gY3JlYXRlV2luZG93U2hlbGwod29ybGQpOworICAgIGF1dG8mIHdpbmRv
d1Byb3h5ID0gY3JlYXRlV2luZG93UHJveHkod29ybGQpOwogCi0gICAgd2luZG93U2hlbGwud2lu
ZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgd2luZG93UHJveHkud2luZG93KCktPnVwZGF0
ZURvY3VtZW50KCk7CiAKICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1
bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmRpZENy
ZWF0ZVdpbmRvd1NoZWxsKHdpbmRvd1NoZWxsKTsKKyAgICAgICAgZG9jdW1lbnQtPmNvbnRlbnRT
ZWN1cml0eVBvbGljeSgpLT5kaWRDcmVhdGVXaW5kb3dQcm94eSh3aW5kb3dQcm94eSk7CiAKICAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpKSB7Ci0gICAgICAgIGF0dGFjaERlYnVn
Z2VyKCZ3aW5kb3dTaGVsbCwgcGFnZS0+ZGVidWdnZXIoKSk7Ci0gICAgICAgIHdpbmRvd1NoZWxs
LndpbmRvdygpLT5zZXRQcm9maWxlR3JvdXAocGFnZS0+Z3JvdXAoKS5pZGVudGlmaWVyKCkpOwot
ICAgICAgICB3aW5kb3dTaGVsbC53aW5kb3coKS0+c2V0Q29uc29sZUNsaWVudCgmcGFnZS0+Y29u
c29sZSgpKTsKKyAgICAgICAgYXR0YWNoRGVidWdnZXIoJndpbmRvd1Byb3h5LCBwYWdlLT5kZWJ1
Z2dlcigpKTsKKyAgICAgICAgd2luZG93UHJveHkud2luZG93KCktPnNldFByb2ZpbGVHcm91cChw
YWdlLT5ncm91cCgpLmlkZW50aWZpZXIoKSk7CisgICAgICAgIHdpbmRvd1Byb3h5LndpbmRvdygp
LT5zZXRDb25zb2xlQ2xpZW50KCZwYWdlLT5jb25zb2xlKCkpOwogICAgIH0KIAogICAgIG1fZnJh
bWUubG9hZGVyKCkuZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQod29ybGQpOwog
Ci0gICAgcmV0dXJuICZ3aW5kb3dTaGVsbDsKKyAgICByZXR1cm4gJndpbmRvd1Byb3h5OwogfQog
CiBzdGF0aWMgSWRlbnRpZmllciBqc1ZhbHVlVG9Nb2R1bGVLZXkoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQpAQCAtMzczLDggKzM3Myw4IEBAIHN0YXRpYyBJZGVudGlmaWVyIGpzVmFs
dWVUb01vZHVsZUtleShFeGUKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXR1cE1vZHVsZVNj
cmlwdEhhbmRsZXJzKExvYWRhYmxlTW9kdWxlU2NyaXB0JiBtb2R1bGVTY3JpcHRSZWYsIEpTSW50
ZXJuYWxQcm9taXNlJiBwcm9taXNlLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIGF1
dG8mIHNoZWxsID0gKndpbmRvd1NoZWxsKHdvcmxkKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpzaGVs
bC53aW5kb3coKS0+Z2xvYmFsRXhlYygpOworICAgIGF1dG8mIHByb3h5ID0gKndpbmRvd1Byb3h5
KHdvcmxkKTsKKyAgICBhdXRvJiBzdGF0ZSA9ICpwcm94eS53aW5kb3coKS0+Z2xvYmFsRXhlYygp
OwogCiAgICAgLy8gSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdCBlaXRoZXIgZnVsZmlsbEhhbmRs
ZXIgb3IgcmVqZWN0SGFuZGxlciBpcyBldmVudHVhbGx5IGNhbGxlZC4KICAgICAvLyBGb3IgZXhh
bXBsZSwgaWYgdGhlIHBhZ2UgbG9hZCBpcyBjYW5jZWxlZCwgdGhlIERlZmVycmVkUHJvbWlzZSB1
c2VkIGluIHRoZSBtb2R1bGUgbG9hZGVyIHBpcGVsaW5lIHdpbGwgc3RvcCBleGVjdXRpbmcgSlMg
Y29kZS4KQEAgLTM4MiwxMyArMzgyLDEzIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0dXBN
b2R1bGVTY3JpcHQKIAogICAgIFJlZlB0cjxMb2FkYWJsZU1vZHVsZVNjcmlwdD4gbW9kdWxlU2Ny
aXB0KCZtb2R1bGVTY3JpcHRSZWYpOwogCi0gICAgYXV0byYgZnVsZmlsbEhhbmRsZXIgPSAqSlNO
YXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHN0YXRlLnZtKCksIHNoZWxsLndpbmRvdygpLCAxLCBT
dHJpbmcoKSwgW21vZHVsZVNjcmlwdF0oRXhlY1N0YXRlKiBleGVjKSB7CisgICAgYXV0byYgZnVs
ZmlsbEhhbmRsZXIgPSAqSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHN0YXRlLnZtKCksIHBy
b3h5LndpbmRvdygpLCAxLCBTdHJpbmcoKSwgW21vZHVsZVNjcmlwdF0oRXhlY1N0YXRlKiBleGVj
KSB7CiAgICAgICAgIElkZW50aWZpZXIgbW9kdWxlS2V5ID0ganNWYWx1ZVRvTW9kdWxlS2V5KGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICAgICAgbW9kdWxlU2NyaXB0LT5ub3RpZnlMb2Fk
Q29tcGxldGVkKCptb2R1bGVLZXkuaW1wbCgpKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9KTsKIAotICAgIGF1dG8mIHJlamVjdEhhbmRsZXIg
PSAqSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHN0YXRlLnZtKCksIHNoZWxsLndpbmRvdygp
LCAxLCBTdHJpbmcoKSwgW21vZHVsZVNjcmlwdF0oRXhlY1N0YXRlKiBleGVjKSB7CisgICAgYXV0
byYgcmVqZWN0SGFuZGxlciA9ICpKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUoc3RhdGUudm0o
KSwgcHJveHkud2luZG93KCksIDEsIFN0cmluZygpLCBbbW9kdWxlU2NyaXB0XShFeGVjU3RhdGUq
IGV4ZWMpIHsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgSlNWYWx1ZSBl
cnJvclZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgICAgIGlmIChlcnJvclZhbHVlLmlz
T2JqZWN0KCkpIHsKQEAgLTQzMiw3ICs0MzIsNyBAQCBUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJv
bGxlcjo6ZXZlbnRIYW5kCiAKICAgICAvLyBGSVhNRTogVGhpcyBsb2NhdGlvbiBtYXBzIHRvIHRo
ZSBlbmQgb2YgdGhlIEhUTUwgdGFnLCBhbmQgbm90IHRvIHRoZQogICAgIC8vIGV4YWN0IGNvbHVt
biBudW1iZXIgYmVsb25naW5nIHRvIHRoZSBldmVudCBoYW5kbGVyIGF0dHJpYnV0ZS4KLSAgICBT
Y3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNlciA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+c2Ny
aXB0YWJsZURvY3VtZW50UGFyc2VyKCk7CisgICAgYXV0byogcGFyc2VyID0gbV9mcmFtZS5kb2N1
bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKTsKICAgICBpZiAocGFyc2VyKQogICAg
ICAgICByZXR1cm4gcGFyc2VyLT50ZXh0UG9zaXRpb24oKTsKICAgICByZXR1cm4gVGV4dFBvc2l0
aW9uKCk7CkBAIC00NDAsMTggKzQ0MCwxOCBAQCBUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJvbGxl
cjo6ZXZlbnRIYW5kCiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZW5hYmxlRXZhbCgpCiB7Ci0g
ICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBleGlzdGluZ1dpbmRvd1NoZWxsKG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKLSAgICBpZiAoIXdpbmRvd1NoZWxsKQorICAgIGF1dG8q
IHdpbmRvd1Byb3h5ID0gZXhpc3RpbmdXaW5kb3dQcm94eShtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSk7CisgICAgaWYgKCF3aW5kb3dQcm94eSkKICAgICAgICAgcmV0dXJuOwotICAgIHdpbmRvd1No
ZWxsLT53aW5kb3coKS0+c2V0RXZhbEVuYWJsZWQodHJ1ZSk7CisgICAgd2luZG93UHJveHktPndp
bmRvdygpLT5zZXRFdmFsRW5hYmxlZCh0cnVlKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpkaXNhYmxlRXZhbChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBKU0RPTVdp
bmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGV4aXN0aW5nV2luZG93U2hlbGwobWFpblRocmVhZE5v
cm1hbFdvcmxkKCkpOwotICAgIGlmICghd2luZG93U2hlbGwpCisgICAgYXV0byogd2luZG93UHJv
eHkgPSBleGlzdGluZ1dpbmRvd1Byb3h5KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBp
ZiAoIXdpbmRvd1Byb3h5KQogICAgICAgICByZXR1cm47Ci0gICAgd2luZG93U2hlbGwtPndpbmRv
dygpLT5zZXRFdmFsRW5hYmxlZChmYWxzZSwgZXJyb3JNZXNzYWdlKTsKKyAgICB3aW5kb3dQcm94
eS0+d2luZG93KCktPnNldEV2YWxFbmFibGVkKGZhbHNlLCBlcnJvck1lc3NhZ2UpOwogfQogCiBi
b29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCkBAIC00NjYsNyAr
NDY2LDcgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlcwogCiBib29s
IFNjcmlwdENvbnRyb2xsZXI6OmNhbkFjY2Vzc0Zyb21DdXJyZW50T3JpZ2luKEZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBFeGVjU3RhdGUqIHN0YXRlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJy
ZW50U3RhdGUoKTsKKyAgICBhdXRvKiBzdGF0ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y3Vy
cmVudFN0YXRlKCk7CiAKICAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBudWxsIHdlJ3Jl
IGluIGEgY2FsbCBwYXRoIHdoZXJlIHRoZSBET00gc2VjdXJpdHkgY2hlY2sgZG9lc24ndCBhcHBs
eSAoZWcuIHBhcnNlcikuCiAgICAgaWYgKCFzdGF0ZSkKQEAgLTQ3Nyw0MiArNDc3LDQwIEBAIGJv
b2wgU2NyaXB0Q29udHJvbGxlcjo6Y2FuQWNjZXNzRnJvbUN1cnIKIAogdm9pZCBTY3JpcHRDb250
cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKIHsKLSAgICBW
ZWN0b3I8SlNDOjpTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4+IHdpbmRvd1NoZWxscyA9IHRoaXMt
PndpbmRvd1NoZWxscygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2luZG93U2hlbGxz
LnNpemUoKTsgKytpKQotICAgICAgICBhdHRhY2hEZWJ1Z2dlcih3aW5kb3dTaGVsbHNbaV0uZ2V0
KCksIGRlYnVnZ2VyKTsKKyAgICBmb3IgKGF1dG8mIHdpbmRvd1Byb3h5IDogd2luZG93UHJveGll
cygpKQorICAgICAgICBhdHRhY2hEZWJ1Z2dlcih3aW5kb3dQcm94eS5nZXQoKSwgZGVidWdnZXIp
OwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpTRE9NV2luZG93
U2hlbGwqIHNoZWxsLCBKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKK3ZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6YXR0YWNoRGVidWdnZXIoSlNET01XaW5kb3dQcm94eSogcHJveHksIEpTQzo6RGVidWdn
ZXIqIGRlYnVnZ2VyKQogewotICAgIGlmICghc2hlbGwpCisgICAgaWYgKCFwcm94eSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHNoZWxsLT53aW5k
b3coKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBwcm94eS0+d2luZG93KCk7CiAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKKwogICAgIGlmIChkZWJ1Z2dlcikK
ICAgICAgICAgZGVidWdnZXItPmF0dGFjaChnbG9iYWxPYmplY3QpOwotICAgIGVsc2UgaWYgKEpT
Qzo6RGVidWdnZXIqIGN1cnJlbnREZWJ1Z2dlciA9IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkK
KyAgICBlbHNlIGlmIChhdXRvKiBjdXJyZW50RGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVn
Z2VyKCkpCiAgICAgICAgIGN1cnJlbnREZWJ1Z2dlci0+ZGV0YWNoKGdsb2JhbE9iamVjdCwgSlND
OjpEZWJ1Z2dlcjo6VGVybWluYXRpbmdEZWJ1Z2dpbmdTZXNzaW9uKTsKIH0KIAogdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgVmVjdG9yPEpTQzo6U3Ryb25n
PEpTRE9NV2luZG93U2hlbGw+PiB3aW5kb3dTaGVsbHMgPSB0aGlzLT53aW5kb3dTaGVsbHMoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdpbmRvd1NoZWxscy5zaXplKCk7ICsraSkgewot
ICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IHdpbmRvd1NoZWxsc1tpXS5n
ZXQoKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sod2luZG93U2hlbGwtPndvcmxkKCkudm0o
KSk7Ci0gICAgICAgIHdpbmRvd1NoZWxsLT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKKyAg
ICBmb3IgKGF1dG8mIHdpbmRvd1Byb3h5IDogd2luZG93UHJveGllcygpKSB7CisgICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKHdpbmRvd1Byb3h5LT53b3JsZCgpLnZtKCkpOworICAgICAgICB3aW5k
b3dQcm94eS0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CiAgICAgfQogfQogCiBCaW5kaW5n
czo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmpl
Y3QoKQogewogICAgIGlmICghY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3Jp
cHQpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBp
ZiAoIW1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpIHsKICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soY29tbW9uVk0oKSk7Ci0gICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3Qg
PSBCaW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKSk7CisgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QgPSBCaW5kaW5nczo6
Um9vdE9iamVjdDo6Y3JlYXRlKG51bGxwdHIsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7
CiAgICAgfQogICAgIHJldHVybiBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0LmdldCgpOwog
fQpAQCAtNTIwLDE4ICs1MTgsMTggQEAgQmluZGluZ3M6OlJvb3RPYmplY3QqIFNjcmlwdENvbnRy
b2xsZXI6OgogQmluZGluZ3M6OlJvb3RPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmJpbmRpbmdS
b290T2JqZWN0KCkKIHsKICAgICBpZiAoIWNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVj
dXRlU2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KSB7CiAgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKGNvbW1vblZNKCkpOwotICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6
OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOworICAg
ICAgICBtX2JpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZShu
dWxscHRyLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4g
bV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKIH0KIAogUmVmPEJpbmRpbmdzOjpSb290T2JqZWN0
PiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVSb290T2JqZWN0KHZvaWQqIG5hdGl2ZUhhbmRsZSkK
IHsKLSAgICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuZmluZChu
YXRpdmVIYW5kbGUpOworICAgIGF1dG8gaXQgPSBtX3Jvb3RPYmplY3RzLmZpbmQobmF0aXZlSGFu
ZGxlKTsKICAgICBpZiAoaXQgIT0gbV9yb290T2JqZWN0cy5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZS5jb3B5UmVmKCk7CiAKQEAgLTU0MywxMCArNTQxLDEwIEBAIFJlZjxCaW5kaW5n
czo6Um9vdE9iamVjdD4gU2NyaXB0Q29udHJvbGwKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpj
b2xsZWN0SXNvbGF0ZWRDb250ZXh0cyhWZWN0b3I8c3RkOjpwYWlyPEpTQzo6RXhlY1N0YXRlKiwg
U2VjdXJpdHlPcmlnaW4qPj4mIHJlc3VsdCkKIHsKLSAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRv
ciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gaXRlci0+dmFs
dWUtPndpbmRvdygpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4gPSAmaXRlci0+dmFsdWUtPndpbmRvdygpLT53cmFwcGVkKCkuZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6OnBhaXI8SlNDOjpFeGVjU3Rh
dGUqLCBTZWN1cml0eU9yaWdpbio+KGV4ZWMsIG9yaWdpbikpOworICAgIGZvciAoYXV0byYgd2lu
ZG93UHJveHkgOiBtX3dpbmRvd1Byb3hpZXMudmFsdWVzKCkpIHsKKyAgICAgICAgYXV0byogZXhl
YyA9IHdpbmRvd1Byb3h5LT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRvKiBv
cmlnaW4gPSAmd2luZG93UHJveHktPndpbmRvdygpLT53cmFwcGVkKCkuZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihleGVj
LCBvcmlnaW4pKTsKICAgICB9CiB9CiAKQEAgLTU1OCwxMCArNTU2LDEwIEBAIE5QT2JqZWN0KiBT
Y3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHQKICAgICAgICAgaWYgKGNhbkV4ZWN1dGVTY3Jp
cHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewogICAgICAgICAgICAgLy8gSmF2YVNjcmlw
dCBpcyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KICAg
ICAgICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9iamVj
dC4KLSAgICAgICAgICAgIEpTRE9NV2luZG93KiB3aW4gPSB3aW5kb3dTaGVsbChwbHVnaW5Xb3Js
ZCgpKS0+d2luZG93KCk7Ci0gICAgICAgICAgICBBU1NFUlQod2luKTsKKyAgICAgICAgICAgIGF1
dG8qIHdpbmRvdyA9IHdpbmRvd1Byb3h5KHBsdWdpbldvcmxkKCkpLT53aW5kb3coKTsKKyAgICAg
ICAgICAgIEFTU0VSVCh3aW5kb3cpOwogICAgICAgICAgICAgQmluZGluZ3M6OlJvb3RPYmplY3Qq
IHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwotICAgICAgICAgICAgbV93aW5kb3dTY3JpcHRO
UE9iamVjdCA9IF9OUE5fQ3JlYXRlU2NyaXB0T2JqZWN0KDAsIHdpbiwgcm9vdCk7CisgICAgICAg
ICAgICBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwg
d2luZG93LCByb290KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEphdmFTY3Jp
cHQgaXMgbm90IGVuYWJsZWQsIHNvIHdlIGNhbm5vdCBiaW5kIHRoZSBOUE9iamVjdCB0byB0aGUg
SmF2YVNjcmlwdCB3aW5kb3cgb2JqZWN0LgogICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgY3Jl
YXRlIGFuIE5QT2JqZWN0IG9mIGEgZGlmZmVyZW50IGNsYXNzLCBvbmUgd2hpY2ggaXMgbm90IGJv
dW5kIHRvIGEgSmF2YVNjcmlwdCBvYmplY3QuCkBAIC01ODcsMTYgKzU4NSwxNiBAQCBKU09iamVj
dCogU2NyaXB0Q29udHJvbGxlcjo6anNPYmplY3RGb3JQCiB7CiAgICAgLy8gQ2FuJ3QgY3JlYXRl
IEpTT2JqZWN0cyB3aGVuIEphdmFTY3JpcHQgaXMgZGlzYWJsZWQKICAgICBpZiAoIWNhbkV4ZWN1
dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0o
KSk7CiAKICAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQKLSAg
ICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwor
ICAgIGF1dG8qIGdsb2JhbE9iaiA9IGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKICAgICAv
LyBGSVhNRTogaXMgbm9ybWFsIG9rYXk/IC0gdXNlZCBmb3IgTlAgcGx1Z2lucz8KICAgICBKU1Zh
bHVlIGpzRWxlbWVudFZhbHVlID0gdG9KUyhnbG9iYWxPYmotPmdsb2JhbEV4ZWMoKSwgZ2xvYmFs
T2JqLCBwbHVnaW4pOwogICAgIGlmICghanNFbGVtZW50VmFsdWUgfHwgIWpzRWxlbWVudFZhbHVl
LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAKICAgICByZXR1cm4ganNFbGVtZW50VmFsdWUuZ2V0T2JqZWN0KCk7CiB9CkBAIC02MTUs
OCArNjEzLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpkaXNjb25uZWN0UGxhdGZvcgogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHZvaWQq
IG5hdGl2ZUhhbmRsZSkKIHsKLSAgICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcm9v
dE9iamVjdHMuZmluZChuYXRpdmVIYW5kbGUpOwotCisgICAgYXV0byBpdCA9IG1fcm9vdE9iamVj
dHMuZmluZChuYXRpdmVIYW5kbGUpOwogICAgIGlmIChpdCA9PSBtX3Jvb3RPYmplY3RzLmVuZCgp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTYyOCw5ICs2MjUsOCBAQCB2b2lkIFNjcmlwdENvbnRy
b2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0CiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9u
Vk0oKSk7CiAKLSAgICBSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RP
YmplY3RzLmVuZCgpOwotICAgIGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3Jvb3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZh
bHVlLT5pbnZhbGlkYXRlKCk7CisgICAgZm9yIChhdXRvJiByb290T2JqZWN0IDogbV9yb290T2Jq
ZWN0cy52YWx1ZXMoKSkKKyAgICAgICAgcm9vdE9iamVjdC0+aW52YWxpZGF0ZSgpOwogCiAgICAg
bV9yb290T2JqZWN0cy5jbGVhcigpOwogCkBAIC03MTgsNyArNzE0LDcgQEAgYm9vbCBTY3JpcHRD
b250cm9sbGVyOjpleGVjdXRlSWZKYXZhU2NyaQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IFN0cmluZyBzY3JpcHRSZXN1bHQ7Ci0gICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5nZXRTdHJp
bmcod2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT53aW5kb3coKS0+Z2xvYmFs
RXhlYygpLCBzY3JpcHRSZXN1bHQpKQorICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuZ2V0U3Ry
aW5nKHdpbmRvd1Byb3h5KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+d2luZG93KCktPmdsb2Jh
bEV4ZWMoKSwgc2NyaXB0UmVzdWx0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGFsd2F5cyByZXBsYWNlIHRoZSBkb2N1bWVudCwgYnV0IGRvaW5nIHNv
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
CShyZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93
U2hlbGwuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd1Byb3h5LmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8aGVhcC9TdHJvbmcuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgpAQCAtNjIsOCArNjIsNiBAQCBjbGFzcyBVUkw7CiBjbGFzcyBXaWRnZXQ7
CiBzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlsczsKIAotdXNpbmcgUm9vdE9iamVjdE1hcCA9IEhhc2hN
YXA8dm9pZCosIFJlZjxKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Pj47Ci0KIGVudW0gUmVhc29u
Rm9yQ2FsbGluZ0NhbkV4ZWN1dGVTY3JpcHRzIHsKICAgICBBYm91dFRvRXhlY3V0ZVNjcmlwdCwK
ICAgICBOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdApAQCAtNzIsNyArNzAsOCBAQCBlbnVtIFJlYXNv
bkZvckNhbGxpbmdDYW5FeGVjdXRlU2NyaXB0cyB7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQ
dHI8RE9NV3JhcHBlcldvcmxkPiwgSlNDOjpTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4+IFNoZWxs
TWFwOworICAgIHVzaW5nIFByb3h5TWFwID0gSGFzaE1hcDxSZWZQdHI8RE9NV3JhcHBlcldvcmxk
PiwgSlNDOjpTdHJvbmc8SlNET01XaW5kb3dQcm94eT4+OworICAgIHVzaW5nIFJvb3RPYmplY3RN
YXAgPSBIYXNoTWFwPHZvaWQqLCBSZWY8SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4+OwogCiBw
dWJsaWM6CiAgICAgZXhwbGljaXQgU2NyaXB0Q29udHJvbGxlcihGcmFtZSYpOwpAQCAtODAsMjQg
Kzc5LDI0IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RE9NV3Jh
cHBlcldvcmxkPiBjcmVhdGVXb3JsZCgpOwogCi0gICAgSlNET01XaW5kb3dTaGVsbCYgY3JlYXRl
V2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkJik7Ci0gICAgdm9pZCBkZXN0cm95V2luZG93U2hl
bGwoRE9NV3JhcHBlcldvcmxkJik7CisgICAgSlNET01XaW5kb3dQcm94eSYgY3JlYXRlV2luZG93
UHJveHkoRE9NV3JhcHBlcldvcmxkJik7CisgICAgdm9pZCBkZXN0cm95V2luZG93UHJveHkoRE9N
V3JhcHBlcldvcmxkJik7CiAKLSAgICBWZWN0b3I8SlNDOjpTdHJvbmc8SlNET01XaW5kb3dTaGVs
bD4+IHdpbmRvd1NoZWxscygpOworICAgIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0RPTVdpbmRvd1By
b3h5Pj4gd2luZG93UHJveGllcygpOwogCi0gICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hl
bGwoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKKyAgICBKU0RPTVdpbmRvd1Byb3h5KiB3aW5kb3dQ
cm94eShET01XcmFwcGVyV29ybGQmIHdvcmxkKQogICAgIHsKLSAgICAgICAgU2hlbGxNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5maW5kKCZ3b3JsZCk7Ci0gICAgICAgIHJldHVy
biAoaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKSkgPyBpdGVyLT52YWx1ZS5nZXQoKSA6IGlu
aXRTY3JpcHQod29ybGQpOworICAgICAgICBhdXRvIGl0ZXIgPSBtX3dpbmRvd1Byb3hpZXMuZmlu
ZCgmd29ybGQpOworICAgICAgICByZXR1cm4gKGl0ZXIgIT0gbV93aW5kb3dQcm94aWVzLmVuZCgp
KSA/IGl0ZXItPnZhbHVlLmdldCgpIDogaW5pdFNjcmlwdCh3b3JsZCk7CiAgICAgfQotICAgIEpT
RE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCkgY29uc3QKKyAgICBKU0RPTVdpbmRvd1Byb3h5KiBleGlzdGluZ1dpbmRvd1Byb3h5KERPTVdy
YXBwZXJXb3JsZCYgd29ybGQpIGNvbnN0CiAgICAgewotICAgICAgICBTaGVsbE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmZpbmQoJndvcmxkKTsKLSAgICAgICAgcmV0
dXJuIChpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpKSA/IGl0ZXItPnZhbHVlLmdldCgpIDog
MDsKKyAgICAgICAgYXV0byBpdGVyID0gbV93aW5kb3dQcm94aWVzLmZpbmQoJndvcmxkKTsKKyAg
ICAgICAgcmV0dXJuIChpdGVyICE9IG1fd2luZG93UHJveGllcy5lbmQoKSkgPyBpdGVyLT52YWx1
ZS5nZXQoKSA6IDA7CiAgICAgfQogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB3aW5kb3dTaGVsbCh3b3Js
ZCktPndpbmRvdygpOworICAgICAgICByZXR1cm4gd2luZG93UHJveHkod29ybGQpLT53aW5kb3co
KTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBnZXRBbGxXb3JsZHMoVmVjdG9yPFJlZjxET01X
cmFwcGVyV29ybGQ+PiYpOwpAQCAtMTM5LDE2ICsxMzgsMTYgQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgY2FuRXhlY3V0ZVNjcmlwdHMoUmVhc29uRm9yQ2FsbGluZ0NhbkV4ZWN1
dGVTY3JpcHRzKTsKIAogICAgIC8vIERlYnVnZ2VyIGNhbiBiZSAwIHRvIGRldGFjaCBhbnkgZXhp
c3RpbmcgRGVidWdnZXIuCi0gICAgdm9pZCBhdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKik7
IC8vIEF0dGFjaGVzL2RldGFjaGVzIGluIGFsbCB3b3JsZHMvd2luZG93IHNoZWxscy4KLSAgICB2
b2lkIGF0dGFjaERlYnVnZ2VyKEpTRE9NV2luZG93U2hlbGwqLCBKU0M6OkRlYnVnZ2VyKik7Cisg
ICAgdm9pZCBhdHRhY2hEZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKik7IC8vIEF0dGFjaGVzL2RldGFj
aGVzIGluIGFsbCB3b3JsZHMvd2luZG93IHByb3hpZXMuCisgICAgdm9pZCBhdHRhY2hEZWJ1Z2dl
cihKU0RPTVdpbmRvd1Byb3h5KiwgSlNDOjpEZWJ1Z2dlciopOwogCiAgICAgdm9pZCBzZXRQYXVz
ZWQoYm9vbCBiKSB7IG1fcGF1c2VkID0gYjsgfQogICAgIGJvb2wgaXNQYXVzZWQoKSBjb25zdCB7
IHJldHVybiBtX3BhdXNlZDsgfQogCiAgICAgY29uc3QgU3RyaW5nKiBzb3VyY2VVUkwoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZVVSTDsgfSAvLyAwIGlmIHdlIGFyZSBub3QgZXZhbHVhdGluZyBh
bnkgc2NyaXB0CiAKLSAgICB2b2lkIGNsZWFyV2luZG93U2hlbGxzTm90TWF0Y2hpbmdET01XaW5k
b3coRE9NV2luZG93KiwgYm9vbCBnb2luZ0ludG9QYWdlQ2FjaGUpOwotICAgIHZvaWQgc2V0RE9N
V2luZG93Rm9yV2luZG93U2hlbGwoRE9NV2luZG93Kik7CisgICAgdm9pZCBjbGVhcldpbmRvd1By
b3hpZXNOb3RNYXRjaGluZ0RPTVdpbmRvdyhET01XaW5kb3cqLCBib29sIGdvaW5nSW50b1BhZ2VD
YWNoZSk7CisgICAgdm9pZCBzZXRET01XaW5kb3dGb3JXaW5kb3dQcm94eShET01XaW5kb3cqKTsK
ICAgICB2b2lkIHVwZGF0ZURvY3VtZW50KCk7CiAKICAgICB2b2lkIG5hbWVkSXRlbUFkZGVkKEhU
TUxEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYpIHsgfQpAQCAtMTc5LDEyICsxNzgsMTIg
QEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgSlNET01X
aW5kb3dTaGVsbCogaW5pdFNjcmlwdChET01XcmFwcGVyV29ybGQmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBKU0RPTVdpbmRvd1Byb3h5KiBpbml0U2NyaXB0KERPTVdyYXBwZXJXb3JsZCYpOwogICAg
IHZvaWQgc2V0dXBNb2R1bGVTY3JpcHRIYW5kbGVycyhMb2FkYWJsZU1vZHVsZVNjcmlwdCYsIEpT
Qzo6SlNJbnRlcm5hbFByb21pc2UmLCBET01XcmFwcGVyV29ybGQmKTsKIAogICAgIHZvaWQgZGlz
Y29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogCi0gICAgU2hlbGxNYXAgbV93aW5kb3dT
aGVsbHM7CisgICAgUHJveHlNYXAgbV93aW5kb3dQcm94aWVzOwogICAgIEZyYW1lJiBtX2ZyYW1l
OwogICAgIGNvbnN0IFN0cmluZyogbV9zb3VyY2VVUkw7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMjE4
MTM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFdlYlNjcmlwdE9iamVjdCAqU2Ny
aXB0Q29udHJvbGxlcjo6d2luZG8KICAgICBpZiAoIW1fd2luZG93U2NyaXB0T2JqZWN0KSB7CiAg
ICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgICAgIEpTQzo6
QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwotICAgICAg
ICBtX3dpbmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9y
SlNPYmplY3Q6dG9SZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmpl
Y3Q6cm9vdCByb290T2JqZWN0OnJvb3RdOworICAgICAgICBtX3dpbmRvd1NjcmlwdE9iamVjdCA9
IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmplY3Q6dG9SZWYod2luZG93UHJv
eHkocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmplY3Q6cm9vdCByb290T2JqZWN0OnJvb3Rd
OwogICAgIH0KIAogICAgIHJldHVybiBtX3dpbmRvd1NjcmlwdE9iamVjdC5nZXQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAJKHJldmlzaW9uIDIx
ODEzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYsOCArNzYsNyBAQCBKU0M6OkV4ZWNTdGF0ZSogbWFpbldvcmxkRXhl
Y1N0YXRlKEZyYW1lCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgSlNET01XaW5kb3dTaGVsbCogc2hlbGwgPSBmcmFtZS0+c2NyaXB0KCkud2luZG93U2hl
bGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwotICAgIHJldHVybiBzaGVsbC0+d2luZG93KCkt
Pmdsb2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLndpbmRvd1Byb3h5KG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKIH0KIAogSlND
OjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Ob2RlKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIE5v
ZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjE4MTM3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIz
MTAsNyArMjMxMCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgfQogCi0g
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzIEpTRE9NV2luZG93U2hlbGw7XG5cbiIpIGlm
ICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJjbGFzcyBKU0RPTVdpbmRvd1Byb3h5O1xuXG4iKSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiRE9N
V2luZG93IjsKIAogICAgIG15ICRleHBvcnRNYWNybyA9IEdldEV4cG9ydE1hY3JvRm9ySlNDbGFz
cygkaW50ZXJmYWNlKTsKIApAQCAtMjMyMywxMCArMjMyMywxMCBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHVzaW5nIERPTVdyYXBwZWQgPSAkaW1w
bFR5cGU7XG4iKSBpZiAkaGFzUGFyZW50OwogCiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJE
T01XaW5kb3ciKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICRj
bGFzc05hbWUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UmVmPCRpbXBsVHlwZT4mJiBpbXBsLCBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbClcbiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1lKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjwkaW1wbFR5
cGU+JiYgaW1wbCwgSlNET01XaW5kb3dQcm94eSogcHJveHkpXG4iKTsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDwkY2xhc3NOYW1lPih2bS5oZWFwKSkgJHtjbGFzc05hbWV9KHZtLCBzdHJ1Y3R1cmUsIFdURk1v
dmUoaW1wbCksIHdpbmRvd1NoZWxsKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCB3aW5kb3dTaGVsbCk7XG4iKTsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgJGNsYXNzTmFtZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NOYW1lPih2bS5oZWFwKSkgJHtjbGFz
c05hbWV9KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCksIHByb3h5KTtcbiIpOworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBw
cm94eSk7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IHB0cjtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7CiAg
ICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2Us
ICJXb3JrZXJHbG9iYWxTY29wZSIpKSB7CkBAIC0yNjQyLDcgKzI2NDIsNyBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKIAogICAgICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEg
IkRPTVdpbmRvdyIpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NO
YW1lKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjwkaW1wbFR5cGU+JiYsIEpTRE9NV2lu
ZG93U2hlbGwqKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFz
c05hbWUoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmPCRpbXBsVHlwZT4mJiwgSlNET01X
aW5kb3dQcm94eSopO1xuIik7CiAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRz
SW50ZXJmYWNlKCRpbnRlcmZhY2UsICJXb3JrZXJHbG9iYWxTY29wZSIpKSB7CiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1
cmUqLCBSZWY8JGltcGxUeXBlPiYmKTtcbiIpOwogICAgIH0gZWxzaWYgKCFOZWVkc0ltcGxlbWVu
dGF0aW9uQ2xhc3MoJGludGVyZmFjZSkpIHsKQEAgLTI2NTIsNyArMjY1Miw3IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93
IikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYsIEpTRE9NV2luZG93U2hlbGwqKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NV2luZG93
UHJveHkqKTtcbiIpOwogICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0ludGVy
ZmFjZSgkaW50ZXJmYWNlLCAiV29ya2VyR2xvYmFsU2NvcGUiKSkgewogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNQ
cm94eSopO1xuIik7CiAgICAgfSBlbHNlIHsKQEAgLTMyMzYsOCArMzIzNiw4IEBAIHN1YiBHZW5l
cmF0ZU92ZXJsb2FkRGlzcGF0Y2hlcgogICAgICAgICAgICAgICAgIGZvciBteSAkc3VidHlwZSAo
QHN1YnR5cGVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNX
cmFwcGVyVHlwZSgkc3VidHlwZSkgfHwgJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUo
JHN1YnR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHN1YnR5cGUtPm5hbWUg
ZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiSlNET01XaW5kb3dTaGVsbC5oIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJiRnZW5lcmF0ZU92ZXJsb2FkQ2FsbElmTmVjZXNzYXJ5KCRvdmVybG9hZCwgImRpc3Rpbmd1
aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgKGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+aW5o
ZXJpdHModm0sIEpTRE9NV2luZG93U2hlbGw6OmluZm8oKSkgfHwgYXNPYmplY3QoZGlzdGluZ3Vp
c2hpbmdBcmcpLT5pbmhlcml0cyh2bSwgSlNET01XaW5kb3c6OmluZm8oKSkpIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NV2luZG93UHJveHku
aCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYkZ2VuZXJhdGVPdmVybG9hZENhbGxJ
Zk5lY2Vzc2FyeSgkb3ZlcmxvYWQsICJkaXN0aW5ndWlzaGluZ0FyZy5pc09iamVjdCgpICYmIChh
c09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzKHZtLCBKU0RPTVdpbmRvd1Byb3h5
OjppbmZvKCkpIHx8IGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+aW5oZXJpdHModm0sIEpT
RE9NV2luZG93OjppbmZvKCkpKSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJGdlbmVyYXRlT3ZlcmxvYWRDYWxsSWZOZWNl
c3NhcnkoJG92ZXJsb2FkLCAiZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiBhc09iamVj
dChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzKHZtLCBKUyIgLiAkc3VidHlwZS0+bmFtZSAu
ICI6OmluZm8oKSkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQwMDUsOSArNDAw
NSw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAjIENvbnN0cnVjdG9yCiAg
ICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAgIEFkZEluY2x1
ZGVzRm9ySW1wbGVtZW50YXRpb25UeXBlSW5JbXBsKCJKU0RPTVdpbmRvd1NoZWxsIik7Ci0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjwkaW1wbFR5cGU+JiYgaW1wbCwgSlNET01XaW5kb3dT
aGVsbCogc2hlbGwpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFy
ZW50Q2xhc3NOYW1lKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCksIHNoZWxsKVxuIik7Cisg
ICAgICAgIEFkZEluY2x1ZGVzRm9ySW1wbGVtZW50YXRpb25UeXBlSW5JbXBsKCJKU0RPTVdpbmRv
d1Byb3h5Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xh
c3NOYW1lKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjwkaW1wbFR5cGU+JiYgaW1w
bCwgSlNET01XaW5kb3dQcm94eSogcHJveHkpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCks
IHByb3h5KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRv
ci0+SW5oZXJpdHNJbnRlcmZhY2UoJGludGVyZmFjZSwgIldvcmtlckdsb2JhbFNjb3BlIikpIHsK
QEAgLTQwMjgsOSArNDAyOCw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAj
IEZpbmlzaCBDcmVhdGlvbgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iikg
ewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKVxuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNET01XaW5kb3dQcm94eSogcHJveHkpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0sIHNoZWxsKTtcblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBwcm94eSk7XG5cbiIpOwogICAgIH0gZWxzaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0ludGVyZmFjZSgkaW50ZXJmYWNlLCAiV29ya2VyR2xv
YmFsU2NvcGUiKSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05h
bWV9OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTUHJveHkqIHByb3h5KVxuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjE4
MTM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJKU0RPTVN0
cmluZ0xpc3QuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRE9NV2lu
ZG93QmFzZS5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKKyNpbmNsdWRlICJKU0RP
TVdpbmRvd1Byb3h5LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRl
ICJKU0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNFbGVtZW50LmgiCkBAIC02NzI2LDcgKzY3MjYs
NyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgICAgICAg
ICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNkJvZHko
c3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hp
bmdBcmcuaXNPYmplY3QoKSAmJiBhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRz
KHZtLCBKU1Rlc3RPYmo6OmluZm8oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOEJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRo
cm93U2NvcGUpOwotICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiAo
YXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT5pbmhlcml0cyh2bSwgSlNET01XaW5kb3dTaGVs
bDo6aW5mbygpKSB8fCBhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzKHZtLCBK
U0RPTVdpbmRvdzo6aW5mbygpKSkpCisgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc09i
amVjdCgpICYmIChhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzKHZtLCBKU0RP
TVdpbmRvd1Byb3h5OjppbmZvKCkpIHx8IGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+aW5o
ZXJpdHModm0sIEpTRE9NV2luZG93OjppbmZvKCkpKSkKICAgICAgICAgICAgIHJldHVybiBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Qm9keShzdGF0ZSwgY2FzdGVk
VGhpcywgdGhyb3dTY29wZSk7CiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc09iamVj
dCgpICYmIGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+aW5oZXJpdHModm0sIEpTQmxvYjo6
aW5mbygpKSkKICAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxM0JvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAyMTgxMzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MTksNyArNjE5LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0Rv
YwogICAgIGlmIChjbGVhcldpbmRvd1Byb3BlcnRpZXMpIHsKICAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpmcmFtZVdpbmRvd0Rpc2NhcmRlZChtX2ZyYW1lLCBtX2ZyYW1lLmRvY3Vt
ZW50KCktPmRvbVdpbmRvdygpKTsKICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5k
b3coKS0+cmVzZXRVbmxlc3NTdXNwZW5kZWRGb3JEb2N1bWVudFN1c3BlbnNpb24oKTsKLSAgICAg
ICAgbV9mcmFtZS5zY3JpcHQoKS5jbGVhcldpbmRvd1NoZWxsc05vdE1hdGNoaW5nRE9NV2luZG93
KG5ld0RvY3VtZW50LT5kb21XaW5kb3coKSwgbV9mcmFtZS5kb2N1bWVudCgpLT5wYWdlQ2FjaGVT
dGF0ZSgpID09IERvY3VtZW50OjpBYm91dFRvRW50ZXJQYWdlQ2FjaGUpOworICAgICAgICBtX2Zy
YW1lLnNjcmlwdCgpLmNsZWFyV2luZG93UHJveGllc05vdE1hdGNoaW5nRE9NV2luZG93KG5ld0Rv
Y3VtZW50LT5kb21XaW5kb3coKSwgbV9mcmFtZS5kb2N1bWVudCgpLT5wYWdlQ2FjaGVTdGF0ZSgp
ID09IERvY3VtZW50OjpBYm91dFRvRW50ZXJQYWdlQ2FjaGUpOwogCiAgICAgICAgIGlmIChzaG91
bGRDbGVhcldpbmRvd05hbWUobV9mcmFtZSwgKm5ld0RvY3VtZW50KSkKICAgICAgICAgICAgIG1f
ZnJhbWUudHJlZSgpLnNldE5hbWUobnVsbEF0b20pOwpAQCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmNsZWFyKERvY3VtZW50KiBuZXdEb2MKICAgICBzdWJmcmFtZUxvYWRlcigp
LmNsZWFyKCk7CiAKICAgICBpZiAoY2xlYXJXaW5kb3dQcm9wZXJ0aWVzKQotICAgICAgICBtX2Zy
YW1lLnNjcmlwdCgpLnNldERPTVdpbmRvd0ZvcldpbmRvd1NoZWxsKG5ld0RvY3VtZW50LT5kb21X
aW5kb3coKSk7CisgICAgICAgIG1fZnJhbWUuc2NyaXB0KCkuc2V0RE9NV2luZG93Rm9yV2luZG93
UHJveHkobmV3RG9jdW1lbnQtPmRvbVdpbmRvdygpKTsKIAogICAgIGlmIChjbGVhclNjcmlwdE9i
amVjdHMpCiAgICAgICAgIG1fZnJhbWUuc2NyaXB0KCkuY2xlYXJTY3JpcHRPYmplY3RzKCk7CkBA
IC0zNTMyLDcgKzM1MzIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2lu
ZG93CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldv
cmxkKERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLnNjcmlwdCgp
LmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSB8fCAhbV9mcmFtZS5z
Y3JpcHQoKS5leGlzdGluZ1dpbmRvd1NoZWxsKHdvcmxkKSkKKyAgICBpZiAoIW1fZnJhbWUuc2Ny
aXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpIHx8ICFtX2Zy
YW1lLnNjcmlwdCgpLmV4aXN0aW5nV2luZG93UHJveHkod29ybGQpKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX2NsaWVudC5kaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCh3b3Js
ZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMjE4MTM3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRv
d1NoZWxsLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dQcm94eS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3kuY3BwCShyZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dTaGVs
bC5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93UHJveHkuaCIKICNpbmNsdWRlICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
UGluZ0xvYWRlci5oIgpAQCAtMTQ4LDEzICsxNDgsMTMgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OmFsbG93UnVubmluZwogICAgIHJldHVybiBhbGxvdzsKIH0KIAotdm9pZCBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OmRpZENyZWF0ZVdpbmRvd1NoZWxsKEpTRE9NV2luZG93U2hlbGwmIHdp
bmRvd1NoZWxsKSBjb25zdAordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZENyZWF0ZVdp
bmRvd1Byb3h5KEpTRE9NV2luZG93UHJveHkmIHdpbmRvd1Byb3h5KSBjb25zdAogewotICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSB3aW5kb3dTaGVsbC53aW5kb3coKTsKKyAgICBhdXRvKiB3aW5k
b3cgPSB3aW5kb3dQcm94eS53aW5kb3coKTsKICAgICBBU1NFUlQod2luZG93KTsKICAgICBBU1NF
UlQod2luZG93LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVCh3aW5kb3ct
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgPT0gdGhp
cyk7Ci0gICAgaWYgKCF3aW5kb3dTaGVsbC53b3JsZCgpLmlzTm9ybWFsKCkpIHsKKyAgICBpZiAo
IXdpbmRvd1Byb3h5LndvcmxkKCkuaXNOb3JtYWwoKSkgewogICAgICAgICB3aW5kb3ctPnNldEV2
YWxFbmFibGVkKHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmgJKHJldmlzaW9uIDIx
ODEzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZUxpc3QKIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZTsKIGNs
YXNzIERPTVN0cmluZ0xpc3Q7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIEpTRE9NV2luZG93U2hlbGw7
CitjbGFzcyBKU0RPTVdpbmRvd1Byb3h5OwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwpAQCAtNzAsNyAr
NzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb3B5U3RhdGVGcm9tKGNvbnN0IENvbnRlbnRTZWN1
cml0eVBvbGljeSopOwogICAgIHZvaWQgY29weVVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RTdGF0ZUZy
b20oY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5Jik7CiAKLSAgICB2b2lkIGRpZENyZWF0ZVdp
bmRvd1NoZWxsKEpTRE9NV2luZG93U2hlbGwmKSBjb25zdDsKKyAgICB2b2lkIGRpZENyZWF0ZVdp
bmRvd1Byb3h5KEpTRE9NV2luZG93UHJveHkmKSBjb25zdDsKIAogICAgIGVudW0gY2xhc3MgUG9s
aWN5RnJvbSB7CiAgICAgICAgIEFQSSwKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2
aXNpb24gMjE4MTM3KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE3LTA2LTEyICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVuYW1lIEpTRE9NV2luZG93U2hlbGwgdG8gSlNET01XaW5k
b3dQcm94eSB0byBtYXRjaCB0aGUgSFRNTDUgc3BlYy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNzMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1dvcmtlcnMvSGVhcFNuYXBz
aG90L0hlYXBTbmFwc2hvdC5qczoKKyAgICAgICAgKEhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX2lz
Tm9kZUdsb2JhbE9iamVjdCk6CisKIDIwMTctMDYtMTAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZlcnRlZCByMjE4MDU2IGJlY2F1c2UgaXQgbWFkZSB0aGUg
SURFIHJlaW5kZXggY29uc3RhbnRseS4KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1dvcmtlcnMvSGVhcFNuYXBzaG90L0hlYXBTbmFwc2hvdC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0hlYXBTbmFw
c2hvdC9IZWFwU25hcHNob3QuanMJKHJldmlzaW9uIDIxODEzNykKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMvSGVhcFNuYXBzaG90L0hlYXBTbmFwc2hvdC5q
cwkod29ya2luZyBjb3B5KQpAQCAtNzA5LDcgKzcwOSw3IEBAIEhlYXBTbmFwc2hvdCA9IGNsYXNz
IEhlYXBTbmFwc2hvdAogICAgIHsKICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMuX25vZGVD
bGFzc05hbWVzVGFibGVbdGhpcy5fbm9kZXNbbm9kZUluZGV4ICsgbm9kZUNsYXNzTmFtZU9mZnNl
dF1dOwogICAgICAgICByZXR1cm4gY2xhc3NOYW1lID09PSAiV2luZG93IgotICAgICAgICAgICAg
fHwgY2xhc3NOYW1lID09PSAiSlNET01XaW5kb3dTaGVsbCIKKyAgICAgICAgICAgIHx8IGNsYXNz
TmFtZSA9PT0gIkpTRE9NV2luZG93UHJveHkiCiAgICAgICAgICAgICB8fCBjbGFzc05hbWUgPT09
ICJHbG9iYWxPYmplY3QiOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjE4MTM3
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTctMDYtMTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBSZW5hbWUgSlNET01XaW5kb3dTaGVsbCB0byBKU0RPTVdpbmRvd1Byb3h5IHRvIG1hdGNoIHRo
ZSBIVE1MNSBzcGVjLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODA3MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UGx1Z2luVmlldzo6d2luZG93U2NyaXB0TlBPYmplY3QpOgorCiAyMDE3LTA2LTEyICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkNyeXB0b10gUmVt
b3ZlIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcgb2YgU3VidGxlQ3J5cHRvCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZp
c2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTMsNyArMTQ1Myw3IEBAIE5QT2JqZWN0KiBQ
bHVnaW5WaWV3Ojp3aW5kb3dTY3JpcHROUE9iamUKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG1fbnBSdW50aW1lT2JqZWN0TWFwLmdldE9yQ3JlYXRlTlBPYmplY3QocGx1
Z2luV29ybGQoKS52bSgpLCBmcmFtZSgpLT5zY3JpcHQoKS53aW5kb3dTaGVsbChwbHVnaW5Xb3Js
ZCgpKS0+d2luZG93KCkpOworICAgIHJldHVybiBtX25wUnVudGltZU9iamVjdE1hcC5nZXRPckNy
ZWF0ZU5QT2JqZWN0KHBsdWdpbldvcmxkKCkudm0oKSwgZnJhbWUoKS0+c2NyaXB0KCkud2luZG93
UHJveHkocGx1Z2luV29ybGQoKSktPndpbmRvdygpKTsKIH0KIAogTlBPYmplY3QqIFBsdWdpblZp
ZXc6OnBsdWdpbkVsZW1lbnROUE9iamVjdCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMTgxMzcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAxNy0wNi0xMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJlbmFtZSBKU0RPTVdpbmRvd1NoZWxsIHRvIEpTRE9NV2luZG93UHJveHkg
dG8gbWF0Y2ggdGhlIEhUTUw1IHNwZWMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDczMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogRE9NL0RPTVV0aWxpdHkubW06CisgICAgICAgIChjcmVhdGVET01X
cmFwcGVyKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
Z2V0V2luZG93TlBPYmplY3QpOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAg
ICAgICgtW1dlYkZyYW1lIF9hdHRhY2hTY3JpcHREZWJ1Z2dlcl0pOgorICAgICAgICAoLVtXZWJG
cmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6d2l0aEdsb2JhbE9i
amVjdDppblNjcmlwdFdvcmxkOl0pOgorCiAyMDE3LTA2LTEyICBKaWV3ZW4gVGFuICA8amlld2Vu
X3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkNyeXB0b10gUmVtb3ZlIGV4cGVyaW1lbnRh
bCBmZWF0dXJlIGZsYWcgb2YgU3VidGxlQ3J5cHRvCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9E
T00vRE9NVXRpbGl0eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9ET00vRE9N
VXRpbGl0eS5tbQkocmV2aXNpb24gMjE4MTM3KQorKysgU291cmNlL1dlYktpdC9tYWMvRE9NL0RP
TVV0aWxpdHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvSlNDU1NSdWxlTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0NTU1N0eWxlRGVjbGFy
YXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNET01JbXBsZW1lbnRhdGlvbi5oPgotI2ltcG9y
dCA8V2ViQ29yZS9KU0RPTVdpbmRvd1NoZWxsLmg+CisjaW1wb3J0IDxXZWJDb3JlL0pTRE9NV2lu
ZG93UHJveHkuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNEZXByZWNhdGVkQ1NTT01Db3VudGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0pTRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSlNEZXByZWNhdGVkQ1NTT01SZWN0Lmg+CkBAIC04NSw3ICs4NSw3IEBAIHN0YXRp
YyBXZWJTY3JpcHRPYmplY3QgKmNyZWF0ZURPTVdyYXBwZXIKICAgICBXUkFQKERlcHJlY2F0ZWRD
U1NPTVZhbHVlKQogICAgIFdSQVAoRGVwcmVjYXRlZENTU09NQ291bnRlcikKICAgICBXUkFQKERP
TUltcGxlbWVudGF0aW9uKQotICAgIFdSQVAoRE9NV2luZG93U2hlbGwpCisgICAgV1JBUChET01X
aW5kb3dQcm94eSkKICAgICBXUkFQKEV2ZW50KQogICAgIFdSQVAoSFRNTE9wdGlvbnNDb2xsZWN0
aW9uKQogICAgIFdSQVAoTWVkaWFMaXN0KQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eS5tbQkocmV2aXNpb24gMjE4MTM3KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NDEs
NyArODQxLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFdpbgogICAg
IGlmICghZnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRl
U2NyaXB0KSkKICAgICAgICAgb2JqZWN0SUQgPSAwOwogICAgIGVsc2UKLSAgICAgICAgb2JqZWN0
SUQgPSBtX2xvY2FsT2JqZWN0cy5pZEZvck9iamVjdChwbHVnaW5Xb3JsZCgpLnZtKCksIGZyYW1l
LT5zY3JpcHQoKS53aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgpKS0+d2luZG93KCkpOworICAgICAg
ICBvYmplY3RJRCA9IG1fbG9jYWxPYmplY3RzLmlkRm9yT2JqZWN0KHBsdWdpbldvcmxkKCkudm0o
KSwgZnJhbWUtPnNjcmlwdCgpLndpbmRvd1Byb3h5KHBsdWdpbldvcmxkKCkpLT53aW5kb3coKSk7
CiAgICAgICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAyMTgxMzcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsMTAgKzM2NSwxMCBAQCAt
ICh2b2lkKV9hdHRhY2hTY3JpcHREZWJ1Z2dlcgogewogICAgIFNjcmlwdENvbnRyb2xsZXImIHNj
cmlwdENvbnRyb2xsZXIgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKTsKIAotICAgIC8v
IENhbGxpbmcgU2NyaXB0Q29udHJvbGxlcjo6Z2xvYmFsT2JqZWN0KCkgd291bGQgY3JlYXRlIGEg
d2luZG93IHNoZWxsLCBhbmQgZGlzcGF0Y2ggY29ycmVzcG9uZGluZyBjYWxsYmFja3MsIHdoaWNo
IG1heSBiZSBwcmVtYXR1cmUKKyAgICAvLyBDYWxsaW5nIFNjcmlwdENvbnRyb2xsZXI6Omdsb2Jh
bE9iamVjdCgpIHdvdWxkIGNyZWF0ZSBhIHdpbmRvdyBwcm94eSwgYW5kIGRpc3BhdGNoIGNvcnJl
c3BvbmRpbmcgY2FsbGJhY2tzLCB3aGljaCBtYXkgYmUgcHJlbWF0dXJlCiAgICAgLy8gaWYgdGhl
IHNjcmlwdCBkZWJ1Z2dlciBpcyBhdHRhY2hlZCBiZWZvcmUgYSBkb2N1bWVudCBpcyBjcmVhdGVk
LiAgVGhlc2UgY2FsbHMgdXNlIHRoZSBkZWJ1Z2dlcldvcmxkKCksIHdlIHdpbGwgbmVlZCB0byBw
YXNzIGEgd29ybGQKICAgICAvLyB0byBiZSBhYmxlIHRvIGRlYnVnIGlzb2xhdGVkIHdvcmxkcy4K
LSAgICBpZiAoIXNjcmlwdENvbnRyb2xsZXIuZXhpc3RpbmdXaW5kb3dTaGVsbChkZWJ1Z2dlcldv
cmxkKCkpKQorICAgIGlmICghc2NyaXB0Q29udHJvbGxlci5leGlzdGluZ1dpbmRvd1Byb3h5KGRl
YnVnZ2VyV29ybGQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdChkZWJ1Z2dlcldvcmxk
KCkpOwpAQCAtMjA3OCwxMSArMjA3OCwxMSBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyCiAgICAgLy8gU3RhcnQgb2ZmIHdpdGggc29tZSBndWVzcyBhdCBhIGZyYW1l
IGFuZCBhIGdsb2JhbCBvYmplY3QsIHdlJ2xsIHRyeSB0byBkbyBiZXR0ZXIuLi4hCiAgICAgSlNE
T01XaW5kb3cqIGFueVdvcmxkR2xvYmFsT2JqZWN0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2Ny
aXB0KCkuZ2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKIAotICAgIC8vIFRo
ZSBnbG9iYWwgb2JqZWN0IGlzIHByb2JhYmx5IGEgc2hlbGwgb2JqZWN0PyAtIGlmIHNvLCB3ZSBr
bm93IGhvdyB0byB1c2UgdGhpcyEKKyAgICAvLyBUaGUgZ2xvYmFsIG9iamVjdCBpcyBwcm9iYWJs
eSBhIHByb3h5IG9iamVjdD8gLSBpZiBzbywgd2Uga25vdyBob3cgdG8gdXNlIHRoaXMhCiAgICAg
SlNDOjpKU09iamVjdCogZ2xvYmFsT2JqZWN0T2JqID0gdG9KUyhnbG9iYWxPYmplY3RSZWYpOwog
ICAgIEpTQzo6Vk0mIHZtID0gKmdsb2JhbE9iamVjdE9iai0+dm0oKTsKLSAgICBpZiAoIXN0cmNt
cChnbG9iYWxPYmplY3RPYmotPmNsYXNzSW5mbyh2bSktPmNsYXNzTmFtZSwgIkpTRE9NV2luZG93
U2hlbGwiKSkKLSAgICAgICAgYW55V29ybGRHbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0RP
TVdpbmRvd1NoZWxsKj4oZ2xvYmFsT2JqZWN0T2JqKS0+d2luZG93KCk7CisgICAgaWYgKCFzdHJj
bXAoZ2xvYmFsT2JqZWN0T2JqLT5jbGFzc0luZm8odm0pLT5jbGFzc05hbWUsICJKU0RPTVdpbmRv
d1Byb3h5IikpCisgICAgICAgIGFueVdvcmxkR2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNE
T01XaW5kb3dQcm94eSo+KGdsb2JhbE9iamVjdE9iaiktPndpbmRvdygpOwogCiAgICAgLy8gR2V0
IHRoZSBmcmFtZSBmcm9tZSB0aGUgZ2xvYmFsIG9iamVjdCB3ZSd2ZSBzZXR0bGVkIG9uLgogICAg
IEZyYW1lKiBmcmFtZSA9IGFueVdvcmxkR2xvYmFsT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODEzNykKKysrIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE3LTA2LTEy
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuYW1lIEpTRE9NV2lu
ZG93U2hlbGwgdG8gSlNET01XaW5kb3dQcm94eSB0byBtYXRjaCB0aGUgSFRNTDUgc3BlYy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNzMzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJGcmFtZS5j
cHA6CisgICAgICAgIChXZWJGcmFtZTo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEluU2Ny
aXB0V29ybGQpOgorCiAyMDE3LTA2LTA5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgogCiAgICAgICAgIFtpT1MgRG5EXSBBZGQgYSBob29rIHRvIHBlcmZvcm0gdHdvLXN0
ZXAgZHJvcHMgaW4gZWRpdGFibGUgY29udGVudApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2Vi
RnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAko
cmV2aXNpb24gMjE4MTM3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDAxLDEwICsyMDAxLDEwIEBAIEhSRVNVTFQgV2ViRnJhbWU6OnN0cmlu
Z0J5RXZhbHVhdGluZ0phdmEKICAgICAvLyBTdGFydCBvZmYgd2l0aCBzb21lIGd1ZXNzIGF0IGEg
ZnJhbWUgYW5kIGEgZ2xvYmFsIG9iamVjdCwgd2UnbGwgdHJ5IHRvIGRvIGJldHRlci4uLiEKICAg
ICBKU0RPTVdpbmRvdyogYW55V29ybGRHbG9iYWxPYmplY3QgPSBjb3JlRnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAKLSAgICAvLyBUaGUgZ2xv
YmFsIG9iamVjdCBpcyBwcm9iYWJseSBhIHNoZWxsIG9iamVjdD8gLSBpZiBzbywgd2Uga25vdyBo
b3cgdG8gdXNlIHRoaXMhCisgICAgLy8gVGhlIGdsb2JhbCBvYmplY3QgaXMgcHJvYmFibHkgYSBw
cm94eSBvYmplY3Q/IC0gaWYgc28sIHdlIGtub3cgaG93IHRvIHVzZSB0aGlzIQogICAgIEpTQzo6
SlNPYmplY3QqIGdsb2JhbE9iamVjdE9iaiA9IHRvSlMoZ2xvYmFsT2JqZWN0UmVmKTsKLSAgICBp
ZiAoZ2xvYmFsT2JqZWN0T2JqLT5pbmhlcml0cygqZ2xvYmFsT2JqZWN0T2JqLT52bSgpLCBKU0RP
TVdpbmRvd1NoZWxsOjppbmZvKCkpKQotICAgICAgICBhbnlXb3JsZEdsb2JhbE9iamVjdCA9IHN0
YXRpY19jYXN0PEpTRE9NV2luZG93U2hlbGwqPihnbG9iYWxPYmplY3RPYmopLT53aW5kb3coKTsK
KyAgICBpZiAoZ2xvYmFsT2JqZWN0T2JqLT5pbmhlcml0cygqZ2xvYmFsT2JqZWN0T2JqLT52bSgp
LCBKU0RPTVdpbmRvd1Byb3h5OjppbmZvKCkpKQorICAgICAgICBhbnlXb3JsZEdsb2JhbE9iamVj
dCA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93UHJveHkqPihnbG9iYWxPYmplY3RPYmopLT53aW5k
b3coKTsKIAogICAgIC8vIEdldCB0aGUgZnJhbWUgZnJvbWUgdGhlIGdsb2JhbCBvYmplY3Qgd2Un
dmUgc2V0dGxlZCBvbi4KICAgICBGcmFtZSogZnJhbWUgPSBhbnlXb3JsZEdsb2JhbE9iamVjdC0+
d3JhcHBlZCgpLmZyYW1lKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>