<?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>193434</bug_id>
          
          <creation_ts>2019-01-14 21:37:30 -0800</creation_ts>
          <short_desc>[WHLSL] Implement the loop checker</short_desc>
          <delta_ts>2019-01-15 19:27:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1494529</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-14 21:37:30 -0800</bug_when>
    <thetext>[WHLSL] Implement the loop checker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494530</commentid>
    <comment_count>1</comment_count>
      <attachid>359135</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-14 21:38:22 -0800</bug_when>
    <thetext>Created attachment 359135
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494538</commentid>
    <comment_count>2</comment_count>
      <attachid>359135</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-14 22:10:54 -0800</bug_when>
    <thetext>Comment on attachment 359135
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.h:32
&gt; +#include &quot;WHLSLFunctionAttribute.h&quot;
&gt; +#include &quot;WHLSLSemantic.h&quot;
&gt; +#include &quot;WHLSLTypeArgument.h&quot;

These can be deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494542</commentid>
    <comment_count>3</comment_count>
      <attachid>359135</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-14 22:28:25 -0800</bug_when>
    <thetext>Comment on attachment 359135
Patch

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

&gt; Source/WebCore/ChangeLog:6
&gt; +        This is a translation of https://github.com/gpuweb/WHLSL/blob/master/Source/LoopChecker.mjs into C++.

Need a &quot;reviewed by&quot; line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494690</commentid>
    <comment_count>4</comment_count>
      <attachid>359135</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-01-15 10:16:19 -0800</bug_when>
    <thetext>Comment on attachment 359135
Patch

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

r=me
I understand that you are translating the reference implementation file by file for simplicity, but I am a bit wary of the distance between both implementations on the one hand and the spec on the other. I guess I will try to update at least the reference implementation later on to follow the structure of the spec (in particular doing all of the type checking and validation in one pass, using the idea of &quot;behaviors&quot; aka types for statements that I used in the spec).

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:53
&gt; +        if (m_loopDepth || m_switchDepth) {

Not sure this part is necessary: I don&apos;t think we allow function definitions within the bodies of other functions anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494762</commentid>
    <comment_count>5</comment_count>
      <attachid>359135</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-15 12:33:31 -0800</bug_when>
    <thetext>Comment on attachment 359135
Patch

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

LGTM

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:44
&gt; +class LoopChecker : public Visitor {

I feel like a comment explaining what this does would be helpful. &quot;findHighZombies&quot; is not the most intuitive name.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:53
&gt;&gt; +        if (m_loopDepth || m_switchDepth) {
&gt; 
&gt; Not sure this part is necessary: I don&apos;t think we allow function definitions within the bodies of other functions anyway.

Perhaps an assert?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:54
&gt; +            setError();

I haven&apos;t reviewed other changes, so this is just a general comment, but don&apos;t we want error messages here?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:64
&gt; +        ++m_loopDepth;

style: Maybe use:
SetForScope scope(m_loopDepth, m_loopDepth + 1) ?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:72
&gt; +        ++m_loopDepth;

ditto

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:82
&gt; +        WTF::visit(WTF::makeVisitor([&amp;](AST::VariableDeclarationsStatement&amp; variableDeclarationsStatement) {

style: maybe auto&amp;?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:84
&gt; +        }, [&amp;](UniqueRef&lt;AST::Expression&gt;&amp; expression) {

style: maybe auto&amp;?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:92
&gt; +        ++m_loopDepth;

ditto about SetForScope

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:102
&gt; +        ++m_switchDepth;

ditto SetForScope

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:149
&gt; +}
&gt; +
&gt; +}

Should we add the `// namespace X` comments here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494886</commentid>
    <comment_count>6</comment_count>
      <attachid>359135</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-15 16:23:58 -0800</bug_when>
    <thetext>Comment on attachment 359135
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:54
&gt;&gt; +            setError();
&gt; 
&gt; I haven&apos;t reviewed other changes, so this is just a general comment, but don&apos;t we want error messages here?

Yep.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:82
&gt;&gt; +        WTF::visit(WTF::makeVisitor([&amp;](AST::VariableDeclarationsStatement&amp; variableDeclarationsStatement) {
&gt; 
&gt; style: maybe auto&amp;?

Visitor needs to know the parameter types.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:149
&gt;&gt; +}
&gt; 
&gt; Should we add the `// namespace X` comments here?

I&apos;ll do this in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494888</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-15 16:27:06 -0800</bug_when>
    <thetext>Committed r240018: &lt;https://trac.webkit.org/changeset/240018&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494890</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-15 16:28:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/47301321&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494894</commentid>
    <comment_count>9</comment_count>
      <attachid>359135</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-15 16:33:49 -0800</bug_when>
    <thetext>Comment on attachment 359135
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:149
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; Should we add the `// namespace X` comments here?
&gt; 
&gt; I&apos;ll do this in a follow-up patch.

https://bugs.webkit.org/show_bug.cgi?id=193471</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494901</commentid>
    <comment_count>10</comment_count>
      <attachid>359135</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-15 16:45:21 -0800</bug_when>
    <thetext>Comment on attachment 359135
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLoopChecker.cpp:64
&gt;&gt; +        ++m_loopDepth;
&gt; 
&gt; style: Maybe use:
&gt; SetForScope scope(m_loopDepth, m_loopDepth + 1) ?

This may have been bad advice. I don&apos;t think this matters ATM, but if we encounter an AST node that ++m_XYZ, but doesn&apos;t --m_XYZ, then my suggestion of using SetForScope is not equivalent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494983</commentid>
    <comment_count>11</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-15 19:27:18 -0800</bug_when>
    <thetext>Committed r240026: &lt;https://trac.webkit.org/changeset/240026&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359135</attachid>
            <date>2019-01-14 21:38:22 -0800</date>
            <delta_ts>2019-01-15 12:33:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193434-20190114213822.patch</filename>
            <type>text/plain</type>
            <size>10820</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5OTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI3MGFmMzIyMTE4Yzcy
MGJjNDcyNTY0MjVlNzhlMzNmNmYzYWY2Yy4uMTg3OTA0NTc1NzM0ZDNjZjU2YjZhYjY4ODFkZTA5
YTU4YjdkMTRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE5LTAxLTE0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIGxvb3AgY2hlY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzNDM0CisKKyAgICAgICAgVGhpcyBpcyBhIHRyYW5zbGF0aW9u
IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvV0hMU0wvYmxvYi9tYXN0ZXIvU291cmNlL0xv
b3BDaGVja2VyLm1qcyBpbnRvIEMrKy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBp
dCBpc24ndCBob29rZWQgdXAgeWV0LiBOb3QgZW5vdWdoIG9mIHRoZSBjb21waWxlciBleGlzdHMg
dG8gaGF2ZSBhbnkgbWVhbmluZ2Z1bCBzb3J0CisgICAgICAgIG9mIHRlc3QuIFdoZW4gZW5vdWdo
IG9mIHRoZSBjb21waWxlciBpcyBwcmVzZW50LCBJJ2xsIHBvcnQgdGhlIHJlZmVyZW5jZSBpbXBs
ZW1lbnRhdGlvbidzIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTExvb3BDaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
ZmluZEhpZ2hab21iaWVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExv
b3BDaGVja2VyLmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxOS0wMS0xNCAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBPbmx5IHJ1biB0aGUgbm9k
ZSBjb21wYXJpc29uIGNvZGUgaW4gRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmlj
YXRpb24oKSBmb3IgcmFuZ2Ugc2VsZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExvb3BDaGVja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NGFlZDYyMTE2YzVjYTViODhmYjVmOGE3OGU3MDJmYzRkZTQ5ZGUzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5j
cHAKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xMb29wQ2hlY2tlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMQnJlYWsuaCIKKyNpbmNsdWRlICJXSExTTENvbnRpbnVlLmgiCisjaW5jbHVk
ZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKKyNp
bmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5o
IgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgTG9v
cENoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgTG9vcENoZWNrZXIoKSA9
IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5Mb29wQ2hlY2tlcigpID0gZGVmYXVsdDsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRl
ZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9sb29wRGVwdGggfHwgbV9z
d2l0Y2hEZXB0aCkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBWaXNpdG9yOjp2aXNpdChmdW5jdGlvbkRlZmluaXRpb24p
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0
aW9uYWwoKSk7CisKKyAgICAgICAgKyttX2xvb3BEZXB0aDsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworICAgICAgICBBU1NFUlQobV9sb29wRGVwdGgpOwor
ICAgICAgICAtLW1fbG9vcERlcHRoOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1do
aWxlTG9vcCYgZG9XaGlsZUxvb3ApIG92ZXJyaWRlCisgICAgeworICAgICAgICArK21fbG9vcERl
cHRoOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAg
ICAgICAgQVNTRVJUKG1fbG9vcERlcHRoKTsKKyAgICAgICAgLS1tX2xvb3BEZXB0aDsKKworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92ZXJyaWRlCisgICAg
eworICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7Cisg
ICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQpOworICAgICAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Np
b24pIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKKyAgICAg
ICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7CisgICAgICAgIGlmIChmb3JMb29wLmNv
bmRpdGlvbigpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmNvbmRp
dGlvbigpKTsKKyAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOworCisgICAgICAgICsrbV9s
b29wRGVwdGg7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJvZHkoKSk7Cisg
ICAgICAgIEFTU0VSVChtX2xvb3BEZXB0aCk7CisgICAgICAgIC0tbV9sb29wRGVwdGg7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYgc3dpdGNoU3RhdGVtZW50
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaFN0YXRl
bWVudC52YWx1ZSgpKTsKKworICAgICAgICArK21fc3dpdGNoRGVwdGg7CisgICAgICAgIGZvciAo
YXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQorICAgICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOworICAgICAgICBBU1NFUlQobV9z
d2l0Y2hEZXB0aCk7CisgICAgICAgIC0tbV9zd2l0Y2hEZXB0aDsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6QnJlYWsmIGJyZWFrU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2xvb3BEZXB0aCAmJiAhbV9zd2l0Y2hEZXB0aCkgeworICAgICAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBWaXNpdG9y
Ojp2aXNpdChicmVha1N0YXRlbWVudCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNv
bnRpbnVlJiBjb250aW51ZVN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgh
bV9sb29wRGVwdGgpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoY29udGludWVTdGF0ZW1lbnQp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYgZmFsbHRocm91Z2hT
dGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fc3dpdGNoRGVwdGgpIHsK
KyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgVmlzaXRvcjo6dmlzaXQoZmFsbHRocm91Z2hTdGF0ZW1lbnQpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIG1fbG9vcERlcHRoIHsgMCB9OworICAgIHVuc2lnbmVkIG1fc3dpdGNoRGVw
dGggeyAwIH07Cit9OworCitib29sIGZpbmRIaWdoWm9tYmllcyhQcm9ncmFtJiBwcm9ncmFtKQor
eworICAgIExvb3BDaGVja2VyIGxvb3BDaGVja2VyOworICAgIGxvb3BDaGVja2VyLlZpc2l0b3I6
OnZpc2l0KHByb2dyYW0pOworICAgIHJldHVybiAhbG9vcENoZWNrZXIuZXJyb3IoKTsKK30KKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlYjRkZGFmMDgwNTg4YzFh
ZmMyYzhhY2MyYzI0N2Y1NWRjYzU5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExvb3BDaGVja2VyLmgKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTFNlbWFudGlj
LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitib29sIGZpbmRIaWdo
Wm9tYmllcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
MGQyNTYzNTNkNzRhYmQ2MjY2MzAyNGJkODA1NGM5NTBlMDczODEwMy4uMzk2OTM4NzIwNWU4M2Nl
Y2VmNWNlZDU0YWE0ZjIyYzcwYmM4N2YyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMyMCw2ICszMjAs
NyBAQCBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcAogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZp
c2l0b3IuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExvb3BDaGVja2VyLmNwcAogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcAogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmMmY1MTVhNGU0M2U1MTlmNGYz
NDk0NzRlNzE0OTI1MzliZjg0OGZjLi4zNTY1MGJhMzg0M2MxMGQyZWRkMWFlMWE2ZTJmZWU1NzU3
YWJmN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC02NDE3LDYgKzY0MTcsOCBAQAogCQkxQzg0MEI3RDIxRUJFMEI4MDBEMDUw
MEQgLyogV0hMU0xFbnRyeVBvaW50VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEVudHJ5UG9p
bnRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODQwQjkwMjFFQzMwRjkw
MEQwNTAwRCAvKiBXSExTTEFkZHJlc3NTcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEFkZHJl
c3NTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNERGOTBCQTlEMkM4
MDA4MUU5RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBh
dGggPSBWZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzlB
RTVDRjIxRURBMjdFMDA2OUQ1RjIgLyogV0hMU0xMb29wQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTExvb3BDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUM5QUU1RDAyMUVEQTI3RTAwNjlENUYyIC8qIFdITFNMTG9vcENoZWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xMb29wQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQ0ExOUUwMzBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRXZlbnRMb29wTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5OTQgLyogRXZlbnRMb29w
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TG9vcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2Ny
aXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9i
amVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU0MjIsNiArMjU0MjQsOCBA
QAogCQkJCUMyMzRBOUI2MjFFOTJDQzAwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuaCAqLywK
IAkJCQlDMjEwRTkxMTIxQjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5jcHAgKi8sCiAJCQkJ
QzIxMEU5MTIyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuaCAqLywKKwkJCQkxQzlBRTVD
RjIxRURBMjdFMDA2OUQ1RjIgLyogV0hMU0xMb29wQ2hlY2tlci5jcHAgKi8sCisJCQkJMUM5QUU1
RDAyMUVEQTI3RTAwNjlENUYyIC8qIFdITFNMTG9vcENoZWNrZXIuaCAqLywKIAkJCQlDMjM0QTk4
RDIxRTg4ODg0MDAzQzk4NEQgLyogV0hMU0xOYW1lQ29udGV4dC5jcHAgKi8sCiAJCQkJQzIzNEE5
OEUyMUU4ODg4NTAwM0M5ODREIC8qIFdITFNMTmFtZUNvbnRleHQuaCAqLywKIAkJCQlDMjM0QTk4
QTIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovLAo=
</data>
<flag name="review"
          id="375935"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>