<?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>200352</bug_id>
          
          <creation_ts>2019-08-01 10:54:37 -0700</creation_ts>
          <short_desc>[WHLSL] Do simple nullptr check elimination using basic data flow analysis when generating metal code</short_desc>
          <delta_ts>2019-08-01 16:14:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1557649</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-01 10:54:37 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557727</commentid>
    <comment_count>1</comment_count>
      <attachid>375341</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-01 13:31:57 -0700</bug_when>
    <thetext>Created attachment 375341
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557728</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-01 13:33:36 -0700</bug_when>
    <thetext>Attachment 375341 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:562:  Extra space before [.  [whitespace/brackets] [5]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:564:  Extra space before [.  [whitespace/brackets] [5]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:607:  Extra space before [.  [whitespace/brackets] [5]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:681:  Extra space before [.  [whitespace/brackets] [5]
Total errors found: 4 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557743</commentid>
    <comment_count>3</comment_count>
      <attachid>375341</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-08-01 14:27:49 -0700</bug_when>
    <thetext>Comment on attachment 375341
patch

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

LGTM overall, just a couple questions inline

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:175
&gt; +    void appendRightValueWithNullability(AST::Expression&amp;, String value, Nullability nullability)

Is there a reason to make it a separate function instead of just adding an optional parameter &quot;Nullability nullability = Nullability::CanBeNull&quot; to appendRightValue?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:562
&gt; +    auto [pointerName, nullability] = takeLastLeftValue();

This is a very sweet syntax, but it seems only allowed in C++17. Have we officially given up support of C++14?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557755</commentid>
    <comment_count>4</comment_count>
      <attachid>375341</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-01 14:37:18 -0700</bug_when>
    <thetext>Comment on attachment 375341
patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        When doing metal code generation, we frequently know whether something
&gt; +        is null or not. This patch does a basic propagation of this information

Sorry for being dumb, but do you think you could provide an example?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:196
&gt; +    std::pair&lt;String, Nullability&gt; takeLastValueAndNullability()

Adding this stuff into a pair seems yucky. I expect in the future we&apos;ll be adding more and more data here. Do you think it would be better design to put this into a struct? Or just use StackItem directly?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:668
&gt; +        auto lValue = takeLastLeftValue().first;

Again, a struct type would be a better design here. Unclear what &quot;first&quot; means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557763</commentid>
    <comment_count>5</comment_count>
      <attachid>375341</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-01 15:01:20 -0700</bug_when>
    <thetext>Comment on attachment 375341
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:175
&gt;&gt; +    void appendRightValueWithNullability(AST::Expression&amp;, String value, Nullability nullability)
&gt; 
&gt; Is there a reason to make it a separate function instead of just adding an optional parameter &quot;Nullability nullability = Nullability::CanBeNull&quot; to appendRightValue?

I originally did it in the same function. I moved to separate function for grep-ability of it. I don&apos;t have a strong preference.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:196
&gt;&gt; +    std::pair&lt;String, Nullability&gt; takeLastValueAndNullability()
&gt; 
&gt; Adding this stuff into a pair seems yucky. I expect in the future we&apos;ll be adding more and more data here. Do you think it would be better design to put this into a struct? Or just use StackItem directly?

I&apos;ll make a struct.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:562
&gt;&gt; +    auto [pointerName, nullability] = takeLastLeftValue();
&gt; 
&gt; This is a very sweet syntax, but it seems only allowed in C++17. Have we officially given up support of C++14?

Yeah :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557769</commentid>
    <comment_count>6</comment_count>
      <attachid>375341</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-01 15:08:59 -0700</bug_when>
    <thetext>Comment on attachment 375341
patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        is null or not. This patch does a basic propagation of this information
&gt; 
&gt; Sorry for being dumb, but do you think you could provide an example?

will add an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557780</commentid>
    <comment_count>7</comment_count>
      <attachid>375358</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-01 15:32:23 -0700</bug_when>
    <thetext>Created attachment 375358
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557787</commentid>
    <comment_count>8</comment_count>
      <attachid>375358</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-01 16:13:43 -0700</bug_when>
    <thetext>Comment on attachment 375358
patch for landing

Clearing flags on attachment: 375358

Committed r248141: &lt;https://trac.webkit.org/changeset/248141&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557788</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-01 16:13:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557789</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-01 16:14:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/53837824&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375341</attachid>
            <date>2019-08-01 13:31:57 -0700</date>
            <delta_ts>2019-08-01 15:32:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>9805</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODEyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE5LTA4LTAxICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gc2ltcGxlIG51
bGxwdHIgY2hlY2sgZWxpbWluYXRpb24gdXNpbmcgYmFzaWMgZGF0YSBmbG93IGFuYWx5c2lzIHdo
ZW4gZ2VuZXJhdGluZyBtZXRhbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDAzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIGRvaW5nIG1ldGFsIGNvZGUgZ2VuZXJhdGlvbiwgd2UgZnJl
cXVlbnRseSBrbm93IHdoZXRoZXIgc29tZXRoaW5nCisgICAgICAgIGlzIG51bGwgb3Igbm90LiBU
aGlzIHBhdGNoIGRvZXMgYSBiYXNpYyBwcm9wYWdhdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uCisg
ICAgICAgIHRvIGF2b2lkIGVtaXR0aW5nIGV4Y2Vzc2l2ZSBudWxsIGNoZWNrcyBpbiB0aGUgZ2Vu
ZXJhdGVkIE1ldGFsIGNvZGUuCisgICAgICAgIFRoaXMgaXMgYSA2JSBzcGVlZHVwICh3aXRoIGEg
cCB2YWx1ZSBvZiAwLjAwMDEpIGluIE1ldGFsIGNvbXBpbGUgdGltZXMKKyAgICAgICAgb24gY29t
cHV0ZV9ib2lkcy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OmFwcGVuZFJpZ2h0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVuZExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dGFrZUxhc3RWYWx1ZUFu
ZE51bGxhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp0YWtlTGFzdExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQpOgorCiAyMDE5LTA4
LTAxICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtU
ZXh0IGF1dG9zaXppbmddIFtpUGFkT1NdIEFkZCB0YXJnZXRlZCBoYWNrcyB0byBhZGRyZXNzIHNv
bWUgcmVtYWluaW5nIHRleHQgYXV0b3NpemluZyBpc3N1ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDgxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1LDIwICsxNTUsMzcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygidmFyaWFibGUiLCBtX3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQogCisgICAg
ZW51bSBjbGFzcyBOdWxsYWJpbGl0eSA6IHVpbnQ4X3QgeworICAgICAgICBOb3ROdWxsLAorICAg
ICAgICBDYW5CZU51bGwKKyAgICB9OworCiAgICAgc3RydWN0IFN0YWNrSXRlbSB7CiAgICAgICAg
IFN0cmluZyB2YWx1ZTsKICAgICAgICAgU3RyaW5nIGxlZnRWYWx1ZTsKKyAgICAgICAgTnVsbGFi
aWxpdHkgdmFsdWVOdWxsYWJpbGl0eTsKKyAgICAgICAgTnVsbGFiaWxpdHkgbGVmdFZhbHVlTnVs
bGFiaWxpdHk7CiAgICAgfTsKIAotICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1ZShBU1Q6OkV4cHJl
c3Npb24mLCBTdHJpbmcgdmFsdWUpCisgICAgLy8gVGhpcyBpcyB0aGUgaW1wb3J0YW50IGRhdGEg
ZmxvdyBzdGVwIHdoZXJlIHdlIGNhbiB0YWtlIHRoZSBudWxsYWJpbGl0eSBvZiBhbiBsdmFsdWUK
KyAgICAvLyBhbmQgdHJhbnNmZXIgaXQgaW50byB0aGUgbnVsbGFiaWxpdHkgb2YgYW4gcnZhbHVl
LiBUaGlzIGlzIGNvbnZleWVkIGluIE1ha2VQb2ludGVyRXhwcmVzc2lvbgorICAgIC8vIGFuZCBE
ZXJlZmVyZW5jZUV4cHJlc3Npb24uIE1ha2VQb2ludGVyRXhwcmVzc2lvbiB3aWxsIHRyeSB0byBw
cm9kdWNlIHJ2YWx1ZXMgd2hpY2ggYXJlCisgICAgLy8gbm9uLW51bGwsIGFuZCBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24gd2lsbCB0YWtlIGEgbm9uLW51bGwgcnZhbHVlIGFuZCB0cnkgdG8gcHJvZHVj
ZQorICAgIC8vIGEgbm9uLW51bGwgbHZhbHVlLgorICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1ZVdp
dGhOdWxsYWJpbGl0eShBU1Q6OkV4cHJlc3Npb24mLCBTdHJpbmcgdmFsdWUsIE51bGxhYmlsaXR5
IG51bGxhYmlsaXR5KQorICAgIHsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoeyBXVEZNb3ZlKHZh
bHVlKSwgU3RyaW5nKCksIG51bGxhYmlsaXR5LCBOdWxsYWJpbGl0eTo6Q2FuQmVOdWxsIH0pOwor
ICAgIH0KKworICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJl
c3Npb24sIFN0cmluZyB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RG
TW92ZSh2YWx1ZSksIFN0cmluZygpIH0pOworICAgICAgICBhcHBlbmRSaWdodFZhbHVlV2l0aE51
bGxhYmlsaXR5KGV4cHJlc3Npb24sIFdURk1vdmUodmFsdWUpLCBOdWxsYWJpbGl0eTo6Q2FuQmVO
dWxsKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24m
IGV4cHJlc3Npb24sIFN0cmluZyB2YWx1ZSwgU3RyaW5nIGxlZnRWYWx1ZSkKKyAgICB2b2lkIGFw
cGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFN0cmluZyB2YWx1ZSwg
U3RyaW5nIGxlZnRWYWx1ZSwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHkpCiAgICAgewogICAgICAg
ICBBU1NFUlRfVU5VU0VEKGV4cHJlc3Npb24sIGV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS5s
ZWZ0QWRkcmVzc1NwYWNlKCkpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IFdURk1vdmUodmFs
dWUpLCBXVEZNb3ZlKGxlZnRWYWx1ZSkgfSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RG
TW92ZSh2YWx1ZSksIFdURk1vdmUobGVmdFZhbHVlKSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCwg
bnVsbGFiaWxpdHkgfSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHRha2VMYXN0VmFsdWUoKQpAQCAt
MTc2LDExICsxOTMsMTggQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQobV9zdGFjay5sYXN0
KCkudmFsdWUpOwogICAgICAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpLnZhbHVlOwogICAg
IH0KKyAgICBzdGQ6OnBhaXI8U3RyaW5nLCBOdWxsYWJpbGl0eT4gdGFrZUxhc3RWYWx1ZUFuZE51
bGxhYmlsaXR5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0YWNrLmxhc3QoKS52YWx1ZSk7
CisgICAgICAgIGF1dG8gbGFzdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgcmV0dXJu
IHsgbGFzdC52YWx1ZSwgbGFzdC52YWx1ZU51bGxhYmlsaXR5IH07CisgICAgfQogCi0gICAgU3Ry
aW5nIHRha2VMYXN0TGVmdFZhbHVlKCkKKyAgICBzdGQ6OnBhaXI8U3RyaW5nLCBOdWxsYWJpbGl0
eT4gdGFrZUxhc3RMZWZ0VmFsdWUoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fc3RhY2subGFz
dCgpLmxlZnRWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCkubGVmdFZh
bHVlOworICAgICAgICBhdXRvIGxhc3QgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIHJl
dHVybiB7IGxhc3QubGVmdFZhbHVlLCBsYXN0LmxlZnRWYWx1ZU51bGxhYmlsaXR5IH07CiAgICAg
fQogCiAgICAgZW51bSBjbGFzcyBCcmVha0NvbnRleHQgewpAQCAtNDk5LDcgKzUyMyw3IEBAIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgInRocmVhZCAi
LCBtYW5nbGVkVHlwZU5hbWUsICIqICIsIHBvaW50ZXJOYW1lLCAiID0gJiIsIHRha2VMYXN0VmFs
dWUoKSwgIi0+IiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KGds
b2JhbFZhcmlhYmxlUmVmZXJlbmNlLnN0cnVjdEZpZWxkKCkpLCAiO1xuIiwKICAgICAgICAgbWFu
Z2xlZFR5cGVOYW1lLCAnICcsIHZhbHVlTmFtZSwgIiA9ICIsICIqIiwgcG9pbnRlck5hbWUsICI7
XG4iCiAgICAgKTsKLSAgICBhcHBlbmRMZWZ0VmFsdWUoZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2Us
IHZhbHVlTmFtZSwgcG9pbnRlck5hbWUpOworICAgIGFwcGVuZExlZnRWYWx1ZShnbG9iYWxWYXJp
YWJsZVJlZmVyZW5jZSwgdmFsdWVOYW1lLCBwb2ludGVyTmFtZSwgTnVsbGFiaWxpdHk6Ok5vdE51
bGwpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJbmRl
eEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKQEAgLTUzNSwxMSArNTU5LDE0IEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhw
cmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24u
bGVmdCgpKTsKLSAgICBhdXRvIHBvaW50ZXJOYW1lID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKKyAg
ICBhdXRvIFtwb2ludGVyTmFtZSwgbnVsbGFiaWxpdHldID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsK
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0g
ICAgYXV0byByaWdodE5hbWUgPSB0YWtlTGFzdFZhbHVlKCk7Ci0gICAgbV9zdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKCJpZiAoIiwgcG9pbnRlck5hbWUsICIpICoiLCBwb2ludGVyTmFtZSwg
IiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpOwotICAgIGFwcGVuZFJpZ2h0VmFsdWUoYXNzaWdubWVu
dEV4cHJlc3Npb24sIHJpZ2h0TmFtZSk7CisgICAgYXV0byBbcmlnaHROYW1lLCByaWdodE51bGxh
YmlsaXR5XSA9IHRha2VMYXN0VmFsdWVBbmROdWxsYWJpbGl0eSgpOworICAgIGlmIChudWxsYWJp
bGl0eSA9PSBOdWxsYWJpbGl0eTo6Q2FuQmVOdWxsKQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoImlmICgiLCBwb2ludGVyTmFtZSwgIikgKiIsIHBvaW50ZXJOYW1lLCAi
ID0gIiwgcmlnaHROYW1lLCAiO1xuIik7CisgICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoIioiLCBwb2ludGVyTmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtc
biIpOworICAgIGFwcGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkoYXNzaWdubWVudEV4cHJl
c3Npb24sIHJpZ2h0TmFtZSwgcmlnaHROdWxsYWJpbGl0eSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lv
bikKQEAgLTU3NywxNiArNjA0LDE5IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRlcmVm
ZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKLSAgICBhdXRvIHJp
Z2h0ID0gdGFrZUxhc3RWYWx1ZSgpOwotICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgYXV0byBwb2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSgpOworICAgIGF1dG8gW2lucHV0UG9pbnRlciwgbnVsbGFiaWxpdHldID0gdGFr
ZUxhc3RWYWx1ZUFuZE51bGxhYmlsaXR5KCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIGF1dG8gcmVzdWx0UG9pbnRlciA9IGdlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgK
LSAgICAgICAgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVz
c2lvbi5wb2ludGVyKCkucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHBvaW50ZXJOYW1lLCAiID0gIiwg
cmlnaHQsICI7XG4iLAotICAgICAgICBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICI7
XG4iLAotICAgICAgICAiaWYgKCIsIHBvaW50ZXJOYW1lLCAiKSAiLCB2YXJpYWJsZU5hbWUsICIg
PSAqIiwgcmlnaHQsICI7XG4iLAotICAgICAgICAiZWxzZSAiLCB2YXJpYWJsZU5hbWUsICIgPSB7
IH07XG4iCi0gICAgKTsKLSAgICBhcHBlbmRMZWZ0VmFsdWUoZGVyZWZlcmVuY2VFeHByZXNzaW9u
LCB2YXJpYWJsZU5hbWUsIHBvaW50ZXJOYW1lKTsKKyAgICAgICAgbV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkucmVzb2x2ZWRUeXBl
KCkpLCAnICcsIHJlc3VsdFBvaW50ZXIsICIgPSAiLCBpbnB1dFBvaW50ZXIsICI7XG4iLAorICAg
ICAgICBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9u
LnJlc29sdmVkVHlwZSgpKSwgJyAnLCByZXN1bHRWYWx1ZSwgIjtcbiIpOworICAgIGlmIChudWxs
YWJpbGl0eSA9PSBOdWxsYWJpbGl0eTo6Q2FuQmVOdWxsKSB7CisgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICJpZiAoIiwgcmVzdWx0UG9pbnRlciwg
IikgIiwgcmVzdWx0VmFsdWUsICIgPSAqIiwgaW5wdXRQb2ludGVyLCAiO1xuIiwKKyAgICAgICAg
ICAgICJlbHNlICIsIHJlc3VsdFZhbHVlLCAiID0geyB9O1xuIik7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChyZXN1bHRWYWx1ZSwgIiA9ICoiLCBp
bnB1dFBvaW50ZXIsICI7XG4iKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUoZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLCByZXN1bHRWYWx1ZSwgcmVzdWx0UG9pbnRlciwgbnVsbGFiaWxpdHkpOwogfQogCiB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lv
biYgbG9naWNhbEV4cHJlc3Npb24pCkBAIC02MzUsMTEgKzY2NSwxMSBAQCB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgICAgICAiZWxzZSAiLCB2YXJpYWJs
ZU5hbWUsICIgPSB7IG51bGxwdHIsIDAgfTtcbiIKICAgICAgICAgKTsKICAgICB9IGVsc2UgaWYg
KGlzPEFTVDo6QXJyYXlUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1
ZSgpLnJlc29sdmVkVHlwZSgpKSkgewotICAgICAgICBhdXRvIGxWYWx1ZSA9IHRha2VMYXN0TGVm
dFZhbHVlKCk7CisgICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RMZWZ0VmFsdWUoKS5maXJz
dDsKICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkpOwog
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWFuZ2xlZFR5cGVOYW1lLCAn
ICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgIiwgbFZhbHVlLCAiLT5kYXRhKCksICIsIGFycmF5VHlw
ZS5udW1FbGVtZW50cygpLCAiIH07XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIGxW
YWx1ZSA9IHRha2VMYXN0TGVmdFZhbHVlKCk7CisgICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxh
c3RMZWZ0VmFsdWUoKS5maXJzdDsKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1ZSwg
IiwgMSB9O1xuIik7CiAgICAgfQogICAgIGFwcGVuZFJpZ2h0VmFsdWUobWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKQEAgLTY0OCwxMCArNjc4LDEwIEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJF
eHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Np
b24ubGVmdFZhbHVlKCkpOwotICAgIGF1dG8gcG9pbnRlciA9IHRha2VMYXN0TGVmdFZhbHVlKCk7
CisgICAgYXV0byBbcG9pbnRlciwgbnVsbGFiaWxpdHldID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsK
ICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAg
IG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJs
ZU5hbWUsICIgPSAiLCBwb2ludGVyLCAiO1xuIik7Ci0gICAgYXBwZW5kUmlnaHRWYWx1ZShtYWtl
UG9pbnRlckV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZVdp
dGhOdWxsYWJpbGl0eShtYWtlUG9pbnRlckV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSwgbnVsbGFi
aWxpdHkpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikKQEAgLTY5MCw3ICs3MjAsNyBAQCB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1f
dmFyaWFibGVNYXBwaW5nLmVuZCgpKTsKICAgICBhdXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ0
aHJlYWQgIiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHZhcmlhYmxlUmVmZXJlbmNl
LnJlc29sdmVkVHlwZSgpKSwgIiogIiwgcG9pbnRlck5hbWUsICIgPSAmIiwgaXRlcmF0b3ItPnZh
bHVlLCAiO1xuIik7Ci0gICAgYXBwZW5kTGVmdFZhbHVlKHZhcmlhYmxlUmVmZXJlbmNlLCBpdGVy
YXRvci0+dmFsdWUsIHBvaW50ZXJOYW1lKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUodmFyaWFibGVS
ZWZlcmVuY2UsIGl0ZXJhdG9yLT52YWx1ZSwgcG9pbnRlck5hbWUsIE51bGxhYmlsaXR5OjpOb3RO
dWxsKTsKIH0KIAogU3RyaW5nIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3RhbnRFeHBy
ZXNzaW9uU3RyaW5nKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24p
Cg==
</data>
<flag name="review"
          id="391124"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375358</attachid>
            <date>2019-08-01 15:32:23 -0700</date>
            <delta_ts>2019-08-01 16:13:43 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>10134</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODEyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE5LTA4LTAxICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gc2ltcGxlIG51
bGxwdHIgY2hlY2sgZWxpbWluYXRpb24gdXNpbmcgYmFzaWMgZGF0YSBmbG93IGFuYWx5c2lzIHdo
ZW4gZ2VuZXJhdGluZyBtZXRhbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDAzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBNeWxlcyBDLiBN
YXhmaWVsZC4KKworICAgICAgICBXaGVuIGRvaW5nIG1ldGFsIGNvZGUgZ2VuZXJhdGlvbiwgd2Ug
ZnJlcXVlbnRseSBrbm93IHdoZXRoZXIgc29tZXRoaW5nCisgICAgICAgIGlzIG51bGwgb3Igbm90
LiBUaGlzIHBhdGNoIGRvZXMgYSBiYXNpYyBwcm9wYWdhdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9u
CisgICAgICAgIHRvIGF2b2lkIGVtaXR0aW5nIGV4Y2Vzc2l2ZSBudWxsIGNoZWNrcyBpbiB0aGUg
Z2VuZXJhdGVkIE1ldGFsIGNvZGUuCisgICAgICAgIFRoaXMgaXMgYSA2JSBzcGVlZHVwICh3aXRo
IGEgcCB2YWx1ZSBvZiAwLjAwMDEpIGluIE1ldGFsIGNvbXBpbGUgdGltZXMKKyAgICAgICAgb24g
Y29tcHV0ZV9ib2lkcy4KKworICAgICAgICBBbiBleGFtcGxlIG9mIGEgbnVsbCBjaGVjayB3ZSBu
b3cgZWxpbWluYXRlIGlzOgorICAgICAgICBgYGAKKyAgICAgICAgaW50IHg7CisgICAgICAgIHRo
cmVhZCBpbnQqIHB0ciA9ICZ4OyAvLyBXZSBrbm93IHRoYXQgdGhlIGx2YWx1ZSBmb3IgIngiIGlz
IG5vbi1udWxsLCBzbyB3ZSBwcm9kdWNlIGEgbm9uLW51bGwgcnZhbHVlIGhlcmUuCisgICAgICAg
ICpwdHIgPSA0MjsgLy8gV2Uga25vdyB0aGF0IHRoZSAicHRyIiBydmFsdWUgaXMgbm9uLW51bGws
IHNvIHdlIG9taXQgdGhlIG51bGwgY2hlY2suCisgICAgICAgIGBgYAorCisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6YXBwZW5k
UmlnaHRWYWx1ZVdpdGhOdWxsYWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6YXBwZW5kUmlnaHRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6YXBwZW5k
TGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp0YWtlTGFzdFZhbHVlQW5kTnVsbGFiaWxpdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnRha2VMYXN0TGVm
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdCk6CisKIDIwMTktMDgtMDEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9o
c2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW1RleHQgYXV0b3NpemluZ10gW2lQYWRPU10gQWRk
IHRhcmdldGVkIGhhY2tzIHRvIGFkZHJlc3Mgc29tZSByZW1haW5pbmcgdGV4dCBhdXRvc2l6aW5n
IGlzc3VlcwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9u
IDI0ODEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsMjAgKzE1NSw0MiBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJ2YXJpYWJsZSIsIG1fdmFy
aWFibGVDb3VudCsrKTsKICAgICB9CiAKKyAgICBlbnVtIGNsYXNzIE51bGxhYmlsaXR5IDogdWlu
dDhfdCB7CisgICAgICAgIE5vdE51bGwsCisgICAgICAgIENhbkJlTnVsbAorICAgIH07CisKICAg
ICBzdHJ1Y3QgU3RhY2tJdGVtIHsKICAgICAgICAgU3RyaW5nIHZhbHVlOwogICAgICAgICBTdHJp
bmcgbGVmdFZhbHVlOworICAgICAgICBOdWxsYWJpbGl0eSB2YWx1ZU51bGxhYmlsaXR5OworICAg
ICAgICBOdWxsYWJpbGl0eSBsZWZ0VmFsdWVOdWxsYWJpbGl0eTsKKyAgICB9OworCisgICAgc3Ry
dWN0IFN0YWNrVmFsdWUgeworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIE51bGxhYmls
aXR5IG51bGxhYmlsaXR5OwogICAgIH07CiAKLSAgICB2b2lkIGFwcGVuZFJpZ2h0VmFsdWUoQVNU
OjpFeHByZXNzaW9uJiwgU3RyaW5nIHZhbHVlKQorICAgIC8vIFRoaXMgaXMgdGhlIGltcG9ydGFu
dCBkYXRhIGZsb3cgc3RlcCB3aGVyZSB3ZSBjYW4gdGFrZSB0aGUgbnVsbGFiaWxpdHkgb2YgYW4g
bHZhbHVlCisgICAgLy8gYW5kIHRyYW5zZmVyIGl0IGludG8gdGhlIG51bGxhYmlsaXR5IG9mIGFu
IHJ2YWx1ZS4gVGhpcyBpcyBjb252ZXllZCBpbiBNYWtlUG9pbnRlckV4cHJlc3Npb24KKyAgICAv
LyBhbmQgRGVyZWZlcmVuY2VFeHByZXNzaW9uLiBNYWtlUG9pbnRlckV4cHJlc3Npb24gd2lsbCB0
cnkgdG8gcHJvZHVjZSBydmFsdWVzIHdoaWNoIGFyZQorICAgIC8vIG5vbi1udWxsLCBhbmQgRGVy
ZWZlcmVuY2VFeHByZXNzaW9uIHdpbGwgdGFrZSBhIG5vbi1udWxsIHJ2YWx1ZSBhbmQgdHJ5IHRv
IHByb2R1Y2UKKyAgICAvLyBhIG5vbi1udWxsIGx2YWx1ZS4KKyAgICB2b2lkIGFwcGVuZFJpZ2h0
VmFsdWVXaXRoTnVsbGFiaWxpdHkoQVNUOjpFeHByZXNzaW9uJiwgU3RyaW5nIHZhbHVlLCBOdWxs
YWJpbGl0eSBudWxsYWJpbGl0eSkKICAgICB7Ci0gICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RG
TW92ZSh2YWx1ZSksIFN0cmluZygpIH0pOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IFdURk1v
dmUodmFsdWUpLCBTdHJpbmcoKSwgbnVsbGFiaWxpdHksIE51bGxhYmlsaXR5OjpDYW5CZU51bGwg
fSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRMZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBTdHJpbmcgdmFsdWUsIFN0cmluZyBsZWZ0VmFsdWUpCisgICAgdm9pZCBhcHBl
bmRSaWdodFZhbHVlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgU3RyaW5nIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgYXBwZW5kUmlnaHRWYWx1ZVdpdGhOdWxsYWJpbGl0eShleHByZXNzaW9u
LCBXVEZNb3ZlKHZhbHVlKSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCk7CisgICAgfQorCisgICAg
dm9pZCBhcHBlbmRMZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBTdHJpbmcg
dmFsdWUsIFN0cmluZyBsZWZ0VmFsdWUsIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5KQogICAgIHsK
ICAgICAgICAgQVNTRVJUX1VOVVNFRChleHByZXNzaW9uLCBleHByZXNzaW9uLnR5cGVBbm5vdGF0
aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKTsKLSAgICAgICAgbV9zdGFjay5hcHBlbmQoeyBXVEZN
b3ZlKHZhbHVlKSwgV1RGTW92ZShsZWZ0VmFsdWUpIH0pOworICAgICAgICBtX3N0YWNrLmFwcGVu
ZCh7IFdURk1vdmUodmFsdWUpLCBXVEZNb3ZlKGxlZnRWYWx1ZSksIE51bGxhYmlsaXR5OjpDYW5C
ZU51bGwsIG51bGxhYmlsaXR5IH0pOwogICAgIH0KIAogICAgIFN0cmluZyB0YWtlTGFzdFZhbHVl
KCkKQEAgLTE3NywxMCArMTk5LDE4IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG1fc3Rh
Y2sudGFrZUxhc3QoKS52YWx1ZTsKICAgICB9CiAKLSAgICBTdHJpbmcgdGFrZUxhc3RMZWZ0VmFs
dWUoKQorICAgIFN0YWNrVmFsdWUgdGFrZUxhc3RWYWx1ZUFuZE51bGxhYmlsaXR5KCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3N0YWNrLmxhc3QoKS52YWx1ZSk7CisgICAgICAgIGF1dG8gbGFz
dCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuIHsgbGFzdC52YWx1ZSwgbGFz
dC52YWx1ZU51bGxhYmlsaXR5IH07CisgICAgfQorCisgICAgU3RhY2tWYWx1ZSB0YWtlTGFzdExl
ZnRWYWx1ZSgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9zdGFjay5sYXN0KCkubGVmdFZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKS5sZWZ0VmFsdWU7CisgICAgICAg
IGF1dG8gbGFzdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuIHsgbGFzdC5s
ZWZ0VmFsdWUsIGxhc3QubGVmdFZhbHVlTnVsbGFiaWxpdHkgfTsKICAgICB9CiAKICAgICBlbnVt
IGNsYXNzIEJyZWFrQ29udGV4dCB7CkBAIC00OTksNyArNTI5LDcgQEAgdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgICAgICAidGhyZWFkICIsIG1hbmdsZWRUeXBl
TmFtZSwgIiogIiwgcG9pbnRlck5hbWUsICIgPSAmIiwgdGFrZUxhc3RWYWx1ZSgpLCAiLT4iLCBt
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoZ2xvYmFsVmFyaWFibGVS
ZWZlcmVuY2Uuc3RydWN0RmllbGQoKSksICI7XG4iLAogICAgICAgICBtYW5nbGVkVHlwZU5hbWUs
ICcgJywgdmFsdWVOYW1lLCAiID0gIiwgIioiLCBwb2ludGVyTmFtZSwgIjtcbiIKICAgICApOwot
ICAgIGFwcGVuZExlZnRWYWx1ZShnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZSwgdmFsdWVOYW1lLCBw
b2ludGVyTmFtZSk7CisgICAgYXBwZW5kTGVmdFZhbHVlKGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNl
LCB2YWx1ZU5hbWUsIHBvaW50ZXJOYW1lLCBOdWxsYWJpbGl0eTo6Tm90TnVsbCk7CiB9CiAKIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYg
aW5kZXhFeHByZXNzaW9uKQpAQCAtNTM1LDExICs1NjUsMTQgQEAgdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQogewog
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOwotICAg
IGF1dG8gcG9pbnRlck5hbWUgPSB0YWtlTGFzdExlZnRWYWx1ZSgpOworICAgIGF1dG8gW3BvaW50
ZXJOYW1lLCBudWxsYWJpbGl0eV0gPSB0YWtlTGFzdExlZnRWYWx1ZSgpOwogICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKLSAgICBhdXRvIHJpZ2h0
TmFtZSA9IHRha2VMYXN0VmFsdWUoKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoImlmICgiLCBwb2ludGVyTmFtZSwgIikgKiIsIHBvaW50ZXJOYW1lLCAiID0gIiwgcmlnaHRO
YW1lLCAiO1xuIik7Ci0gICAgYXBwZW5kUmlnaHRWYWx1ZShhc3NpZ25tZW50RXhwcmVzc2lvbiwg
cmlnaHROYW1lKTsKKyAgICBhdXRvIFtyaWdodE5hbWUsIHJpZ2h0TnVsbGFiaWxpdHldID0gdGFr
ZUxhc3RWYWx1ZUFuZE51bGxhYmlsaXR5KCk7CisgICAgaWYgKG51bGxhYmlsaXR5ID09IE51bGxh
YmlsaXR5OjpDYW5CZU51bGwpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgiaWYgKCIsIHBvaW50ZXJOYW1lLCAiKSAqIiwgcG9pbnRlck5hbWUsICIgPSAiLCByaWdodE5h
bWUsICI7XG4iKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgiKiIsIHBvaW50ZXJOYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIik7CisgICAgYXBw
ZW5kUmlnaHRWYWx1ZVdpdGhOdWxsYWJpbGl0eShhc3NpZ25tZW50RXhwcmVzc2lvbiwgcmlnaHRO
YW1lLCByaWdodE51bGxhYmlsaXR5KTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQpAQCAtNTc3LDE2
ICs2MTAsMTkgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRl
cmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOwotICAgIGF1dG8gcmlnaHQgPSB0YWtlTGFz
dFZhbHVlKCk7Ci0gICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKTsKLSAgICBhdXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7
CisgICAgYXV0byBbaW5wdXRQb2ludGVyLCBudWxsYWJpbGl0eV0gPSB0YWtlTGFzdFZhbHVlQW5k
TnVsbGFiaWxpdHkoKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CisgICAgYXV0byByZXN1bHRQb2ludGVyID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lKCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICBtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIo
KS5yZXNvbHZlZFR5cGUoKSksICcgJywgcG9pbnRlck5hbWUsICIgPSAiLCByaWdodCwgIjtcbiIs
Ci0gICAgICAgIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShkZXJlZmVyZW5jZUV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIsCi0gICAgICAg
ICJpZiAoIiwgcG9pbnRlck5hbWUsICIpICIsIHZhcmlhYmxlTmFtZSwgIiA9ICoiLCByaWdodCwg
IjtcbiIsCi0gICAgICAgICJlbHNlICIsIHZhcmlhYmxlTmFtZSwgIiA9IHsgfTtcbiIKLSAgICAp
OwotICAgIGFwcGVuZExlZnRWYWx1ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24sIHZhcmlhYmxlTmFt
ZSwgcG9pbnRlck5hbWUpOworICAgICAgICBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
ZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKS5yZXNvbHZlZFR5cGUoKSksICcgJywgcmVz
dWx0UG9pbnRlciwgIiA9ICIsIGlucHV0UG9pbnRlciwgIjtcbiIsCisgICAgICAgIG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBl
KCkpLCAnICcsIHJlc3VsdFZhbHVlLCAiO1xuIik7CisgICAgaWYgKG51bGxhYmlsaXR5ID09IE51
bGxhYmlsaXR5OjpDYW5CZU51bGwpIHsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxl
QXBwZW5kKAorICAgICAgICAgICAgImlmICgiLCByZXN1bHRQb2ludGVyLCAiKSAiLCByZXN1bHRW
YWx1ZSwgIiA9ICoiLCBpbnB1dFBvaW50ZXIsICI7XG4iLAorICAgICAgICAgICAgImVsc2UgIiwg
cmVzdWx0VmFsdWUsICIgPSB7IH07XG4iKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKHJlc3VsdFZhbHVlLCAiID0gKiIsIGlucHV0UG9pbnRlciwg
IjtcbiIpOworICAgIGFwcGVuZExlZnRWYWx1ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24sIHJlc3Vs
dFZhbHVlLCByZXN1bHRQb2ludGVyLCBudWxsYWJpbGl0eSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhw
cmVzc2lvbikKQEAgLTYzNSwxMSArNjcxLDExIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1QKICAgICAgICAgICAgICJlbHNlICIsIHZhcmlhYmxlTmFtZSwgIiA9IHsg
bnVsbHB0ciwgMCB9O1xuIgogICAgICAgICApOwogICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpBcnJh
eVR5cGU+KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRU
eXBlKCkpKSB7Ci0gICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKKyAg
ICAgICAgYXV0byBsVmFsdWUgPSB0YWtlTGFzdExlZnRWYWx1ZSgpLnZhbHVlOwogICAgICAgICBh
dXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4obWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKSk7CiAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVO
YW1lLCAiID0geyAiLCBsVmFsdWUsICItPmRhdGEoKSwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRz
KCksICIgfTtcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxh
c3RMZWZ0VmFsdWUoKTsKKyAgICAgICAgYXV0byBsVmFsdWUgPSB0YWtlTGFzdExlZnRWYWx1ZSgp
LnZhbHVlOwogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWFuZ2xlZFR5
cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgIiwgbFZhbHVlLCAiLCAxIH07XG4iKTsK
ICAgICB9CiAgICAgYXBwZW5kUmlnaHRWYWx1ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LCB2YXJpYWJsZU5hbWUpOwpAQCAtNjQ4LDEwICs2ODQsMTAgQEAgdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7
CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSk7Ci0gICAgYXV0byBwb2ludGVyID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKKyAgICBhdXRvIFtw
b2ludGVyLCBudWxsYWJpbGl0eV0gPSB0YWtlTGFzdExlZnRWYWx1ZSgpOwogICAgIGF1dG8gdmFy
aWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgbV9zdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShtYWtlUG9p
bnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIs
IHBvaW50ZXIsICI7XG4iKTsKLSAgICBhcHBlbmRSaWdodFZhbHVlKG1ha2VQb2ludGVyRXhwcmVz
c2lvbiwgdmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlV2l0aE51bGxhYmlsaXR5
KG1ha2VQb2ludGVyRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lLCBudWxsYWJpbGl0eSk7CiB9CiAK
IHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24mKQpAQCAtNjkwLDcgKzcyNiw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1QKICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV92YXJpYWJsZU1hcHBp
bmcuZW5kKCkpOwogICAgIGF1dG8gcG9pbnRlck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInRocmVhZCAiLCBtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodmFyaWFibGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBl
KCkpLCAiKiAiLCBwb2ludGVyTmFtZSwgIiA9ICYiLCBpdGVyYXRvci0+dmFsdWUsICI7XG4iKTsK
LSAgICBhcHBlbmRMZWZ0VmFsdWUodmFyaWFibGVSZWZlcmVuY2UsIGl0ZXJhdG9yLT52YWx1ZSwg
cG9pbnRlck5hbWUpOworICAgIGFwcGVuZExlZnRWYWx1ZSh2YXJpYWJsZVJlZmVyZW5jZSwgaXRl
cmF0b3ItPnZhbHVlLCBwb2ludGVyTmFtZSwgTnVsbGFiaWxpdHk6Ok5vdE51bGwpOwogfQogCiBT
dHJpbmcgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpjb25zdGFudEV4cHJlc3Npb25TdHJpbmco
QVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikK
</data>

          </attachment>
      

    </bug>

</bugzilla>